pax_global_header00006660000000000000000000000064140636643660014530gustar00rootroot0000000000000052 comment=db5352cfd5597e6c057114aa5f01da12492ddc9c analog-ce-6.0.17/000077500000000000000000000000001406366436600134515ustar00rootroot00000000000000analog-ce-6.0.17/Licence.txt000066400000000000000000000456141406366436600155660ustar00rootroot00000000000000Analog is copyright (c) Stephen R. E. Turner and other authors 1995 - 2004. Analog CE is copyright (c) www.c-amie.co.uk and other authors 2007 - 2019. This copyright and licence apply to all source code, compiled code, documentation, graphics and auxiliary files, except where otherwise stated. Analog is free software. You can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License, published by the Free Software Foundation. This licence can be found below. Note that the program is distributed without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. If you modify analog, you are encouraged to submit your changes to me for possible inclusion in subsequent versions. If you distribute analog with a book or a magazine or something like that, I'd be pleased to receive a copy. Analog includes code from the bzip2, gd, pcre, png, unzip & zlib libraries, and from FreeBSD. These portions of code are also subject to their own copyrights and licensing conditions, which can be found in the analog docs directory in files with names beginning with "Lic". If you like analog, please consider making a donation towards its development at http://www.c-amie.co.uk/software/analog/ . Thank you. ====== GNU GENERAL PUBLIC LICENSE STARTS HERE ====== GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. analog-ce-6.0.17/Makefile000066400000000000000000000003761406366436600151170ustar00rootroot00000000000000# This Makefile is only provided for convenience if no options need to # be passed. You should usually edit src/Makefile and run make from the # src/ directory. PROGRAM = analog $(PROGRAM): ALWAYS cd src && make clean: cd src && make clean ALWAYS: analog-ce-6.0.17/README.md000066400000000000000000000006241406366436600147320ustar00rootroot00000000000000# analog-ce Analog CE This is the official GIT repository for the Analog CE maintenance project of Stephen Turner's Analog log-file parser project. If you found this useful, please consider donating via https://www.c-amie.co.uk/ ## Binary / Executable Downloads If you are looking for binary downloads of pre-compiled executabled for Analog CE. Please visit https://www.c-amie.co.uk/software/analog/ analog-ce-6.0.17/README.txt000066400000000000000000000001001406366436600151360ustar00rootroot00000000000000The Readme for analog can be found in the file docs/Readme.html analog-ce-6.0.17/analog-data.dtd000066400000000000000000000060751406366436600163260ustar00rootroot00000000000000 analog-ce-6.0.17/analog.cfg-sample000066400000000000000000000266241406366436600166640ustar00rootroot00000000000000# Configuration file for Analog CE 6.0.16 # See https://www.c-amie.co.uk/software/analog/ # # Here are a couple of configuration commands to get you started. Add any more # you like from the Readme. # # Lines starting with # are comments. # # There is a much more extensive configuration file in examples/big.cfg # # If you need a LOGFORMAT command (most people don't -- try it without first!), # it must go here, above the LOGFILE commands. LOGFILE logfile.log # LOGFILE /old/logs/access_log.* # OUTFILE Report.html # HOSTNAME "[my organisation]" # Reports Enabled/Disabled List #ALL ON ALLCHART ON GENERAL ON #General Summary YEARLY ON #Yearly Report QUARTERLY ON #Quarterly Report MONTHLY ON #Monthly Report WEEKLY ON #Weekly Report DAILYREP ON #Daily Report DAILYSUM ON #Daily Summary HOURLYREP ON #Hourly Report HOURLYSUM ON #Hourly Summary WEEKHOUR ON #Hour of the Week Summary QUARTERREP ON #Quarter-Hour Report QUARTERSUM ON #Quarter-Hour Summary FIVEREP ON #Five-Minute Report FIVESUM ON #Five-Minute Summary HOST ON #Host Report REDIRHOST ON #Host Redirection Report FAILHOST ON #Host Failure Report ORGANISATION ON #Organisation Report DOMAIN ON #Domain Report REQUEST ON #Request Report DIRECTORY ON #Directory Report FILETYPE ON #File Type Report SIZE ON #File Size Report PROCTIME ON #Processing Time Report REDIR ON #Redirection Report FAILURE ON #Failure Report REFERRER ON #Referrer Report REFSITE ON #Referring Site Report SEARCHQUERY ON #Search Query Report SEARCHWORD ON #Search Word Report INTSEARCHQUERY ON #Internal Search Query Report INTSEARCHWORD ON #Internal Search Word Report REDIRREF ON #Redirected Referrer Report FAILREF ON #Failed Referrer Report BROWSERREP ON #Browser Report BROWSERSUM ON #Browser Summary OSREP ON #Operating System Report VHOST ON #Virtual Host Report REDIRVHOST ON #Virtual Host Redirection Report FAILVHOST ON #Virtual Host Failure Report USER ON #User Report REDIRUSER ON #User Redirection Report FAILUSER ON #User Failure Report STATUS ON #Status Code Report # # You probably don't need to change anything below this until you are # experienced. # # ERRFILE errors.txt # REQINCLUDE pages LINKNOFOLLOW ON REQLINKINCLUDE pages REFLINKINCLUDE * REDIRREFLINKINCLUDE * FAILREFLINKINCLUDE * SUBBROW */* # OSCHARTEXPAND Windows # Add whichever of these types of pages you have on your server, or others. # PAGEINCLUDE *.shtml # PAGEINCLUDE *.asp # PAGEINCLUDE *.jsp # PAGEINCLUDE *.cfm # PAGEINCLUDE *.pl # PAGEINCLUDE *.php # PAGEINCLUDE *.aspx # SEARCHENGINE commands SEARCHENGINE http*://*/mamma.*/* query SEARCHENGINE http*://*/netfind* query SEARCHENGINE http*://*/pursuit query SEARCHENGINE http*://*aj.*/* ask SEARCHENGINE http*://*alltheweb.*/* query SEARCHENGINE http*://*altavista.*/* q SEARCHENGINE http*://*aol.*/* query SEARCHENGINE http*://*ask.*/* ask,q SEARCHENGINE http*://*askjeeves.*/* ask SEARCHENGINE http*://*baidu.*/* wd SEARCHENGINE http*://*bing.*/* q SEARCHENGINE http*://*directhit.*/* qry SEARCHENGINE http*://*dmoz.*/* search SEARCHENGINE http*://*dogpile.*/* q SEARCHENGINE http*://*duckduckgo.*/* q SEARCHENGINE http*://*ecosia.*/* q SEARCHENGINE http*://*excite.*/* search SEARCHENGINE http*://*go2net.*/* general SEARCHENGINE http*://*google.*/* q,as_q,as_epq,as_oq SEARCHENGINE http*://*goto.*/* Keywords SEARCHENGINE http*://*hotbot.com/* MT SEARCHENGINE http*://*info.*/* q SEARCHENGINE http*://*infoseek.*/* qt SEARCHENGINE http*://*ixquick.*/* metasearch.pl SEARCHENGINE http*://*looksmart.*/* key SEARCHENGINE http*://*lycos.*/* query SEARCHENGINE http*://*metacrawler.*/* general SEARCHENGINE http*://*mysearch.*/* searchfor SEARCHENGINE http*://*naver.*/* query SEARCHENGINE http*://*netfind.*/* query,search,s SEARCHENGINE http*://*netscape.*/* search SEARCHENGINE http*://*newhoo.*/* search SEARCHENGINE http*://*nlsearch.*/* qr SEARCHENGINE http*://*northernlight.*/* qr SEARCHENGINE http*://*search.*/* q SEARCHENGINE http*://*snap.*/* keyword SEARCHENGINE http*://*vivisimo.*/* search SEARCHENGINE http*://*webcrawler.*/* search,searchText,q SEARCHENGINE http*://*yahoo.*/* p SEARCHENGINE http*://*yandex.*/* text # Robots ROBOTINCLUDE REGEXPI:robot ROBOTINCLUDE REGEXPI:spider ROBOTINCLUDE REGEXPI:crawler ROBOTINCLUDE bingbot* ROBOTINCLUDE Googlebot* ROBOTINCLUDE Infoseek* ROBOTINCLUDE msnbot* ROBOTINCLUDE Scooter* ROBOTINCLUDE *Slurp* ROBOTINCLUDE Ultraseek* ROBOTINCLUDE *Validator* # Static Internet Documents TYPEOUTPUTALIAS .html ".html [Hypertext Markup Language]" TYPEOUTPUTALIAS .htm ".htm [Hypertext Markup Language]" TYPEOUTPUTALIAS .shtml ".shtml [Server-parsed HTML]" TYPEOUTPUTALIAS .ps ".ps [PostScript]" TYPEOUTPUTALIAS .gz ".gz [Gzip compressed files]" TYPEOUTPUTALIAS .tar.gz ".tar.gz [Compressed archives]" TYPEOUTPUTALIAS .txt ".txt [Plain text Documents]" TYPEOUTPUTALIAS .cdf ".cdf [Channel Definition File]" # Scripting & Dynamic Internet Content Files TYPEOUTPUTALIAS .asp ".asp [Active Server Pages]" TYPEOUTPUTALIAS .aspx ".aspx [Active Server Pages .net]" TYPEOUTPUTALIAS .cgi ".cgi [CGI scripts]" TYPEOUTPUTALIAS .pl ".pl [Perl scripts]" TYPEOUTPUTALIAS .css ".css [Cascading Style Sheets]" TYPEOUTPUTALIAS .class ".class [Java class files]" TYPEOUTPUTALIAS .hqx ".hqx [Macintosh archives]" TYPEOUTPUTALIAS .jsp ".jsp [Java Server Pages]" TYPEOUTPUTALIAS .cfm ".cfm [Cold Fusion]" TYPEOUTPUTALIAS .php ".php [PHP Hypertext Processor]" TYPEOUTPUTALIAS .js ".js [JavaScript code]" TYPEOUTPUTALIAS .dll ".dll [Dynamic Link Library]" TYPEOUTPUTALIAS .asa ".asa [Web Server Scripting Configuration]" TYPEOUTPUTALIAS .url ".url [Windows Internet Shortcut]" TYPEOUTPUTALIAS .lnk ".lnk [Windows Explorer Shortcut]" TYPEOUTPUTALIAS .ini ".ini [Configuration Settings File]" TYPEOUTPUTALIAS .log ".log [Log Files]" TYPEOUTPUTALIAS .diz ".diz [DIZ Text File]" TYPEOUTPUTALIAS .inc ".inc [SSI Inclusion File]" TYPEOUTPUTALIAS .xml ".xml [eXtensible Markup Language File]" TYPEOUTPUTALIAS .rdf ".rdf [Resource Description Framework File]" TYPEOUTPUTALIAS .rb ".rb [Ruby script file]" # Image Files TYPEOUTPUTALIAS .jpg ".jpg [JPEG graphics]" TYPEOUTPUTALIAS .jpeg ".jpeg [JPEG graphics]" TYPEOUTPUTALIAS .jpe ".jpe [JPEG graphics]" TYPEOUTPUTALIAS .gif ".gif [GIF graphics]" TYPEOUTPUTALIAS .gfa ".gfa [GIF graphics]" TYPEOUTPUTALIAS .png ".png [Portable Network Graphics]" TYPEOUTPUTALIAS .bmp ".bmp [BitMap]" TYPEOUTPUTALIAS .bmz ".bmz [BitMap]" TYPEOUTPUTALIAS .dib ".dib [BitMap]" TYPEOUTPUTALIAS .rle ".rle [BitMap]" TYPEOUTPUTALIAS .2bp ".2bp [Windows CE 4 Tone BitMap]" TYPEOUTPUTALIAS .ico ".ico [Icon File]" TYPEOUTPUTALIAS .tif ".tif [Tag Image File Format]" TYPEOUTPUTALIAS .tiff ".tiff [Tag Image File Format]" TYPEOUTPUTALIAS .wmf ".wmf [Windows Metafile (ClipArt)]" TYPEOUTPUTALIAS .pct ".pct [Macintosh PICT]" TYPEOUTPUTALIAS .pict ".pict [Macintosh PICT]" TYPEOUTPUTALIAS .pcz ".pcz [Macintosh PICT Compressed]" TYPEOUTPUTALIAS .pcd ".pcd [Kodak Photo CD]" TYPEOUTPUTALIAS .pcx ".pcx [PC Paintbrush]" TYPEOUTPUTALIAS .cdr ".cdr [Corel Draw]" TYPEOUTPUTALIAS .cgm ".cgm [COmputer Graphics Metafile]" TYPEOUTPUTALIAS .eps ".eps [Encapsulated PostScript]" TYPEOUTPUTALIAS .fpx ".fpx [FPX Format]" TYPEOUTPUTALIAS .wpg ".wpg [WordPerfect Graphics]" TYPEOUTPUTALIAS .mix ".mix [Picture IT! Format]" TYPEOUTPUTALIAS .psd ".psd [Adobe Photoshop Document]" # Multimedia Audio, Video & Misc TYPEOUTPUTALIAS .wav ".wav [WAV sound files]" TYPEOUTPUTALIAS .avi ".avi [AVI movies]" TYPEOUTPUTALIAS .arc ".arc [Compressed archives]" TYPEOUTPUTALIAS .mid ".mid [MIDI sound files]" TYPEOUTPUTALIAS .midi ".midi [MIDI sound files]" TYPEOUTPUTALIAS .rmi ".rmi [MIDI sound files]" TYPEOUTPUTALIAS .ivf ".ivf [Indeo Video Format movie]" TYPEOUTPUTALIAS .aif ".aif [AIFF sound files]" TYPEOUTPUTALIAS .aifc ".aifc [AIFF sound files]" TYPEOUTPUTALIAS .aiff ".aiff [AIFF sound files]" TYPEOUTPUTALIAS .au ".au [AU sound files]" TYPEOUTPUTALIAS .snd ".snd [AU sound files]" TYPEOUTPUTALIAS .mp3 ".mp3 [MP3 sound files]" TYPEOUTPUTALIAS .rtf ".rtf [Rich Text Format]" TYPEOUTPUTALIAS .mov ".mov [Quick Time movie]" TYPEOUTPUTALIAS .mpg ".mpg [MPEG movie]" TYPEOUTPUTALIAS .mpeg ".mpeg [MPEG movie]" TYPEOUTPUTALIAS .m1v ".m1v [MPEG 1 Video]" TYPEOUTPUTALIAS .mp2v ".mp2v [MPEG 2 Video]" TYPEOUTPUTALIAS .mpe ".mpe [MPEG movie]" TYPEOUTPUTALIAS .wax ".wax [Windows Media Audio Extension]" TYPEOUTPUTALIAS .wvx ".wvx [Windows Media Video Extension]" TYPEOUTPUTALIAS .m3u ".m3u [MPEG 3 Audio]" TYPEOUTPUTALIAS .wma ".wma [Windows Media Audio]" TYPEOUTPUTALIAS .wmv ".wmv [Windows Media Video]" TYPEOUTPUTALIAS .ra ".ra [Real Audio File]" TYPEOUTPUTALIAS .ram ".ram [Real Audio Media]" TYPEOUTPUTALIAS .asf ".asf [Microsoft Advanced Streaming Format]" TYPEOUTPUTALIAS .asx ".asx [Microsoft Advanced Streaming Extensions]" TYPEOUTPUTALIAS .pdf ".pdf [Adobe Portable Document Format]" TYPEOUTPUTALIAS .swf ".swf [Macromedia Flash Object]" # Microsoft Office & Pocket Office TYPEOUTPUTALIAS .mdb ".mdb [Microsoft Access Database]" TYPEOUTPUTALIAS .ppv ".ppv [PowerPoint Viewer File]" TYPEOUTPUTALIAS .ppt ".ppt [PowerPoint File]" TYPEOUTPUTALIAS .xls ".xls [Excel SpreadSheet]" TYPEOUTPUTALIAS .doc ".doc [Microsoft Word Document]" TYPEOUTPUTALIAS .pwd ".pwd [Microsoft Pocket Word Document]" TYPEOUTPUTALIAS .pwt ".pwt [Microsoft Pocket Word Template]" TYPEOUTPUTALIAS .pxl ".pxl [Microsoft Pocket Excel Document]" TYPEOUTPUTALIAS .pxt ".pxt [Microsoft Pocket Excel Template]" TYPEOUTPUTALIAS .rtf ".rtf [Rich Text Format]" TYPEOUTPUTALIAS .pub ".pub [Publisher File]" TYPEOUTPUTALIAS .mps ".mps [Microsoft Pocket Streets Map]" TYPEOUTPUTALIAS .psm ".psm [Microsoft Pocket Automap Streets]" # Databases TYPEOUTPUTALIAS .db ".db [DataBase File]" TYPEOUTPUTALIAS .csv ".csv [CSV File]" TYPEOUTPUTALIAS .dbf ".dbf [Database File]" # Executables, Installations, Execution & Applications TYPEOUTPUTALIAS .msi ".msi [Microsoft Installer Package]" TYPEOUTPUTALIAS .cab ".cab [Cabnet Archive]" TYPEOUTPUTALIAS .bat ".bat [Batch Files]" TYPEOUTPUTALIAS .com ".com [Compiled Executable]" TYPEOUTPUTALIAS .exe ".exe [Executables]" TYPEOUTPUTALIAS .zip ".zip [Zip archives]" TYPEOUTPUTALIAS .hlp ".hlp [Windows Help Files]" TYPEOUTPUTALIAS .chm ".chm [Compiled HTML Help]" TYPEOUTPUTALIAS .dat ".dat [Internet Explorer Installer Data File]" TYPEOUTPUTALIAS .dll ".dll [Dynamic Link Library]" # Misc TYPEOUTPUTALIAS .iso ".iso [CD-ROM/DVD-ROM Image file]" TYPEOUTPUTALIAS .nrg ".nrg [Nero Burning ROM CD-ROM/DVD-ROM Image file]" TYPEOUTPUTALIAS .ida ".ida [IIS default.ida - Code Red II Attack]" TYPEOUTPUTALIAS .reg ".reg [Windows Registry META Data]" SUBTYPE *.gz,*.Z analog-ce-6.0.17/analog.man000066400000000000000000000214171406366436600154140ustar00rootroot00000000000000.\" .\" Analog by Stephen R. E. Turner, copyright (c) 1995 - 2004. .\" .\" See http://www.analog.cx/docs/Licence.txt or Licence.txt in your .\" analog docs directory for the full licence information. .\" .TH analog 1 "Version 6.0 19 December 2004" "Analog" .SH NAME analog \- web server logfile analyser .SH SYNOPSIS \fBanalog \-\-help .br analog\fP [(\fB\-\fP|\fB+\fP)\fB1\fP] [(\fB\-\fP|\fB+\fP)\fB4\fP] [(\fB\-\fP|\fB+\fP)\fB5\fP] [(\fB\-\fP|\fB+\fP)\fB6\fP] [(\fB\-\fP|\fB+\fP)\fB7\fP] [(\fB\-\fP|\fB+\fP)\fBA\fP] [(\fB\-\fP|\fB+\fP)\fBa\fP] [\fB\-B\fP|\fB+B\fP[\fIoptions\fP]] [\fB\-b\fP|\fB+b\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBC\fP'\fIconfiguration-line\fP'] [\fB\-c\fP|\fB+c\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBD\fP] [(\fB\-\fP|\fB+\fP)\fBd\fP] [\fB\-E\fP|\fB+E\fP[\fIoptions\fP]] [\fB\-F\fP|\fB+F\fP\fIdate\fP] [\fB\-f\fP|\fB+f\fP[\fIoptions\fP]] [\fB\-G\fP] [\fB+g\fP\fIfilename\fP] [(\fB\-\fP|\fB+\fP)\fBH\fP] [(\fB\-\fP|\fB+\fP)\fBh\fP] [\fB\-I\fP|\fB+I\fP[\fIoptions\fP]] [\fB\-i\fP|\fB+i\fP[\fIoptions\fP]] [\fB\-J\fP|\fB+J\fP[\fIoptions\fP]] [\fB\-j\fP|\fB+j\fP[\fIoptions\fP]] [\fB\-K\fP|\fB+K\fP[\fIoptions\fP]] [\fB\-k\fP|\fB+k\fP[\fIoptions\fP]] [\fB\-L\fP|\fB+L\fP[\fIoptions\fP]] [\fB\-l\fP|\fB+l\fP[\fIoptions\fP]] [\fB\-M\fP|\fB+M\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBm\fP] [\fB\-N\fP|\fB+N\fP[\fIoptions\fP]] [\fB\-n\fP|\fB+n\fP[\fIoptions\fP]] [\fB+O\fP\fIoutput-file\fP] [\fB\-o\fP|\fB+o\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBP\fP] [\fB\-p\fP|\fB+p\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBQ\fP] [\fB\-q\fP|\fB+q\fP[[\fB\-\fP|\fB+\fP]\fItypes\fP]] [\fB\-R\fP|\fB+R\fP[\fIoptions\fP]] [\fB\-r\fP|\fB+r\fP[\fIoptions\fP]] [\fB\-S\fP|\fB+S\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBS\fP] [\fB\-T\fP|\fB+T\fP\fIdate\fP] [\fB\-t\fP|\fB+t\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBU\fP\fIcache\fP] [\fB\-u\fP|\fB+u\fP[\fIoptions\fP]] [\fB\-V\fP|\fB+V\fP[[\fB\-\fP|\fB+\fP]\fItypes\fP]] [\fB\-v\fP|\fB+v\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBW\fP] [(\fB\-\fP|\fB+\fP)\fBw\fP] [(\fB\-\fP|\fB+\fP)\fBX\fP] [(\fB\-\fP|\fB+\fP)\fBx\fP] [\fB\-Y\fP|\fB+Y\fP[\fIoptions\fP]] [\fB\-y\fP|\fB+y\fP[\fIoptions\fP]] [\fB\-Z\fP|\fB+Z\fP[\fIoptions\fP]] [(\fB\-\fP|\fB+\fP)\fBz\fP] [\fB\-\-settings\fP] [\fIlogfile\fP...] .TP but normally just .TP .B analog\fP [\fB-G\fP] [\fB+g\fP\fIfilename\fP] .SH DESCRIPTION \fBAnalog\fP is a program for analyzing log files, and is designed to be fast and to produce attractive statistics. The usual (and easier) way of configuring \fBanalog\fP is through a configuration file, not command line options. For more information about writing a configuration file or about the command line options see \fIReadme.html\fP in the \fBanalog\fP documentation. A description of what \fIoptions\fP are available for the non-time reports is available in \fIothreps.html#othclarg\fP in the \fBanalog\fP documentation. .SH OPTIONS .TP .B \-\-help Display version and help information and exit. .TP (\fB-\fP|\fB+\fP)\fB1 Toggle the Yearly Report. .TP (\fB-\fP|\fB+\fP)\fB4 Toggle the Quarter-Hour Report. .TP (\fB-\fP|\fB+\fP)\fB5 Toggle the Five-Minute Report. .TP (\fB-\fP|\fB+\fP)\fB6 Toggle the Quarter-Hour Summary. .TP (\fB-\fP|\fB+\fP)\fB7 Toggle the Five-Minute Summary. .TP (\fB-\fP|\fB+\fP)\fBA Turn all the reports (except the General Summary) off or on. .TP (\fB-\fP|\fB+\fP)\fBa Toggle output style between \fIHTML\fP and \fIPLAIN\fP formats, respectively. .TP .B -B\fP|\fB+B\fP[\fIoptions\fP] Turn the Browser Report off or on, possibly setting \fIoptions\fP. .TP .B -b\fP|\fB+b\fP[\fIoptions\fP] Turn the Browser Summary off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBC\fP'\fIconfiguration-line\fP' Include \fIconfiguration-line\fP in the configuration commands. .TP .B -c\fP|\fB+c\fP[\fIoptions\fP] Turn the Status Code Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBD Toggle the Daily Report. .TP (\fB-\fP|\fB+\fP)\fBd Toggle the Daily Summary. .TP .B -E\fP|\fB+E\fP[\fIoptions\fP] Turn the Redirection Report off or on, possibly setting \fIoptions\fP. .TP .B \-F\fP|\fB+F\fP\fIdate\fP Toggle or set the \fIFROM\fP date. Use \fB-F\fP to turn the \fIFROM\fP date off, and use \fB+F\fP\fIdate\fP to set the \fIFROM\fP date. .TP .B -f\fP|\fB+f\fP[\fIoptions\fP] Turn the Referrer Report off or on, possibly setting \fIoptions\fP. .TP .B \-G Do not use the default configuration file. .TP \fB+g\fP\fIfilename\fP Add \fIfilename\fP to the list of configuration files. .TP (\fB-\fP|\fB+\fP)\fBH Turn the Hourly Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBh Toggle the Hourly Summary. .TP .B -I\fP|\fB+I\fP[\fIoptions\fP] Turn the Failure Report off or on, possibly setting \fIoptions\fP. .TP .B -i\fP|\fB+i\fP[\fIoptions\fP] Turn the Directory Report off or on, possibly setting \fIoptions\fP. .TP .B -J\fP|\fB+J\fP[\fIoptions\fP] Turn the User Failure Report off or on, possibly setting \fIoptions\fP. .TP .B -j\fP|\fB+j\fP[\fIoptions\fP] Turn the User Redirection Report off or on, possibly setting \fIoptions\fP. .TP .B -K\fP|\fB+K\fP[\fIoptions\fP] Turn the Failed Referrer Report off or on, possibly setting \fIoptions\fP. .TP .B -k\fP|\fB+k\fP[\fIoptions\fP] Turn the Redirected Referrer Report off or on, possibly setting \fIoptions\fP. .TP .B -L\fP|\fB+L\fP[\fIoptions\fP] Turn the Host Failure Report off or on, possibly setting \fIoptions\fP. .TP .B -l\fP|\fB+l\fP[\fIoptions\fP] Turn the Host Redirection Report off or on, possibly setting \fIoptions\fP. .TP .B -M\fP|\fB+M\fP[\fIoptions\fP] Turn the Virtual Host Failure Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBm Toggle the Monthly Report. .TP .B -N\fP|\fB+N\fP[\fIoptions\fP] Turn the Search Query Report off or on, possibly setting \fIoptions\fP. .TP .B -n\fP|\fB+n\fP[\fIoptions\fP] Turn the Search Word Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBO\fP\fIoutput-file\fP Write output to \fIoutput-file\fP. Use - for stdout. .TP .B -o\fP|\fB+o\fP[\fIoptions\fP] Turn the Domain Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBP Toggle the Processing Time Report. .TP (\fB-\fP|\fB+\fP)\fBp Toggle the Operating System Report. .TP (\fB-\fP|\fB+\fP)\fBQ Toggle the Quarterly Report. .TP .B \-q\fP|\fB+q\fP[[\fB\-\fP|\fB+\fP]\fItypes\fP] Turn all warnings off/on, or remove/add/use exactly specified \fItypes\fP of warnings. .TP .B -R\fP|\fB+R\fP[\fIoptions\fP] Turn the Virtual Host Redirection Report off or on, possibly setting \fIoptions\fP. .TP .B -r\fP|\fB+r\fP[\fIoptions\fP] Turn the Request Report off or on, possibly setting \fIoptions\fP. .TP .B -S\fP|\fB+S\fP[\fIoptions\fP] Turn the Host Report off or on, possibly setting \fIoptions\fP. .TP .B -s\fP|\fB+s\fP[\fIoptions\fP] Turn the Referring Site Report off or on, possibly setting \fIoptions\fP. .TP .B \-T\fP|\fB+T\fP\fIdate\fP Toggle or set the \fITO\fP date. Use \fB-T\fP to turn the \fITO\fP date off, and use \fB+T\fP\fIdate\fP to set the \fITO\fP date. .TP .B -t\fP|\fB+t\fP[\fIoptions\fP] Turn the File Type Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBU\fP\fIcache\fP Use file \fIcache\fP for cache output. .TP .B -u\fP|\fB+u\fP[\fIoptions\fP] Turn the User Report off or on, possibly setting \fIoptions\fP. .TP .B \-V\fP|\fB+V\fP[[\fB\-\fP|\fB+\fP]\fItypes\fP] Turn all debugging off/on, or remove/add/use exactly specified \fItypes\fP of debugging messages. .TP .B -v\fP|\fB+v\fP[\fIoptions\fP] Turn the Virtual Host Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBW Toggle the Weekly Report. .TP (\fB-\fP|\fB+\fP)\fBw Toggle the Hour of the Week Report. .TP (\fB-\fP|\fB+\fP)\fBX Toggle GOTOS (on and off only). .TP (\fB-\fP|\fB+\fP)\fBx Toggle the General Summary. .TP .B -Y\fP|\fB+Y\fP[\fIoptions\fP] Turn the Internal Search Query Report off or on, possibly setting \fIoptions\fP. .TP .B -y\fP|\fB+y\fP[\fIoptions\fP] Turn the Internal Search Word Report off or on, possibly setting \fIoptions\fP. .TP .B -Z\fP|\fB+Z\fP[\fIoptions\fP] Turn the Organization Report off or on, possibly setting \fIoptions\fP. .TP (\fB-\fP|\fB+\fP)\fBz Toggle the File Size Report. .TP \fB\-\-settings Instead of processing any files, display in English the settings \fBanalog\fP would use if it ran normally. This is useful for troubleshooting. .TP \fIlogfile\fP... The logfiles to be analysed. Use \- for stdin. .SH "SEE ALSO" The analog home page at \fIhttp://www.analog.cx/\fP .br The analog documentation on your local machine, or from the analog home page. .SH BUGS An up to date list of known bugs and bug fixes can be found at \fIhttp://www.analog.cx/bugs.html\fP .SH AUTHORS .B Analog\fP and related documentation was written by Stephen Turner <\fIanalog-author@lists.meer.net\fP>, with contributions from other authors. (See \fIacknow.html\fP in the \fBanalog\fP documentation.) This man page was written by Alexander Toth <\fIalex@purificator.net\fP>. analog-ce-6.0.17/anlgform.html000066400000000000000000000202351406366436600161460ustar00rootroot00000000000000 Analog CE form interface

Analog CE LogoAnalog form interface


1. Report choices

N.B. This form will not work - e.g. the buttons may not even appear - until you've configured it according to the instructions. When you've configured it, you should remove this paragraph.
See the analog home page for the meanings of the various reports.

Which reports do you want to see?


[On] [Off] General Summary
[On] [Off] Monthly Report
[On] [Off] Weekly Report
[On] [Off] Daily Summary
[On] [Off] Daily Report
[On] [Off] Hourly Summary
[On] [Off] Domain Report
[On] [Off] Organisation Report
[On] [Off] Directory Report
[On] [Off] File Type Report
[On] [Off] Request Report
[On] [Off] File Size Report
[On] [Off] Referrer Report
[On] [Off] Search Query Report
[On] [Off] Search Word Report
[On] [Off] Browser Summary
[On] [Off] Operating System Report
[On] [Off] Status Code Report

You can now run the program:
Or you can fill in the options below for individual reports. You can use bytes to mean 10 Megabytes; also to mean the 50 items with the most bytes.


2. Detailed report options

Domain Report options

Sort the Domain Report
Include all domains with at least

Organisation Report options

Sort the Organisation Report
Include all organisations with at least

Directory Report options

Sort the Directory Report
Include all directories with at least

Request Report options

Sort the Request Report
Include all files with at least
Show

Referrer Report options

Sort the Referrer Report
Include all referrers with at least

3. Analysing only part of the logfile

Only certain dates
You can analyse only the requests from certain dates. Enter the range of dates below in the from yymmdd; e.g., 980301 for 1st March 1998 (or fill in just one box to limit the range of dates on just one side).
From to

Only certain files
Only look at the following files (list, separated by commas; can contain wild character *)

Ignore the following files


4. Layout

Your organisation's name (for the title of the page)

Your organisation's home page
URL:


analog-ce-6.0.17/anlgform.pl000066400000000000000000000174711406366436600156250ustar00rootroot00000000000000#!/usr/bin/perl -T ### ### analog 6.0 http://www.analog.cx/ ### This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as ### stated otherwise. ### ### This program is free software. You can redistribute it and/or modify it ### under the terms of version 2 of the GNU General Public License, which you ### should have received with it. ### ### This program is distributed in the hope that it will be useful, but ### without any warranty, expressed or implied. ### Remember: Even the most carefully-designed CGI programs can accidentally ### have serious security bugs! See docs/form.html for notes on security ### design. ### ### anlgform.pl; the cgi front end for analog # 1) uncomment (remove everything before $analog) and edit one of the next two # lines to give the location (full pathname) of the analog executable. # Unix: $analog = '/usr/local/etc/httpd/analog-6.0/analog'; # Windows: $analog = 'C:\program files\analog 6.0\analog.exe'; # 2) If you're on Unix, edit the first line in this file to give the location # of Perl (don't remove the #! though). # 3) You also need to edit anlgform.html if you want to use the form. # 4) Add to the forbidden commands below if you want. @forbidden = qw(LOGFORMAT APACHELOGFORMAT DEFAULTLOGFORMAT APACHEDEFAULTLOGFORMAT HEADERFILE FOOTERFILE UNCOMPRESS OUTFILE CACHEOUTFILE LOCALCHARTDIR ERRFILE DNS CGI SETTINGS PROGRESSFREQ LANGFILE DESCFILE); # Forbidden commands: sysadmin can add more (must be in upper case!) # Other commands you might consider adding, because they allow users to # specify which files to use for the analysis, are LOGFILE and DOMAINSFILE. # If you add a command, you must also add any aliases it possesses. # There is a discussion of all this in docs/form.html. @allowed = qw(); # Allowed commands. If there are _any_ commands listed here, then _only_ # commands which are in @allowed, and not in @forbidden, can be used. require 5.001; use CGI; # 1) INITIALISATION # delete all dangerous environment variables $ENV{PATH} = ''; # blank, not deleted, so that UNCOMPRESS doesn't get a path delete @ENV{qw/IFS CDPATH ENV BASH_ENV/}; $query = new CGI; $|=1; $lt = localtime; $progname = $0 || 'anlgform.pl'; if (($^O =~ /win32/i || $^O =~ /^win/i) && Win32::GetShortPathName($analog)) { $analog = Win32::GetShortPathName($analog); } # coerce query keys to caps in a new (key, pointer to array) hash called args # also remember the order the keys arrived in, as far as possible foreach $p ($query->param) { foreach $a ($query->param($p)) { checkchars($a); push(@order, "\U$p") unless ($args{"\U$p"}); push(@{$args{"\U$p"}}, $a); } } # check LOGFILE and CACHEFILE only contain safe chars (see comments below) checkfilechars("LOGFILE"); checkfilechars("CACHEFILE"); # 2) OPEN THE ANALOG PROCESS # qv=1 causes args to go straight to stdout, not program if (${$args{'QV'}}[-1] && !forbidden('QV')) { print "Content-Type: text/plain\n\n"; open(ANALOG, ">-"); } elsif (!$analog) { badreq(500, "Program Incorrectly Configured", "Can't run analog because anlgform.pl not set up properly.\n", "See the server's error log for more details."); print STDERR "[$lt] $progname: Can't run analog because the variable \$analog was not set: read the setup instructions!\n"; die; } elsif (!(-x $analog)) { badreq(500, "Program Incorrectly Configured", "Can't run analog.", "See the server's error log for more details."); print STDERR "[$lt] $progname: Can't run analog because \"$analog\" not found or not executable"; print STDERR ": $!" if ($!); print STDERR ".\n"; die; } else { open (ANALOG, "|$analog +g-"); # errors here will get caught on close } # 3) PRINT ALL THE COMMANDS # Special cases: must come first printargs('CG', 'CONFIGFILE') unless forbidden('CG'); # both 'CG' and 'CONFIGFILE' must be allowed for this to happen. print ANALOG "CGI ON\nDNS NONE\nWARNINGS FL\n"; printargs('WARNINGS'); printargs('LOGTIMEOFFSET'); foreach $k (@order) { printargs($k) unless($k eq 'QV' || $k eq 'CG' || $k eq 'CM' || $k =~ /FLOORB$/ || $k =~ /2$/ || $k =~ '^LOGTIMEOFFSET' || $k =~ '^WARNINGS' || # commands dealt with elsewhere $k =~ /[^A-Z12]/ || $k eq '' || $k =~ /^IGNORE/); # other stuff not wanted } # Special cases: must come last print ANALOG "DEBUG -C\n"; printargs('CM', 'CONFIGFILE') unless forbidden('CM'); # again, both 'CM' and 'CONFIGFILE' must be allowed for this to happen. print ANALOG "OUTFILE stdout\n"; # 4) WAIT FOR PROCESS TO FINISH. THAT'S IT. unless (close(ANALOG)) { badreq(500, "Program Failure", "Analog failed to run or returned an error code.", "Maybe your server's error log will give a clue why."); print STDERR "[$lt] $progname: \"$analog\" failed to run or returned an error code"; print STDERR ": $!" if ($!); print STDERR ".\n"; die; } ### SUBROUTINES # A) IS A GIVEN COMMAND FORBIDDEN? sub forbidden { return (grep($_[0] eq $_, @forbidden) || (@allowed && !grep($_[0] eq $_, @allowed))); } # B) PRINT ONE COMMAND sub printargs { my($is_floora) = 0; my($is_12) = 0; my($name) = $_[1] || $_[0]; if ($name =~ /FLOORA$/) { chop($name); $is_floora = 1; } elsif ($name =~ /1$/) { chop($name); $is_12 = 1; } return if forbidden($name); if ($is_floora) { $a = ${$args{$name . 'A'}}[-1]; # last "FLOORA=$a" form arg specified $b = ${$args{$name . 'B'}}[-1]; print ANALOG ("$name $a$b\n") if ($b ne '' && $b !~ /\\$/); # could bracket $a$b, but no help because any special character in a # FLOOR command is junk anyway. } elsif ($is_12) { $a = ${$args{$name . '1'}}[-1]; $b = ${$args{$name . '2'}}[-1]; print ANALOG ("$name ", bracket($a), " ", bracket($b), "\n") if ($b ne ''); } else { foreach $a (@{$args{$_[0]}}) { # run through all "NAME=$a" form args if ($a ne '') { print ANALOG ("$name ", bracket($a), "\n"); print ANALOG ("DNS READ\n") if ($name eq 'DNSFILE'); } } } } # C) PUT APPROPRIATE DELIMITERS ROUND AN ARGUMENT CONTAINING SPACES sub bracket { local $_ = $_[0]; return $_ unless (/[\s\#]/ || /^['"\(]/ || /\\$/); return "\"$_\"" unless (/"/); return "'$_'" unless (/'/); return "($_)"; # analog has no syntax if string contains ) as well as space, ' and " } # D) CHECK ONLY SAFE CHARACTERS in LOGFILEs and CACHEFILEs. See docs/form.html. sub checkfilechars { local ($_); foreach (@{$args{$_[0]}}, @{$args{$_[0] . '1'}}) { if (m([^\w\. /\\:\-\*\?]) || m(\B-|-\B)) { # i.e. contains a non-approved character, or a dash not # between \w's. NB \w includes underscore. badreq(403, "Illegal Request", "Unsafe characters in $_[0]."); printf STDERR "[$lt] $progname: Unsafe characters in \"$_[0] $_\" on request from %s\n", $ENV{REMOTE_HOST}?$ENV{REMOTE_HOST}:($ENV{REMOTE_ADDR}?$ENV{REMOTE_ADDR}:"unknown host"); die; } } } # E) CHECK NO UNSAFE CHARACTERS IN OTHER COMMANDS. Again, see docs/form.html. sub checkchars { local $_ = $_[0]; if (/[\x00-\x1F\x7F-\x9F]/) { printf STDERR "[$lt] $progname: Unsafe characters in \"\U$p\E $_\" on request from %s\n", $ENV{REMOTE_HOST}?$ENV{REMOTE_HOST}:($ENV{REMOTE_ADDR}?$ENV{REMOTE_ADDR}:"unknown host"); # Translate dangerous characters to avoid cross-site scripting $p =~ s/&/&/; $p =~ s//>/; $p =~ s/"/"/; badreq(403, "Illegal Request", "Unsafe characters in \U$p."); die; } } # F) PRINT OUT ERROR MESSAGE sub badreq { my($i); print "Content-Type: text/html\n"; print "Status: $_[0] $_[1]\n\n"; print ''; print "\n$_[0] $_[1]\n"; print "

$_[1]

\n"; for ($i = 2; defined($_[$i]); $i++) { print "
" if ($i >= 3); print "$_[$i]\n"; } print "\n"; } analog-ce-6.0.17/docs/000077500000000000000000000000001406366436600144015ustar00rootroot00000000000000analog-ce-6.0.17/docs/LicBSD.txt000066400000000000000000000034121406366436600162020ustar00rootroot00000000000000The function memmove() in utils.c is derived from the FreeBSD 2.2.6 source, and comes with the following copyright notice: /* * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Chris Torek. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ analog-ce-6.0.17/docs/Licbzip2.txt000066400000000000000000000033121406366436600166170ustar00rootroot00000000000000This program, "bzip2" and associated library "libbzip2", are copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0.2 of 30 December 2001 analog-ce-6.0.17/docs/Licence.txt000066400000000000000000000461421406366436600165130ustar00rootroot00000000000000Analog is copyright (c) Stephen R. E. Turner and other authors 1995 - 2004. Analog CE is copyright (c) www.c-amie.co.uk and other authors 2007 - 2019. This copyright and licence apply to all source code, compiled code, documentation, graphics and auxiliary files, except where otherwise stated. Analog is free software. You can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License, published by the Free Software Foundation. This licence can be found below. Note that the program is distributed without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. If you modify analog, you are encouraged to submit your changes to me for possible inclusion in subsequent versions. If you distribute analog with a book or a magazine or something like that, I'd be pleased to receive a copy. Analog includes code from the bzip2, gd, pcre, png, unzip & zlib libraries, and from FreeBSD. These portions of code are also subject to their own copyrights and licensing conditions, which can be found in the analog docs directory in files with names beginning with "Lic". If you like Analog CE, please consider making a donation towards its development at http://www.c-amie.co.uk/software/analog/ . Thank you. Stephen R. E. Turner C:Amie Cambridge, England England https://www.c-amie.co.uk/ 19 December 2004 24 April 2019 ====== GNU GENERAL PUBLIC LICENSE STARTS HERE ====== GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. analog-ce-6.0.17/docs/Licgd.txt000066400000000000000000000043141406366436600161660ustar00rootroot00000000000000 In order to resolve any possible confusion regarding the authorship of gd, the following copyright statement covers all of the authors who have required such a statement. _If you are aware of any oversights in this copyright notice, please contact Thomas Boutell who will be pleased to correct them._ COPYRIGHT STATEMENT FOLLOWS THIS LINE Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by the National Institutes of Health. Portions copyright 1996, 1997, 1998, 1999, 2000 by Boutell.Com, Inc. Portions relating to GD2 format copyright 1999, 2000 Philip Warner. Portions relating to PNG copyright 1999, 2000 Greg Roelofs. Portions relating to libttf copyright 1999, 2000 John Ellson (ellson@lucent.com). Portions relating to JPEG copyright 2000, Doug Becker and copyright (C) 1994-1998, Thomas G. Lane. This software is based in part on the work of the Independent JPEG Group. Portions relating to WBMP copyright 2000 Maurice Szmurlo. _Permission has been granted to copy, distribute and modify gd in any context without fee, including a commercial application, provided that this notice is present in user-accessible supporting documentation._ This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of gd, not to interfere with your productive use of gd. If you have questions, ask. "Derived works" includes all programs that utilize the library. Credit must be given in user-accessible documentation. _This software is provided "AS IS."_ The copyright holders disclaim all warranties, either express or implied, including but not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and accompanying documentation. Although their code does not appear in gd 1.8.1, the authors wish to thank David Koblas, David Rowley, and Hutchison Avenue Software Corporation for their prior contributions. END OF COPYRIGHT STATEMENT analog-ce-6.0.17/docs/Licpcre.txt000066400000000000000000000020241406366436600165210ustar00rootroot00000000000000Written by: Philip Hazel Copyright (c) 1997-2000 University of Cambridge ----------------------------------------------------------------------------- Permission is granted to anyone to use this software for any purpose on any computer system, and to redistribute it freely, subject to the following restrictions: 1. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 2. The origin of this software must not be misrepresented, either by explicit claim or by omission. 3. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. If PCRE is embedded in any software that is released under the GNU General Purpose Licence (GPL), then the terms of that licence shall supersede any condition above with which it is incompatible. ----------------------------------------------------------------------------- analog-ce-6.0.17/docs/Licpng.txt000066400000000000000000000045551406366436600163670ustar00rootroot00000000000000COPYRIGHT NOTICE: Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. (libpng versions 0.5, May 1995, through 0.89c, May 1996) Copyright (c) 1996, 1997 Andreas Dilger (libpng versions 0.90, December 1996, through 0.96, May 1997) Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson (libpng versions 0.97, January 1998, through 1.0.6, March 21, 2000) For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: John Bowler Kevin Bracey Sam Bushell Andreas Dilger Magnus Holmgren Tom Lane Dave Martindale Glenn Randers-Pehrson Eric S. Raymond Greg Roelofs Guy Eric Schalnat Paul Schmidt Tom Tanner Willem van Schaik Tim Wegner The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors and Group 42, Inc. specifically permit, without fee, and encourage the use of this source code as a component to supporting the PNG file format in commercial products. If you use this source code in a product, acknowledgment is not required but would be appreciated. A "png_get_copyright" function is available, for convenient use in "about" boxes and the like: printf("%s",png_get_copyright(NULL)); Also, the PNG logo (in PNG format, of course) is supplied in the file "pngnow.png". Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a certification mark of the Open Source Initiative. Glenn Randers-Pehrson randeg@alum.rpi.edu March 21, 2000 analog-ce-6.0.17/docs/Licunzip.txt000066400000000000000000000024531406366436600167430ustar00rootroot00000000000000 Copyright (C) 1998-2003 Gilles Vollant This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g WinZip, InfoZip tools and compatible. Encryption and multi volume ZipFile (span) are not supported. Old compressions used by old PKZip 1.x are not supported I WAIT FEEDBACK at mail info@winimage.com Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution Condition of use and distribution are the same than zlib : This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. analog-ce-6.0.17/docs/Liczlib.txt000066400000000000000000000032711406366436600165350ustar00rootroot00000000000000Acknowledgments: The deflate format used by zlib was defined by Phil Katz. The deflate and zlib specifications were written by L. Peter Deutsch. Thanks to all the people who reported problems and suggested various improvements in zlib; they are too numerous to cite here. Copyright notice: (C) 1995-2002 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu If you use the zlib library in a product, we would appreciate *not* receiving lengthy legal documents to sign. The sources are provided for free but without warranty of any kind. The library has been entirely written by Jean-loup Gailly and Mark Adler; it does not include third-party code. If you redistribute modified sources, we would appreciate that you include in the file ChangeLog history information documenting your changes. analog-ce-6.0.17/docs/Readme.html000066400000000000000000000066401406366436600164720ustar00rootroot00000000000000 Readme for analog -- introduction [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Introduction


Analog is a program which analyses logfiles from WWW servers. It works on almost any operating system. It is designed to be fast and to produce accurate and attractive statistics: and combined with Report Magic, you can generate even prettier reports. It's free software.

Although analog is free software, its distribution and modification are covered by the terms of the GNU General Public License. You are not required to accept this licence, but nothing else gives you permission to modify or distribute the program. Analog comes with no warranty.

Although analog is free, if you like it, please consider making a donation towards its development. Thank you.

This Readme describes analog 6.0. For the latest version of analog, see the analog home page. For examples of the output see

This Readme is split into several pages. Beginners should start with the licence followed by the section on Starting to use analog.

You can navigate through the Readme by using the links within each page or the choices at the top and bottom of each page. There is also a map showing the layout of the whole Readme, and an index page.

You might also find the How-To's helpful; these are descriptions by other authors of how to use analog for particular tasks.

Now you can go to


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/acknow.html000066400000000000000000000204641406366436600165570ustar00rootroot00000000000000 Readme for analog -- acknowledgements [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Acknowledgements


Many people have helped me with analog, and I can't thank them all specifically. But I do appreciate everyone who's given me feedback or sent me bug reports.

Thanks are due to the author of getstats, Kevin Hughes. In the days before analog there were only three serious logfile analysis programs, and only one of them, getstats, had attractive output. I wrote analog when getstats stopped being able to cope with the size of our logfile, but my output was based on his, and still shows its parentage.

Thanks are also due to all those who helped in the early stages of writing this program, and gave me the encouragement to continue with analog and to release it publicly. Those who made helpful suggestions during the first few weeks of the program are numerous, but I must mention particularly Dan Anderson, Martyn Johnson, Joe Ramey, Chris Ritson, Quentin Stafford-Fraser and Dave Stanworth. Above all Gareth McCaughan gave me lots of programming advice. The early versions of the program would have run much more slowly without him.

My employer, ClickTracks, kindly let me continue to develop analog while I am working for them. More than that -- they even let me incorporate some code developed for ClickTracks into analog!

For six years, analog's home page was at my previous employer, the University of Cambridge Statistical Laboratory. Now it is provided by SourceForge. niccx.com donated the address analog.cx, and Takayuki Matsuki of Tokyo Kasei University and Peter Gradwell of gradwell dot com ltd provide DNS services.

meer.net very kindly provide the mailing lists for analog, as well as a mailbox for the analog-author mail. Thank you too to Aengus for administering the mailing lists, GMane for turning them into newsgroups, and all the services who provide list archives.

Thanks to Ian Jackson for providing official FTP and rsync sites for analog, and for hosting the old versions of the documentation. Many other people have provided mirror sites for analog, starting with Dave Stanworth (again!). The full list of mirror sites is listed elsewhere; thanks to all of them.

Mark Roedel first suggested porting analog to different platforms, and made the original DOS port. Shortly afterwards, Jason Linhart made the Mac port, and has continued to contribute lots of extra code for that platform and for the program in general. The Mac version also includes code contributed by Stephan Somogyi and Nigel Perry. Later ports were made by Dave Jones, Martin Zinser & Rick Dyson (OpenVMS), Magnus Hagander (Win32), Ivan Martinez (OS/2), Nick Smith & Stefan Bellon (RISC OS), Scott Tadman & Rob Judd (BeOS), Thomas Engel (NeXTSTEP), Martin Kraemer & Holger Schranz (BS2000/OSD, including EBCDIC support), and Hideyuki Yahagi (AS/400). Thank you also to the people who make precompiled versions available for various platforms.

The regular expression parsing is taken from Philip Hazel's PCRE library. The graphics use Thomas Boutell's gd library, the libpng library, and the zlib library by Jean-loup Gailly & Mark Adler. Logfile decompression uses the zlib library, Gilles Vollant's unzip library and Julian Seward's bzip2 library. Each of these libraries is subject to its own copyright and licensing conditions: PCRE licence, gd licence, libpng licence, zlib licence, unzip licence, bzip2 licence. If NEED_MEMMOVE is defined at compile time, then this product includes software developed by the University of California, Berkeley and its contributors (licence).

The XML output style was written by Per Jessen. The form interface is based on an idea by James Dean Palmer. The code to expand wildcards in directory names under Unix is by Owen Cliffe. Thanks to all the other people who have contributed bits of code too: I apologise for not having room to name all of them.

Thanks also to those who have written helper applications, for making analog more usable, and to those who have written How-To's, for sharing their experience of how to use analog in practical situations. And thanks to Alexander Toth for the Unix man page.

Many people have volunteered to translate analog into their own languages. Many thanks to the following who have contributed in this way over the years: Tigran Nazarian (Armenian), Jon Otegi (Basque), Emir Alikadic (Bosnian), Luchezar Georgiev (Bulgarian), Francesc Rocher, M. Mercè Llauge, Francesc Burrull i Mestres & Jordi Vidal (Catalan), Yang Meng & Che Dong (Simplified Chinese), Andrew Choi & Tzu-hsien Yu (Traditional Chinese), Tomo Sombolac (Croatian), Jan Simek & Karel Fajkus (Czech), Adrian Price (Danish), Ferry van het Groenewoud, Joost Baaij, Dimitry Smagghe, Bert Hiddink & Frank Fesevur (Dutch), Henrik Huhtinen, Steve Kelly, Andrew Staples, Mikko Silvonen, Juha Ojaniemi & Markus Peuhkuri (Finnish), Patrice Lafont, Lucien Vieira, Jean-Marc Coursimault, Lionel Delaude & Gordon Macpherson (French), Mario Ellebrecht, Martin Kraemer, Holger Schranz, Thomas Jacob, Thomas Frings, Georg Schwarz, Ralf Döring & Gustaf Mossakowski (German), Dimitris Xenakis (Greek), Laszlo Nemeth & Andras Kemeny (Hungarian), Gustaf Gustafsson & Valberg Larusson (Icelandic), Haris Hasanudin (Indonesian), Furio Ercolessi, Luca Andreucci, Alessio Bragadini & Marco Bernardini (Italian), Takayuki Matsuki, Stephen Obenski, Motonobu Takahashi, Kaori Chikenji & Kazuto Ishigaki (Japanese), Byungkwan Kim & InChang Oh (Korean), Jurijs Turjanskis & Anda Bimbere (Latvian), Ingrid (Lithuanian), Jan-Aage Bruvoll, Espen Bjarnø & Pål Løberg (Norwegian Bokmål), Magni Onsøien & Trond Øksendal (Norwegian Nynorsk), Wlodek Lapot, Tomek Wozniak & Marcin Sochacki (Polish), Ivan Martinez, Paulino Michelazzo & Ronan Lucio Pereira (Brazilian Portuguese), Jaime Carvalho e Silva (European Portuguese), Alex Mihaila (Romanian), San Sanych Timofeev, Boris Litvinenko, Vyacheslav Nikitich, Oleg Philon & Denis Zhukov (Russian), Mile Peric (Serbian), Stefan Billik & Dusan Zervan (Slovak), Andrej Zizmond & Dalibor Cvijetinoviè (Slovene), Javier Solis, Alexander Velasquez, Alfredo Sola, Martin Perez, Nelson Tactuk, Javier Kohan & J. L. García (Spanish), Björn Malmberg, Frank Osterberg, Wesley Schaal & Christian Rose (Swedish), Nezih Erkman & Dikran Diragormacioglu (Turkish), and Yaroslav Boychuk (Ukrainian).

Finally, thanks to all of you for using the program!


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/alias.html000066400000000000000000000245251406366436600163700ustar00rootroot00000000000000 Readme for analog -- aliases [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Aliases


After analog has read each logfile entry, it then applies aliases to each of the items. First, if you have a case insensitive filesystem, analog converts the filename to lower case. Usually analog assumes that Unix and BeOS filesystems are case sensitive and other systems are case insensitive. You might want to override its choice, if, for example, you have transferred files from one machine to another, so as to use the convention on the original machine. You can do this by the commands
CASE INSENSITIVE
CASE SENSITIVE
There are similar commands for usernames, if your logfile records these. By default, usernames are always case insensitive, but you can specify
USERCASE SENSITIVE
to override this.
Next it applies built-in aliases to each item. For example, it knows that %7E in a filename or referrer is equivalent to ~ and translates it accordingly. It also strips off the directory suffix from any filenames which have it. This suffix is normally index.html, but you can specify another one instead with a command such as
DIRSUFFIX default.htm
(You can only have one DIRSUFFIX.) There are other built-in aliases for other items: for example, hostnames are converted to lower case at this point.
After this, it applies user-specified aliases to each item. These aliases are useful if, for example, you know that two filenames correspond to the same file, or if you want to translate local hostnames to their internet equivalents. You specify aliases by commands like
FILEALIAS /football.html /soccer.html
HOSTALIAS lion lion.statslab.cam.ac.uk
There is also the special command FILEALIAS none, which cancels any other file aliases which might have been specified.

The alias commands for the other items are called BROWALIAS, REFALIAS, USERALIAS and VHOSTALIAS. Only one alias is ever applied to any item. So after

FILEALIAS /football.html /soccer.html
FILEALIAS /soccer.html /brazil.html
the file /soccer.html would get translated to /brazil.html, but /football.html would only get translated to /soccer.html and would not see the second alias.

You can also use wildcards in ALIAS commands: ? matches any one character and * matches any number of characters (including none). And on the right-hand side, you can use $1, $2 etc. to represent the parts of the original name matched by the *'s. As a special abbreviation, if there is exactly one * on the left-hand side, then a * on the right-hand side can be used to represent $1. So, for example,

FILEALIAS /*/football/* /soccer/
would translate /sport/football/rules.html to just /soccer/, but either of
FILEALIAS /*/football/* /$1/soccer/$2         # or
FILEALIAS /sport/football/* /sport/soccer/*
would translate /sport/football/rules.html to /sport/soccer/rules.html.

You can use $$ to get an actual $ on the right-hand side. Or you can prefix the right-hand side with "PLAIN:" to treat any $'s and *'s on the right-hand side literally. For example

FILEALIAS /*/football/* PLAIN:/$1/soccer/$2
would translate /sport/football/rules.html to exactly /$1/soccer/$2

Analog's *'s are un-greedy: if there are two possible ways of matching, the part of the expression on the left matches as little as possible. This is more often what you want. But it contrasts with Perl's regular expressions, for example. (Oh, two consecutive *'s are completely useless, but if you try it they are collapsed into one before counting the $1, $2, etc.)

The behaviour of FILEALIAS and REFALIAS can be slightly unintuitive if the file has search arguments.

A warning to Unix users: if you put an ALIAS command on the command line with +C, the shell may try and expand $1 etc., which is not what you want. To stop the shell doing this, put the command in single quotes instead of double quotes.


There is another set of alias commands, called output aliases. They don't alias items, but individual lines from particular reports (and they never combine lines, even if two lines end up with the same name). For example, the command
TYPEALIAS .txt ".txt (Plain text files)"
would provide an explanation of that line in the File Type Report.

There can be some confusion between some normal alias and output alias commands. For example, what is the difference between FILEALIAS and REQALIAS? In fact, there are several differences because of the different things the aliases are doing. FILEALIAS applies to the files themselves, but REQALIAS only applies to the lines in the Request Report. This means that FILEALIAS also affects the other reports which use the filenames, such as the Directory Report, whereas REQALIAS only affects the Request Report.

Another difference is that REQALIAS applies separately to each line of the Request Report. This means that if two separate files translate to the same thing in a FILEALIAS command, they will become one file for all the reports. But if you were to use the same REQALIAS command, they would still be two files, and would still be listed on separate lines in the Request Report, but with the same name.

So in summary, when should you use each command? FILEALIAS should be used if a single file has two different names; i.e., if your web server returns the same file for two different URLs. REQALIAS, on the other hand, would typically be used to annotate or clarify the Request Report. Sometimes it's useful to use both; first combine some files with FILEALIAS, and then annotate them in the Request Report with REQALIAS.

The full list of output aliases is REQALIAS, REDIRALIAS, FAILALIAS, TYPEALIAS, DIRALIAS, HOSTREPALIAS, REDIRHOSTALIAS, FAILHOSTALIAS, DOMALIAS, ORGALIAS, REFREPALIAS, REFSITEALIAS, REDIRREFALIAS, FAILREFALIAS, BROWREPALIAS, BROWSUMALIAS, OSALIAS, VHOSTREPALIAS, REDIRVHOSTREPALIAS, FAILVHOSTREPALIAS, USERREPALIAS, REDIRUSERALIAS and FAILUSERALIAS.

There is one known bug with the output aliases. The report is sorted before the alias is applied. This means that if the SORTBY for the report is set to ALPHABETICAL, then the report will not be sorted correctly.


You can also use regular expressions in the ALIAS commands. Sorry, I'm not going to teach you how to use regular expressions here if you don't already know: if you're on Unix try typing man perlre or man regex or man grep. There are lots of implementations of regular expressions. The ones which analog uses are Perl-syntax regular expressions. In general, these are a superset of the extended regular expressions used by Unix egrep or GNU grep -E.

You include regular expressions in an ALIAS command by prefixing the left-hand side of the alias with "REGEXP:". Or you can specify a case-insensitive match, like Perl m//i or Unix egrep -i, by using "REGEXPI:". (It's automatically case-insensitive for many items, such as hostnames, or filenames if you have specified CASE INSENSITIVE.)

On the right-hand side of the alias you can use $1, $2 etc. to represent the first, second etc. bracketed expression on the left-hand side, counting in order of the left brackets. (Again, you can't put $1, $2 etc. on the command line unless you put them in single quotes.)

Regular expressions match if they match just part of the string. If you want them to have to match the whole of the string, you have to anchor them to the ends of the string with ^ and $.

For example,

REQALIAS REGEXP:^(/~(.+?)/.*) "[$2] $1"
would translate
/~sret1/backgammon/rules.html
to
[sret1] /~sret1/backgammon/rules.html
in the Request Report. Or
HOSTALIAS REGEXP:^([^.]*)$ $1.mycompany.com
would add .mycompany.com to all hostnames not containing a dot. (See the FAQ for a discussion about whether this is a good idea.)

Regular expressions are greedy: if there are two possible ways of matching, the part of the expression on the left matches as much as possible.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/analogo.gif000066400000000000000000000052631406366436600165160ustar00rootroot00000000000000GIF89a00÷üœ¾â„®Ú‰³Ýq¤Û}«Û/VˆòöøËÜíåïù–()u¨Ûl Óޏâˆ%*m˜ÍéÃǃœ°ä·»•»âŽ%ìËË·8:¸Ðéìôûéïø´Îì¢ÃåP„äìøÙæðx§ØÏQVèñûn ÙÈßñv%(“·Û°ßI›,2y­ä�DpÃÙñ 6oÎâóê×Û³ÊâUZq›w!£56ëñóÍAF¨Åä®22ðÎÒp£ÓîàáæïõêÓÑ­Ëç|«Ôòòö÷àâQŒËâíõÙ…ˆ_"¤(-ôîóÄÕë䨨ô·¹˜JRßéõÛŽ“ýòñ»00õûþöóõ½Òìí÷þÈ13÷ÿÿÝíù?ÃÒåój'%‘iÒáìºØñ»Ïñðúÿýýþy016aÑßéÖ®²˜VcNw­Ú~}ˆ+2aŽÇÜž£3r¼¬µÈíå郶é–!t‹´õÇÇì´²ò÷ýçŸêòþéó÷ñÚâñ×ÙóÔÖóÜÜ›¿èz}§•§½ýúý£,/ÿÿüíõøùþû×è÷F„ÐÔàðœÇë­z}4 Ü—š©ÊìIe•r ë‘a“Õ&]¢ÆbeüÜÛ3l¥R%A{Jc$µÔî²$(ßso²Ä×쬱䗠òüõÿúù¯Îë½Ðâ÷õùûêê5x£Ööææ•14USz2 ×gg¥¿ÝãìþüùôÔ_^ïòþõêìÂ…‹¾:Gßñþý÷ï°Ëðíñùu›Á¾mr޽éöñúÃÚìÓÉ×ùûÿR7Qðòîž>D¿×îõõýÇU]ÑuuÐâýÀBEþëãÙlsùØÙÊ»Èíúóu8FËØã, ´V]²ÌÂØçããí' ªâÀÕåèêñÎØëÚÖáªÕöÄšŸÎooâ?Fô¡¤£Âì(õÙÕÕy}øÑÕ0ÊÐéDCÜåûû÷ûõãêédb§Õìýa*/þåèÝ¥ ýzy¬KP>/¥Ž»ôjœãÿÿÿw¢Ï¼"ÿõûõ¦°4.K:öÓΗÿÿÿ!ùü,00ÿù H° Áƒ*\Èo–§T3eJ•!Ë m¼xq V*^BãæÓ§5Sò“–©ƒ—?:­’5³ÓŸ?^õ)6†‰J…Î,Ä D剜 ]žtY*å‚@4úP™·.«ŸùdªÂ‰S9P’%ã$¥° üèõJ¯>}H¹ŠµÖ–]Mp AH­`iqý ”U«B1g$P †~BÓ' uš^¸P§ Áåš’'<ÀÙ Õ©‹È! ò™–)t@èF€á”&MBéȣÎ Ù2É)d´ƒ‰0LŒ¡Ë Q¼°Â [lq„ÐP†CÌÑð\a†ß„-Œ0YÇ‘Âʰð†@dœ"† ¨ÍŠ1Ù`³Ì4=d`É¿ÿQ 4Ö ƒŒ vð†0Ƙ &Ùd£øÌ‘DJ ‚"}qJ%b|qÎ9„L„laÁ XÀ+äB!at¶|€ *à +¡›±Í&ÍðR „E7áˆ!ÆÚÔK 5<¢ôÏLóÂ,³Xð ˜Ô‚.ÍÔðôÏOá*›0òH*€¡‚ IrÊ!Ìpž181…ù¼²†8QÐ@! aƒDp#‰à‚8^QòU ¬°"Ô7á`ðã‡$DqˆCp®_Èßop‰KÀ¢£HH@ èA$Ð÷‚a¾~Àê‡/ÈãE#ô;„ÿN1‚Ü`œB=Ðñ†B°ˆ"H@‘7\ 7¸JqTPÂÜÀ3x†IT"¢˜„(ÐH„3œà7˜Â%öp  ðJ@€H€d(Â%Š€|Á¼P„#.XËeP ‹€A7*a‚Jš`08ƒ‹à gÀ9P@GA €µ(OPŠ3ÀŠPÀX0° l›1dÀ Q˜D€ °Ð?øá€0€Œâ™ 0åŠ0ƒ”âêØÃ A e€Ñ–1È"¦P,B˜ÀÄÂdЀ øa(XÀr0€ ôäã ÐÿÈÀ”h„È0‚I˜"è¡8Ñ¡3˜@D ‚ Fð…3L`dh¦äiÏ{â“ÈÂ0,Aˆ€yЄdûÐÆ ªNv6 ¾ØÃBà€žî4¨§=à€¨r ÈBJ}¡Ž/Ä ,(@AÆ™IÔô¦˜ÁÚ0€ž†¨ÑŒfPàa p<¬P%”Š€ªAFà„Ht H€^•€ÈS(k K€Â–µ ÓôC+XA¥”Pâb¬³'H€*`ʶQ”¢0Ú;*`hfÁÖ§ªA¡I€úYŠÿœ€ @AYï(HÀ…ÀoEÒ¶èi#‚°ZG`N!ïpƒ;P€Ý>2@ÐÃF^ DÁ–ð„'!Þ[Ø!hD#Øëˆ‹$ (ð4¤!rÃŽÂŽð´ü" È/7ôà_ìTƒ(1F”±‡6V€±…pg…A ZˆÖ.lOÀŽ%@Ap©’24‚…ðî,¸…\äâTW耚µ)sÁß-D<ÐÀåŸÄ ¸F±7´@äPE,ª@hA\A¹x q[”!œXHÐKœ ÊKP…*@€!,áп°€',q 4”!Ò‰V …]†ÉèE/h@¦X¤cר¤Q¬aÐx †Ý…%a ¨¯1â @€Ð想ù°ìj/; ;analog-ce-6.0.17/docs/anlgdocs.css000066400000000000000000000002231406366436600167020ustar00rootroot00000000000000body { background-color: white; color: black } h1, h2, h3, h4, h5, h6 { font-family: Arial, Helvetica, sans-serif } /* Last updated 08-Jul-2000 */ analog-ce-6.0.17/docs/args.html000066400000000000000000000226401406366436600162270ustar00rootroot00000000000000 Readme for analog -- search arguments [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Search arguments


Sometimes a URL contains arguments after a question mark. For example, the URL
/cgi-bin/script.pl?x=1&y=2
runs the /cgi-bin/script.pl program with arguments x=1 and y=2. (Sometimes the server records these arguments in a separate field in the logfile, but if so you can use the %q field in the LOGFORMAT command, and analog will translate the filename to the above format).

You can tell analog either to read or to ignore the arguments using the commands ARGSINCLUDE and ARGSEXCLUDE which we'll discuss in a minute. But by default, all arguments are read, and as this is usually what you want, you don't usually need those commands.

You don't always see the arguments in the reports, even if they're being read, because analog doesn't show them if there aren't enough of them. In order to see them, you have to set the corresponding ARGSFLOOR parameter low enough.

Also note that within a report, the search arguments are listed immediately under the file to which they refer. This temporarily interrupts the normal order of the files. It may be clearer if you turn the N column on.


Assuming that the arguments are being read, analog treats the file /cgi-bin/script.pl?x=1&y=2 as a different file from /cgi-bin/script.pl (or from /cgi-bin/script.pl?y=2&x=1 for that matter). It doesn't look like that in the Request Report because you see a grand total for /cgi-bin/script.pl with all its different arguments. But it matters if you want to do inclusions and exclusions or aliases on the file.

The reason is that, for example, the command

FILEINCLUDE /cgi-bin/script.pl
doesn't match the file /cgi-bin/script.pl?x=1&y=2. To match that, you would have to use something like
FILEINCLUDE /cgi-bin/script.pl*
instead. Similarly
FILEALIAS /cgi-bin/script.pl /script.pl
will change /cgi-bin/script.pl itself, but not /cgi-bin/script.pl?x=1&y=2. You might want to use something like
FILEALIAS /cgi-bin/script.pl?* /script.pl?$1
as well. (However, PAGEINCLUDE and PAGEEXCLUDE always refer to the part of the filename before the question mark.)

Conversely, because in the Request Report files with arguments are only included if their parent file is included, you can't just

REQINCLUDE /cgi-bin/script.pl?*x=1*
or you will end up with nothing listed. You have to
REQINCLUDE /cgi-bin/script.pl
as well.
The alternative is to tell analog not to read the search arguments. There are commands called ARGSINCLUDE and ARGSEXCLUDE, and REFARGSINCLUDE and REFARGSEXCLUDE, to do this. They work the same as the other INCLUDE and EXCLUDE commands which we discussed in the previous section. So, for example, if the command
ARGSEXCLUDE /cgi-bin/script.pl
were given, analog would ignore the arguments to that file, and so read /cgi-bin/script.pl?x=1&y=2 as just /cgi-bin/script.pl. On the other hand, if
ARGSINCLUDE /cgi-bin/script.pl
were specified, analog would read the arguments, and so treat /cgi-bin/script.pl?x=1&y=2 as a different file from /cgi-bin/script.pl. REFARGSINCLUDE and REFARGSEXCLUDE are the same for referrers.

Technical note: the check for whether the arguments should be included happens before the filename has been subject to either built-in or user-specified aliases. So you have to use the unaliased name, exactly as it occurs in the logfile. For example, ARGSINCLUDE /~sret1/script.pl won't match /%7Esret1/script.pl even though they are really the same file. It also means that you can't use "pages" in the ARGSINCLUDE or ARGSEXCLUDE command, because we don't know whether a file is a page until after it's been aliased.


There are related commands called SEARCHENGINE and INTSEARCHENGINE. If you have referrers with search arguments, usually from search engines, you can tell analog which field corresponds to the search term. It uses this information to compile the Search Query Report and the Search Word Report. For example, consider the referrer
http://www.altavista.com/cgi-bin/query?pg=q&kl=XX&q=carrot+cake
The search term is in the field q= so the appropriate SEARCHENGINE command is
SEARCHENGINE http://www.altavista.com/cgi-bin/query q
(or even better
SEARCHENGINE http://*altavista.*/* q
to allow for all their mirror sites in different countries.)

The command INTSEARCHENGINE is the same for search engines, or other scripts which take arguments, within your site. For example, you might have requests for files like

/cgi-bin/search?trm=chocolate+cake
in which case you would specify
INTSEARCHENGINE /cgi-bin/search trm
and (assuming you haven't done an ARGSEXCLUDE for that file) "chocolate cake" would then appear in your Internal Search Query Report.

Sometimes a search engine has two or more possible fields for the search term. In that case you can list all of them separated by commas, like this:

SEARCHENGINE http://*webcrawler.*/* search,searchText

The rest of this section is a bit technical, and you usually don't need to worry about it. On a first reading, you probably want to skip it.

I said previously that %7E in a URL is automatically converted to ~, etc. In fact this is only done to the ASCII-printable characters %20-%7E, because these are the only characters that are the same in every character set. (In fact, even that isn't true. Experts might want to know that ?, &, ; and = aren't converted either, to distinguish them from query-string delimiters: an encoded ?, &, ; or = is one that is not intended to be a delimiter. Also % isn't converted, to avoid confusing %25nm with %nm.)

But in the Search Query Report and Search Word Report it is useful to be able to convert non-ASCII characters too, so that you can see the actual words people typed, rather than get the %nm codes in place of all accented letters. So in these reports analog also converts characters %A0-%FF (if you are using an ISO-8859-* character set) or %80-%FF (for most other character sets).

However, there are reasons why you might not want this feature, and you can turn it off with the command

SEARCHCHARCONVERT OFF
These reasons include:
  1. The character set in which the query was submitted to the search engine may not be the same as that in which the page reached was written, or that in which the analog output page is being written. So converting to the character set of the analog output page may give garbage anyway. This is particularly a problem with languages, such as Russian, which have two or more characters sets in common use. It is also a problem for sites which host resources in many languages.
  2. Not all of the character positions correspond to printable characters in every character set. Analog knows that %80-%9F are non-printable in the ISO-8859-* character sets, but apart from that it converts everything in %80-%FF. So you may end up with non-printable characters in your output.
SEARCHCHARCONVERT is always turned off if the output is in ASCII; and it defaults to off if the output is in a multibyte character set because it doesn't work well in that case.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/bara8.gif000066400000000000000000000000621406366436600160630ustar00rootroot00000000000000GIF87a@€¿33ÿÿÿ,@„©Ëí£œ´Ú‹³Þ¼û¯;analog-ce-6.0.17/docs/barb1.gif000066400000000000000000000001031406366436600160510ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,ºþNÈ)‡½–è­‹ÿ^;analog-ce-6.0.17/docs/barb32.gif000066400000000000000000000002451406366436600161440ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,rºÜþ0ÊI«½8ëÍ»_A(Ždižhª®lë¾p,Ït- x®ï|ïÿÀ pH,ȤrÉÌ žÐ¨tJ­Z¯Ø¬vËíz¿à°x %˜Ïè´zÍn»ßð¸|N¯Ûïø¼þ\èûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘~ ;analog-ce-6.0.17/docs/barb8.gif000066400000000000000000000001441406366436600160650ustar00rootroot00000000000000GIF87a@ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,@1ºÜþ0ʪ½8ëÍ;`(Ždižè9¬lë¾p,Ï2aßx®ï|ï÷… pH,È$2;analog-ce-6.0.17/docs/barc8.gif000066400000000000000000000002211406366436600160620ustar00rootroot00000000000000GIF87a@ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,@^ºP¼î59e|—e‚ÿÎvb–§˜Ž¥Iª€ ÏÎLǶPç»Ýß9ÎŽ#²¨$›OetÙt2¥‚vëØr³^B7<ö–¿a1ØÜ(¸ßí·;.§Ãåw¼C¿×';analog-ce-6.0.17/docs/bard8.gif000066400000000000000000000001141406366436600160640ustar00rootroot00000000000000GIF87a@€¿33,@+„§›þ\[U¯Ñ‘æ/^Hަ%¢¥zb«Ûn)ÌÖô-¿yÜÙ»ßc;analog-ce-6.0.17/docs/bare8.gif000066400000000000000000000002161406366436600160700ustar00rootroot00000000000000GIF87a@ÂæxxàXXÖFF¿33°00‰&&ÿÿÿ,@[º¼î59e|—e(ºÁç…"Xš%)ª;p<rL×3žãwÝË?aH$ŠÄ#Ò¸d.•HhQš,X¯…öªÝf½_ow;Æ–¹†´ÚX«Ûnv\‡»íkü;;analog-ce-6.0.17/docs/barf8.gif000066400000000000000000000001141406366436600160660ustar00rootroot00000000000000GIF87a@€¿33[‘,@+„o¡«ˆÌÜK&,ÀÙrýy8Šyšºª‘[ÁÜI¡]â©Þò¯* ;analog-ce-6.0.17/docs/barg8.gif000066400000000000000000000002571406366436600160770ustar00rootroot00000000000000GIF87a@ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,@dÈ)ƒ½–RŒõä—W`žæ ®*в¬{«œÒ¡ïzáÿ>îˆ?cY08ŸÎƒt*…B©Të;ÕF¹„x,N˜Ïf2VÙgwžPØïö…~¯Çãù|~w€{‚y„ ;analog-ce-6.0.17/docs/barh8.gif000066400000000000000000000003021406366436600160670ustar00rootroot00000000000000GIF87a@ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,@wÈ T¸8,:m¾W} 8’› ®Öà¾éª¶¯Ët}³Am„ ÐR(7ÂaÀx& DfùŒ27†¬Örèz±Ú,×Û‡Çdó6@.ð¸%A¯oâò@ÝþÆ#æ{ w~€{ ˆ‰ Œ‡ŠˆŽŒ‹“’“;analog-ce-6.0.17/docs/bari8.gif000066400000000000000000000001471406366436600160770ustar00rootroot00000000000000GIF87a@¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ,@4ºÜþ0ʪ½8ëÍ;`(Ždižè9¬lë¾p,Ïrjß8îí|ßOÀ PH(ȤrÉl2;analog-ce-6.0.17/docs/barj8.gif000066400000000000000000000002711406366436600160760ustar00rootroot00000000000000GIF87a@ã¿33[‘àXX0„ÀæxxF–áðÐÐØàÿ‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,@nÈ)ƒ½–RŒõä—W`žæ ®*в¬{«œÒ¡ïzáÿ>îˆ?cY08ŸÎƒt*…B©Të;ÕF¹%Y“ÍL4Ò&À Øn8NNH;^O⃀€ „…„‚‚††ˆŠ…ŒƒŽ ;analog-ce-6.0.17/docs/basiccmd.html000066400000000000000000000200111406366436600170260ustar00rootroot00000000000000 Readme for analog -- basic commands [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Basic commands


Here is a list of basic configuration commands to get you started with analog. These commands should be added to your configuration file, analog.cfg, as explained in the section on Starting to use analog. We'll see all the possible configuration commands in later sections. Or you can read a summary of the commands which control each report in the section on Analog's reports.
Analog reads logfiles produced by your web server, and produces an output file based on the data in them. So you need to know how to specify which logfile to read, and which file to send the output to. The relevant commands look like
LOGFILE my_logfile
OUTFILE output.html
where, of course, you should substitute the names of the files you want to use. The logfile must be stored locally -- analog won't use FTP or HTTP to fetch it from the internet, so you may have to fetch it yourself first. You can read several logfiles by giving several logfile commands, or by giving a comma-separated list, or by using wildcards in the logfile name. So, for example, if you use the commands
LOGFILE new1.log,old*.log
LOGFILE new2.log
analog will analyse the logfiles new1.log, new2.log, and all the old logfiles. Analog will recognise logfiles in several different formats. You can read more about this in the section on Choosing a logfile.
There are a couple of other commands you need to know right at the beginning, not because they're particularly important in themselves, but because the output will look silly if you don't know them. First, you need to know how to put your own organisation's name and URL at the top of the output. For this, you need two commands such as
HOSTNAME "Spam Widgets Inc."
HOSTURL http://www.spam-widgets.com/

If you have broken images in the output instead of graphs, you need to say in which directory on your server the images are stored. You do this by a command like

IMAGEDIR /analog/images/
(This is just put in the <img> tags in the output page, so it's the URL of a directory, not the name of the directory on your disk. The images are distributed with the program - you will have to move them to whichever directory you choose.)
Next you will want to know how to turn individual reports on and off. Analog can produce up to 44 different reports if your web server has been configured to record the necessary data in your logfiles, but here are the most important ones. Try them and see what happens. You can turn each report on with an ON command, or off with an OFF command. You can also use the commands ALL ON and ALL OFF to turn all reports on or off.
MONTHLY ON       # one line for each month
WEEKLY ON        # one line for each week
DAILYREP ON      # one line for each day
DAILYSUM ON      # one line for each day of the week
HOURLYREP ON     # one line for each hour of the day
GENERAL ON       # the General Summary at the top
REQUEST ON       # which files were requested
FAILURE ON       # which files were not found
DIRECTORY ON     # Directory Report
HOST ON          # which computers requested files
ORGANISATION ON  # which organisations they were from
DOMAIN ON        # which countries they were in
REFERRER ON      # where people followed links from
FAILREF ON       # where people followed broken links from
SEARCHQUERY ON   # the phrases and words they used...
SEARCHWORD ON    # ...to find you from search engines
BROWSERSUM ON    # which browser types people were using
OSREP ON         # and which operating systems
FILETYPE ON      # types of file requested
SIZE ON          # sizes of files requested
STATUS ON        # number of each type of success and failure
The full list of reports is in the section on Configuring the output. Some reports, for example the Referrer, Browser and Operating System Reports, will only appear if your web server has been configured to record the necessary data in its logfiles.

You can configure lots of other things about each report, such as how many rows are listed, which columns are included, and how the reports are sorted. For example, the command

REQINCLUDE pages
tells analog only to list pages, rather than all files, in the Request Report, and
REQFLOOR 10r
tells analog to include in the Request Report all files with at least 10 requests. You can read a summary of all the reports and the commands which control them in the section on Analog's reports.
You can have the output in several different languages, by using a LANGUAGE command. For example, the command
LANGUAGE FRENCH
will give you the output in French. The available languages at the moment include ARMENIAN, BASQUE, BULGARIAN, CATALAN, SIMP-CHINESE (GB2312), TRAD-CHINESE (Big5), CZECH, DANISH, DUTCH, ENGLISH, US-ENGLISH, FINNISH, FRENCH, GERMAN, HUNGARIAN, INDONESIAN, ITALIAN, JAPANESE, KOREAN, LATVIAN, NORWEGIAN (Bokmål), NYNORSK, POLISH, PORTUGUESE, BR-PORTUGUESE, RUSSIAN, SERBIAN, SLOVAK, SLOVENE, SPANISH, SWEDISH, TURKISH and UKRAINIAN.

The following languages were available for previous versions of analog, but have not yet been translated for version 5: BOSNIAN, CROATIAN, GREEK, ICELANDIC, LITHUANIAN and ROMANIAN. As and when they are translated, they will be added to the analog home page. See the section on Configuring the output for how to download, or even translate, new languages.


Two other common things you might want to do are to alias files or hosts (for example, to tell analog that two different filenames are really the same file), or to include or exclude certain files, hosts or dates (to ignore accesses from your site, for example, or to do an analysis only of a certain subdirectory or a certain time period). For these, see the later sections on Aliases and Inclusions and exclusions.

As I said, these are only a few of the commands available. To find out about all the commands, you'll have to read the remaining sections of the Readme, starting with a short section on the syntax of configuration commands.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/cache.html000066400000000000000000000232061406366436600163350ustar00rootroot00000000000000 Readme for analog -- cache files [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Cache files


Analog has the ability to archive some of the data in your logfile into a cache file so that the logfile can be thrown away without losing the most important data. (This is sometimes known as incremental processing.)

For most people, the cache file will not be needed: compressing the logfile using a standard compression utility such as gzip will be sufficient. Compressing a logfile is very efficient owing to the large number of repeated strings: I find about 12 times compression in practice. That in itself may solve your filespace problems, without needing to throw away any information.

The cache file is also not the best format for post-processing the data or feeding it into a spreadsheet. For that you should use the computer-readable output style.

Many people have trouble using the cache file, and end up accidentally recording corrupt data. You do need to understand what you're doing before you throw away your logfiles. See the discussion on Procedures below.

If you are going to use the cache file feature, it is also very important that you understand what is and what is not recorded. The summary is that all INCLUDE and EXCLUDE commands, including FROM and TO, and any ALIASes and LOGTIMEOFFSETs, must be applied when you create the cache file, not when you read it later. If you want different sets of options, you must create several cache files from the same logfile.

The reason for this is that it is not possible to reconstruct everything of interest in the logfile from the cache file. The cache file does contain information about the total number of requests for each host and each file, but not about, for example, which files were read by which hosts. (To do so would take up as much disk space as the compressed logfile.) So you cannot later look at only one file and see which hosts read that file.

Another way to look at this: if you do, for example, a HOSTEXCLUDE when reading the cache file, you are not doing a genuine HOSTEXCLUDE because files that that host read will still be included. You are only excluding those hosts from the Host Report, Organisation Report and Domain Report. This is why you must do all the inclusions and exclusions you want when you create the cache file.

When analog reads in a cache file, it does not apply any more aliases to the items. This is to avoid double-aliasing. So you must do any aliases you want at the time you create the cache file. Similarly, it does not obey the LOGTIMEOFFSET variable, to avoid double-offsetting, so any offset you want must be applied at cache-creation time too.

Also, the cache file does not contain data about the number of requests for each item in the last seven days: it can't, because the figures will be different by the time they are wanted.

Finally, times are only recorded to five-minute resolution.


You can create a cache file by setting the CACHEOUTFILE to be the file you want the cache to live in. Set
CACHEOUTFILE none
to turn it off again. You will still get the regular output as well as the cache output, unless you request OUTPUT NONE. To avoid overwriting, you cannot set the CACHEOUTFILE to be a file which already exists. (Disclaimer: on some systems, race conditions may very occasionally thwart this check. Also on a few systems, making the file writeable but not readable will allow it to be overwritten). You can include the date in the name of the CACHEFILE and CACHEOUTFILE in the same way as described earlier for the LOGFILE and OUTFILE.

You can read in a previously-made cache file with the CACHEFILE command, or with the +U command line option. This works exactly the same as the LOGFILE command, so you can use commas and wildcards to read in several cache files, and read compressed cache files using the UNCOMPRESS mechanism.

If the name of the CACHEFILE or the CACHEOUTFILE doesn't include a directory, it will be looked for, or written to, wherever analog expects to find its cache files. (This location is built in when the program is compiled.) For example, on Windows it would be in the same folder as the analog executable. But a cache file specified in a +U command line option is within the current directory.

It is possible (and useful) to analyse some CACHEFILEs and some LOGFILEs together. LOGFILE and CACHEFILE commands are basically cumulative, except that any logfiles and cache files in the mandatory configuration file or configuration files loaded from there override any on the command line or in configuration files specified on the command line, which themselves override any in the default configuration file or configuration files loaded from there, which in turn override compile-time options. Usually you don't need to worry about this, and it will do what you expect.

Sometimes you don't want to record all the types of item in the cache file. You might want to forget about which hosts had accessed your web site, for example, and only remember how many times each file was requested. You can choose not to include one type of item in the cache file by setting its LOWMEM to 3; for example, specify

HOSTLOWMEM 3
to exclude hosts from the cache file. Because this is a serious step, analog will produce a warning if you do this. You can even set all six LOWMEMs to 3 if you just want to remember the pattern of requests over time, not even which files were requested.

Procedures

Many people have trouble when they try and use cache files, and end up omitting data or double-counting. You have to be careful to make sure that each piece of data is recorded in exactly one cache file. One very common mistake is to use all the old cache files when making each new cache file. Because each piece of data is then in all of the cache files, when you make a new cache file, it will record each piece of data several times over. If analog gives you a "double-counting" warning when you create a cache file, you have probably done something of this sort wrong.

Here is one way to use the cache files correctly. It's not the only correct way, but I think it's conceptually the simplest. The idea is that whenever you start a new logfile, you make a cache file out of the old logfile. So each cache file contains all the data from one, and only one, logfile. You never use old cache files to make new ones: so you never have a CACHEFILE and a CACHEOUTFILE command in the same configuration file.

Here is the procedure.

  1. Rotate your logs: that means, archive the old logfile, and restart the server with a fresh logfile. (There are several standard tools to do this: or see your server documentation.)
  2. Make both a cache file and an ordinary report from the old logfile. You can do this simultaneously by using one LOGFILE command, one OUTFILE command, and one CACHEOUTFILE command.
  3. Make a test report from the cache file (using CACHEFILE and OUTFILE but no LOGFILE) and compare it against the report from the logfile to check it works. (This step really is worth doing!)
  4. Now you can throw away the old logfile, if you've really understood what data you're losing by doing so. (But please remember that I can take no responsibility if something goes wrong: see the licence.)
  5. When you want to make the main report, you can now use all your cache files and the current (not-yet-cached) logfile.
As explained above, all INCLUDE and EXCLUDE commands, including FROM and TO, and any ALIASes and LOGTIMEOFFSETs, must be applied when you create the cache file, not when you read it later. So you may want to create several cache files from each logfile with different sets of options. Of course, in this case, you musn't later mix cache files made with different options.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/compout.html000066400000000000000000000143351406366436600167630ustar00rootroot00000000000000 Readme for analog -- computer output style [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Computer-readable output style


This section describes the computer-readable output style. You can select this style by the command
OUTPUT COMPUTER
This style is designed to be easy to read into spreadsheets, or post-process with graphics creation tools, for example. You can find some programs which use this style on the helper applications page. However, the computer-readable output style is not suitable for reading back into analog to create later reports: for that job, use the cache files described in the next section.

Each line in the output is separated into fields by means of a special string. You can specify this string by means of the COMPSEP command; for example, you could use

COMPSEP ,
for CSV (comma separated value) format. Or you can use
COMPSEP \t
to separate fields with a tab. Make sure not to use anything that might occur in the output: for example, a single or double space would not be suitable.
Each line in the preformatted output begins with a letter indicating which report the line is part of. (The code letters for the reports are listed in the section on Configuring the Output.)

After that, there follows a field indicating the remaining columns in the report (using the letters RrSsPpQqBbCcDdEeN as usual). In hierarchical reports (including the reports which can show search arguments) there is an additional column l at the beginning, indicating the level in the hierarchy.

Finally there are the numerical data for each column and then the name of the item. Times actually take up several fields: year, month, date, hour & minute, or as many of those as are necessary to identify the time. (Year and quarter in the case of the Quarterly Report).

So here is an example line from the Domain Report, showing the third-level domain cam.ac.uk with 43 requests and 3.516% of the bytes.

o     lRb     3     43     3.516     cam.ac.uk

The last line of most time reports indicates the busiest time period. After the report letter comes *BT, followed by the letter R, P or B for the GRAPH method, followed by the number of requests, pages or bytes respectively for the busiest time period, followed by the time period itself.

The first lines of non-time reports can also contain overall information about the report. First, if the REPORTSPAN for the report is wanted, it will be listed in lines with *FR and *LR instead of the normal column letters. Then there is a line listing the floor and sortby for the report. It has *f instead of the normal column letters, followed by the floor in the form it would be written for a FLOOR command, followed by the SORTBY using the code letters

r
REQUESTS
s
REQUESTS
p
PAGES
q
PAGES
b
BYTES
c
BYTES
d
DATE
a
ALPHABETICAL
x
RANDOM

The general summary is a bit different. After an initial x, there is a two-character code saying what the line contains. The possible codes are
VE
Version of analog
HN
HOSTNAME
HU
HOSTURL
PS
Program start time
FR
Time of first request
LR
Time of last request
E7
Time last 7 days ends
SR
Total successful requests
S7
Total successful requests in last 7 days
PR
Total successful requests for pages
P7
Total successful requests for pages in last 7 days
FL
Total failed requests
F7
Total failed requests in last 7 days
RR
Total redirected requests
R7
Total redirected requests in last 7 days
NC
Logfile lines without status code
C7
Lines without status code in last 7 days
NF
Number of distinct files requested
N7
Number of distinct files requested in last 7 days
NH
Number of distinct hosts served
H7
Number of distinct hosts served in last 7 days
CL
Number of corrupt lines in the logfile
UL
Number of unwanted lines in the logfile
BT
Total number of bytes transferred
B7
Total number of bytes transferred in last 7 days
Which lines are listed is still controlled by the GENSUMLINES command. This implies that if you turn a line off, you turn off its "last 7 days" version too.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/custom.html000066400000000000000000000053411406366436600166040ustar00rootroot00000000000000 Readme for analog -- customising analog [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Customising analog


This is the bulk of the Readme. It tells you all the commands you can give to analog, and what they all do. First there's a list of which is as much as beginners need to read, until they want to do something which isn't listed there, or are curious to find out what they could do.

The following section is a technical (i.e., dull but important) one on the

Then there's documentation on all the configuration commands in the following categories. Analog has over 200 configuration commands and over 40 command line options, so sometimes these sections turn into lists of commands. But here's where you find out everything you can do with analog.

Later there's an index of all the commands and topics, and also a quick reference containing the syntax of all the commands and examples.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/debug.html000066400000000000000000000160331406366436600163600ustar00rootroot00000000000000 Readme for analog -- debugging [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Debugging


This section lists commands to help you debug analog, if you think it's going wrong. There's another section later which lists all the errors and warnings which analog can generate, and what they all mean, and another section which tells you how to report bugs.

First, remember the option we mentioned before, to list the current settings of all of analog's variables. To get this, just put -settings on the command line, or SETTINGS ON in one of your configuration files, along with your other commands. Then analog will produce the list of settings instead of running in the normal way.


There are commands which control how much debugging information and warning information analog gives out while it is running. By default you get all the warnings and no debugging, but you can change this by means of the commands DEBUG and WARNINGS. If you say
DEBUG ON
you get all the debugging. (And DEBUG OFF turns it all off.) You can also get just certain categories of debugging. The categories are
C
list all corrupt logfile lines
D
information about DNS lookups
F
information about file opening and closing
S
summary information about each logfile when it's closed
U
list unknown domains
V
list hosts without a domain (i.e., without a dot)
So, for example, the command
DEBUG FS
would give you information about file opening and closing, and what was in each logfile, but none of the other sorts of debugging. Each line of debugging information is prepended with its code letter. You can also specify
DEBUG +CD
to add C and D category debugging to whatever you've already got, and
DEBUG -CD
to remove those two categories.

There is also a command line abbreviation for this command. Use +V (for ON), -V (for OFF), +VFS (to select exactly options FS), +V+FS (to add those options), and +V-FS (to remove them).

The C messages actually come on two lines. The first line gives the logfile line which was corrupt. The second line indicates where analog first noticed a problem. (This is usually, but not always, close to where the problem actually was!) In fact, each "line" of the message may spread over more than one line on your screen, and you have to be careful to take that into account when trying to find out where the logfile line was corrupt.


The WARNINGS command acts similarly to the DEBUG command (see the syntax above). By default all warnings are on. As well as WARNINGS ON and WARNINGS OFF, you can turn warnings on and off in the following categories.
C
invalid configuration specified
D
dubious configuration specified
E
ERRFILE command used (see below)
F
files missing or corrupt
L
apparent problems in logfiles
M
possible problems in logfiles
R
turning off empty reports
See the section on Errors and warnings for more details about the various categories. Again, warnings are printed with their code letters.

Warnings range from the probably harmless to the usually serious. So it is generally not a good idea to turn all warnings off, or you might miss some important information. If you want to ignore a particular warning, turn just its category off.

There is also a command line version of the WARNINGS command, looking like +q, -q, +q<options>, +q+<options> or +q-<options>. (The syntax is the same as the +V command above.)


By default all these messages go to standard error, which is normally just the screen. But you can change that by means of a command like
ERRFILE newfile
If you do this, analog will warn you that it's redirecting the messages, just so that you don't miss any. To change back to standard error, use
ERRFILE stderr
The ERRFILE command will also erase any previous contents of that file. (So don't use the same ERRFILE command twice, or you may lose messages!) If the name of the ERRFILE doesn't include a directory, it will be put in whichever directory was specified for that purpose when the program was compiled. For example, on Windows it would be in the same folder as the analog executable.
There is a command called ERRLINELENGTH to tell analog the width of screen you want these messages to fit in. As a special case,
ERRLINELENGTH 0
specifies an unlimited screen width.
There is one more command which is useful when trying to debug analog. If you give the command
PROGRESSFREQ 20000  # say
then analog will produce a little message after every 20,000 lines it reads from the logfile. (This message is sent to the screen and to the ERRFILE.) This is useful to determine whether the program has really stopped or (as is more likely) is just being slow for some reason (such as using DNS lookups).
There is just one more section about analog's configuration commands and command line arguments, but it's a rather long one, on the form interface. (This is a way of running analog by selecting options from a web page.) You might prefer to go straight onto the section on What the results mean.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/defns.html000066400000000000000000000165211406366436600163730ustar00rootroot00000000000000 Readme for analog -- analog's definitions [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Analog's definitions


This section describes how analog defines its terms, and exactly what is counted in each category. It gets a bit technical at times -- if you're just trying to understand the output, I recommend you read the section on Analog's reports first.

We start with some basic definitions. The host is the computer which has asked you for a file (often called the "client"). The file might be a page (i.e., an HTML document) or it might be something else, such as an image. By default filenames ending in (case insensitive) .html, .htm, or / count as pages, but you can tell analog to count any file as a page with the PAGEINCLUDE command.

The total requests counts all the files which have been requested, including pages, graphics, etc. (Some people call this the number of hits, but that word is also used in other ways by other people, so I avoid it). The requests for pages obviously only counts pages. One user can generate many requests by requesting lots of different files, or the same file many times.

The referrer for a request is the place that the user (or his computer) heard about your file from. If he followed a link to reach a page, it will be the previous page. In the case of a graphic on a page, the referrer will be the page containing the graphic.

Analog's kilobytes are 1024 bytes. (If you prefer to call these kibibytes, you can do so by editing your language file.)


Analog recognises four categories of request, based on the HTTP status code of the request. You can see the total number of requests for each status code, and what the codes mean, in the Status Code Report. (Or see the HTTP spec for a detailed description.)

First, successful requests are those with HTTP status codes in the 200's (where the document was returned) or with code 304 (where the document was requested but was not needed because it had not been recently modified and the user could use a cached copy). (Actually, you can configure code 304 to be a redirected request instead of a successful request with the 304ISSUCCESS command.) Successful requests for pages refers to those lines on which the file requested was named and was a page.

Redirected requests are those with other codes in the 300's, indicating that the user was directed to a different file instead. The most common cause of these requests is that the user has incorrectly requested a directory name without the trailing slash. The server replies with a redirection ("you probably mean the following") and the user then makes a second connection to get the correct document (although usually the browser does it automatically without the user's intervention or knowledge). The other common cause of redirected requests is their use as "click-thru" advertising banners.

Failed requests are those with codes in the 400's (error in request) or 500's (server error). They come about for a variety of reasons, but the most common are when the requested file is not found or is read-protected.

Finally, requests returning informational status code are those with status codes in the 100's. These are very rare at the moment.

There are a few other types of logfile lines listed in the General Summary. Lines without status code refers to those logfile lines without a status code, and the successful requests in the General Summary only counts the ones with a status code: except if the line contains the name of the file requested, and the filename is being counted (not starred in the LOGFORMAT), then it's counted as a success. Unwanted logfile entries are ones which you have explicitly excluded. Finally, corrupt logfile lines are those which analog didn't manage to parse. (The number given is the number of unparseable lines in the whole logfile, even if the rest of the analysis is restricted to a small part of the logfile, because analog doesn't know whether a line would have been wanted if it couldn't parse it! You can list all the corrupt lines by turning debugging on.)


Most reports only include successful requests in calculating the number of requests, requests for pages, bytes, and last date: unless, of course, the report is a redirection or failure report. There is a further restriction on the time reports, the Status Code Report, the Processing Time Report, the File Size Report, and the bytes lines in the General Summary: the logfile line must also contain the name of the file requested, and the filename must be being counted. This is necessary to stop double counting if the server uses separate logs.

The "not listed" line at the bottom of each of the non-time reports represents those items which were not listed because they were below the floor for the report. (It doesn't include items which you've explicitly excluded.)

The figures in parentheses in the General Summary are for the last seven days: either the seven days before the TO time, or if no TO time is given, the seven days before the time of the program start. (It would be nicer to use the seven days before the last time in the logfile, but we don't know when this is until we've read the whole logfile, and by then it's too late.) The figures for the last seven days are not included if all, or none, of the requests fall in the last seven days.

In the Domain Report, "domain not given" means that the hostname did not contain a dot. "Unknown domain" means that it did contain a dot, but that the domain name was not in the domains file (or that the domains file could not be read). The hosts and domains concerned can be listed by turning debugging on.

In the Operating System Report, which browsers count as robots is controlled by the ROBOTINCLUDE and ROBOTEXCLUDE commands.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/dns.html000066400000000000000000000146701406366436600160630ustar00rootroot00000000000000 Readme for analog -- DNS lookups [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: DNS lookups


Sometimes a logfile contains numerical IP addresses - like 131.111.20.59 - for the computers that have visited you, instead of names like lion.statslab.cam.ac.uk. This section describes how you can get analog to do so-called DNS lookups to translate these numbers into names. This relies on you having a suitably configured system: DNS lookups are not possible on some systems.

First a note. Because analog's DNS lookups use only standard, platform-independent code, they are slower than lookups optimised for particular platforms. (This is especially true on platforms without the DNSTIMEOUT command described below.) So if you are doing DNS lookups regularly, you will probably be better off using one of the many specialist DNS lookup programs which you can find on the helper applications page.


DNS lookups are typically rather slow, because your computer has to ask across the network to find out the names of the hosts. For this reason, analog saves the addresses it has looked up in a file, so that you don't have to look them up again next time. The file is specified by a command like
DNSFILE dnscache
You will still need to use one of the commands in the next paragraph in order to actually use the file. If the name of the DNSFILE doesn't include a directory, it will be looked for wherever analog expects to find its DNS files. (This location is built in when the program is compiled.) For example, on Windows it would be in the same folder as the analog executable.

There are four possible levels of DNS activity. If you specify DNS NONE, no numerical addresses will be resolved. If you specify DNS READ, then analog will read the DNS file for old lookups, but no new lookups will take place. This mode is suitable if you are running analog while not connected to the internet. The third level is DNS WRITE. This reads the old file, looks up new addresses, and adds them to the file. (The first time you use DNS WRITE, you will get a missing-file warning as it tries to read the old file, but it will exist the next time.) The final level is DNS LOOKUP. This reads the old file and looks up new addresses, but doesn't add the new addresses to the file, so that they will not be remembered for next time. This is not normally a level that the user wants to specify, but analog will switch to this the behaviour if DNS WRITE fails for some reason.

If you are using a HOSTEXCLUDE command, you need to exclude the numerical IP address if it can't be resolved, or the name if it can. In other words, exclude whatever the host is known as in the Host Report.


If two copies of analog were allowed to write to the DNS file at the same time, the file could become corrupted. So when analog is running in DNS WRITE mode, it creates a lock file which tells other copies of analog to back off to DNS LOOKUP. You can change the location of that file with the command
DNSLOCKFILE filename
Of course you should make sure that all copies of analog use the same lock file, at least if they have the same DNS file! Again, if the name of the DNSLOCKFILE doesn't include a directory, it will put in a canonical location, specified when the program was compiled.

If analog crashes, it may not clear up the lock file, so in that case you may have to delete it yourself. (Disclaimer: on some systems, race conditions may occasionally thwart this mechanism, but this is very unlikely.)

Analog never deletes anything from the DNS file: this means that the DNS file will grow, and can become quite large. You should delete the top of it every so often. There is a program on the helper applications page to help you do this more systematically.

There are two parameters which say how long to trust old lookups for. If you set

DNSGOODHOURS 672
for example, then successful lookups will be checked again after 672 hours (4 weeks). You can also set the DNSBADHOURS similarly, to check failed lookups again after a certain time. By default the DNSBADHOURS is 336 (2 weeks) and the DNSGOODHOURS is a very large number (so that successful lookups are never rechecked, as long as they remain in the DNS file).

On some platforms (maybe only Unix) you can set a parameter called DNSTIMEOUT. If the DNS server still hasn't returned a reply within this many seconds, then the lookup will be aborted. However, this feature is off by default, because it breaks DNS lookups on many platforms. (The symptom is that the first few lookups succeed, but after a while, all lookups fail). If you try it, monitor it, and turn it off again if it causes problems.

Finally, there is a debugging command, DEBUG +D to show all the DNS lookups that analog is making.


Normally you need never write a DNS file: you should rely on analog to do it for you. But in case you need to know, the format of the file is
timestamp IP_address name
where the timestamp is the number of minutes since the beginning of 1970, GMT (i.e., "Unix time" divided by 60), and the name is just * if the address couldn't be resolved.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/domfile.html000066400000000000000000000103001406366436600167000ustar00rootroot00000000000000 Readme for analog -- the domains file [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: The domains file


The domains file tells analog which country is represented by each domain. You can tell analog where to find your domains file with a command like
DOMAINSFILE mydomains.tab
Normally you don't need this command, because if there is a domains file in your language, it should be selected automatically. But the DOMAINSFILE command can be useful if you want to use a domains file in a new language, for example. If the name of the file doesn't include a directory, it will be looked for wherever analog normally expects to find its language files.

You should have got a domains file with the program, but if you've lost it, you can download one from http://www.analog.cx/ukdom.tab. It should contain on each line a domain code, followed by a number, followed by its location, like this:

ad  2  Andorra
ae  3  United Arab Emirates
[...]
It does not need to be in alphabetical order, though humans may prefer it that way. Subdomains do not go in the domains file: you can list them in the Domain Report using the SUBDOMAIN command.
The number beside each domain represents how many levels deep an "organisation" is considered to be, for the purposes of the Organisation Report. For example, consider the hostname www.sta.ad. The organisation is sta.ad, at the second level, so Andorra has a 2 in the above list. But in the UAE, a host looks like www.economy.gov.ae. There is an extra level in the hierarchy, so the UAE has its organisations at level 3.

There are some problems with this. A few countries have organisations at both levels 2 and 3 (for example asaspace.at and univie.ac.at). In those cases I've favoured false negatives over false positives by using the bigger number. (Also there is a correction which will make most of them right again: the first component is always removed from a hostname of three or more components.) For other countries, I don't have enough information to tell what the level should be. I've just given those a 1. Do let me know if you have any more information, or corrections, for the numbers.

For numerical addresses, the organisation is considered to be at level 2 if the first component is 24, 61-68, 80-81 or 128-255; and otherwise at level 1. Again this is only an approximation -- for example, many organisations use two adjacent blocks of numbers, or subdivided blocks -- but it's the best we can do without looking up every address we come across. (Note that you can always see more detail using the SUBORG command).


Only domains which occur in the domains file will get their own line in the Domain Report: the rest are probably spurious, and will be accumulated together as "unknown domains". If analog couldn't find the domains file, then all the domains will be unknown. If you have debugging turned on, you can see which domains were unknown.

Lines starting with a hash (#) in the domains file are considered to be comments.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/errors.html000066400000000000000000000407271406366436600166150ustar00rootroot00000000000000 Readme for analog -- errors and warnings [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Errors and warnings


This section lists all the errors and warnings which analog can produce, together with a short explanation.

First, you should understand the difference between a crash, an error, a warning, and a debugging message. First, a crash is when analog exits prematurely, without producing the whole output file. The system might give a message, but analog will not give one of its own messages. Analog should never crash. If it does crash, please tell me about it.

An error is something which stops analog finishing its job. Whenever an error is detected, analog gives a message starting something like analog: Fatal error: and will then tell you what type of thing went wrong before quitting.

A warning is a problem which is not fatal to analog: it will keep on with its processing. These vary from the possibly serious, such as files which could not be found, to purely informational. They produce a message starting analog: Warning. You can turn warnings off using the WARNINGS command.

Finally, a debugging message gives information on the state of the program. They just begin with a single code letter followed by a colon. You don't get any debugging messages unless you've asked for them.

If you want to send these messages to a file instead of to the screen, you can use the ERRFILE command. To tell analog the width of your screen for these messages, you can use the ERRLINELENGTH command.

Now I shall describe all the possible errors and warnings in detail.


Errors

Ran out of memory: cannot continue
Analog ran out of memory. Try increasing the memory available to the process, if your operating system will allow it, or using the LOWMEM commands.
Cannot ignore mandatory configuration file
See the section in the Readme on the mandatory configuration file.
Can't find language file
Language file too short
Language file too long
Language file contains excessively long lines
Analog can't run without a well-formed language file. See the documentation on language files.
Attempted to read more than 50 configuration files
The most likely explanation for this is that you have accidentally created a loop using the CONFIGFILE command, for example if a configuration file includes itself.
Incorrect default given in anlghead.h
Default given in anlghead.h too short
If you've compiled your own version, and you've specified an incorrect configuration in the file anlghead.h, analog gives up to allow you to fix it.
Failed to open output file for writing
Analog couldn't create, or couldn't write to, the output file you specified.
Cache output file already exists: won't overwrite
Analog won't overwrite an old cache file. You must move or delete it yourself first.
OUTFILE and CACHEOUTFILE are the same
OUTFILE and CACHEOUTFILE both set to stdout
This can't be what you wanted, because one would overwrite the other.
OUTPUT NONE and CACHEOUTFILE none selected
You requested no output.
OUTPUT LATEX only available with US-ASCII, ISO-8859-1 and ISO-8859-2 character sets
The LaTeX output style only works with certain European languages because the standard LaTeX distribution doesn't contain the characters for other languages.

Warnings

Remember that warnings are not fatal: in fact some are rarely even serious. You can turn them off using the WARNINGS command. The possible warnings come in several different categories, shown by a letter in the warning message. The categories are as follows.
C
invalid configuration specified
D
dubious configuration specified
E
ERRFILE command used
F
files missing or corrupt
G
corrupt lines in support files
L
apparent problems in logfiles
M
possible problems in logfiles
R
turning off empty reports

Category C

This category indicates an incorrect configuration. Analog will either ignore what you said, or try and do the best it can with it. There are too many warnings in this category to list completely. You will have to consult the documentation for the particular configuration command that gave an error. If you get an error for a command which used to work in a previous version of analog, have a look in the section Updating from older versions.

Category D

This is for configurations which might be intended, but which look suspicious. Analog will not override what you've specified in this case.
LOGFORMAT with no subsequent logfile
You have specified a LOGFORMAT command, but no subsequent logfile to which it could be applied. Most likely you put the LOGFORMAT after the LOGFILE command. You must put the LOGFORMAT before the LOGFILE command or use DEFAULTLOGFORMAT instead. See the section on Specifying a log format for more details.
Offset not a multiple of 30
Offset more than 25 hours
The time offsets are meant to be for correcting between differences in time zones. These differences are usually multiples of 30 minutes between -25 and +25 hours. Maybe you specified the offset in hours instead of minutes by mistake, or something like that.
FROM time is later than the present
Usually this will mean that no entries are counted. Analog doesn't try and correct it in case the clock on your computer or your server is wrong -- but you would be better using TIMEOFFSET or LOGTIMEOFFSET to correct those clocks.
SORTBY doesn't match FLOOR
SORTBY doesn't match SUBSORTBY (or FLOOR/SUBFLOOR)
SORTBY (or FLOOR or GRAPH) isn't included in COLS
Within one report, it's helpful to your readers to have the sort methods and the floors compatible, and all included in the COLS. (See the section on Non-time reports).
Column N with SORTBY ALPHABETICAL/RANDOM
Numbering off the items when they're not in order of busyness is probably a mistake.
Time reports have not all got same value of BACK
It's usually helpful to have all the time reports running in the same direction.
Report contains no COLS
You've got an empty COLS list for one report, so you'll just get a list of names, not any information about them.
LOWMEM 3 prevents that item being cached
You're making a cache file, but one item is not being recorded because of a LOWMEM command, and will therefore not be saved in the cache file.

Category E

There is only one warning in this category.
Redirecting future diagnostic messages
You've used an ERRFILE command to change the destination of errors, warnings, debugging and PROGRESSFREQ diagnostics. This is just warning you so that you don't miss any messages.

Category F

This category is for diagnosing files which couldn't be opened or read successfully. These can be serious, but most of the messages should be self-explanatory. There are a few worth mentioning specifically.
Can't auto-detect format of logfile
The LOGFORMAT is set to automatic detection, but the first line of the logfile is not in any of the standard formats. This error can often be generated when you try and specify your own LOGFORMAT but put it after the LOGFILE command so that it is not in effect for that logfile.
Logfile with ambiguous dates
Some servers, notably IIS and WebSite, record dates in their logfiles according to local conventions. Then if analog encounters 2/1/99, for example, it doesn't know whether it's the 2nd January or 1st February. This problem, and what to do about it, is described in more detail in the section on Choosing a logfile.
Logfile seems to be in Microsoft format
The most common cause of this message is that your IIS logfile uses local conventions for listing dates which analog doesn't know about -- e.g. 25.12.98 instead of 25/12/98. Again, see the section on Choosing a logfile for help.
Ignoring corrupt format line in logfile
The format line within a W3 extended log, Netscape log or WebSTAR log is invalid in some way. Analog will always tell you what's wrong with it. The most common problem is that the date only appears at the top of the logfile, not on every line, which is not allowed. The reason for this, and what to do about it, are in the section on Choosing a logfile.
Failed to open domains file
In this case, all domains will be counted as "unknown domains".
Failed to open DNS input file
The first time you use DNS lookups, you don't have a DNS cache file, so you get this warning. Assuming you are using DNS WRITE, the message will go away next time you run analog.
DNS lock file already exists
To stop two copies of analog trying to write the DNS file at the same time, an empty "lock file" is created, which tells the second copy of analog to use DNS LOOKUP instead of DNS WRITE. If analog crashes, it may not delete its lock file. So if you get the "already exists" message even though no other copy of analog is running, you may need to delete the lock file yourself.

Category G

This category is used when there is a bad line in the DNS file, domains file or report descriptions file. Analog will still use the rest of the file. All the messages should be self-explanatory.

Category L

When analog finishes reading a logfile, it checks whether there might have been something wrong with it.
Large number of corrupt lines
This could indicate a problem with the logfile, or with the LOGFORMAT specification. The possible causes are described in the section on Choosing a logfile. If you specify DEBUG ON, analog will report where each line was corrupt.
Logfiles overlap: possible double counting
This means that two logfiles which were counting the same type of item overlapped in time. Because it's only based on the time period of the logfiles, not the actual entries, this may or may not indicate a genuine problem. It is a problem if you read the same logfile twice. Or maybe you used the cache file feature incorrectly. Or maybe your web server produces several logfiles, and your LOGFORMAT specification should have told analog to ignore some of the items in some of the logfiles. It is not a problem if the logfiles are in fact completely disjoint; for example if you analyse logfiles from two different virtual hosts. In this case, the statistics produced will still be correct.

Category M

This category is for warnings about logfile formats which might make analog produce unexpected results.
Logfile contains lines with no [whatevers], which are being filtered
This is usually harmless. It is perhaps best explained by example. Suppose you are excluding certain files from the analysis, but that you are also analysing a browser log which just contains information about the browsers used, not which files they read. Then we can't exclude the browsers which read the excluded files, because we don't know which they were, so all browsers will be included.
Logfile contains lines with no file names (or bytes): page (or byte) counts may be low
If a logfile line doesn't contain a file name, analog will assume that the request wasn't for a page. Similarly, if it doesn't give the number of bytes transferred, analog will make the bytes zero. So the number of page requests or bytes credited to the other items on that line will then be too low.
Old-style cache file doesn't contain data on first-request times of items; so these may be overestimated
Cache files now contain the first-request time of each item. But if you read a cache file from an older version of analog, this data will not have been recorded, and so the last-request time will be used instead.
Cache file doesn't contain last-seven-day statistics
It is impossible for cache files to record the number of requests in the last 7 days, because the data would be wrong at the time the cache file was read.

Category R

This is used when analog turns off an empty report. This could be because none of the relevant items were included in any of the logfiles, or perhaps beacause a LOWMEM command stopped them being recorded. It is also used when analog turns off a pie chart which would have contained only one wedge.

Broken Pipe

This warning is not generated by analog, but it can occur when analog decides that it doesn't need a logfile which it's uncompressing, and so doesn't finish reading it. It's harmless.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/faq.html000066400000000000000000001447511406366436600160520ustar00rootroot00000000000000 Readme for analog -- FAQ [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Frequently asked questions


This list is divided into six sections:
  1. Getting Started
  2. Basic Configuration
  3. Understanding the Output
  4. Advanced Usage
  5. Form Interface
  6. Design Decisions

List of Questions

  1. Getting Started
    See also Starting to use analog.
    1. Analog doesn't have a setup.exe.
    2. Analog just flashes up a DOS window and then quits.
    3. When I try and edit analog.cfg, Windows asks me which program I want to use to open that file.
    4. When I try and compile analog, it gives me an error (e.g. on SunOS 5).
    5. Analog didn't write the logfile when I ran it.
    6. Analog won't read extended logfiles generated by IIS.
      or What does "time without date" mean?
    7. What does "Logfile with ambiguous dates" mean?
    8. I tried to analyse a logfile, but I just got "Large number of corrupt lines."
    9. Analog won't read logfiles bigger than 2GB.
    10. What does this error message mean?
    11. I tried to run analog from my browser, but it didn't work.

  2. Basic Configuration
    1. I want to analyse several logfiles together.
    2. I want to make several different statistics pages. Do I have to install several copies of analog?
    3. My analog.cfg included lots of CONFIGFILE commands, but only one output page was produced.
    4. Why does the Daily Report only show the last six weeks?
    5. Why do the time reports all list 0 requests?
      or Why are there no bar charts in the time reports?
    6. How do I get the Request Report to list files with fewer than 20 requests?
    7. How do I ignore accesses from my site?
    8. How do I ignore internal referrers in the Referrer Report?
    9. How do I get information on just my pages, not everybody's?
    10. How do I list subdirectories not just top-level directories in the Directory Report?
    11. How do I list minor browser versions in the Browser Summary?
    12. I want to see the full hostnames in the Organisation Report.
    13. I used the command "DIREXCLUDE /mydir/", but files in that directory were still listed.
    14. I used the command "FILEEXCLUDE /cgi-bin/script.pl", but that file was still listed in the Request Report.
    15. I used the command "IMAGEDIR C:\analog\images\", but I only got broken images.
    16. I want to put several output pages in the same directory, but the pie charts overwrite each other.
    17. I want a configuration file with all of the possible configuration commands in it.
    18. I want to see your configuration file.
    19. Does the order of the commands matter in the configuration file?
    20. Why are my browser and referrer reports empty?
    21. Why isn't the Referrer Report sorted properly?
    22. I want to list (or not to list) referrers with their search arguments in the Referrer Report.
    23. Why are my click-thru's (or CGI scripts) not listed in the Request Report?
    24. I can't find /script.pl?q=1 in the Request Report.
    25. Why can't I have P in the REQCOLS, REQSORTBY or REQFLOOR?
    26. Can I find out which files each referrer pointed to?
      or Can I find out which files each host has read?
      or Can I find out which hosts have read each file?
      or Can I find out the number of hosts visiting on each day?
      or lots of similar questions.
    27. Can SETTINGS ON produce a configuration file instead of an English list of settings?
    28. I get the message "logfiles overlap" even though the two logfiles contain completely separate requests.
    29. Can I count the individual visitors, or visits, to my site?
      or Can I see how long visitors spend on my site?
    30. Can I change the way dates are formatted in the output?
      or Can I change some of the phrases in the output?
    31. How can I change the background colour of my output?
      or How can I make the output prettier?

  3. Understanding the Output
    See also What the results mean.
    1. How do I find out the number of hits from your data?
    2. Why are there so many referrers from my own site?
    3. The analysis covers exactly a week, but the figures for the last seven days don't agree with the totals.
    4. I only have 240 requests in total. Why does analog think there are 840 requests per week?
    5. The pie charts don't agree with the figures in the tables.
    6. Why doesn't analog agree with the counter on my page?
    7. Why doesn't analog agree with grepping the logfile?
    8. Why doesn't analog agree with my other logfile analysis program?
    9. Why do I only get "unresolved numerical addresses" in the Domain Report?
    10. Why are directories listed in the Request Report?
    11. When someone reads one of my PDF files, it scores dozens of hits.
    12. Kilobytes should be 1000 bytes, not 1024 bytes.
    13. The Organisation Report doesn't identify organisations correctly.
    14. "Organization" isn't spelled correctly.

  4. Advanced Usage
    1. How can I do such-and-such with a command line option?
    2. I want a list of all command line arguments.
    3. How do I list all numerical subdomains to depth 2 in the Domain Report?
    4. I want to be able to count requests with status code 301 and 302 as successes, so that they appear in the Request Report.
    5. I want to report on a field analog doesn't know about.
    6. Can analog analyse Squid proxy logfiles?
    7. Can analog analyse FTP logfiles?
      or Can analog analyse streaming media logfiles?
    8. Can analog analyse other logfiles, such as mail logs, or the syslog?
    9. How can I run analog automatically every day?
    10. How can I automatically email the results to myself or someone else?
    11. I'm setting up IIS. Which logfile format should I use?
    12. I host lots of virtual domains. How should I set up analog?
    13. Can I make several output pages with just one run of analog?
    14. I ran out of memory when trying to run analog. What can I do?
    15. You're processing 20,000,000 requests in under 10 minutes. Why is mine much slower?
      or Analog appears to stall.
    16. How do I make a link on my page that runs analog?
    17. Do I have to save all my old logfiles?
      or Can analog make statistics from old reports instead of reading the whole logfile again?
    18. Can analog write to a database or spreadsheet?

  5. Form Interface
    See also Form troubleshooting.
    1. I couldn't make the form run.
    2. How can I specify different logfiles from the form interface?
    3. My browser showed me anlgform.pl, rather than running it.
    4. Why does the form interface give "Document Returned no Data"?
    5. The images don't appear when running analog from the form interface.
    6. Why do I get some reports that weren't requested on the form?
    7. How do I make a link to anlgform.pl without using anlgform.html?
    8. Is there a form interface not using Perl (e.g. ASP or .exe)?

  6. Design Decisions
    1. Why doesn't the HEADERFILE replace the whole <head> of the output file?
    2. Why don't you just use one image, and scale it with the width and height attributes?
    3. In the XHTML output, why not just put a class= on each <COL> instead of on each cell?
    4. Why doesn't the OUTFILE command automatically create the directory for the output file?
    5. Why not automatically spot robots by whether they request /robots.txt?
    6. Why not just do DNS resolution of the hosts that actually make it into the Host Report?
    7. Couldn't you do the DNS lookups faster with threads?
    8. Why doesn't analog analyse the error_log?
    9. My server lists local names in the logfile. Can you put a common suffix on them automatically?
    10. Can you extrapolate from the current month's partial data to produce a prediction for the whole month, based on the rate so far?
    11. Can you extend the Domain Report to say which US states people visited from?
    12. Please distinguish between the different BSDs in the Operating System Report.
    13. Why not use language codes instead of country codes for the names of the language files?
    14. Why doesn't analog produce statistics on "visits"?
    15. Why don't you sell analog?

A. Getting Started

Most questions in this category are answered in the section entitled Starting to use analog. If you can't get analog running you should look there.
  1. Analog doesn't have a setup.exe.
    No, and it doesn't need one. It's already ready to run! See Starting to use analog under Windows.
  2. Analog just flashes up a DOS window and then quits.
    This is the correct behaviour. It should have created an output page called Report.html. See Starting to use analog under Windows.
  3. When I try and edit analog.cfg, Windows asks me which program I want to use to open that file.
    Use Notepad, or any other plain text editor.
  4. When I try and compile analog, it gives me an error (e.g. on SunOS 5).
    Maybe you need to edit the Makefile. There are some platform-specific notes in the section Starting to use analog on other platforms, and in the Makefile itself.
  5. Analog didn't write the logfile when I ran it.
    Analog doesn't write the logfiles. Your web server writes the logfiles, and analog just reads them. See Starting to use analog.
  6. Analog won't read extended logfiles generated by IIS.
    or What does "time without date" mean?
    By default, IIS writes the date only at the top of the logfile, not on every line. But it doesn't write a new date if the date changes during the logfile, so analog can't tell which date later entries in the log occurred on. More details, and what to do about it, are in the section on Choosing a logfile.
  7. What does "Logfile with ambiguous dates" mean?
    See the section on Errors and warnings.
  8. I tried to analyse a logfile, but I just got "Large number of corrupt lines."
    There are lots of possible reasons for this. You can find them described in the section on Choosing a logfile.
  9. Analog won't read logfiles bigger than 2GB.
    Analog doesn't have any limitation, but there may be a limitation in your OS and/or compiler. Try adding CFLAGS=-D_FILE_OFFSET_BITS=64 to the Makefile before compiling.
  10. What does this error message mean?
    Again, see the section on Errors and warnings.
  11. I tried to run analog from my browser, but it didn't work.
    Analog should not be run as a CGI program, or even put in the folder with your CGI programs, for security reasons. You should use the special CGI program instead.

B. Basic Configuration

Analog has lots of configuration commands, all of which are in the section on Customising analog. Here are some of the most common questions. If your question isn't answered here, you could also try looking in the index.
  1. I want to analyse several logfiles together.
    Just use several LOGFILE commands, or wildcards in the logfile name.
  2. I want to make several different statistics pages. Do I have to install several copies of analog?
    No. Just install it once, and run it with different configuration files. (You do have to run it once per output page though.)
  3. My analog.cfg included lots of CONFIGFILE commands, but only one output page was produced.
    Analog can only produce one output page per run. To produce several reports, you have to run it several times.
  4. Why does the Daily Report only show the last six weeks?
    This is controlled by the DAYREPROWS command.
  5. Why do the time reports all list 0 requests?
    or Why are there no bar charts in the time reports?
    They probably only list 0 requests for pages. Maybe you need to use PAGEINCLUDE to count more files as pages.
  6. How do I get the Request Report to list files with fewer than 20 requests?
    Use the REQFLOOR command, e.g., REQFLOOR 10r to list down to 10 requests. Also, if you want to list all the files not just pages, you may need to use the command REQINCLUDE *
  7. How do I ignore accesses from my site?
    Use the HOSTEXCLUDE command.
  8. How do I ignore internal referrers in the Referrer Report?
    Use the REFREPEXCLUDE command.
  9. How do I get information on just my pages, not everybody's?
    Use the FILEINCLUDE command.
  10. How do I list subdirectories not just top-level directories in the Directory Report?
    SUBDIR */*
  11. How do I list minor browser versions in the Browser Summary?
    Use SUBBROW */*.* (Note that they then appear in the Browser Summary, not the Browser Report).
  12. I want to see the full hostnames in the Organisation Report.
    The full hostnames are listed in the Host Report.
  13. I used the command "DIREXCLUDE /mydir/", but files in that directory were still listed.
    DIREXCLUDE only affects the Directory Report, not the other reports. You want "FILEEXCLUDE /mydir/*" instead.
  14. I used the command "FILEEXCLUDE /cgi-bin/script.pl", but that file was still listed in the Request Report.
    If the file has search arguments, you have to be a bit careful with FILEEXCLUDE. This is described in the section about search arguments.
  15. I used the command "IMAGEDIR C:\analog\images\", but I only got broken images.
    The IMAGEDIR command has to be a URL, not a directory on your disk. (It's just inserted into the <img> tags in the output: have a look at the output and you'll see.) Also this means that the images have to be put in the part of your filespace that has your web files.
  16. I want to put several output pages in the same directory, but the pie charts overwrite each other.
    You have to set the CHARTDIR and LOCALCHARTDIR to be different for each output. (You can still have all the charts in the same directory if the CHARTDIR and LOCALCHARTDIR don't end with slashes.)
  17. I want a configuration file with all of the possible configuration commands in it.
    One is already distributed with the program, in the examples folder.
  18. I want to see your configuration file.
    This is also included in the examples folder in the distribution.
  19. Does the order of the commands matter in the configuration file?
    Only occasionally. If you have two of one command, the later one will generally override the earlier one. Apart from that, commands can come in any order, except that LOGFORMAT and LOGTIMEOFFSET commands must come before the LOGFILE to which they refer.
  20. Why are my browser and referrer reports empty?
    Maybe your logfile doesn't contain any browser and referrer information?
  21. Why isn't the Referrer Report sorted properly?
    It is sorted properly. But search arguments are also listed under the file they belong to, and this interrupts the ordering. If you set the REFARGSFLOOR high enough you won't see the search arguments. Or you can include the N column to make the ordering more obvious.
  22. I want to list (or not to list) referrers with their search arguments in the Referrer Report.
    To see the search arguments you may need to set the REFARGSFLOOR lower. To avoid seeing them, you could set the REFARGSFLOOR higher, or alternatively use the REFARGSEXCLUDE command to ignore them either for all files or just for particular files.
  23. Why are my click-thru's (or CGI scripts) not listed in the Request Report?
    If they cause a redirection to another page, they will be listed in the Redirection Report, rather than the Request Report.
  24. I can't find /script.pl?q=1 in the Request Report.
    If it causes a redirection, it will be in the Redirection Report not the Request Report. But also, you may need to set the REQARGSFLOOR or REDIRARGSFLOOR lower to actually see it.
  25. Why can't I have P in the REQCOLS, REQSORTBY or REQFLOOR?
    The number of page requests doesn't make sense in the Request Report because it's either the same as the number of requests (if the file is a page) or zero (if it isn't). If you want to list only pages in this report, use REQINCLUDE pages instead.
  26. Can I find out which files each referrer pointed to?
    or Can I find out which files each host has read?
    or Can I find out which hosts have read each file?
    or Can I find out the number of hosts visiting on each day?
    or lots of similar questions.
    There are lots of questions like this. They all want analog to cross-reference two sorts of item (e.g. files and referrers in the first example above, or hosts and dates in the last).
    The solution is to use the *INCLUDE commands. For example, to find out which files a particular referrer pointed to, restrict the analysis to just the referrer you're interested in with the REFINCLUDE command. The Request Report will then just list the files reached from that referrer. Similarly, if you're interested in a particular time period, you can focus on just that time by using the FROM and TO commands.
    You do have to run analog once for each report generated. So for the example of referrers, you would have to run it once for each referrer you're interested in. Of course, it would be useful to be able to cross-refererence all the files and referrers at once. But it is fundamental to analog's speed and minimal memory requirement that it only records statistics for each type of item individually, and doesn't record enough information to cross-reference them afterwards.
  27. Can SETTINGS ON produce a configuration file instead of an English list of settings?
    No. But it does tell you which configuration files it read, so you can just get the commands out of them. Or if you want a list of all configuration commands, there is one in the examples directory.
  28. I get the message "logfiles overlap" even though the two logfiles contain completely separate requests.
    This message is based only on the dates of the files, not the contents. If you're sure there is no problem, you can turn it off with the command WARNINGS -L.
  29. Can I count the individual visitors, or visits, to my site?
    or Can I see how long visitors spend on my site?
    No, it's not technically possible, and don't believe any program which tells you it is. See the section on How the web works for details.
  30. Can I change the way dates are formatted in the output?
    or Can I change some of the phrases in the output?
    Yes, by editing the language file.
  31. How can I change the background colour of my output?
    or How can I make the output prettier?
    You can change almost any aspect of the design using a style sheet. There are also some programs on the helper applications page to make completely different output from the analog data.

C. Understanding the Output

Most of the questions in this category are answered in the section on What the results mean, which I really recommend you read if you want to understand what analog is telling you.
  1. How do I find out the number of hits from your data?
    I don't use the word hits, because people use it in different ways, so it's misleading. I use requests for the number of transfers of any type of file (text, graphics, ...), and page requests for the number of transfers of HTML pages. See the section on Analog's definitions for more information.
  2. Why are there so many referrers from my own site?
    These come from all the internal links on your site, and all the graphics on your pages. See the section on How the web works for more information. If you don't want to see them, you can use REFREPEXCLUDE to exclude them.
  3. The analysis covers exactly a week, but the figures for the last seven days don't agree with the totals.
    The figures in parentheses are for the seven days before the time the program was run, unless there is a TO command. They are never for the seven days before the end of the logfile. (Although if you know that the logfile only contains entries up to a certain time, you may want to include a TO command for that time to get the last seven days' data right.)
  4. I only have 240 requests in total. Why does analog think there are 840 requests per week?
    If you have 240 requests in two days, that's a rate of 840 requests per week. Just like if you drove 28 miles in 20 minutes, you'd have driven at 84 miles per hour.
  5. The pie charts don't agree with the figures in the tables.
    Possibly you are looking at out-of-date images. Make sure to reload the images as well as the text. Also, if you are running analog several times, make sure to use CHARTDIR and LOCALCHARTDIR to stop the images for the different runs overwriting each other.
  6. Why doesn't analog agree with the counter on my page?
    There are lots of possible reasons. Do they both start from the same date? Are you just looking at requests for that one page with analog, not for all your other pages and graphics? Also, analog will record all requests to that page; if it's a graphic, your counter will only measure requests from people on graphical browsers that reached that place on the page.
  7. Why doesn't analog agree with grepping the logfile?
    Have you understood what analog includes in its counts? In particular, most reports only list "successful" requests (HTTP status codes 200-209 & 304). A naïve grep would count failures too.
  8. Why doesn't analog agree with my other logfile analysis program?
    Small differences can be put down to different parsing. But if you are seeing large differences, you have to understand what analog counts, and what the other program counts. For example, some programs count HTTP status codes 301 & 302 as successes, whereas I think that to do so gives extremely misleading results.
  9. Why do I only get "unresolved numerical addresses" in the Domain Report?
    Your server only records the numerical IP address of the hosts that contact you, not their names. Read the section about DNS lookups, or turn DNS resolution on in your server.
  10. Why are directories listed in the Request Report?
    They are not directories, they are pages with the same name as the directory. For example, I have both a directory called /analog/ and a page called /analog/ (which happens to be the same as /analog/index.html).
  11. When someone reads one of my PDF files, it scores dozens of hits.
    PDF reading software often downloads a file in small parts, and each part counts as a separate request. This is unavoidable: analog has no way of knowing how many downloads constituted a single document in the reader's mind. The parts may be pages, or some larger amount, and sometimes the software may download the whole document at once. In addition, the user may only want to read part of the document, and so never download the whole thing. As usual, we can only reliably report how many requests there were at the server, not guess what the user did with the file later.
  12. Kilobytes should be 1000 bytes, not 1024 bytes.
    Personally I think that whatever 1024 bytes should have been called originally, it's stupid to try and change half a century of established usage now. But we don't need to argue about it. Analog's kilobytes are 1024 bytes, but if you prefer to call them kibibytes, you can do so by editing your language file.
  13. The Organisation Report doesn't identify organisations correctly.
    The rules I use are described in the section on The domains file. I admit they aren't perfect, but this is because in domains in which organisations aren't all at the same level in the domain hierarchy, there is no way to identify them perfectly without long lists.
  14. "Organization" isn't spelled correctly.
    Yes it is. If you want American spellings, you have to specify
    LANGUAGE US-ENGLISH
    in your configuration file.

D. Advanced Usage

  1. How can I do such-and-such with a command line option?
    Use the +C option to put any configuration command on the command line.
  2. I want a list of all command line arguments.
    There is a list in the index.
  3. How do I list all numerical subdomains to depth 2 in the Domain Report?
    SUBDOMAIN *.* deliberately only lists the top-level numerical subdomains to avoid cluttering the output. SUBDOMAIN *.*.* will work but will list everything else to depth 3. So the best solution is
    SUBDOMAIN 1*.*,2*.*,3*.*,...
  4. I want to be able to count requests with status code 301 and 302 as successes, so that they appear in the Request Report.
    No, you really don't, because that would lead to double counting when a request for /dir (code 301) is redirected to /dir/ (code 200). For CGI scripts etc. look in the Redirection Report instead of the Request Report.
  5. I want to report on a field analog doesn't know about.
    Use the following kludge. Write a LOGFORMAT to declare the field to be a virtual host or a user (whichever you aren't already using). Then edit your language file so that the right text is output.
  6. Can analog analyse Squid proxy logfiles?
    It can analyse Squid's common log format, although Squid uses some extra HTTP status codes which will be rejected as corrupt by analog. But really you want to know different statistics from a proxy log, such as percentage of requests retrieved from cache, and you might be better to use Squid's native format and a tool specifically designed to analyse it such as Calamaris.
  7. Can analog analyse FTP logfiles?
    or Can analog analyse streaming media logfiles?
    Yes. There are some configuration files in the examples directory giving sample LOGFORMAT commands. If you have a server which isn't covered there, you will have to write your own LOGFORMAT.
  8. Can analog analyse other logfiles, such as mail logs, or the syslog?
    Yes and no. Analog is primarily designed as an HTTP logfile analyser. For mail logs, there is a program on the helper applications page to help you. For other logs, you can get some results out by writing your own LOGFORMAT. But analog does make some assumptions about the sort of information it expects on a logfile line, and the further these assumptions are from being met, the harder it will be!
  9. How can I run analog automatically every day?
    This depends on your particular machine. On Unix, you need to run analog as a cron job (see "man cron"). This is my cron command to run it at 1:50am every day:
    50 1 * * * $HOME/bin/analog
    On Windows NT you can do the same with the at command. (It's probably easiest to put it in a batch job; also only an administrator can run at.) On Windows 98, it should be possible with the Task Scheduler, although I haven't tried it. On Windows 95 it's not possible as far as I know.
    On Mac, there are programs called Cron or CronoTask to do this.
  10. How can I automatically email the results to myself or someone else?
    Again, this depends on your operating system. On Unix, it's easy:
    analog +a +O- | mailx -s"Subject" someuser@somewhere.com
    I don't know about other operating systems, but at the worst, you can write the output to a temporary file, and then mail that file.
  11. I'm setting up IIS. Which logfile format should I use?
    The W3C format is probably best. You can turn fields on and off in this format. And it contains all the possible fields which can be logged, which the other formats do not. However, it is important to turn the date field on (it's off by default), not just to log the date once at the top: see the section on problems with logfile formats for why.
  12. I host lots of virtual domains. How should I set up analog?
    There's a How-To which discusses this issue. There's also a file in the examples directory.
  13. Can I make several output pages with just one run of analog?
    Not at the moment. I want to do this in a future version, but it will require some considerable work. However, depending on your which options you want to vary, you may be able to avoid having to read the logfile several times by using cache files. (This is likely to be faster, but more complicated.)
  14. I ran out of memory when trying to run analog. What can I do?
    See the section on Coping with low memory.
  15. You're processing 20,000,000 requests in under 10 minutes. Why is mine much slower?
    or Analog appears to stall.
    If you have DNS lookups on, they are very slow. Otherwise, it probably depends on the speed of your computer and disks, and what other programs are running at the same time. You can use the PROGRESSFREQ command to see if it's really stalled or whether it's just being slow. If you are running out of memory, you might find analog's LOWMEM commands helpful.
  16. How do I make a link on my page that runs analog?
    Link to the anlgform program, with the desired options. But be careful about the load on your server.
  17. Do I have to save all my old logfiles?
    or Can analog make statistics from old reports instead of reading the whole logfile again?
    These questions are answered in the section about Cache files.
  18. Can analog write to a database or spreadsheet?
    Use the computer-readable output style, which can export to CSV. Or if what you really want to do is to run analog again without re-reading the logfiles, read the section about Cache files.

E. Form Interface

There is also a section on troubleshooting in the documentation about the form interface.
  1. I couldn't make the form run.
    Have you made analog work without the form? Have you run anlgform.pl from the command line as explained in the section on troubleshooting?
  2. How can I specify different logfiles from the form interface?
    Just add a new field to the form with name=LOGFILE
  3. My browser showed me anlgform.pl, rather than running it.
    You have to tell the server to execute the CGI program, not just send it out like it would for a normal file. Often this is done by putting it in a special /cgi-bin/ directory.
  4. Why does the form interface give "Document Returned no Data"?
    If it doesn't happen for a while, then probably the server is giving up before the analog process has finished running. Increase the timeout interval on the server.
  5. The images don't appear when running analog from the form interface.
    For the bar charts, you probably need to set the IMAGEDIR, because if the images are in your /cgi-bin/ directory, the server will normally try to execute them instead of just sending them out. Pie charts don't appear unless you configure them specially.
  6. Why do I get some reports that weren't requested on the form?
    If a report is neither included nor excluded on the form, the system default will be used. This will depend on your configuration files and on compile-time settings.
  7. How do I make a link to anlgform.pl without using anlgform.html?
    anlgform.pl accepts the GET or POST methods of form submission. So you can make a link with the arguments passed after a question mark in the usual GET way.
  8. Is there a form interface not using Perl (e.g. ASP or .exe)?
    There is a Windows executable version of the Perl script on the analog helpers page. At the time of writing, I don't know of any ASP version of the anlgform program, but if someone writes one, I'll put it on the analog helpers page too. Warning: Potential authors must understand CGI security issues in general, and the extra issues about what the analog form interface must disallow, or they will open security holes on their system.

F. Design Decisions

or "Why didn't you do it this way?"
  1. Why doesn't the HEADERFILE replace the whole <head> of the output file?
    Because you almost never get valid HTML or XHTML that way. Use a style sheet instead.
  2. Why don't you just use one image, and scale it with the width and height attributes?
    It doesn't work with the BARSTYLE command.
  3. In the XHTML output, why not just put a class= on each <COL> instead of on each cell?
    Because most properties can't be set on columns. For example, you can't set the text colour for a whole column. See the CSS spec.
  4. Why doesn't the OUTFILE command automatically create the directory for the output file?
    Actually, most programs don't do this. It's too easy to create directories in unrelated parts of the filesystem if you make a typo.
  5. Why not automatically spot robots by whether they request /robots.txt?
    It's not reliable. Not all robots request /robots.txt, and not everything that requests /robots.txt is a robot. (Consider a webmaster checking his own /robots.txt, for example.)
  6. Why not just do DNS resolution of the hosts that actually make it into the Host Report?
    There is one theoretical and one practical problem. Theoretically, the problem is that which hosts do make it into the Host Report can change when the DNS lookups have been done. And practically, this wouldn't help identify the busiest countries or organisations, which is usually what you really want to know. However, there is a Perl script on the helper applications page to do this.
  7. Couldn't you do the DNS lookups faster with threads?
    The problem is, the standard commands for DNS lookups are not thread-safe on many platforms, so it would involve a lot of platform-specific code. Also it's technically difficult to coordinate the lookup threads and the main logfile-reading thread. Again, there are programs for specific platforms on the helper applications page.
  8. Why doesn't analog analyse the error_log?
    The error log is intended for humans rather than computers to read. So there is no consistent format: even different versions of the same server have different formats. And there is not much need to analyse it because analog's various failure reports are good enough for almost all purposes.
  9. My server lists local names in the logfile. Can you put a common suffix on them automatically?
    This wouldn't be a good idea by default, because things like "unknown" would get the suffix. You can always add them using HOSTALIAS. (There is an example to accomplish this using regular expressions in the section about aliases.)
  10. Can you extrapolate from the current month's partial data to produce a prediction for the whole month, based on the rate so far?
    No. There are too many problems in trying to produce anything sensible, especially near the beginning of the month. Different days of the week and different times of day cause lots of problems. I would prefer to produce accurate raw data than suspect derived data.
  11. Can you extend the Domain Report to say which US states people visited from?
    No. Some programs pretend to do this, but you can actually only tell which state the computer the person was using is in, which may be quite different from where the user was for ISP's or other large organisations.
  12. Please distinguish between the different BSDs in the Operating System Report.
    Sorry, I know they're different operating systems, but I don't want to introduce any finer granularity. At least, not in the main distribution -- the prepackaged versions for BSD do add this granularity, and this is good.
  13. Why not use language codes instead of country codes for the names of the language files?
    People are more familiar with the country codes, and not all of my languages have language codes anyway. Anyway, the filenames are normally invisible to the user.
  14. Why doesn't analog produce statistics on "visits"?
    See How the Web Works.
  15. Why don't you sell analog?
    I didn't write analog for the money, and I'm happy just to see people use it. Also, by making it open source, lots of people send me ideas and code to include in future versions. How do you think I got all those languages? (Of course, if you want to send me money, or gifts in kind, or even just postcards...).

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/favicon.ico000066400000000000000000000020661406366436600165260ustar00rootroot00000000000000 è&(( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€pˆˆˆˆˆˆˆˆˆˆˆˆˆˆwˆw ÏüüÏÿÿÿÿÿÿÿÿˆwÿÿÿÿùŸ™ùŸŸ™ùˆw ÿŸÿŸÿŸ™ÿŸŸ™ùˆw ÿŸÿŸÿÿÿÿÿŸÿÿðˆwùùùùÿÿÿÿÿŸÿÿðˆw ùù™ùÿüÏÌÿÿÌÿÀˆwùÿŸùÿÿÿÿÿÿÿÿðˆwùÿŸùÿüÏÌüÏüüÀˆw™ùŸ™ŸÿÏüüÏüüpˆwÿÿÿÿÿÿÿÿüÏÌÿÀˆw ÏÌüÏÿŸÿŸüÏüüÀˆwÿÿÿÿÿŸÿŸÿÿÿÿðˆwÏÌüÏùùùùÿÿÌüÀˆwÏÏÿÏùù™ùÿÿÌÿÀˆw ÏüüÏùÿŸùÿÏÌüÀˆwÏÌüÏùÿŸùÿÏÌüÀˆwÿÿÿÿ™ùŸ™Ÿÿÿÿðˆw ÏÌüÏÿÿÿÿÿÿÿÿÀˆw ÏüüÏüüÿÏùÿùÿÀˆw ÏÌüÏÌÿÏÿùÿùÿðˆw ÏÌüÏüüÏÿŸŸŸŸðˆwÿÿÿÿÿÿÿÿŸ™ŸŸðˆw ÏÌüÿÌüÏÿŸùÿŸðˆw ÏÌüÿÌÿÏÿŸùÿŸðˆwÿÏÿÏÌüÏùŸ™ù™ðˆw ÏÌüÏÌüÏÿÿÿÿÿðˆwˆpwwwwwwwwwwwwwwwwwwwwwwwwwwwwp( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿŸŸÿÿÿÿŸŸùùùŸ ùùÿÿùÿð ÿùÿÌÿÿðüÿÿÿÿÏÀÿÿŸŸüÏÀ ÏÿŸŸÿÿðÏùùùüÏÀÿùÿùüÏÀÏÿÿÿÿÿð ÏÌüÏùùðÿÿÿÿùùð ÏüüÿŸŸ ÏÌüÏŸÿanalog-ce-6.0.17/docs/form.html000066400000000000000000000573251406366436600162460ustar00rootroot00000000000000 Readme for analog -- form interface and CGI program [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Form interface and CGI program


The form interface provides an HTML front end to analog, on Unix or Windows platforms (and maybe others). That means that users can select options from a web page, instead of having to create a configuration file.

Important: For security reasons, you must not attempt to run analog itself as a CGI program, or even leave it in the directory or folder with your web files or CGI programs. When the form interface runs analog for you, it checks that analog isn't given any dangerous options. Without this check, your system could be vulnerable to attack.

The form interface is suitable for ordinary users to use, but it needs to be set up by a system administrator or other expert. In order to set it up, you have to be running a web server. You need to know what CGI programs are, where they live on your server, and how to set up their permissions properly. You also need to know how to write HTML forms. I shall assume this level of background knowledge for the rest of this section. And you have to be running Perl 5.001 or later: see Technical details below for other system requirements. (Actually, if you're on Windows and don't have Perl, you can download an executable version of the form interface from the helper applications page.)

Please don't try and set up the form until analog has been set up and is running properly on its own. It just adds another level of complexity to troubleshoot. And unlike analog itself, the form interface will not run "out of the box". You have to read the whole of this section to find out how to set it up safely.

Warning: CGI programs can contain security loopholes which allow an unscrupulous user to harm your system. (If you don't know about this, you shouldn't be running CGI programs at all. Read and understand the World Wide Web Security FAQ and the CGI Security FAQ first.) I have tried to make this form interface safe, but I cannot guarantee it. Even the most carefully-designed CGI programs can accidentally have serious security bugs. And I take no responsibility if anything goes wrong: you use it at your own risk. (See the licence.) Furthermore, you should be aware that unless you take special measures like password protection or limiting anlgform.pl to specific hostnames, setting up the form interface implies making analog executable, and your logfiles analysable, by anyone on the internet. It's usually a bad idea to allow this, because it has obvious negative implications both for privacy and for the load on your system: an attacker can run multiple copies of analog causing a denial-of-service attack. There are more notes on security design in this program towards the end of this section.

The form interface consists of two parts: a form (called anlgform.html) to choose the options, and a cgi program (called anlgform.pl) to pass them to the analog program. Both anlgform.html and anlgform.pl must be configured to your system before they will work at all. There are instructions at the top of both files explaining how to do this.

The form which is distributed with the program should only be regarded as an example form. You can find forms in languages other than English in the lang directory. Or you can write your own if you prefer. In fact you don't actually need the form at all: if you want just to create a link to the cgi program, with the arguments passed after a question mark in the URL in the usual way, then that's fine.


Almost every analog configuration command can be specified on the form, just by including a form element with that name on the form. So, for example, if you wanted to add a field for users to choose a logfile, you could write
Logfile name: <input type=text name="LOGFILE">
or maybe something like
<select name=LOGFILE size=1>
  <option value="/var/log/apache/fred"> Fred's logfile
  <option value="/var/log/apache/jane"> Jane's logfile
</select>

There are a few commands which you can't specify on the form for security or performance reasons. The full list is *LOGFORMAT, LANGFILE, DESCFILE, HEADERFILE, FOOTERFILE, UNCOMPRESS, OUTFILE, CACHEOUTFILE, ERRFILE, LOCALCHARTDIR, DNS and SETTINGS; and the person setting up the form can add more. See the security notes below for the reasons for these exclusions, and for some more commands you might want to add to the forbidden list. You can, if you prefer, specify the commands which are allowed, rather than those which are forbidden.


Some commands are most conveniently specified in two halves. First, there are commands which take two arguments (for example ALIASes or LOGFILE). You can cope with these by sending two commands from the form, called COMMAND1 and COMMAND2. For example,
Alias this file: <input type=text name="FILEALIAS1">
To this one: <input type=text name="FILEALIAS2">
You can only specify one such pair this way, so there's no way to specify several of the same ALIAS, for example. Only the last COMMAND1 and the last COMMAND2 you specify count.

Then there are FLOOR commands. To avoid users of the form having to know the syntax of these commands, you can if you want specify them in two halves, FLOORA and FLOORB, and they will be stuck together. For example, the form distributed with the program specifies

<br>Include all domains with at least
<input type=TEXT name="DOMFLOORA" maxlength=6 size=6>
<select name="DOMFLOORB">
  <option value=r>requests
  <option value=p>requests for pages
  <option value=b selected>bytes
</select>
If DOMFLOORA contains 5% and DOMFLOORB contains r, then DOMFLOOR 5%r will be sent to the program. (Or DOMFLOORA=5 and DOMFLOORB=%r would work too, if you chose to present the form that way.)
There are a couple of extra non-analog commands which can be sent from the form. First, if the option qv=1 is set, then analog is not run, but a list of the configuration commands which would have been sent to analog is printed instead. This is useful for checking that the CGI program is working properly. It can also allow users to produce a configuration file from form settings.

Secondly, you can specify other configuration files to be included at specific times. When analog is called by the CGI program, it first processes the default configuration file as usual. Then it processes any configuration file specified by an option with name cg. Then it processes all the other commands which the CGI program specifies. After that, it processes any configuration file specified by an option with name cm. Finally, it processes the mandatory configuration file as usual. (You may therefore want two copies of analog, one for form use and one for non-form use, with different configuration files compiled in.) Note that the commands in the default and mandatory configuration files will contribute to the configuration: some of them may even override options specified on the form. For example, if the default configuration file contains an INCLUDE command, this may cause INCLUDE and EXCLUDE commands specified on the form to behave unexpectedly.


anlgform.pl usually sends the commands to analog in the order in which it received them, which should be the same as the order they occurred in the form. But there are some exceptions. First, all commands of the same name are grouped together. So an interleaved sequence of INCLUDEs and EXCLUDEs won't work, for example. Secondly, even though the names of commands are case-insensitive, commands of the same name but in different cases may come in the wrong order. Keep them in the same case! Thirdly, WARNINGS and LOGTIMEOFFSET are sent first (and thus the LOGTIMEOFFSET applies to any logfiles specified on the form).

There are a couple of commands which the form always sets. These may override what you have set elsewhere. First, it sets either DNS READ (if a DNSFILE is set on the form) or DNS NONE (otherwise). Do not attempt to override this -- not only will you get timeout problems, but an attacker can then write to any file by setting DNSFILE.

The second command which the form always sets is WARNINGS FL, so that the less important warnings don't fill up your server's error log. You can override this by sending an explicit WARNINGS command from the form. And thirdly, it sets DEBUG -C to avoid filling up the error log if the LOGFORMAT is incorrectly configured: this can't be overridden from the form, only from the mandatory configuration file.

You won't get pie charts on the form unless you set a CHARTDIR and LOCALCHARTDIR in your default configuration file (LOCALCHARTDIR is disabled from the form for security reasons). And even if you do this, there will be a problem if two users try and run the form interface at the same time, because they will be trying to write the same images, so they may see broken images or each other's charts.

There is one small point about compressed logfiles. For security reasons, when using the form interface you need to specify the full pathname to the uncompression command in the UNCOMPRESS command in your configuration file.

Again for security reasons, analog checks the input from configuration commands more carefully when using the form interface before outputting it. One side-effect of this is that the JAPANESE-JIS character set won't work. Use one of the other Japanese character sets instead.


Form troubleshooting

Here is what to do if you are having problems setting up the form interface.

First, does analog run properly on its own without anlgform?

Next, you can run anlgform.pl from the (DOS or Unix) command line. This is good enough to debug most problems. You can specify options in pairs like this:

anlgform.pl qv=1 LOGFILE=/some/log REQINCLUDE=pages
If you include qv=1 in the argument list as above, you will see what anlgform.pl is trying to send to analog. If you don't include qv=1, anlgform.pl will try and run analog.

If it still doesn't work, check the following points:

  1. Have you edited anlgform.pl and anlgform.html as instructed at the top of those files?
  2. Do other CGI programs work on your server? Is anlgform.pl in the right place to be recognised as a CGI program by the server?
  3. Look in the server's error log for clues. You might want to set WARNINGS ON before you do this, because by default only warnings in categories F and L are reported.
  4. Sometimes it's helpful to set the ERRFILE in your analog configuration file (it won't work from the form) to catch any errors and warnings which may be getting lost. This is especially true on IIS which incorrectly sends errors to the browser instead of to an error log. If you are using Internet Explorer you will probably also need to disable the "friendly" error messages so that you can see the actual error message.
  5. Are all relevant files (analog itself, logfiles, configuration files, auxiliary files such as domain files...) executable/readable by your web server?
  6. If some form options don't seem to take effect, then check whether they are being overridden by a command in a configuration file. (Although SETTINGS is forbidden from the form, you might find it useful to set it in your default configuration file.)
  7. If you get a long wait, then no data returned, the server is probably timing out the request before analog has finished. The remedy is to increase the timeout interval.
  8. As explained above, the form always sets DNS READ or DNS NONE, WARNINGS FL, and DEBUG -C, overriding your default configuration file.
  9. Again as explained above, pie charts may not appear or may appear wrongly.
  10. Again as explained above, uncompressing of compressed logfiles doesn't work unless you use the full pathname in the UNCOMPRESS command.
  11. And once again as explained above, the JAPANESE-JIS character set won't work from the form interface.

Security notes

As I said above, CGI programs can often contain security loopholes. (See the World Wide Web Security FAQ and the CGI Security FAQ for more on this.) Although I don't guarantee that the form interface is safe, I have done my best to make it so. Here I shall explain my design decisions. Comments on them are of course welcome: if they need to remain confidential, you can email me privately at analog-author@lists.meer.net.

First, you should think about who can run the form interface. Unless you take special measures like password protection or limiting anlgform.pl to specific hostnames, adding the form interface to your site implies making analog executable, and your logfiles analysable, by anyone on the internet, as often as they want. It's usually a bad idea to allow this, because of the obvious concerns both about privacy and about the load on your system. Unless you limit the total CPU available to any analog processes, it is easy for an attacker to run multiple copies of analog, causing a denial-of-service attack.

Certain commands are ignored by anlgform.pl and not passed to analog. The list of them can be found at the top of anlgform.pl. Here are the reasons for them. HEADERFILE and FOOTERFILE would place any file on your system within the output. The *LOGFORMAT commands would also allow any file to be read, because someone could designate each line to be a single filename and then just list the filenames. OUTFILE, CACHEOUTFILE, ERRFILE and LOCALCHARTDIR would allow people to write to your filespace; ERRFILE would also divert warnings away from your server's error log. UNCOMPRESS would allow a user to execute any command. DNS is forbidden because setting it higher than READ would normally cause the process to time out, and also because with DNS WRITE, the DNSFILE would be a file to write, not just a file to read. CGI would allow the user to generate syntactically incorrect output. PROGRESSFREQ would allow a user to conduct a denial-of-service attack by filling up your error log really, really fast (and DEBUG C is also disabled for the same reason.)

None of the above should be deleted (unless you are really, really sure that it's completely impossible for anyone other than yourself to run anlgform.pl). There are three other commands which are forbidden by default but which you could consider removing from the forbidden list. SETTINGS is included because it will give away the locations of some files on your system. But it is useful for diagnostic purposes, and you could consider removing it temporarily if you have trouble setting up the form. The other commands which are included are LANGFILE and DESCFILE. They are included because it is possible that another file could be exactly the right number of lines long to be accepted as a language file or report descriptions file, and then parts of it would get into the output. But it would have to be exactly the right number of lines long first. These commands shouldn't really be needed if your copy of analog is installed correctly, because the LANGUAGE command should find the right files. But if you want them, and you're prepared to take the risk described above, you can remove LANGFILE and/or DESCFILE from the list.

There are other commands which you might consider adding to the list. For example, it is theoretically possible (though rather unlikely), that another file on your system could conform sufficiently closely to one of the predefined log formats that analog could be persuaded to analyse it and so reveal some of its contents. If you're worried about this, or even if you want to force only one particular logfile to be analysed from the form, you can add the LOGFILE command to the list of forbidden commands. And you could add DOMAINSFILE for similar reasons. Or if you wanted to stop a user having control over which analog warnings were written to the error log, you could add WARNINGS to the list. (Possible attempted security violations detected by anlgform will always be written.)

You can of course add any command you like to the list. For example, a user can use any configuration file on your system unless you add CONFIGFILE. If you add a command, you must also add any aliases for it. Have a look in the source file globals.c for the same command under different names -- some commands have legacy names which I don't admit to in the documentation.

For more certainty, you can, if you prefer, configure anlgform so that you specify the commands which are allowed, rather than those which are forbidden. See the top of anlgform.pl for how to do this.


For those who know about CGI security issues, here are some more technical comments on my design. anlgform.pl sets the $PATH environment variable to be empty. It opens analog as a pipe in order to pass arguments into analog's standard input. User-specified data is not used for the open() function, only passed down the pipe. anlgform.pl is run with the -T flag on Unix. (Does anyone know how to get this working under Windows?)

The arguments to LOGFILE and CACHEFILE commands are checked for containing only certain allowed characters (specifically, letters, digits, /\.:_*? space, and - between two {letter, digit, underscore}'s). This is because they could match an UNCOMPRESS command and thus be passed to the shell when the uncompress command is popen()'ed.

Apart from that, command names are checked for containing only letters and the digits 1 and 2; and the arguments to commands are checked for not containing control characters (actually characters 0-32 and 127-159; in particular newline characters are prohibited). The length of the commands isn't checked by anlgform.pl, but buffer overflow shouldn't be an issue as configuration commands are checked for length by analog.

By the way, the reason that I advise that analog itself shouldn't be used as a CGI program is that some servers, notably Microsoft IIS, allow users to pass command line arguments into a CGI program. And even if the program doesn't return the proper CGI headers, the output can be sent back to the user. This means that all the above checking of arguments is then thwarted. Of course, on servers on which you can't pass command line arguments to a CGI program, there are not the same security concerns, but then analog isn't very useful as a CGI program because if you can't pass any arguments, you can only get the default output.


Technical details

You need to be running Perl 5.001 or later (unless you're on Windows and download the executable version of the form interface from the helper applications page). You can get the latest version of Perl free from www.perl.org (or from http://www.activestate.com/Products/ActivePerl/ if you're on Windows). You also need the module CGI.pm, but this should have come with Perl anyway.

On Windows, you have to associate the .pl extension with the Perl executable so that Perl scripts are executed by Perl.

anlgform.pl will understand the GET or POST methods of form submission. The HTML spec says that GET should be used when, as in this case, running the program has no side effects. However, section 15.1.3 of the HTTP spec says that POST should be used if some of the options being passed might be confidential. Also, very long URLs, formed by specifying lots of options, can cause trouble to some older servers. So anlgform.html uses the POST method by default. However, the GET method will also work. For example, you could make a normal link to anlgform.pl with options specified after a question mark in the usual GET way.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/helpers.html000066400000000000000000000033361406366436600167360ustar00rootroot00000000000000 Readme for analog -- helper applications [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Helper applications


Some people have written helper applications for analog. These are independent programs which work together with analog to make certain tasks easier. There are graphical configuration tools, for example, or tools which post-process analog's output to produce graphs. There are tools to do the DNS lookups more quickly, configuration files for certain jobs, and lots of other things.

These helper applications are all listed at the analog site. The list is constantly changing, so I'm not distributing it with the program. But I strongly recommend you go to the analog helper applications page and check it out.

There are also some example configuration files in the examples directory or folder distributed with the program.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/hierreps.html000066400000000000000000000177501406366436600171220ustar00rootroot00000000000000 Readme for analog -- hierarchical reports [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Hierarchical reports


Some of the non-time reports have a hierarchical (or tree) structure: so, for example, each domain in the Domain Report can have subdomains listed under it, which in turn can have sub-subdomains, and so on. This section describes commands for managing hierarchical reports.

First, you need to be able to control what gets listed in the reports. For this you need to use the SUB family of commands. So, for example, the command SUBDIR /~sret1/* would ensure that the Directory Report would not only contain an entry for the sum of my files, but also one for each of my subdirectories, something like this:

29,111: /~sret1/
10,234:   /~sret1/analog/
 5,179:   /~sret1/backgammon/
11,908: /~steve/
You can have more than one * in the command. For example
SUBDOMAIN *.*
would list the whole Domain Report two levels deep.

If you specify a SUB command, all the intermediate levels are included automatically. So, for example, after

SUBDOMAIN statslab.cam.ac.uk
cam.ac.uk and ac.uk will be included in the Domain Report too, and after *.*.ac.uk, *.ac.uk will be included.

Here are examples of the other four SUB commands:

SUBTYPE *.gz         # in the File Type Report
SUBBROW */*          # e.g. Netscape/4 in the Browser Summary
SUBBROW Netscape/*.*  # add minor version numbers for Netscape
REFDIR http://search.yahoo.com/*   # Referring Site Report
SUBORG *.aol.com     # Organisation Report
SUBORG *.*.com       # Break down all .com's

The SUBDOMAIN command (but none of the others) can include a second argument describing the subdomain. For example

SUBDOMAIN cam.ac.uk 'University of Cambridge'
Then that subdomain will be listed with its translation in the Domain Report. You can also have numerical subdomains: e.g.,
SUBDOMAIN 131.111 'University of Cambridge'
If you sort the subdomains alphabetically, the numerical ones will also be sorted alphabetically, not numerically. I don't think this will cause any problems.

One other use for the SUBDIR command is if you have used the second argument to the LOGFILE command. Suppose you have translated files like /index.html into http://www.mycompany.com/index.html. Then the command

SUBDIR http://*    # or
SUBDIR http://*/*
would be appropriate to make the Directory Report look right.
The lower levels of each report have FLOOR and SORTBY commands which work exactly the same as those we have already seen for the top level. These commands are SUBDIRFLOOR, SUBDOMFLOOR, SUBORGFLOOR, SUBTYPEFLOOR, SUBBROWFLOOR and REFDIRFLOOR; and SUBDIRSORTBY, SUBDOMSORTBY, SUBORGSORTBY, SUBTYPESORTBY, SUBBROWSORTBY and REFDIRSORTBY.

A sub-item is listed in a hierarchical report only if it is above the sub-FLOOR, and it is included with a SUB command, and it is not excluded because of an INCLUDE or EXCLUDE command, and its immediate parent is listed. For example, specifying

SUBDIR /*/*/
SUBDIRFLOOR -3r
SUBDIRSORTBY REQUESTS
would list the three subdirectories with most requests under each directory. SUBDIRFLOOR 1:r would have listed any subdirectory with at least 1% of the maximum number of requests of any top level directory.

The three file reports (Request Report, Redirection Report and Failure Report) and the three referrer reports (Referrer Report, Redirected Referrer Report and Failed Referrer Report) are not fully hierarchical, but they do list search arguments together under the file to which they refer (provided that the arguments have been read in: see the ARGSINCLUDE command). So they have similar sub-FLOOR and sub-SORTBY commands, namely REQARGSFLOOR, REDIRARGSFLOOR, FAILARGSFLOOR, REFARGSFLOOR, REDIRREFARGSFLOOR and FAILREFARGSFLOOR; and REQARGSSORTBY, REDIRARGSSORTBY, FAILARGSSORTBY, REFARGSSORTBY, REDIRREFARGSSORTBY and FAILREFARGSSORTBY. The same applies to the Operating System Report with its subdivisions of operating systems: it has SUBOSFLOOR and SUBOSSORTBY.


The lower levels of a hierarchical report temporarily interrupt the top level, and even though they are indented, this can sometimes make it look as if the report is out of order. If you have a lot of sub-items, for example in the Referrer Report if there are a lot of search arguments, then including the N column can help to make it clearer again.
Sometimes one item in the pie chart takes up most of the pie. In this case, you can elect to plot its sub-items on the chart instead, by using the *CHARTEXPAND family of commands. For example
OSCHARTEXPAND Windows
will use Windows 98, Windows NT etc. as wedges in the pie chart, instead of accumulating all the Windows versions together in one wedge. The complete list of these commands is DIRCHARTEXPAND, DOMCHARTEXPAND, ORGCHARTEXPAND, TYPECHARTEXPAND, BROWCHARTEXPAND, OSCHARTEXPAND, REQCHARTEXPAND, REDIRCHARTEXPAND, FAILCHARTEXPAND, REFCHARTEXPAND, REDIRREFCHARTEXPAND, FAILREFCHARTEXPAND and REFSITECHARTEXPAND. The CHARTEXPAND commands can take a comma-separated list (without spaces) as an argument, but not wildcards.

Just as for top-level items, sub-items will only be included if they are listed in the main table for the report. And so if an item does not have any sub-items listed, it will not be expanded, even if you asked for it to be. This means that you may need to use the appropriate SUB commands or SUBFLOOR commands to make sure that the sub-items do get listed. For example

SUBDOMAIN *.com
DOMCHARTEXPAND .com

Also, sub-items will only appear on the pie chart if they are large enough to get on in their own right. Note that if an item has any sub-items listed, and is expanded, then the item itself will no longer appear on the chart, only any sub-items which are large enough.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/include.html000066400000000000000000000340311406366436600167130ustar00rootroot00000000000000 Readme for analog -- inclusions and exclusions [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Inclusions and exclusions


After aliasing each item, analog decides whether that item is wanted or not. The whole line is only counted if all the items are wanted. Whether an item is wanted or not is determined by INCLUDE and EXCLUDE commands specified by the user. These commands can be used to exclude requests from your local users, for example, or to analyse only files in a subdirectory. For example
HOSTEXCLUDE mycomputer.myisp.com
would exclude all requests by that computer from the statistics. (To exclude lines just from one specific report, see below.)

The rule for determining whether an item is included or excluded is as follows. All the INCLUDE and EXCLUDE commands for that item are considered one by one in order, and the item is included or excluded according to the last command it matched. Items which don't match any of the INCLUDE or EXCLUDE commands are included if the first command was an exclusion, and excluded if the first command was an inclusion. For example, the configuration

FILEINCLUDE /~sret1/*
FILEEXCLUDE /~sret1/backgammon/*,/~sret1/analog/*
FILEINCLUDE /~sret1/backgammon/*.gif
would instruct the program to examine only my files, excluding my backgammon and analog files, but including gifs in my backgammon directory. On the other hand,
FILEEXCLUDE /~sret1/*/img/*
would analyse all files, except for images in my various directories. (If you get confused with all the inclusions and exclusions, remember that you can always use SETTINGS ON to see what the options you have specified represent.) Note that inclusions and exclusions can contain any number of wildcards, and can be lists separated by commas (but no spaces).

The full list of these commands is HOSTINCLUDE and HOSTEXCLUDE; FILEINCLUDE and FILEEXCLUDE; BROWINCLUDE and BROWEXCLUDE; REFINCLUDE and REFEXCLUDE; USERINCLUDE and USEREXCLUDE; VHOSTINCLUDE and VHOSTEXCLUDE; and STATUSINCLUDE and STATUSEXCLUDE.


Some notes on these commands.

Because the inclusions and exclusions take place after the aliasing, the name you must use is the aliased name. (In the absence of output alias commands, this is the name of the item in the output.)

Sometimes a line doesn't contain a particular sort of item, either because there is no field reserved for it on the line, or because the browser didn't send it for that request, or because it was present but corrupt. You can include or exclude these lines by making a special blank entry in the INCLUDE or EXCLUDE command. For example,

USERINCLUDE jim
USERINCLUDE ""
would include lines from user jim and lines without any user specified.

The behaviour of REQINCLUDE and REFINCLUDE can be slightly unintuitive if the file has search arguments.

You can also use regular expressions for the inclusions and exclusions by prefixing the expression with "REGEXP:" or "REGEXPI:". I've already described this at length in the context of aliases, so you can look there for all the details. A regular expression must be on a line on its own, not within a comma-separated list.


With HOSTINCLUDE and HOSTEXCLUDE, you have to use numerical addresses if your web server records numerical addresses in the logfile, or names if it records names (or if you're resolving the numerical addresses with analog's DNS resolution). For numerical addresses, you can use some special formats, like this:
HOSTINCLUDE 131.111.20.18      # simple IP address
HOSTINCLUDE 131.111.20.*       # wildcard
HOSTINCLUDE 131.111.20         # the same meaning
HOSTINCLUDE 131.111.20-23      # a range of class C addresses
HOSTINCLUDE 131.111.20.18/23   # subnet mask

The STATUSINCLUDE and STATUSEXCLUDE commands are slightly different from the rest. They work on HTTP status codes. (These codes are defined in the HTTP spec, and viewable in the Status Code Report. But if you don't already know about them, you really don't want to use these commands anyway!) The arguments to the commands are a comma-separated list of ranges. One end of the range can be blank, meaning from the first, or to the last, status code. For example
STATUSINCLUDE 200-206,304,500-
would mean only look at lines with status codes 200-206, 304 or 500-599.

Some people want to exclude status code 304 (Not Modified) to stop those requests appearing in the Request Report. But there is a better solution. By default, analog counts code 304 as a successful request, because it assumes that the cached version of the document is then presented to the user. But you can count it as a redirected request with the command

304ISSUCCESS OFF
For most people this is the wrong option, because code 304 is really the same as code 200 to the user. So again, if you don't understand this, stick with the default.
There is also one other pair of commands which belongs in this category, namely the FROM and TO commands. These specify a time period to restrict the analysis to. The simplest usage of these commands is FROM yyMMdd or FROM yyMMdd:hhmm, where yy represents the last two digits of the year (analog assumes that the year is between 1970 and 2069), MM represents the month, dd is the date, hh the hour, and mm the minute. So, for example, to analyse only requests from 1st July 1999 to 1pm on 15th June 2000 I would use the configuration
FROM 990701
TO   000615:1300
Alternatively, each of the components can be preceded by + or - to represent time relative to the time at which the program was invoked. In this case, the date can have more than 2 digits. This allows constructions like
FROM -01-00+01   # from tomorrow last year
TO -00-0131  # to the end of last month (OK even if last month
             # didn't have 31 days)
FROM -00-00-112
TO   -00-00-01  # statistics for the last 16 weeks
FROM -00-00-00:-06+01  # statistics for the last 6 hours
There are command line abbreviations +F and +T for the FROM and TO commands; for example, +T-00-00-01:1800 looks at statistics until 6pm yesterday. -F and -T turn off the from and to, as do FROM OFF and TO OFF.
There are also INCLUDE and EXCLUDE commands for most of the reports. Unlike the INCLUDE and EXCLUDE commands discussed above, these don't exclude logfile lines but individual lines from particular reports.

So, for example, the command

REFREPEXCLUDE http://your.site.com/*
would exclude your internal referrers from the Referrer Report. However, it would not exclude them from the Failed Referrer Report, the Referring Site Report, etc. (you need to use FAILREFEXCLUDE, REFSITEEXCLUDE etc. for that); nor would it prevent other analysis of logfile lines with those referrers, as REFEXCLUDE would.

The full list of these commands is REQINCLUDE and REQEXCLUDE; REDIRINCLUDE and REDIREXCLUDE; FAILINCLUDE and FAILEXCLUDE; TYPEINCLUDE and TYPEEXCLUDE; DIRINCLUDE and DIREXCLUDE; HOSTREPINCLUDE and HOSTREPEXCLUDE; REDIRHOSTINCLUDE and REDIRHOSTEXCLUDE; FAILHOSTINCLUDE and FAILHOSTEXCLUDE; DOMINCLUDE and DOMEXCLUDE; ORGINCLUDE and ORGEXCLUDE; REFREPINCLUDE and REFREPEXCLUDE; REFSITEINCLUDE and REFSITEEXCLUDE; SEARCHQUERYINCLUDE and SEARCHQUERYEXCLUDE; SEARCHWORDINCLUDE and SEARCHWORDEXCLUDE; INTSEARCHQUERYINCLUDE and INTSEARCHQUERYEXCLUDE; INTSEARCHWORDINCLUDE and INTSEARCHWORDEXCLUDE; REDIRREFINCLUDE and REDIRREFEXCLUDE; FAILREFINCLUDE and FAILREFEXCLUDE; BROWSUMINCLUDE and BROWSUMEXCLUDE; BROWREPINCLUDE and BROWREPEXCLUDE; OSINCLUDE and OSEXCLUDE; VHOSTREPINCLUDE and VHOSTREPEXCLUDE; REDIRVHOSTREPINCLUDE and REDIRVHOSTREPEXCLUDE; FAILVHOSTREPINCLUDE and FAILVHOSTREPEXCLUDE; USERREPINCLUDE and USERREPEXCLUDE; REDIRUSERREPINCLUDE and REDIRUSERREPEXCLUDE; and FAILUSERINCLUDE and FAILUSEREXCLUDE.

The inclusion or exclusion applies to the unaliased name, if you are doing any output aliases. (This contrasts with the behaviour of normal INCLUDE and EXCLUDE commands, which apply to the aliased name.)

All directory names end in slashes, so DIRINCLUDE and DIREXCLUDE, and REFSITEINCLUDE and REFSITEEXCLUDE, implicitly add a trailing slash even if you don't give one. This sometimes catches people out in the following situation.

REFSITEEXCLUDE http://my.host.com/*     # probably not what you want
means not to list subdirectories of the referring site http://my.host.com/, but to keep the site itself in the list. To exclude the site completely, just use
REFSITEEXCLUDE http://my.host.com/

You can also use the symbolic word pages in suitable INCLUDE and EXCLUDE commands; one very common command is

REQINCLUDE pages
to include only pages in the Request Report.
There are some miscellaneous INCLUDE and EXCLUDE commands which I'll describe now. First, analog determines which files should count as pages (and thus which requests count as page requests) using an INCLUDE/EXCLUDE pair called PAGEINCLUDE and PAGEEXCLUDE. By default, (case insensitive) *.html and *.htm, and directories (*/) count as pages. But you change the list by commands like
PAGEINCLUDE *.asp
PAGEEXCLUDE /sret1.html
I.e., *.asp are pages, but /sret1.html isn't. (If the file has search arguments, the PAGEINCLUDE and PAGEEXCLUDE are reckoned just on the part of the filename before the question mark.)
In some of the reports, analog can link to the files which it's listing. You can specify exactly which files are linked to with the LINKINCLUDE family of commands. For example,
REQLINKINCLUDE pages,*.pdf
would link to pages and PDF files in the Request Report. The full set of these commands is REQLINKINCLUDE and REQLINKEXCLUDE (Request Report), REDIRLINKINCLUDE and REDIRLINKEXCLUDE (Redirection Report), FAILLINKINCLUDE and FAILLINKEXCLUDE (Failure Report), REFLINKINCLUDE and REFLINKEXCLUDE (Referrer Report), REDIRREFLINKINCLUDE and REDIRREFLINKEXCLUDE (Redirected Referrer Report), and FAILREFLINKINCLUDE and FAILREFLINKEXCLUDE (Failed Referrer Report). Note that the target of the links is also affected by the BASEURL command.
Finally, there is a pair of commands called ROBOTINCLUDE and ROBOTEXCLUDE, which determine which browsers count as "robots" in the Operating System Report. For example,
ROBOTINCLUDE Googlebot/*

There is one final set of INCLUDE and EXCLUDE commands to include or exclude the search arguments at the end of URLs. But there are some slightly complicated issues surrounding those, so they deserve a new section.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/indx.html000066400000000000000000001143061406366436600162360ustar00rootroot00000000000000 Readme for analog -- index [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Index


[ 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 | numbers]

This is the index for this Readme. Follow the numbers after each name to find references to that command or concept. Families of commands are indexed under the second part of the name: for example, HOSTEXCLUDE is under *EXCLUDE, not under HOST.

This index includes all of analog's configuration commands: if a command you used in previous versions is not here, see the section on Upgrading from earlier versions. All commands are also listed in the Quick reference with their syntax and examples, and that section is not cross-referenced from this index.

Acknowledgements [1]
Addresses, numerical [1]
*ALIAS [1]
Aliases [1]
ALL [1]
ALLBACK [1]
ALLGRAPH [1]
analog.cfg [1][2][3][4]
anlgform.html [1]
anlgform.pl [1]
anlghead.h [1][2]
Announcements [1]
ANONYMIZERURL [1]
APACHEDEFAULTLOGFORMAT [1]
APACHELOGFORMAT [1]
ARGSEXCLUDE [1]
*ARGSFLOOR [1]
ARGSINCLUDE [1]
*ARGSSORTBY [1]
Arguments in URLs [1][2]
ASCII output style [1]
*BACK [1]
Bar charts [1]
BARSTYLE [1]
BASEURL [1]
Basic commands [1]
Broken pipe [1][2]
BROW* commands - see under second part of name
Browser Report [1][2][3]
Browser Summary [1][2][3][4]
BROWREP* commands - see under second part of name
BROWSERREP [1]
BROWSERSUM [1]
BROWSUM* commands - see under second part of name
Bugs, reporting [1]
Bytes, how displayed [1]
BYTESDP [1]
bzip2 logfiles [1]
Cache files [1]
CACHEOUTFILE [1]
CACHEFILE [1]
CASE [1]
CGI program [1]
*CHART [1]
CHARTDIR [1]
*CHARTEXPAND [1]
"Click-thru"s [1]
Colours [1]
*COLS [1][2]
Comma separated value output [1]
Command line arguments [1][2][3]

  • logfile name (LOGFILE) [1]
  • - (LOGFILE stdin) [1]
  • 1 (Yearly Report) [1]
  • 4 (Quarter-Hour Report) [1]
  • 5 (Five-Minute Report) [1]
  • 6 (Quarter-Hour Summary) [1]
  • 7 (Five-Minute Summary) [1]
  • A (All reports) [1]
  • a (HTML/PLAIN output) [1]
  • B (Browser Report) [1][2]
  • b (Browser Summary) [1][2]
  • c (Status Code Report) [1][2]
  • C (Arbitrary configuration command) [1]
  • D (Daily Report) [1]
  • d (Daily Summary) [1]
  • E (Redirection Report) [1][2]
  • F (FROM date) [1]
  • f (Referrer Report) [1][2]
  • G (Default configuration file) [1]
  • g (Other configuration files) [1]
  • H (Hourly Report) [1]
  • h (Hourly Summary) [1]
  • I (Failure Report) [1][2]
  • i (Directory Report) [1][2]
  • J (User Failure Report) [1][2]
  • j (User Redirection Report) [1][2]
  • K (Failed Referrer Report) [1][2]
  • k (Redirected Referrer Report) [1][2]
  • L (Host Failure Report) [1][2]
  • l (Host Redirection Report) [1][2]
  • M (Virtual Host Failure Report) [1][2]
  • m (Monthly Report) [1]
  • N (Search Query Report) [1][2]
  • n (Search Word Report) [1][2]
  • O (Output file) [1]
  • o (Domain Report) [1][2]
  • P (Processing Time Report) [1]
  • p (Operating System Report) [1][2]
  • Q (Quarterly Report) [1]
  • q (Warnings) [1]
  • R (Virtual Host Redirection Report) [1][2]
  • r (Request Report) [1][2]
  • S (Host Report) [1][2]
  • s (Referring Site Report) [1][2]
  • settings (Settings of all variables) [1][2]
  • T (TO date) [1]
  • t (File Type Report) [1][2]
  • U (Cache file) [1]
  • u (User Report) [1][2]
  • V (Debugging) [1]
  • v (Virtual Host Report) [1][2]
  • version (Just give the version number) [1]
  • W (Weekly Report) [1]
  • w (Hour of the Week Summary) [1]
  • X (Goto's) [1]
  • x (General Summary) [1]
  • Y (Internal Search Query Report) [1][2]
  • y (Internal Search Word Report) [1][2]
  • Z (Organisation Report) [1][2]
  • z (File Size Report) [1]

Compilation problems [1]
Compiling [1]
Compressed logfiles [1]
COMPSEP [1]
Computer-readable output style [1]
CONFIGFILE [1]
Configuration files [1][2][3][4]
Configuration file, default [1]
Configuration file, mandatory [1]
Contents [1]
Contributors [1]
Cookies [1]
Corrupt logfile lines, definition [1]
Countries [1]
Crashes [1]
CSSPREFIX [1]
CSV output [1]
Customising analog [1]
Daily Report [1][2][3]
Daily Summary [1][2][3]
DAILYREP [1]
DAILYSUM [1]
Date reports [1][2]
Dates, restricting [1]
DAYREP* commands - see under second part of name
DAYSUM* commands - see under second part of name
DEBUG [1]
Debugging [1]
DECPOINT [1]
Default configuration file [1]
Default logfile format [1]
DEFAULTLOGFORMAT [1]
Definitions [1]
DESCFILE [1][2]
DESCRIPTIONS [1]
DIR* commands - see under second part of name
DIRECTORY [1]
Directory Report [1][2][3][4]
DIRSUFFIX [1]
DNS [1]
DNS lookups [1]
DNSBADHOURS [1]
DNSFILE [1]
DNSGOODHOURS [1]
DNSLOCKFILE [1]
DNSTIMEOUT [1]
DOM* commands - see under second part of name
DOMAIN [1]
Domain Report [1][2][3][4][5]
Domains file [1]
DOMAINSFILE [1]
Donations [1]
ERRFILE [1]
ERRLINELENGTH [1]
error_log [1][2]
Error Report [1]
Errors [1]
Example outputs [1]
Examples of each command [1]
*EXCLUDE [1]
Exclusions [1]
FAIL* commands - see under second part of name
Failed Referrer Report [1][2][3][4]
Failed requests, definition [1]
FAILHOST [1]
FAILHOST* commands - see under second part of name
FAILREF [1]
FAILREF* commands - see under second part of name
FAILURE [1]
Failure Report [1][2][3][4]
FAILUSER [1]
FAILUSER* commands - see under second part of name
FAILVHOST [1]
FAILVHOST* commands - see under second part of name
FAQ [1]
Fatal errors [1]
FILE* commands - see under second part of name
File, definition [1]
File Size Report [1][2][3]
File Type Report [1][2][3][4]
FILETYPE [1]
Filters [1]
First day of week [1]
FIVEREP [1]
FIVEREP* commands - see under second part of name
FIVESUM [1]
FIVESUM* commands - see under second part of name
Five-Minute Report [1][2][3]
Five-Minute Summary [1][2][3]
*FLOOR [1][2][3]
FOOTERFILE [1]
Form interface [1]
Frequently Asked Questions [1]
FROM [1]
GENERAL [1]
General Summary [1][2]
GENSUMLINES [1]
GOTOS [1]
*GRAPH [1]
Graphs [1]
gzipped logfiles [1]
HEADERFILE [1]
Helper applications [1]
Hierarchical reports [1]
Hits [1]
Home page [1]
HOST [1]
HOST* commands - see under second part of name
Host, definition [1]
Host Failure Report [1][2][3]
Host Redirection Report [1][2][3]
Host Report [1][2][3]
HOSTNAME [1]
Hostnames, numerical [1]
HOSTREP* commands - see under second part of name
HOSTURL [1]
Hour of the Week Summary [1][2][3]
Hourly Report [1][2][3]
Hourly Summary [1][2][3]
HOURLYREP [1]
HOURLYSUM [1]
HOURREP* commands - see under second part of name
HOURSUM* commands - see under second part of name
HTML output style [1]
HTMLPAGEWIDTH [1]
IMAGEDIR [1]
*INCLUDE [1]
Inclusions and exclusions [1]
Incremental processing [1]
Internal Search Query Report [1][2][3][4]
Internal Search Word Report [1][2][3][4]
Introduction [1]
INTSEARCHENGINE [1]
INTSEARCHQUERY [1]
INTSEARCHQUERY* commands - see under second part of name
INTSEARCHWORD [1]
INTSEARCHWORD* commands - see under second part of name
IP addresses [1]
JPEGCHARTS [1]
LANGFILE [1]
LANGUAGE [1]
Languages [1][2]
LASTSEVEN [1]
LATEX output style [1]
Licence [1][2]
*LINKEXCLUDE [1]
*LINKINCLUDE [1]
*LINKNOFOLLOW [1]
LOCALCHARTDIR [1]
LOGFILE [1]
Logfile formats [1][2]
Logfile prefix [1]
Logfiles [1]
Logfiles, choosing [1]
Logfiles, compressed [1]
Logfiles, finding [1]
Logfiles, preprocessing [1]
LOGFORMAT [1]
LOGO [1]
LOGOURL [1]
LOGTIMEOFFSET [1]
Low memory [1]
*LOWMEM [1][2]
Mailing lists [1]
Makefile [1]
Mandatory configuration file [1]
Map [1]
MARKCHAR [1]
Meaning of output [1]
Memory, using less [1]
MINGRAPHWIDTH [1]
MONTH* commands - see under second part of name
MONTHLY [1]
Monthly Report [1][2][3]
Non-time reports [1][2]
NOROBOTS [1]
"Not listed" lines [1][2][3]
Numerical addresses [1]
Numerical hostnames [1]
Operating System Report [1][2][3][4]
ORG* commands - see under second part of name
ORGANISATION [1]
Organisations, definition [1]
Organisation Report [1][2][3][4]
OS Report [1][2][3][4]
OS* commands - see under second part of name
OSREP [1]
OUTFILE [1]
OUTPUT [1]
Output aliases [1]
OUTPUT COMPUTER [1][2]
Output, configuring [1]
Output style, computer-readable [1]
Output styles [1]
Page, definition [1]
PAGEEXCLUDE [1]
PAGEINCLUDE [1]
Pages, defining [1]
*PAGEWIDTH [1]
Path through site [1]
PDFLATEX [1]
Pie charts [1]
PLAIN output style [1]
PLAINPAGEWIDTH [1]
PNGIMAGES [1]
Preprocessing logfiles [1]
Processing Time Report [1][2][3]
PROCTIME [1]
PROCTIME* commands - see under second part of name
PROGRESSFREQ [1]
QUARTERLY [1]
Quarterly Report [1][2][3]
QUARTERLY* commands - see under second part of name
QUARTERREP [1]
QUARTERREP* commands - see under second part of name
QUARTERSUM [1]
QUARTERSUM* commands - see under second part of name
Quarter-Hour Report [1][2][3]
Quarter-Hour Summary [1][2][3]
Quick reference [1]
RAWBYTES [1]
REDIR [1]
REDIR* commands - see under second part of name
Redirected Referrer Report [1][2][3][4]
Redirected requests, definition [1]
Redirection Report [1][2][3][4]
REDIRHOST [1]
REDIRHOST* commands - see under second part of name
REDIRREF [1]
REDIRREF* commands - see under second part of name
REDIRUSER [1]
REDIRUSER* commands - see under second part of name
REDIRVHOST [1]
REDIRVHOST* commands - see under second part of name
REF* commands - see under second part of name
REFARGSEXCLUDE [1]
REFARGSINCLUDE [1]
REFDIR [1]
Reference, quick [1]
REFERRER [1]
Referrer, definition [1]
Referrer Report [1][2][3][4]
Referring Site Report [1][2][3][4]
REFREP* commands - see under second part of name
REFSITE [1]
REFSITE* commands - see under second part of name
Regular expressions [1][2]
Report descriptions, in documentation [1]
Report descriptions, in output [1]
Report descriptions file [1][2]
Report.html [1][2]
Reporting bugs [1]
REPORTORDER [1]
Reports, list of [1][2]
REPORTSPAN [1]
REPORTSPANTHRESHOLD [1]
REPSEPCHAR [1]
REQ* commands - see under second part of name
REQUEST [1]
Request Report [1][2][3][4]
Requests, definition [1]
Requests for pages, defining [1]
Requests for pages, definition [1]
Requests, types of [1]
Robots, discouraging [1]
Robots, identifying [1]
ROBOTEXCLUDE [1]
ROBOTINCLUDE [1]
*ROWS [1]
RUNTIME [1]
Sample outputs [1]
Search arguments [1][2] -- see also Search Query Report and Search Word Report below
Search Query Report [1][2][3][4]
Search Word Report [1][2][3][4]
SEARCHCHARCONVERT [1]
SEARCHENGINE [1]
SEARCHQUERY [1]
SEARCHQUERY* commands - see under second part of name
SEARCHWORD [1]
SEARCHWORD* commands - see under second part of name
Search engines, discouraging [1]
SEPCHAR [1]
Session ids [1]
SETTINGS [1][2]
SIZE [1]
SIZE* commands - see under second part of name
*SORTBY [1][2][3]
Source code [1]
Spiders, discouraging [1]
Starting to use analog [1]
Starting to use analog on a Mac [1]
Starting to use analog on Windows [1]
Starting to use analog on other platforms [1]
STATUS [1]
Status Code Report [1][2][3]
STATUS* commands - see under second part of name
STYLESHEET [1]
SUBBROW [1]
SUBDIR [1]
Subdirectories [1]
SUBDOMAIN [1]
Subdomains [1]
SUB*FLOOR [1]
SUBORG [1]
SUB*SORTBY [1]
SUBTYPE [1]
Successful requests, definition [1]
Syntax [1][2]
Time reports [1][2]
TIMECOLS [1]
TIMEOFFSET [1]
Times, restricting [1]
Title line [1][2]
TO [1]
Total requests, definition [1]
Translators [1]
Tree reports [1]
TYPE* commands - see under second part of name
UNCOMPRESS [1]
Unknown domains [1][2]
Unresolved numerical addresses [1][2]
Unwanted logfile entries, definition [1]
Upgrading from earlier versions [1]
USER [1]
USER* commands - see under second part of name
USERCASE [1]
User Failure Report [1][2][3]
User Redirection Report [1][2][3]
User Report [1][2][3]
USERREP* commands - see under second part of name
VHOST [1]
VHOST* commands - see under second part of name
VHOSTREP* commands - see under second part of name
Virtual domains/virtual hosts [1][2]
Virtual Host Failure Report [1][2][3]
Virtual Host Redirection Report [1][2][3]
Virtual Host Report [1][2][3]
Visitors [1]
Visits [1]
WARNINGS [1]
Warnings [1][2]
WEEK* commands - see under second part of name
WEEKBEGINSON [1]
WEEKHOUR [1]
WEEKHOUR* commands - see under second part of name
WEEKLY [1]
Weekly Report [1][2][3]
What was new? [1][2][3][4]
What's new? [1][2]
XHTML output style [1]
XML output style [1]
XMLDTD [1]
YEAR* commands - see under second part of name
YEARLY [1]
Yearly Report [1][2][3]
zipped logfiles [1]
304ISSUCCESS [1]

[ 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 | numbers]


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/logfile.html000066400000000000000000000431711406366436600167160ustar00rootroot00000000000000 Readme for analog -- choosing a logfile [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Choosing a logfile


The basic command for selecting a logfile is
LOGFILE logfilename
or just to put the logfile name on the command line without any arguments, e.g., analog logfilename. In the Mac version, you can also analyse a particular single logfile by dragging it onto the analog icon. All logfiles must be within your computer's file system (on disk, or at least mounted under Unix, or on a mapped drive under NT) -- analog won't use FTP or HTTP to fetch them from the internet.

A - sign or the word stdin is interpreted as standard input: this is useful on Unix systems for constructing pipes. There is also an optional second argument to the LOGFILE command which is explained below.

You can have several LOGFILE commands. You can include wildcards in the logfile name (but not necessarily in the directory name: this is system-dependent), and you can use a list of logfiles separated by commas (without spaces). So the following commands would tell analog to read logfile1, c:\logs\logfile2, and all files ending in .log:

LOGFILE logfile1,*.log
LOGFILE c:\logs\logfile2
Or if you were on a Mac, you might use something like
LOGFILE "Hard Drive:Internet Applications:Analog:Logs:*"
You can also use the special command
LOGFILE none
to erase the list of logfiles specified so far.

If the name of a logfile in a LOGFILE command doesn't include a directory, it will be looked for wherever analog expects to find logfiles. (This location is built in when the program is compiled.) For example, on Windows it would be in the same folder as the analog executable. But logfile names given on the command line are within the current directory.

You can also include the date in the LOGFILE name, by using the following codes.

%D  date of month
%m  month name, in English
%M  month number
%y  two-digit year
%Y  four-digit year
%H  hour
%n  minute
%w  day of week, in English
So for example,
LOGFILE access_log%Y%M.log
will look for the logfile access_log200109.log, if it's September 2001. The date used is actually the TO date if one was specified, and otherwise the time of the start of the program. So for example, you can look at all of last month's logfiles with the commands
TO -00-0131                   # to end of last month
LOGFILE access_log%Y%M??.log  # finds access_log200108??.log in Sep 2001

The LOGFILE commands are cumulative, except that any logfiles on the command line or in configuration files specified on the command line override any in the default configuration file or configuration files loaded from there, and are themselves overridden by any in the mandatory configuration file or configuration files loaded from there. Usually you don't need to worry about this, and it will do what you expect! (Actually I should have said "logfiles or cache files" -- but we'll get on to that later).


Analog knows about several different types of logfile. By default it will attempt to see if your logfile is of one of the types it knows about, based on the first line. The types it can usually diagnose are the common log format, the NCSA combined format, referrer log and browser log, the W3 extended log format, the Microsoft IIS format, the Netscape format, the WebSTAR format, the WebSite format and the MacHTTP format. Examples of all these formats are given at the end of this section. If you have debugging on, analog will report what type of logfile it thinks yours is.

If your logfile is not in one of the standard formats, you will probably still be OK, because it is possible to tell analog about other formats using a LOGFORMAT command. This is explained in the next section. But most users don't ever need to know about this because they have logfiles in a standard format. So the best thing to do is just to try analysing your logfile and see if analog will understand it. If it does, you don't need to worry about LOGFORMATs.

If analog can't understand your logfile, it will warn you that it can't detect the format, or possibly that it found a lot of corrupt lines. There are basically five reasons why this might happen:

  1. Many people try and use a LOGFORMAT command when they don't need one. Always try without one first.
  2. Some log formats are not very well designed and analog can't analyse them reliably. In this case it will give up, usually with a helpful message, rather than risk doing a bad job. For example, you might get "Logfile with ambiguous dates" or "Time without date." In this case you should read the notes on all the built-in formats below where some common problems with those formats are described.
  3. Since analog tries to deduce the format based on the first line of the logfile, it could just be that the first line is corrupt. In this case, you could tell analog the format, or you could just fix the first line.
  4. For the same reason, if the format changes midway through the log, analog will count the remaining lines as corrupt. In this case, you will find that your output page contains a partial analysis but with a large number of corrupt lines too. You will need to give analog two LOGFORMAT commands to tell it about the two different formats.
  5. Finally, some logfiles really aren't in one of the standard formats. In this case you will need to read the next section and learn how to tell analog about your format.
If you can't see what's wrong with your logfile, you can specify DEBUG ON, and analog will report where each line was corrupt.
There is also an optional second argument to the LOGFILE command, which specifies a prefix to add to all the filenames in that logfile. This is useful if you've got several different servers or virtual hosts, when the same filename may occur on each of the servers. For example,
LOGFILE mydomain.log http://www.mydomain.com
would translate a filename /file.html in mydomain.log to http://www.mydomain.com/file.html. (If you only have logfiles from one server, and you just want the prefix so that you can host the output on a different server, then you probably want the BASEURL command instead.)

Note that because this actually changes the name of the file, any FILEINCLUDE, FILEEXCLUDE or FILEALIAS command will have to refer to the new name, including the prefix.

If you are using this command to combine logfiles from several different virtual hosts, then the Virtual Host Report doesn't tell you about the different virtual hosts. The virtual host name has just become part of the filename. So you want to look in the Directory Report instead. (And you will probably want to use the SUBDIR command as well.)

If the logfile contains the name of the virtual host on each line, then the argument can contain a %v, and the name of the virtual host will be inserted at that point. If %v is included and the logfile line doesn't have a virtual host, then that line will be marked as corrupt.


It is often convenient to store logfiles compressed to save disk space. Analog will automatically read logfiles compressed using gzip, zip or bzip2. But if you have logfiles compressed using some other program, analog can still read them provided that you use an UNCOMPRESS command to say how to uncompress them.

You need to supply the types of file that you want to uncompress in a comma-separated list, together with the name of a command that will uncompress the files to standard output (rather than to a file). For example, on Unix you might use

UNCOMPRESS *.Z "/usr/bin/uncompress -c"
whereas on Windows NT, you might use
UNCOMPRESS *.Z ("c:\Program Files\uncompress\uncompress" -c)

If analog determines that a logfile which it's uncompressing isn't wanted for the analysis, a "broken pipe" error can be reported. This is produced by the uncompressing command and is out of analog's control, but it's harmless.

(Hint: There's nothing to stop you using the UNCOMPRESS command for other types of preprocessing, for example DNS resolution.)


Logfile formats

Here is a summary of the various logfile formats which analog knows about. To illustrate them, I have used the same (fictional) request as it might be recorded in the different formats.

The common logfile format is written by most servers. Its lines look like

jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
"GET /~sret1/ HTTP/1.0" 200 1243
(except all on one line). Some versions of Microsoft software have a buggy version of this with an extra quote mark before the HTTP like this:
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
"GET /~sret1/ "HTTP/1.0" 200 1243
Analog will understand these, but (as with any two formats) it will reject lines if the format changes half way through.
The NCSA referrer log looks like
[25/Dec/1998:17:45:35] http://www.site.com/ -> /~sret1/
and the browser (or agent) log looks like
[25/Dec/1998:17:45:35] Mozilla/2.0 (X11; I; HP-UX A.09.05)
In the referrer log, the date can be omitted.
The NCSA combined log is the same as the common log, except that it has the referrer and browser on the end in quotes, like this:
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ HTTP/1.0"
200 1243 "http://www.site.com/" "Mozilla/2.0 (X11; I; HP-UX A.09.05)"
(except all one line). If you are using the Apache server, you can generate this with the mod_log_config module, using the Apache command
LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\""
It is usually better to use the combined log than separate logs, because it stores more information in less space.
The Microsoft IIS logfile looks like
192.64.25.41, -, 25/12/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10,
2178, 303, 1243, 200, 0, GET, /~sret1/, -,
(except all on one line; and sometimes with four-digit years). However, the format is extremely badly designed, in that the date follows local conventions: in other words, in North America the above example would have the date 12/25/98 instead. Analog will diagnose which form the logfile is in if possible: but if both the date and the month are at most 12, there is no way to tell which format it is. In this case, it will advise you to use the command LOGFORMAT MICROSOFT-NA for North American date format, or LOGFORMAT MICROSOFT-INT for international date format. In some countries, the date will not be in either of these formats, in which case you need to write your own LOGFORMAT command, based on the examples in the next section.

There are also various third-party extensions to the Microsoft format to include, for example, the browser and referrer. But they all do it in different ways, so analog can't automatically diagnose them, and again, you need to write a LOGFORMAT command for them.


The WebSite format looks like
12/25/98 17:45:35  jay.bird.com  host1  Server  fred  GET  /~sret1/
http://www.site.com/    Mozilla/2.0 (X11; I; HP-UX A.09.05)  200  1243  2178
(except all on one line, and with the fields separated by tabs). It suffers from the same problem with ambiguous dates as the IIS logfile (above), so again you might have to use LOGFORMAT WEBSITE-NA or LOGFORMAT WEBSITE-INT, or even have to write your own LOGFORMAT command.
The MacHTTP format looks like
12/25/98  17:45:35   OK    jay.bird.com  /~sret1/  1243
with the fields separated by tabs.
The W3 extended log, the Netscape log, and the WebSTAR log can be recognised because they must include at or near the top a line telling analog what format to expect on subsequent lines. (They may also contain later lines changing the format). If the header line is missing, analog won't be able to interpret the subsequent lines and so won't be able to analyse the logfile. In this case, you will have to either replace the missing header or use a LOGFORMAT command to tell analog your format.

If analog finds that the header line is corrupt, it will usually tell you what was wrong with it. The most common problem is that you're not allowed the time without the date or vice versa -- in particular, having the date just at the top of the logfile is not sufficient; you must have it on each line. By default, Microsoft servers produce extended logs with the date only at the top. But if the date changes during the logfile, the server doesn't then write a new date line. This means that missing days or corrupt entries can make analog get a day out in either direction, with no way to rescue or even recognise the situation!

For this reason analog knows that it can't analyse such logfiles safely, so instead it insists that the date should be on every line. There are some programs on the helper applications page to put the date on each line. If you already have such a logfile you might want to use one of these programs, but they have to assume that the date doesn't change during the logfile, so it would be much safer to tell your server to log the date on every line in future.

The extended log is described at http://www.w3.org/TR/WD-logfile.html. Its header line looks like

#Fields: date time cs-uri
In the rest of the logfile, the fields can be separated by spaces or tabs. Remember the logfile must contain the date as well as the time on every line -- see above.

There is also Microsoft's attempt at the extended format -- unfortunately they didn't read the spec., so they didn't enclose the browser and referrer in quotes, they replaced spaces in the browser name with +'s, and they put the time taken to serve the request in milliseconds instead of seconds. And there is WebSTAR's attempt which is very nearly right except that they erroneously used the CS-HOST field as the client hostname instead of the server hostname. Analog will understand all of these versions.

Extended logs always record the time in GMT, so you will probably need to use a LOGTIMEOFFSET command to convert to your local timezone.

The WebSTAR format is described at http://www.starnine.com/webstar/docs/ws4manual.3f.html. It has a header line like

!!LOG_FORMAT DATE TIME RESULT URL BYTES_SENT HOSTNAME
In the rest of the logfile, the fields are separated by tabs. The WebSTAR server also records the time in GMT, so again you will probably need to use a LOGTIMEOFFSET command to convert to your local timezone. Some other Mac servers also use the WebSTAR format, or something looking like it. Analog will understand these too.

Finally, the Netscape header line looks like

format=%Ses->client.ip% [%SYSDATE%] "%Req->reqpb.clf-request%"
%Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/logfmt.html000066400000000000000000000441671406366436600165730ustar00rootroot00000000000000 Readme for analog -- log formats [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Log formats


This section is about how to tell analog the format of your logfile. Most people don't need to do this because analog can detect the format automatically -- try it first and see, because you will save yourself a lot of trouble! But if you do need to specify the log format explicitly, here is how to do it.

The basic command to specify a log format looks like

LOGFORMAT format
-- we'll discuss what the formats can be in a minute. Or if you are using the Apache server, you will probably find it more convenient to use
APACHELOGFORMAT apacheformat
instead.

The LOGFORMAT and APACHELOGFORMAT commands only apply to logfiles specified with a LOGFILE command later in the same configuration file. So you must put the LOGFORMAT above the LOGFILE to which it refers. If you declare your logfiles on the command line, or drag them onto the app on the Mac, you must use DEFAULTLOGFORMAT or APACHEDEFAULTLOGFORMAT instead. This is so that different logfiles can have different formats, like this:

LOGFILE log0
LOGFORMAT format1
LOGFILE log1
LOGFORMAT format2
LOGFILE log2
LOGFILE log3
In this example, log1 is in format1, log2 and log3 are in format2, and log0 isn't in either format -- analog will try and detect which format it's in.
The APACHELOGFORMAT command is followed by the LogFormat from your Apache httpd.conf file. For example, if your httpd.conf contained the following lines:
LogFormat "%h %l %u %t %v \"%r\" %>s %b" myformat
CustomLog /var/log/apache/access.log myformat
then your analog.cfg should contain
APACHELOGFORMAT (%h %l %u %t %v \"%r\" %>s %b)
LOGFILE /var/log/apache/access.log
(Use parentheses instead of quotes round the argument if the argument already contains quotes.) Analog understands all Apache log formats, with the exception that it won't parse Apache's "%...{format}t" construction for customised times: if you have this construction, you will have to use ordinary LOGFORMAT instead. (This is because "%...{format}t" is sometimes localised.)
The possible formats for use with the LOGFORMAT command are of two types. First there are some symbolic words, and then there are log format strings. We'll look at the words first.

There are format words for all the built-in formats analog knows about. You might need one of these words if your logfile is in a standard format, but analog can't detect which format it's in for some reason; for example, maybe the first line is corrupt; or maybe analog can't tell whether you're using North American or international dates. So for example

LOGFORMAT COMMON
will select common format; you can also have COMBINED, REFERRER, BROWSER, EXTENDED, MICROSOFT-NA (North American date format), MICROSOFT-INT (international date format), WEBSITE-NA, WEBSITE-INT, MS-EXTENDED (Microsoft's attempt at extended format), WEBSTAR-EXTENDED (WebSTAR's version of extended format), MS-COMMON (a buggy version of common format in some versions of Microsoft software), NETSCAPE, WEBSTAR or MACHTTP. All these formats were defined at the end of the previous section. You can also use the special word AUTO to return to automatic detection.

If your logfile is not in one of the recognised formats, you can tell analog about your format using a log format string. You only ever need this if your logfile has lines which are not in one of the standard formats. (And even if it isn't in a standard format, if you're using the Apache web server, you will find APACHELOGFORMAT easier.)

The format string consists of a template for the logfile line, with the various fields and special characters replaced by codes as follows. Please note that these codes are case sensitive -- for example, %b is completely different from %B!

%S
host (the client hostname, or address of the computer making the request)
%s
numerical IP address of client (if recorded in a separate field; used when %S is empty)
%r
file requested
%q
query string (part of filename after ?, if recorded in a separate field)
%B
browser
%A
browser with +'s instead of spaces
%f
referrer
%u
user (tip: a cookie or session id can usefully be defined as %u too)
%v
virtual host (the server hostname, also called the virtual domain)
%d
day of the month
%m
month in digits
%M
month, three letter English abbreviation
%y
year, last two digits
%Y
year, four digits
%Z
year, two or four digits (less efficient)
%h
hour of the day
%n
minute of the hour
%a
a or A for am, or p or P for pm, if %h is in the 12-hour clock. (So to match "am" you need %am and to match "AM" you need %aM)
%U
"Unix time" (seconds since beginning of 1970, GMT). If it includes decimals, use %U.%j
%b
number of bytes transferred
%t
processing time in seconds
%T
processing time in milliseconds
%D
processing time in microseconds
%c
HTTP status code
%C
code words used instead of HTTP status code in some servers -- only used internally
%j
junk: ignore this field (field can be empty too)
%w
white space: spaces or tabs
%W
optional white space
%%
% sign
\n
new line
\t
tab stop
\\
single backslash
So for example, the common log format, which looks like
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
"GET /~sret1/ HTTP/1.0" 200 1243
(except all on one line) could be represented by the LOGFORMAT command
LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b)
In other words, it's just the sample line but with the hostname replaced by %S, the username by %u etc. (The parentheses are needed because the argument contains spaces.) Or take another example: if you had lines which looked like
Fri 25/12/98 5:45pm, /~sret1/, jay.bird.com, 200, 1243,
http://www.site.com, Mozilla/2.0 (X11; I; HP-UX A.09.05)
(all on one line again), you could use the format
LOGFORMAT (%j %d/%m/%y %h:%n%am, %r, %S, %c, %b, %f, %B)
Remember: if you have trouble writing a LOGFORMAT string, you can turn debugging on, and analog will report where each line was corrupt. If you still have trouble, you can write to the analog-help mailing list.
A logfile can sometimes have lines in several different formats. So you can specify several LOGFORMAT commands in a row, and they will all apply to the next logfile. This is also useful if the format of your logfile changes half way through. So in this example:
LOGFORMAT COMMON
LOGFORMAT COMBINED
LOGFILE log1
LOGFORMAT (%j %d/%m/%y %h:%n%am, %r, %S, %c, %b, %f, %B)
LOGFILE log2
LOGFILE log3
log1 has lines in both common and combined format, whereas log2 and log3 have lines just in the format in the previous example.

If you specify several formats, analog tries to match each line to the first format first, then if that fails the next, and so on, so the order of the formats is important. Usually you want to specify the most common one first, to minimise the time spent trying to match lines to inappropriate formats.


I suggested above that any logfile which doesn't have a LOGFORMAT command earlier in the same configuration file, or is specified on the command line, is auto-detected. But this isn't quite true. Actually such logfiles get a special format called the default log format. The default format starts off as auto-detection, but you can change it if you want with the DEFAULTLOGFORMAT command. This command works exactly the same as the LOGFORMAT command -- it understands the same formats, and if you have several DEFAULTLOGFORMAT commands, they accumulate in the same way. The difference is that they don't need to be put in any particular place. (There is also APACHEDEFAULTLOGFORMAT, which has the same effect but uses the Apache LogFormat strings.)

So let's go back to the first example:

LOGFILE log0
LOGFORMAT format1
LOGFILE log1
LOGFORMAT format2
LOGFILE log2
LOGFILE log3
Here log0 actually gets the default log format. If there are no DEFAULTLOGFORMAT commands, the default will be auto-detection. But if there are DEFAULTLOGFORMAT commands, even in another configuration file, that will be the format of log0.

The times you need to use the DEFAULTLOGFORMAT instead of the LOGFORMAT are if you want to change the format of logfiles which aren't given in a LOGFILE command -- for example, ones specified on the command line, or dragged onto the program icon on a Mac, or compiled in.


A couple more technical details and tips about LOGFORMAT commands.

The "Unix time", %U, is always recorded in GMT. So you will probably need to use a LOGTIMEOFFSET command to convert to your local timezone. Also, it's just the integer part of the time, so if you have decimals you will have to use %U.%j .

The log formats which analog can handle are those which are known as instantaneously decipherable: in practice, this means that the character which terminates a string can never occur in the string. So for example, in common format, which looks like

LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b)
if the hostname ever contained a space, the line would be marked as corrupt, because analog terminates the host at the first space, not at the first occurrence of space-dash-space, and then the rest of the line wouldn't match. Of course, hostnames should never contain spaces, so this shouldn't be a problem. There are a couple of other restrictions: if there is any date or time information, then the year, month, date, hour and minute must all be present: and the same information may not occur twice in the format (so you can't have both %m and %M, for example, because these both represent the month; make one of them a %j to have it ignored).

Sometimes you need to read one of the fields in a logfile, but not analyse it. For example, if you have a separate common log and referrer log, the referrer log might look like

http://guide-p.infoseek.com/Titles -> /~sret1/analog/
But the requests for /~sret1/analog/ would already have been counted when reading the main logfile, so you don't want to count them again now. You get round this by specifying a * in that item in the format string, like this:
LOGFORMAT (%f -> %*r)

A tip: sometimes it is more efficient to specify two or more adjacent fields to ignore with a single %j, as long as the whole group ends with a recognisable character. So common format is more efficiently specified as

LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j] "%j %r %j" %c %b)
-- in the date and time [25/Dec/1998:17:45:35 +0000], the seconds and the timezone can be ignored with a single %j, extending until the close-bracket.

Another tip: %j can also be used to ignore whole lines, rather than just fields analog doesn't use. For example, the extended log format ignores lines beginning with # by using

LOGFORMAT #%j
and the Microsoft format ignores lines corresponding to FTP requests with
LOGFORMAT (%*S, %*u, %m/%d/%y, %h:%n:%j, %j)
If those formats had not been used, the lines would have been incorrectly marked as corrupt.
Finally, both for reference and as examples, here is a list of all the fixed formats that analog understands, together with the example lines from the previous section and their built-in definitions (split over two lines where necessary).
Common format, LOGFORMAT COMMON
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
      "GET /~sret1/ HTTP/1.0" 200 1243
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b)
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b)
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%r" %c %b)
Microsoft common format, LOGFORMAT MS-COMMON
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
      "GET /~sret1/ "HTTP/1.0" 200 1243
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%w"HTTP%j" %c %b)
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b)
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%r" %c %b)
Combined log, LOGFORMAT COMBINED
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ HTTP/1.0" 200
      1243 "http://www.site.com/" "Mozilla/2.0 (X11; I; HP-UX A.09.05)"
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B")
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b "%f" "%B")
LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%r" %c %b "%f" "%B")
Referrer log, LOGFORMAT REFERRER
[25/Dec/1998:17:45:35] http://www.site.com/ -> /~sret1/
or http://www.site.com/ -> /~sret1/
LOGFORMAT ([%d/%M/%Y:%h:%n:%j] %f -> %*r)
LOGFORMAT (%f -> %*r)
Browser log, LOGFORMAT BROWSER
[25/Dec/1998:17:45:35] Mozilla/2.0 (X11; I; HP-UX A.09.05)
LOGFORMAT ([%d/%M/%Y:%h:%n:%j] %B)
Microsoft log, North American dates, LOGFORMAT MICROSOFT-NA
192.64.25.41, -, 12/25/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10,
      2178, 303, 1243, 200, 0, GET, /~sret1/, -,
192.64.25.41, -, 12/25/2001, 17:45:35, W3SVC1, HOST1, 192.16.225.10,
      2178, 303, 1243, 200, 0, GET, /~sret1/, -,
LOGFORMAT (%S, %u, %m/%d/%Z, %h:%n:%j, W3SVC%j, %j, %v,
      %T, %j, %b, %c, %j, %j, %r, %q,)
LOGFORMAT (%*S, %*u, %m/%d/%Z, %h:%n:%j, %j)
Microsoft log, international dates, LOGFORMAT MICROSOFT-INT
192.64.25.41, -, 25/12/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10,
      2178, 303, 1243, 200, 0, GET, /~sret1/, -,
192.64.25.41, -, 25/12/2001, 17:45:35, W3SVC1, HOST1, 192.16.225.10,
      2178, 303, 1243, 200, 0, GET, /~sret1/, -,
LOGFORMAT (%S, %u, %d/%m/%Z, %h:%n:%j, W3SVC%j, %j, %v,
      %T, %j, %b, %c, %j, %j, %r, %q,)
LOGFORMAT (%*S, %*u, %d/%m/%Z, %h:%n:%j, %j)
WebSite log, North American dates, LOGFORMAT WEBSITE-NA
12/25/98 17:45:35  jay.bird.com  host1  Server  fred  GET  /~sret1/
   http://www.site.com/    Mozilla/2.0 (X11; I; HP-UX A.09.05)  200  1243  2178
LOGFORMAT (%m/%d/%y %h:%n:%j\t%S\t%v\t%j\t%u\t%j\t%r\t%f\t%j\t%B\t%c\t%b\t%T)
WebSite log, international dates, LOGFORMAT WEBSITE-INT
25/12/98 17:45:35  jay.bird.com  host1  Server  fred  GET  /~sret1/
   http://www.site.com/    Mozilla/2.0 (X11; I; HP-UX A.09.05)  200  1243  2178
LOGFORMAT (%d/%m/%y %h:%n:%j\t%S\t%v\t%j\t%u\t%j\t%r\t%f\t%j\t%B\t%c\t%b\t%T)
MacHTTP format, LOGFORMAT MACHTTP
12/25/98  17:45:35   OK    jay.bird.com  /~sret1/  1243
LOGFORMAT (%m/%d/%y\t%h:%n:%j \t%C%w%S\t%r\t%b)
The extended log, Netscape log and WebSTAR log don't have any built-in formats: analog constructs their formats from their header lines.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/lowmem.html000066400000000000000000000077001406366436600165730ustar00rootroot00000000000000 Readme for analog -- coping with low memory [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Coping with low memory


This section describes how to run analog with lower amounts of memory. For a normal logfile this will make analog run a bit slower. But if your computer is running out of memory when running analog, it will go very slowly indeed: so for large logfiles, this can make analog run much faster, or even make an analysis possible that wouldn't otherwise be possible.

Recall what happens to an item when it has been read in. First it is aliased. Secondly, it is checked to see whether it is included or excluded. Then finally, if all the items are wanted, one request is added to its score.

Normally the name of the item is saved before the aliasing takes place. This avoids analog having to do the aliasing again next time the same item is encountered. But this can take up more memory than necessary. So there is a family of LOWMEM commands provided, which tell analog to record the name at a later stage, or even not at all. If you use these commands, analog will have to do a bit more work than normal, but it will use less memory. On most sites, the hosts take up most of the memory, so I'll use the HOSTLOWMEM command as an example.

The command

HOSTLOWMEM 0
represents the normal case, when the hostname is recorded before being aliased. If you specify
HOSTLOWMEM 1
instead, then the hostname is not recorded until after the aliasing. If you specify
HOSTLOWMEM 2
then the name is not recorded until after the inclusion and exclusion lookup has been done as well. And finally, if you give the command
HOSTLOWMEM 3
then the hostname is not saved at all, and the Host Report will not be constructed, even if you've asked for it. (The Domain Report can still be constructed though.) The analogous commands for the other items are FILELOWMEM, BROWLOWMEM, REFLOWMEM, USERLOWMEM and VHOSTLOWMEM.
So what should you do if analog runs out of memory? First, look in your logfile to see which items are taking up all the memory. If you have lots of different filenames, ones you generate on the fly for example, you would want to use the FILELOWMEM commands. Maybe you could combine all the similar filenames into one with a FILEALIAS command, and use FILELOWMEM 1. (If you have lots of different filenames caused by different search arguments, then using ARGSEXCLUDE might solve your problem without any need to use LOWMEM at all). But for most users, it is the hostnames which cause the problem. If you only want to analyse requests from certain hosts, then you could use HOSTLOWMEM 2 to exclude the others before recording those that are left. If you don't want to exclude any hosts, and you haven't got enough memory to record all the different hostnames, then HOSTLOWMEM 3 would be appropriate.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/mailing.html000066400000000000000000000201201406366436600167020ustar00rootroot00000000000000 Readme for analog -- mailing lists [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Mailing lists


I welcome mail about analog, both praise and bug reports! I and others are also usually happy to help people who have trouble with analog: it helps me to find bugs, and know where the documentation is unclear.

If your statistics are provided by someone else, for example your web hosting company, you should normally get support from them. They're the only ones who can configure analog to your specifications.

There are three mailing lists for analog.

analog-announce
Announcements about analog. I post to this when there are new versions, for example. Only gets a few messages a year. You can join this list by filling in the form at http://lists.meer.net/mailman/listinfo/analog-announce
analog-help
Getting help with analog from experienced users. This is the place to go if you have trouble setting up or configuring the program. Usually you will get a swift reply. You have to subscribe to the list before you can send a message. This is necessary to deter spammers. You can subscribe at http://lists.meer.net/mailman/listinfo/analog-help
You can also read this list as a forum (but not post) or as a newsgroup.
analog-author
This just goes to me. Use for private comments, or other things that would not be suitable for the analog-help list. I'm pretty bad at answering my mail, so don't expect a swift reply. Don't use this address for user support questions: they will be ignored.
There is also an independent Japanese analog mailing list. And there are also companies offering support for analog on a commercial basis: you can find a list of them on the analog home page.
If you want to get help with analog, please check the following simple things first. (For articles on how to ask in such a way that you'll get a useful answer, I recommend Eric Raymond's How To Ask Questions The Smart Way and Simon Tatham's How to Report Bugs Effectively.)
  1. Read the FAQ. Maybe I've answered your question already. If I have, I'll just direct you to the FAQ, not answer it again.
  2. If analog produced some error messages when it ran, they probably indicate what went wrong. Read the section on Errors and warnings.
  3. If your question is "Will this command have that effect?", why not try it and see!
  4. If you think you've found a bug, read the list of known bugs at my site, to see if your bug is already known about.
  5. Read the other relevant pages of the Readme, particularly the sections on Starting to use analog and Customising analog. You may also find the index useful. We don't appreciate people who are too lazy to read the documentation. (If the documentation is unclear, or the relevant paragraph is too well hidden, then that's a different matter. Of course I want to know about that.)
  6. Have a look in the web archives of the mailing list to see if your question has already been answered there.
  7. If analog isn't doing what you thought you asked it to, then run it with the SETTINGS ON configuration command, and see what options it thinks it's meant to be using.
I'm sorry to be so fussy, but a lot of the mail on the list really needn't have been sent at all, and just wastes the time of everybody on the list. As I say, I really do welcome genuine mail.

If you still need help, subscribe to the to the analog-help mailing list using the form at http://lists.meer.net/mailman/listinfo/analog-help, and then send your mail to analog-help@lists.meer.net. Please do the following when you send mail to the list.

  1. Describe exactly what you did, what you expected, and what the computer did. Include the exact text of any error messages, not a précis.
  2. Mention which version of analog you are using, on which operating system.
  3. Although you should obey the first two points, you should also try and send a short message. Most people don't bother to read long messages.
  4. Give your mail a subject line which indicates immediately what aspect of analog it is about. (This is useful for the archives).
  5. Do not send long files or attachments unless you're asked to. We do not want to see your configuration file, your header file, your output file, or any logfile over 10 lines long. They are almost always useless to us. And anyway, excessively long messages will be rejected by the mailing list server.

If you want to send a private message to me, you can send it to me at analog-author@lists.meer.net. Please don't use this address for user support questions: I don't have time to answer them, and I'll just ignore them.
There are several web archives of the analog-help list. You can find them at these places: You can also find archives of the analog-announce list at If you prefer Usenet format, you can also read the groups as newsgroups at Many thanks to meer.net for providing these mailing lists for me, to GMane for the mail-to-news gateways, and to all those who provide list archives.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/map.html000066400000000000000000000063531406366436600160530ustar00rootroot00000000000000 Readme for analog -- map of Readme [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Map of Readme



Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/meaning.html000066400000000000000000000034641406366436600167140ustar00rootroot00000000000000 Readme for analog -- what the results mean [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What the results mean


This section of the Readme is about understanding the results analog produces. It's divided into three subsections.
  • How the web works. This section discusses what happens when somebody connects to your web site, and what you can and can't find out about them. If you think that you can get statistics on how many people have visited your web site (or want to know why you can't), then this section is for you.
  • Analog's reports. This section gives a summary of analog's reports, what they contain, and which commands influence each one.
  • Analog's definitions. This section gives precise details on all of analog's terminology, exactly what is counted in each report, and so on.

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/othreps.html000066400000000000000000000432211406366436600167550ustar00rootroot00000000000000 Readme for analog -- other reports [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Other reports


This section deals with the non-time reports. There are quite a lot of commands which control these reports, although we've seen some of them already.

First, these reports have COLS commands, just like the time reports. (See the section on Time reports for how to use these commands.) But for these reports, several additional columns are available. Here is the full list of columns for the non-time reports

R
Number of requests
r
Percentage of the requests
S
Number of requests in the last 7 days
s
Percentage of the requests in the last 7 days
P
Number of page requests
p
Percentage of the page requests
Q
Number of page requests in the last 7 days
q
Percentage of the page requests in the last 7 days
B
Number of bytes transferred
b
Percentage of the bytes
C
Number of bytes transferred in the last 7 days
c
Percentage of the bytes in the last 7 days
d
Date of last access
D
Date and time of last access
e
Date of first access
E
Date and time of first access
N
The number of the item in the list
So, for example,
REQCOLS NRSD
counts the files in the Request Report, listing the number of requests for each, the number of requests for each in the last 7 days, and the time when each was last requested. The full list of COLS commands for non-time reports is HOSTCOLS, REDIRHOSTCOLS, FAILHOSTCOLS, ORGCOLS, DOMCOLS, REQCOLS, DIRCOLS, TYPECOLS, SIZECOLS, PROCTIMECOLS, REDIRCOLS, FAILCOLS, REFCOLS, REFSITECOLS, SEARCHQUERYCOLS, SEARCHWORDCOLS, INTSEARCHQUERYCOLS, INTSEARCHWORDCOLS, REDIRREFCOLS, FAILREFCOLS, BROWREPCOLS, BROWSUMCOLS, OSCOLS, VHOSTCOLS, REDIRVHOSTCOLS, FAILVHOSTCOLS, USERCOLS, REDIRUSERCOLS, FAILUSERCOLS and STATUSCOLS. Not every column is allowed in every report, but if you specify an illegal one, analog will warn you about it.
Next you need to know how use a SORTBY command to specify how the reports should be sorted. There are ten possible ways of sorting reports:
REQUESTS
total number of requests
REQUESTS7
requests within the last 7 days
PAGES
total requests for pages
PAGES7
requests for pages within the last 7 days
BYTES
total bytes transferred
BYTES7
bytes transferred within the last 7 days
FIRSTDATE
time of first request
DATE
time of most recent request
ALPHABETICAL
alphabetically
RANDOM
unsorted, sometimes useful for speed in very long reports
For example, the command
HOSTSORTBY ALPHABETICAL
will sort the Host Report alphabetically. The full list of SORTBY commands is HOSTSORTBY, REDIRHOSTSORTBY, FAILHOSTSORTBY, ORGSORTBY, DOMSORTBY, REQSORTBY, DIRSORTBY, TYPESORTBY, REDIRSORTBY, FAILSORTBY, REFSORTBY, REFSITESORTBY, SEARCHQUERYSORTBY, SEARCHWORDSORTBY, INTSEARCHQUERYSORTBY, INTSEARCHWORDSORTBY, REDIRREFSORTBY, FAILREFSORTBY, BROWREPSORTBY, BROWSUMSORTBY, OSSORTBY, VHOSTSORTBY, REDIRVHOSTSORTBY, FAILVHOSTSORTBY, USERSORTBY, REDIRUSERSORTBY, FAILUSERSORTBY and STATUSSORTBY. Again, not every sort method is possible in every report, but you'll be warned if you choose an illegal one.

There is one known bug concerned with SORTBY ALPHABETICAL. The report is sorted before any output alias is applied. This means that if an output alias has been specified for the report, then the report may appear not to be sorted correctly.


You can also specify a FLOOR for most reports, saying how much activity an item needs before it is listed on the report. (Other items will just be accumulated together in the "not listed" line at the bottom of the report.) There are lots of possible ways of specifying floors, which I'll list here, using the DOMFLOOR (Domain Report FLOOR) command as an example. Essentially each one consists of a number indicating the level of the floor, followed by a letter indicating the floor criterion.
DOMFLOOR 1000r       # all domains with at least 1000 requests
DOMFLOOR 100s        # at least 100 requests within the last 7 days
DOMFLOOR 1000p       # at least 1000 requests for pages
DOMFLOOR 100q        # at least 100 requests for pages within the last 7 days
DOMFLOOR 1000000b    # at least 1,000,000 bytes transferred
DOMFLOOR 1kb         # at least 1 kilobyte (1024 bytes)
DOMFLOOR 10.5Mc      # at least 10.5Mb within the last 7 days
DOMFLOOR 0.5%r       # 0.5% of the total requests in the Domain Report
                     # (ditto %s, %p etc.)
DOMFLOOR 0.5:r       # 0.5% of the maximum number of requests for any domain
                     # (ditto :s, :p etc.)
DOMFLOOR 970701d     # last access since 1st July 1997
DOMFLOOR 970701e     # first access since 1st July 1997
DOMFLOOR -00-01-00d  # last access in last month (see
                     # documentation on FROM and TO commands)
DOMFLOOR -100r       # domains with top 100 number of requests
                     # (ditto -100s, p, q, b, c, d, or e)
The full list of FLOOR commands is HOSTFLOOR, REDIRHOSTFLOOR, FAILHOSTFLOOR, DOMFLOOR, ORGFLOOR, REQFLOOR, DIRFLOOR, TYPEFLOOR, REDIRFLOOR, FAILFLOOR, REFFLOOR, REFSITEFLOOR, SEARCHQUERYFLOOR, SEARCHWORDFLOOR, INTSEARCHQUERYFLOOR, INTSEARCHWORDFLOOR, REDIRREFFLOOR, FAILREFFLOOR, BROWREPFLOOR, BROWSUMFLOOR, OSFLOOR, VHOSTFLOOR, REDIRVHOSTFLOOR, FAILVHOSTFLOOR, USERFLOOR, REDIRUSERFLOOR, FAILUSERFLOOR and STATUSFLOOR. Once again, not every floor method is legal for every report, but you'll be warned if you try and choose an illegal one.
I've already told you about how to turn each report on and off from the command line using its code letter. In fact, you can specify the SORTBY and the FLOOR in the same command. Take the example of the Referrer Report. If you follow the +f (to turn the report on) with a letter, it represents the sort method according to the following code:
r
REQUESTS
s
REQUESTS7
p
PAGES
q
PAGES7
b
BYTES
c
BYTES7
d
DATE
e
FIRSTDATE
a
ALPHABETICAL
x
RANDOM
You can then, or alternatively, use one of the above FLOOR formats to specify the floor. If you specify a SORTBY, you can also leave off the last letter of the floor, and analog will guess it according to the sort method: the floor will be the same as the sort method, or by requests if the sort method is ALPHABETICAL or RANDOM. Here are four examples:
+fp
means turn the Referrer Report on and sort it by page requests, but says nothing about the floor;
+f100s
means list all referrers with at least 100 requests in the last 7 days, but says nothing about the sort method;
+fb10000
means list all referrers with at least 10,000 bytes, sorted by bytes;
+fa-000101d
means list all referrers with accesses this year, sorted alphabetically.

Each of these reports can have a pie chart drawn at the top of it. The charts can be turned on and off, or plotted by a different criterion, using the CHART commands. For example,
REQCHART OFF
will stop you getting a pie chart on the Request Report, whereas
REQCHART ON
will turn it back on. You can also use the following arguments to plot the chart by a specific variable.
REQUESTS
total number of requests
REQUESTS7
requests within the last 7 days
PAGES
total requests for pages
PAGES7
requests for pages within the last 7 days
BYTES
total bytes transferred
BYTES7
bytes transferred within the last 7 days
By default, the chart will be plotted by the SORTBY if that's one of the above six variables, or else by the FLOOR if that's one of the six, or failing both of those by REQUESTS. Usually you just want to stick to the default, and analog will warn you if you could have used the SORTBY or FLOOR and requested something different.

The full list of CHART commands is HOSTCHART, REDIRHOSTCHART, FAILHOSTCHART, ORGCHART, DOMCHART, REQCHART, DIRCHART, TYPECHART, REDIRCHART, FAILCHART, REFCHART, REFSITECHART, SEARCHQUERYCHART, SEARCHWORDCHART, INTSEARCHQUERYCHART, INTSEARCHWORDCHART, REDIRREFCHART, FAILREFCHART, BROWREPCHART, BROWSUMCHART, OSCHART, VHOSTCHART, REDIRVHOSTCHART, FAILVHOSTCHART, USERCHART, REDIRUSERCHART, FAILUSERCHART, STATUSCHART, SIZECHART and PROCTIMECHART. Again, not every chart method is available for every report. You can also use

ALLCHART ON
ALLCHART OFF
to turn them all on or off simultaneously.

The pie charts are normally written to the same directory as the OUTFILE. But you can specify a different location using the CHARTDIR and LOCALCHARTDIR commands. If the OUTFILE is standard output, you must use these commands, or you will not get any pie charts. Also, if you are writing two output files to the same directory, you must use these commands, or one set of images will overwrite the other. And you also need to use these commands if you are using the form interface, but there are additional issues in that case.

You have to use both of the commands before they have any effect. The CHARTDIR is the location of the pie chart directory on your server, similar to the IMAGEDIR; it's used for putting in the <img> tag to include the image. The LOCALCHARTDIR is the location on your local disk; it's where the image is written to. For example, you might have

CHARTDIR /images/
LOCALCHARTDIR /usr/local/apache/htdocs/images/
to put the pie charts in locations like /usr/local/apache/htdocs/images/dom.png and link to them like <img src="/images/dom.png">. On Windows, you will need to put the LOCALCHARTDIR in quotes, to stop the backslash at the end of the line being interpreted to mean that the command continues on the next line. For example,
LOCALCHARTDIR "\webimages\analog\"
Actually, the CHARTDIR and LOCALCHARTDIR are just prefixes to the filename, so you can specify something like
CHARTDIR /stats/rep1
LOCALCHARTDIR /usr/local/htdocs/stats/rep1
to put the pie charts in locations like /usr/local/htdocs/stats/rep1dom.png and link to them like <img src="/stats/rep1dom.png">. Also the names can contain date codes in the same way as the LOGFILE and OUTFILE.

If you compiled your own version of analog, and you used your version of libgd instead of mine (see the Makefile for how to do this), then you can use the command

JPEGCHARTS ON
to make the charts in JPEG format instead of PNG. (See the PNGIMAGES command for how to make the bar charts in the time reports into gif's instead of png's.)

Here are the exact rules for which wedges are plotted in the pie chart. Up to ten wedges, plus "Other", are drawn, but wedges are only drawn if they are large enough. Also, wedges are only drawn if the item is listed in the main table for the report. And the whole chart will not be plotted if it would contain only one wedge.

If you want to plot more detail on the pie charts, for example Windows 98 & Windows NT instead of just Windows on the Operating System Report chart, see the next section.


You can list the time period covered by each report. This is off by default because it uses a lot of memory to calculate it, but if different reports cover different time periods (which can happen if your log format has changed at some point), it's useful to turn it on with the command
REPORTSPAN ON
There is also a command called REPORTSPANTHRESHOLD (which can be abbreviated RSTHRESH). This says that each report span should only be listed if it differs from the overall span of the whole report -- listed at the top of the page -- by at least this many minutes at one end. For example,
REPORTSPANTHRESHOLD 60
will only list a report span if that report starts at least an hour after the start of the logfile, or ends at least an hour before the end of the logfile. You can set
REPORTSPANTHRESHOLD 0
to make sure that the report span is listed on all the reports.
We've already seen some other commands affecting what was listed in the non-time reports. The output INCLUDE and EXCLUDE commands specified lines to omit from each report, and the output alias commands specified some aliasing to do on the names before they were listed. There were also LINKINCLUDE and LINKEXCLUDE commands to control what was linked to in the reports. You might want to have another look at these paragraphs.

There's one other command which affects the links in the Request Report, Redirection Report and Failure Report. The command BASEURL prepends an additional string to the URLs in the target of the link. For example, after the command

BASEURL http://www.statslab.cam.ac.uk
/~sret1/ will be linked to http://www.statslab.cam.ac.uk/~sret1/, not just to /~sret1/. This is very useful if you want to display the statistics on a different server from the server they refer to. If you want the file to be listed as http://www.statslab.cam.ac.uk/~sret1/, rather than just to be linked to that address, you need to use the second argument to the LOGFILE command instead.

In the next section, we'll look at commands for generating hierarchical reports, which are closely related to the commands in this section.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/output.html000066400000000000000000000626661406366436600166470ustar00rootroot00000000000000 Readme for analog -- configuring the output [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Configuring the output


So far we have mainly discussed commands which control how analog reads the logfiles. We now get on to commands for configuring the output.
First, you can change the style of the output using the OUTPUT command. There are seven possible output styles, called XHTML, HTML, PLAIN, ASCII, XML, LATEX and COMPUTER.

XHTML is the default. It produces web pages in XHTML 1.0. HTML produces web pages in HTML 2.0.

PLAIN produces plain text files, and ASCII is the same as PLAIN except that it uses all ASCII characters (no accents etc.) if possible. (This is because some applications don't understand accented characters).

LATEX produces LaTeX code which can be turned into PDF if you have the pdflatex command installed. (If you want to use the ordinary latex command, specify PDFLATEX OFF.) It's only available with certain European languages (US-ASCII, ISO-8859-1 and ISO-8859-2 character sets). Yes, I know it gives overfull hboxes sometimes.

COMPUTER is a special format suitable for reading by a computer (useful for reading into a spreadsheet, or post-processing with a graphics package, for example). There is a separate section about this format later.

XML produces an XML output which is an alternative format for post-processing. The DTD for the XML output is distributed with the program. You can find more information about the XML style, and an example of a post-processing program, at http://timian.jessen.ch/.

XMLDTD allows you to specify a fully qualifiable path to the XML Document Type Definition (DTD) file to be used by XML parsers. e.g. XMLDTD "http://www.c-amie.co.uk/qlink/?id=67£

XMLDTD only has effect when using OUTPUT XML

As well as a command like

OUTPUT PLAIN
you can also select PLAIN style with the command line argument +a, and XHTML with the command line argument -a.

You can also specify OUTPUT NONE for no output, if you are producing a cache file.


Next, you can change the language of the output. There are two ways to do this. The usual way is to use the LANGUAGE command. For example, the command
LANGUAGE FRENCH
will give you the output in French. The available languages at the moment are ARMENIAN, BASQUE, BULGARIAN (Windows-1251), BULGARIAN-MIK (MIK-16), CATALAN, SIMP-CHINESE (GB2312), TRAD-CHINESE (Big5), CZECH (ISO Latin 2), CZECH-1250 (Windows-1250), DANISH, DUTCH, ENGLISH, US-ENGLISH, FINNISH, FRENCH, GERMAN, HUNGARIAN, INDONESIAN, ITALIAN, JAPANESE-EUC (EUC-JP), JAPANESE-JIS (ISO-2022-JP), JAPANESE-SJIS (SJIS), JAPANESE-UTF (UTF-8), KOREAN, LATVIAN, NORWEGIAN (Bokmål), NYNORSK, POLISH, PORTUGUESE, BR-PORTUGUESE, RUSSIAN (KOI8-R), RUSSIAN-1251 (Windows-1251), SERBIAN, SLOVAK (ISO Latin 2), SLOVAK-1250 (Windows-1250), SLOVENE (ISO Latin 2), SLOVENE-1250 (Windows-1250), SPANISH, SWEDISH, SWEDISH-ALT (alternative translation avoiding Anglicisms), TURKISH and UKRAINIAN.

The following languages were available for previous versions of analog, but have not yet been translated for version 5: BOSNIAN, CROATIAN, GREEK, ICELANDIC, LITHUANIAN and ROMANIAN. As and when they are translated, they will be added to the analog home page. If you want to translate any of them (or any other language), I would be delighted! See below.

The other way to specify a language is to use the LANGFILE command. This is useful if you want to download a new language from the analog home page, or if you want to translate one yourself, or even if you want to change some words or phrases or the way the dates and times are formatted in the output. The LANGFILE command tells analog in which file to find the various words and phrases for a new language. For example, the command

LANGFILE guarani.lng   # or
LANGFILE /usr/etc/httpd/analog/lang/guarani.lng
would read from that file. If the name of the file doesn't include a directory, it will be looked for wherever analog normally expects to find its language files.

Some languages also have domains files or report descriptions files available. These are normally selected automatically by the LANGUAGE command. But you can tell analog to use different ones with the DOMAINSFILE and DESCFILE commands. Also, some languages have translations of the form interface or configuration file.

If you want to translate another language, I would be delighted! Do contact me first to make sure that no-one else is already translating the same language. The file README.txt in the language directory, and the English language file, contain some brief instructions for translating new languages.

Equally, if you find any mistakes in the output in different languages, please do let me know because I'm not able to check them all myself!


You can change which file the output goes to with a command like
OUTFILE stats.htm
or with a command line argument like +Ostats.htm. If you use the filename - or stdout, the output will go to standard output, which is normally the screen, but Unix users might like to redirect it to another file or even into a pipe. You can also use an absolute path name, like
OUTFILE /usr/bin/httpd/htdocs/stats.html  # Unix
OUTFILE "Hard Disk:Server Apps:WebSTAR:Analog:Report.html" # Mac
If the name of the OUTFILE doesn't include a directory, it will be put wherever analog expects to put its output files. (This location is built in when the program is compiled.) For example, on Windows it would be in the same folder as the analog executable. But if you use the +O command line argument, the file is within the current directory.

You can include date codes in the OUTFILE in exactly the same way as for the LOGFILE. So for example,

OUTFILE stats%y%M%D.html
will produce filenames like stats990501.html. As with the LOGFILE, the date used is the TO date if one was specified, and otherwise the time of the start of the program.
Next, you need to know how to turn the different reports on and off. There are 44 different reports which analog can produce, if your web server has been configured to record the necessary data in the logfiles. Each one has a short name, and a code letter or number, as follows. (Note that the code letters are case sensitive: Z is quite different from z, for example).
x  GENERAL         General Summary
1  YEARLY          Yearly Report
Q  QUARTERLY       Quarterly Report
m  MONTHLY         Monthly Report
W  WEEKLY          Weekly Report
D  DAILYREP        Daily Report
d  DAILYSUM        Daily Summary
H  HOURLYREP       Hourly Report
h  HOURLYSUM       Hourly Summary
w  WEEKHOUR        Hour of the Week Summary
4  QUARTERREP      Quarter-Hour Report
6  QUARTERSUM      Quarter-Hour Summary
5  FIVEREP         Five-Minute Report
7  FIVESUM         Five-Minute Summary
S  HOST            Host Report
l  REDIRHOST       Host Redirection Report
L  FAILHOST        Host Failure Report
Z  ORGANISATION    Organisation Report
o  DOMAIN          Domain Report
r  REQUEST         Request Report
i  DIRECTORY       Directory Report
t  FILETYPE        File Type Report
z  SIZE            File Size Report
P  PROCTIME        Processing Time Report
E  REDIR           Redirection Report
I  FAILURE         Failure Report
f  REFERRER        Referrer Report
s  REFSITE         Referring Site Report
N  SEARCHQUERY     Search Query Report
n  SEARCHWORD      Search Word Report
Y  INTSEARCHQUERY  Internal Search Query Report
y  INTSEARCHWORD   Internal Search Word Report
k  REDIRREF        Redirected Referrer Report
K  FAILREF         Failed Referrer Report
B  BROWSERREP      Browser Report
b  BROWSERSUM      Browser Summary
p  OSREP           Operating System Report
v  VHOST           Virtual Host Report
R  REDIRVHOST      Virtual Host Redirection Report
M  FAILVHOST       Virtual Host Failure Report
u  USER            User Report
j  REDIRUSER       User Redirection Report
J  FAILUSER        User Failure Report
c  STATUS          Status Code Report
For details on what the various reports mean, and a summary of the commands which control them, see the section on Analog's reports.

You can turn each report on or off with configuration commands like

FIVEREP OFF
REFSITE ON
or by using command line arguments like -5 and +s. You can also turn all reports except the General Summary on or off with the commands ALL ON and ALL OFF, or with the command line arguments +A and -A.
You can turn the descriptions of each report off with the command
DESCRIPTIONS OFF
Even if DESCRIPTIONS is ON, the descriptions will only appear if analog can find a report descriptions file in your language, or if you specify one using the DESCFILE command: for example,
DESCFILE descriptions.txt
If the name of the descriptions file doesn't include a directory, it will be looked for wherever analog normally expects to find its language files.

You can turn the "Go To" lines in the output off with the command

GOTOS OFF
GOTOS ON turns them on again, and GOTOS FEW puts the "Go To" lines just at the top and bottom. GOTOS OFF can be abbreviated with the -X command line argument, and GOTOS ON with +X.

You can turn off the "Program started at" line at the top of the output, and the "Running Time" line at the bottom, with the command

RUNTIME OFF
and turn them on again with RUNTIME ON.

The figures in parentheses in the General Summary are for the last seven days: either the seven days before the TO time, or if no TO time is given, the seven days before the time of the program start. The figures for the last seven days are normally included if some, but not all, of the requests fall in those seven days; but you can turn them off by means of the command

LASTSEVEN OFF
Of course LASTSEVEN ON turns them on again.

You can change the order of the reports by means of the REPORTORDER command. You should list the code letters for all possible reports in the order you want them. Non-alphanumeric characters are ignored and so can be used as separators. For example,

REPORTORDER x-1QmdDhHw4567W-cPz-ritEIYy-SlLZo-sNnfKk-ujJ-vMR-bBp

You can turn the lines in General Summary on and off individually using the GENSUMLINES command. The default is
GENSUMLINES ALL
meaning all available lines. (You always only get the ones relevant to your logfile though.) You can turn lines off using a command like
GENSUMLINES -KL
(to turn off lines K & L) and turn them on again with a command like
GENSUMLINES +K
You can specify the exact set of lines to include with a command like
GENSUMLINES CDFGHM
You now just need to know which lines have which code letters, which is given in the following table.
 
Successful requests (always listed)
B
Average successful requests per day
C
Logfile lines without status code
D
Successful requests for pages
E
Average successful requests for pages per day
F
Failed requests
G
Redirected requests
H
Requests with informational status code
I
Distinct files requested
J
Distinct hosts served
K
Corrupt logfile lines
L
Unwanted logfile entries
M
Data transferred
N
Average data transferred per day

There is a command called IMAGEDIR which tells analog where the various images used to make the output page should live. It should be a URL, not the actual location on your disk, and it should include the final slash. For example, you could have
IMAGEDIR img/   # relative URL: within the same directory as the output
IMAGEDIR /img/  # off the root directory of your server
IMAGEDIR http://www.myother.server.com/img/  # on another server
Some people are confused about the IMAGEDIR. It's just put in the <img> tags in the output. You can see its effect if you look at the HTML source of the output page.

You can use gif images instead of png's for the bar charts by specifying

PNGIMAGES OFF
PNGIMAGES doesn't affect the pie charts, which are always png's: but see the JPEGCHARTS command for something similar.
There is a command called ANONYMIZERURL which adds a URL prefix before URLs appearing as hyperlinks on the Referring URL report and the Referring Site report.

The ANONYMIZERURL setting is designed to fix a security issue by which access to the statistics page URL is leaked to the outbound server when clicked by the user. This can be used as a means to mask your stats pages from the public domain.

You can specify your own hyperlink to either your own redirector script or to a public anonimzer service. If set, the hyperlink is entered as a prefix to the original URL.

ANONYMIZERURL https://myanonservice.net?url=
ANONYMIZERURL https://anonymizer.info/?
Note that the ANONYMIZERURL settings only works with HTML and XHTML OUTPUT types. It has no impact on XML or COMPUTER (Report Magic) OUTPUT types.
There are four commands which affect the top line of the output. First, the LOGO and LOGOURL commands allow you to replace the analog logo with another image (for example, your organisation's logo). You can say
LOGO picture.gif  # for this file
LOGO /images/picture2.gif  # a different file
LOGO none         # for no logo
The logo is assumed to be inside the IMAGEDIR unless it starts with a slash, or contains ://

The LOGOURL command specifies a URL to link the logo to. If you change the LOGO, you probably want to change the LOGOURL as well. For example,

LOGOURL http://www.mycompany.com/
LOGOURL none   # for no link
The LOGOURL command only works with the XHTML output style, not HTML 2.0.

There are commands HOSTNAME and HOSTURL which affect the name and link at the end of the title line. For example, I might specify

HOSTNAME "Stephen Turner"
HOSTURL  http://homepage.ntlworld.com/adelie/stephen/
to generate the title "Web Server Statistics for Stephen Turner". Again, you can use none as the HOSTURL to specify no link. Analog will normally translate characters in the hostname to HTML if necessary. So to include literal HTML, such as accented characters, in the output you need to precede them by a backslash, like this:
HOSTNAME "M\&uuml;ller & S\&ouml;hne"

There are commands called HEADERFILE and FOOTERFILE. These let you specify files to be inserted near the top and bottom of your output. You can also specify
HEADERFILE none
to cancel a previously-specified header file. Again, if the name of the HEADERFILE or FOOTERFILE doesn't include a directory, analog will assume a directory, specified when the program was compiled.
There is a command called STYLESHEET to specify the URL of a style sheet for the output. This allows you to change the colours etc. (See http://www.w3.org/Style/css/ for how to write a style sheet.) For example,
STYLESHEET /housestyle.css
STYLESHEET none   # to cancel it
In the XHTML output style, if you specify a style sheet, it will replace the default one, so you might prefer to use the default one as a base -- you can find it in the directory examples/css, along with some other style sheets contributed by users.

There is a command CSSPREFIX to add a prefix to all the CSS class names used in the XHTML output style. This is useful to avoid clashes with other style sheets: the disadvantage is that it will make your output longer. For example,

CSSPREFIX anlg
CSSPREFIX none    # to cancel it
Of course, if you use your own style sheet, you will have to add the CSSPREFIX to all the class names in the style sheet.
There are three related commands called SEPCHAR, REPSEPCHAR and DECPOINT. These specify single characters to be used as the thousands separator in numbers, the thousands separator within the columns in the reports, and the decimal point. Normally, these will be set automatically for the language you choose, but you can change them if you want. For example, a French user might choose
SEPCHAR " "
REPSEPCHAR none
DECPOINT ,
to make "three thousand and a quarter" look like "3 000,25" in text and "3000,25" in the reports.

There is a command called RAWBYTES. Specify RAWBYTES ON if you want the exact number of bytes to be listed, or RAWBYTES OFF if you want the number of kilobytes or Megabytes as appropriate to be listed instead.

If RAWBYTES is OFF (which is the default), then you can use the BYTESDP command to specify how many decimal places you want the bytes rounded to. The default is 2, which will display numbers like "91.26 kilobytes".


There are commands called HTMLPAGEWIDTH, PLAINPAGEWIDTH and LATEXPLAINWIDTH which specify the width of the page. Which one is used depends on whethere the output style is HTML/XHTML, PLAIN/ASCII, or LATEX. The output is not guaranteed to fit in this width, but analog will take notice of it when choosing the width of the time graphs, when sorting the Host Report alphabetically, when drawing horizontal rules, and when writing some bits of text.
There is a command called NOROBOTS which stops robots which obey the robots META tag from indexing your output page or following its links. Normally this is set to ON but you can specify NOROBOTS OFF if you don't mind robots finding your other pages this way. Note that you will stop far more robots if you also put your stats page in your robots.txt file; on the other hand, this file has to be kept up to date by the server administrator.
There is a command called LINKNOFOLLOW which appends rel="nofollow" on to external report URLs. The nofollow attribute adds additional protections to Analog output by reducing the liklihood of a public stats page from being targeted to produce SEO spam. In such an attack, a malicious user manipulates the HTTP protocol to force their page onto your Referring Site or Referring URL report, before submitting it to search engines to be indexed. The ambition is that they can use your public stats report to improve search engine rankings for their online activities.

LINKNOFOLLOW is set to LINKNOFOLLOW ON by default in Analog CE 6.0.16 and higher. To disable it set LINKNOFOLLOW OFF in your configuration file.

Note that this setting only impacts HTML and XHTML OUTPUT types. It has no effect on XML or COMPUTER (Report Magic) OUTPUT modes.


Sometimes your server is not in the same timezone as you, or at least records the times in its logfiles in a different timezone (for example GMT). So that you can get your statistics in your local time, there is a command called LOGTIMEOFFSET to change the time by a certain number of minutes. As with the LOGFORMAT command, this only affects logfiles which come later in the same configuration file.

You have to be careful using this command. Because of daylight savings time in operation in different parts of the world at different times, analog cannot attempt to convert between different timezones. So it's your responsibility to set the right offset for different times of year. For example, if you were in Chicago, but your server was recording time in GMT, you would need to specify two different time offsets, one of minus five hours for summer and one of minus six hours for winter. You would need to split your logfiles in the right places and then run commands like

LOGTIMEOFFSET -300
LOGFILE summer*.log
LOGTIMEOFFSET -360
LOGFILE winter*.log

There is also a related command called TIMEOFFSET. This tells analog how much to offset the time of the computer on which it is running (rather than the computer running the server), to get your local time.


In the following sections we shall look at some commands for configuring the output of particular reports, under the following headings: Time reports, Other reports and Hierarchical reports.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/quickref.html000066400000000000000000001221641406366436600171060ustar00rootroot00000000000000 Readme for analog -- quick reference [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Quick reference


This section is list of all of analog's configuration commands, together with a quick reference to their syntax and some examples. It's designed for those who are already familiar with the program, so it's pretty useless for trying to learn the program: to learn about the commands, read the section on Customising analog instead, or consult the index for a reference. Command line arguments aren't listed here, but there is a list of them in the index. Not all commands are available on all platforms.

This section is divided into the following parts:

Notation

The syntax for each command is given using the following notation.
"stuff"        the word stuff
x y            x followed by y
(x | y)        x or y
[x]            optional x
subset("...")  any letters from the string, in any order
perm("...")    all the letters from the string, in any order
*x             x may contain wildcards * and ? (and often comma-separated list)
x := y         x is defined to be y
COMMAND        the command under discussion
In addition, I use the following names for different types of argument.
char           a single character
string         a string
digit          a digit
number         a non-negative integer (i.e. a string of digits)
real           a non-negative real number
regexp         a Perl-syntax regular expression
file           a filename within your server's filespace;
                   e.g. /index.html
localfile      a filename within your system's filespace;
                   e.g. /usr/local/analog.html
                      or analog.html
                 if no directory specified, placed within suitable
                 directory specified at compile-time
localfmtfile   as localfile, but may contain date codes;
                   e.g. /usr/local/analog%y%M.html
referrer       a URL of a referring page;
                   e.g. http://search.yahoo.com/
URL            a URL which may be absolute, or relative to the output page;
                   e.g. images/ or /~fred/images/
                      or http://www.fred.com/images/
fmtURL         as URL, but may contain date codes

Note: I have occasionally opted for clarity above strict accuracy where I don't think it will cause any confusion!

The syntax for commands in general was given earlier: remember that an argument which contains a hash or a space must be put in quotes or parentheses.

Input and output files

Syntax
LOGFILE (*localfmtfile | "-" | "none") [prefix_string]
OUTFILE (localfmtfile | "-" | "none")
CACHEFILE (*localfmtfile | "-" | "none")
CACHEOUTFILE (localfmtfile | "-" | "none")
UNCOMPRESS *localfile program
Examples
LOGFILE /httpd/logs/*
LOGFILE c:\logs\log1,c:\logs\log2
OUTFILE "Hard Disk:Report%Y%M.html"
UNCOMPRESS *.Z "/usr/bin/uncompress -c"

LOGFORMAT commands

Syntax
format_string := (see documentation)
Apache_format_string := (see Apache documentation)
logformat := ("COMMON" | "COMBINED" | "REFERRER" | "BROWSER" | "EXTENDED" |
              "MICROSOFT-NA" | "MICROSOFT-INT" | "WEBSITE-NA" | "WEBSITE-INT" |
              "MS-EXTENDED" | "WEBSTAR-EXTENDED" | "MS-COMMON" | "NETSCAPE" |
              "WEBSTAR" | "MACHTTP" | "AUTO" | format_string)
LOGFORMAT logformat
DEFAULTLOGFORMAT logformat
APACHELOGFORMAT Apache_format_string
APACHEDEFAULTLOGFORMAT Apache_format_string
Notes
LOGFORMAT and APACHELOGFORMAT only affect logfiles occurring later in the same configuration file.
Examples
LOGFORMAT (%S - %u [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b)
DEFAULTLOGFORMAT MS-EXTENDED
APACHELOGFORMAT (%h %l %u %t \"%r\" %s %b)

ALIAS commands

1. Commands (items)
FILEALIAS, HOSTALIAS, BROWALIAS, REFALIAS, USERALIAS, VHOSTALIAS
Syntax
COMMAND *olditem ["PLAIN:"]newitem
COMMAND ("REGEXP:" | "REGEXPI:")regexp ["PLAIN:"]newitem
Notes
Aliases item in all reports. Items with the same resultant name are combined. newitem may contain $1, $2 etc., representing the *'s in olditem or the bracketed subexpressions in regexp. (PLAIN: makes $'s on the right-hand side into literal $'s.)
Examples
FILEALIAS /*/football/* /$1/soccer/$2
USERALIAS REGEXP:^([^U].*) U$1

2. Commands (reports)
TYPEALIAS, HOSTREPALIAS, REDIRHOSTALIAS, FAILHOSTALIAS, REQALIAS, REDIRALIAS, FAILALIAS, DIRALIAS, DOMALIAS, ORGALIAS, REFREPALIAS, REFSITEALIAS, REDIRREFALIAS, FAILREFALIAS, BROWREPALIAS, BROWSUMALIAS, OSALIAS, VHOSTREPALIAS, REDIRVHOSTALIAS, FAILVHOSTALIAS, USERREPALIAS, REDIRUSERALIAS, FAILUSERALIAS
Syntax
COMMAND *item ["PLAIN:"]string
COMMAND ("REGEXP:" | "REGEXPI:")regexp ["PLAIN:"]string
Notes
Aliases item on one line of one report only. $1, $2 etc. in string are interpreted as explained above.
Examples
REQALIAS /football/ "/football/ (Main football page)"
REFREPALIAS REGEXP:^(http://([^/]*\.)?(maths|stats)\.uxy\.edu.*) ([$3] $1)

3. Other commands: syntax
CASE ("SENSITIVE" | "INSENSITIVE")
USERCASE ("SENSITIVE" | "INSENSITIVE")
SEARCHCHARCONVERT ("ON" | "OFF")
DIRSUFFIX suffix
LOGTIMEOFFSET ["+" | "-"] number
TIMEOFFSET ["+" | "-"] number
304ISSUCCESS ("ON" | "OFF")
Examples
CASE SENSITIVE
DIRSUFFIX index.htm
LOGTIMEOFFSET -300

INCLUDE/EXCLUDE commands

1. Commands (items)
FILEINCLUDE, FILEEXCLUDE, HOSTINCLUDE, HOSTEXCLUDE, BROWINCLUDE, BROWEXCLUDE, REFINCLUDE, REFEXCLUDE, USERINCLUDE, USEREXCLUDE, VHOSTINCLUDE, VHOSTEXCLUDE
Syntax
COMMAND (*item | "")
COMMAND ("REGEXP:" | "REGEXPI:")regexp
Notes
Excludes all logfile entries containing an excluded item from all reports. Includes and excludes are done after aliases, so the item is the aliased name, if applicable. HOSTINCLUDE and HOSTEXCLUDE can also take IP address ranges and subnet masks.
Examples
FILEINCLUDE /jim/*,/jane/*
FILEINCLUDE REGEXP:^/~[^/]*/$
HOSTEXCLUDE proxy*.aol.com
USEREXCLUDE ""

2. Syntax (including and excluding status codes)
range := (number | number "-" number | number "-" | "-" number | "*")
STATUSINCLUDE range [, ranges]
STATUSEXCLUDE range [, ranges]
Notes
All numbers must be in the range 100-599.
Example
STATUSINCLUDE 200-299,304

3. Syntax (including and excluding dates)
partdate := ["+" | "-"] digit digit
date := partdate partdate partdate [":" partdate partdate]
FROM date
TO date
Examples
FROM 990719:1200
TO -00-0101

4. Commands (reports)
REQINCLUDE, REQEXCLUDE, REDIRINCLUDE, REDIREXCLUDE, FAILINCLUDE, FAILEXCLUDE, TYPEINCLUDE, TYPEEXCLUDE, DIRINCLUDE, DIREXCLUDE, HOSTREPINCLUDE, HOSTREPEXCLUDE, REDIRHOSTINCLUDE, REDIRHOSTEXCLUDE, FAILHOSTINCLUDE, FAILHOSTEXCLUDE, DOMINCLUDE, DOMEXCLUDE, ORGINCLUDE, ORGEXCLUDE, REFREPINCLUDE, REFREPEXCLUDE, REFSITEINCLUDE, REFSITEEXCLUDE, SEARCHQUERYINCLUDE, SEARCHQUERYEXCLUDE, SEARCHWORDINCLUDE, SEARCHWORDEXCLUDE, INTSEARCHQUERYINCLUDE, INTSEARCHQUERYEXCLUDE, INTSEARCHWORDINCLUDE, INTSEARCHWORDEXCLUDE, REDIRREFINCLUDE, REDIRREFEXCLUDE, FAILREFINCLUDE, FAILREFEXCLUDE, BROWREPINCLUDE, BROWREPEXCLUDE, BROWSUMINCLUDE, BROWSUMEXCLUDE, OSINCLUDE, OSEXCLUDE, VHOSTREPINCLUDE, VHOSTREPEXCLUDE, REDIRVHOSTINCLUDE, REDIRVHOSTEXCLUDE, FAILVHOSTINCLUDE, FAILVHOSTEXCLUDE, USERREPINCLUDE, USERREPEXCLUDE, REDIRUSERINCLUDE, REDIRUSEREXCLUDE, FAILUSERINCLUDE, FAILUSEREXCLUDE
Syntax
COMMAND *item
COMMAND ("REGEXP:" | "REGEXPI:")regexp
Notes
Excludes an excluded item from one report only. HOSTREP*, REDIRHOST* and FAILHOST* can also take IP address ranges and subnet masks.
Example
REQINCLUDE pages

5. Commands (hyperlinks)
See below.

6. Syntax (miscellaneous)
PAGEINCLUDE *file
PAGEEXCLUDE *file
ARGSINCLUDE *file
ARGSEXCLUDE *file
REFARGSINCLUDE *referrer
REFARGSEXCLUDE *referrer
ROBOTINCLUDE *browser
ROBOTEXCLUDE *browser
Notes
These can be regular expressions too.
Examples
PAGEINCLUDE *.jsp
ROBOTINCLUDE *crawler*

DNS commands

Syntax
DNSFILE localfile
DNS ("NONE" | "READ" | "LOOKUP" | "WRITE")
DNSLOCKFILE localfile
DNSGOODHOURS number
DNSBADHOURS number
DNSTIMEOUT number
Examples
DNSFILE dnscache.txt
DNS WRITE
DNSBADHOURS 48

Sub-item commands

Syntax
SUBDIR *file
SUBDOMAIN *subdomain
SUBDOMAIN subdomain name
SUBORG *subdomain
SUBTYPE *extension
SUBBROW *browser
REFDIR *referrer
Examples
SUBDIR /jim/*/*
SUBTYPE *.gz

LOWMEM commands

Commands
FILELOWMEM, HOSTLOWMEM, BROWLOWMEM, REFLOWMEM, USERLOWMEM, VHOSTLOWMEM
Syntax
COMMAND ("0" | "1" | "2" | "3")
Example
HOSTLOWMEM 3

Report commands

Commands
GENERAL, ALL, YEARLY, QUARTERLY, MONTHLY, WEEKLY, DAILYREP, DAILYSUM, HOURLYREP, HOURLYSUM, WEEKHOUR, QUARTERREP, QUARTERSUM, FIVEREP, FIVESUM, HOST, REDIRHOST, FAILHOST, ORGANISATION, DOMAIN, REQUEST, DIRECTORY, FILETYPE, SIZE, PROCTIME, REDIR, FAILURE, REFERRER, REFSITE, SEARCHQUERY, SEARCHWORD, INTSEARCHQUERY, INTSEARCHWORD, REDIRREF, FAILREF, BROWSERREP, BROWSERSUM, OSREP, VHOST, REDIRVHOST, FAILVHOST, USER, REDIRUSER, FAILUSER, STATUS
Syntax
REPORTCOMMAND ("ON" | "OFF")
Examples
ALL OFF
HOURLYREP ON

GRAPH commands

Commands
ALLGRAPH, YEARGRAPH, QUARTERLYGRAPH, MONTHGRAPH, WEEKGRAPH, DAYREPGRAPH, DAYSUMGRAPH, HOURREPGRAPH, HOURSUMGRAPH, WEEKHOURGRAPH, QUARTERREPGRAPH, QUARTERSUMGRAPH, FIVESUMGRAPH, FIVEREPGRAPH
Syntax
COMMAND ("R" | "r" | "P" | "p" | "B" | "b")
Example
ALLGRAPH B

BACK commands

Commands
ALLBACK, YEARBACK, QUARTERLYBACK, MONTHBACK, WEEKBACK, DAYREPBACK, HOURREPBACK, QUARTERREPBACK, FIVEREPBACK
Syntax
COMMAND ("ON" | "OFF")
Example
ALLBACK ON

ROWS commands

Commands
YEARROWS, QUARTERLYROWS, MONTHROWS, WEEKROWS, DAYREPROWS, HOURREPROWS, QUARTERREPROWS, FIVEREPROWS
Syntax
COMMAND number
Example
QUARTERREPROWS 192

COLS commands

1. Commands (time reports)
TIMECOLS, YEARCOLS, QUARTERLYCOLS, WEEKCOLS, MONTHCOLS, WEEKCOLS, DAYREPCOLS, DAYSUMCOLS, HOURREPCOLS, HOURSUMCOLS, WEEKHOURCOLS, QUARTERREPCOLS, QUARTERSUMCOLS, FIVEREPCOLS, FIVESUMCOLS
Syntax
cols1 := subset("RrPpBb")
COMMAND cols1
Example
MONTHCOLS bRP

2. Commands (most success reports)
HOSTCOLS, ORGCOLS, DOMCOLS, DIRCOLS, REFCOLS, REFSITECOLS, SEARCHQUERYCOLS, SEARCHWORDCOLS, INTSEARCHQUERYCOLS, INTSEARCHWORDCOLS, BROWREPCOLS, BROWSUMCOLS, OSCOLS, VHOSTCOLS, USERCOLS
Syntax
cols2 := subset("NDdEeRrSsPpQqBbCc")
COMMAND cols2
Example
USERCOLS BD

3. Syntax (Request and File Type Reports)
REQCOLS subset("NDdEeRrSspqBbCc")
TYPECOLS subset("NDdEeRrSsBbCc")
Example
TYPECOLS NRb

4. Commands (failure, redirection and Status Code reports)
REDIRCOLS, FAILCOLS, REDIRHOSTCOLS, FAILHOSTCOLS, REDIRREFCOLS, FAILREFCOLS, REDIRVHOSTCOLS, FAILVHOSTCOLS, REDIRUSERCOLS, FAILUSERCOLS, STATUSCOLS
Syntax
cols4 := subset("NDdEeRrSs")
COMMAND cols4
Example
FAILCOLS D

5. Commands (Size and Processing Time Reports)
SIZECOLS, PROCTIMECOLS
Syntax
cols5 := subset("DdEeRrSsPpQqBbCc")
COMMAND cols5
Example
SIZECOLS RB

SORTBY commands

1. Commands (most success reports)
HOSTSORTBY, ORGSORTBY, DOMSORTBY, DIRSORTBY, REFSORTBY, REFSITESORTBY, SEARCHQUERYSORTBY, SEARCHWORDSORTBY, INTSEARCHQUERYSORTBY, INTSEARCHWORDSORTBY, BROWREPSORTBY, BROWSUMSORTBY, OSSORTBY, VHOSTSORTBY, USERSORTBY, SUBDIRSORTBY, SUBDOMSORTBY, SUBORGSORTBY, SUBBROWSORTBY, SUBOSSORTBY, REFDIRSORTBY, REFARGSSORTBY
Syntax
sortby1 := ("REQUESTS" | "REQUESTS7" | "PAGES" | "PAGES7" |
            "BYTES" | "BYTES7" | "DATE" | "FIRSTDATE" |
            "ALPHABETICAL" | "RANDOM")
COMMAND sortby1
Example
DOMSORTBY ALPHABETICAL

2. Commands (Request and File Type Reports)
REQSORTBY, TYPESORTBY, REQARGSSORTBY, SUBTYPESORTBY
Syntax
sortby2 := ("REQUESTS" | "REQUESTS7" | "BYTES" | "BYTES7" |
            "DATE" | "FIRSTDATE" | "ALPHABETICAL" | "RANDOM")
COMMAND sortby2
Example
REQSORTBY REQUESTS

3. Commands (failure, redirection and Status Code reports)
REDIRSORTBY, FAILSORTBY, REDIRHOSTSORTBY, FAILHOSTSORTBY, REDIRREFSORTBY, FAILREFSORTBY, REDIRVHOSTSORTBY, FAILVHOSTSORTBY, REDIRUSERSORTBY, FAILUSERSORTBY, STATUSSORTBY, REDIRARGSSORTBY, FAILARGSSORTBY, REDIRREFARGSSORTBY, FAILREFARGSSORTBY
Syntax
sortby3 := ("REQUESTS" | "REQUESTS7" | "DATE" | "FIRSTDATE" |
            "ALPHABETICAL" | "RANDOM")
COMMAND sortby3
Example
FAILSORTBY DATE

FLOOR commands

Commands (top-level)
HOSTFLOOR, REDIRHOSTFLOOR, FAILHOSTFLOOR, ORGFLOOR, DOMFLOOR, REQFLOOR, DIRFLOOR, TYPEFLOOR, REDIRFLOOR, FAILFLOOR, REFFLOOR, REFSITEFLOOR, SEARCHQUERYFLOOR, SEARCHWORDFLOOR, INTSEARCHQUERYFLOOR, INTSEARCHWORDFLOOR, REDIRREFFLOOR, FAILREFFLOOR, BROWREPFLOOR, BROWSUMFLOOR, OSFLOOR, VHOSTFLOOR, REDIRVHOSTFLOOR, FAILVHOSTFLOOR, USERFLOOR, REDIRUSERFLOOR, FAILUSERFLOOR, STATUSFLOOR
Commands (lower levels)
REQARGSFLOOR, REDIRARGSFLOOR, FAILARGSFLOOR, REFARGSFLOOR, REDIRREFARGSFLOOR, FAILREFARGSFLOOR, SUBDIRFLOOR, SUBDOMFLOOR, SUBORGFLOOR, SUBTYPEFLOOR, SUBBROWFLOOR, SUBOSFLOOR, REFDIRFLOOR
Syntax
partdate := ["+" | "-"] digit digit
date := partdate partdate partdate [":" partdate partdate]
COMMAND number ("r" | "s" | "p" | "q")
COMMAND number ["k" | "M" | "G" | "T" | "P" | "E" | "Z" | "Y"] ("b" | "c")
COMMAND real ("%" | ":") ("r" | "s" | "p" | "q" | "b" | "c")
COMMAND date ("d" | "e")
COMMAND "-" number ("r" | "s" | "p" | "q" | "b" | "c" | "d" | "e")
Notes
Actually, this syntax isn't quite correct. REQFLOOR, TYPEFLOOR, REQARGSFLOOR and SUBTYPEFLOOR aren't allowed to be of type "p" or "q"; and REDIRFLOOR, FAILFLOOR, REDIRHOSTFLOOR, FAILHOSTFLOOR, REDIRREFFLOOR, FAILREFFLOOR, REDIRVHOSTFLOOR, FAILVHOSTFLOOR, REDIRUSERFLOOR, FAILUSERFLOOR, STATUSFLOOR, REDIRARGSFLOOR, FAILARGSFLOOR, REDIRREFARGSFLOOR and FAILREFARGSFLOOR aren't allowed to be of type "p", "q", "b" or "c".
Examples
TYPEFLOOR -20r
REQARGSFLOOR 0.1%b

CHART commands

1. Commands (most success reports)
HOSTCHART, ORGCHART, DOMCHART, REQCHART, DIRCHART, REFCHART, REFSITECHART, SEARCHQUERYCHART, SEARCHWORDCHART, INTSEARCHQUERYCHART, INTSEARCHWORDCHART, BROWREPCHART, BROWSUMCHART, OSCHART, VHOSTCHART, USERCHART, SIZECHART, PROCTIMECHART
Syntax
chart1 := ("ON" | "OFF" | "REQUESTS" | "REQUESTS7" | "PAGES" | "PAGES7" |
            "BYTES" | "BYTES7")
COMMAND chart1
Example
DOMCHART BYTES

2. Commands (failure, redirection and Status Code reports)
REDIRHOSTCHART, FAILHOSTCHART, REDIRCHART, FAILCHART, REDIRREFCHART, FAILREFCHART, REDIRVHOSTCHART, FAILVHOSTCHART, REDIRUSERCHART, FAILUSERCHART, STATUSCHART
Syntax
chart2 := ("ON" | "OFF" | "REQUESTS" | "REQUESTS7")
COMMAND chart2
Example
FAILCHART ON

3. Syntax (TYPECHART)
TYPECHART ("ON" | "OFF" | "REQUESTS" | "REQUESTS7" | "BYTES" | "BYTES7")

4. Syntax (ALLCHART)
ALLCHART ("ON" | "OFF")

5. CHARTEXPAND commands
DIRCHARTEXPAND, DOMCHARTEXPAND, ORGCHARTEXPAND, TYPECHARTEXPAND, BROWCHARTEXPAND, OSCHARTEXPAND, REQCHARTEXPAND, REDIRCHARTEXPAND, FAILCHARTEXPAND, REFCHARTEXPAND, REDIRREFCHARTEXPAND, FAILREFCHARTEXPAND, REFSITECHARTEXPAND
Syntax
COMMAND item[,item...]
Example
DOMCHARTEXPAND .com,.net

Hyperlinks

Syntax
REQLINKINCLUDE *file
REQLINKEXCLUDE *file
REDIRLINKINCLUDE *file
REDIRLINKEXCLUDE *file
FAILLINKINCLUDE *file
FAILLINKEXCLUDE *file
REFLINKINCLUDE *referrer
REFLINKEXCLUDE *referrer
REDIRREFLINKINCLUDE *referrer
REDIRREFLINKEXCLUDE *referrer
FAILREFLINKINCLUDE *referrer
FAILREFLINKEXCLUDE *referrer
BASEURL prefix_string
Notes
The LINK commands can be regular expressions too.
Examples
REQLINKINCLUDE pages
REFLINKINCLUDE *.cgi,*.cgi?*
BASEURL http://www.mycompany.com

Language commands

Syntax
LANGUAGE ("ARMENIAN" | "BASQUE" | "BULGARIAN" | "BULGARIAN-MIK" |
          "CATALAN" | "SIMP-CHINESE" | "TRAD-CHINESE" | "CZECH" |
          "CZECH-1250" | "DANISH" | "DUTCH" | "ENGLISH" | "US-ENGLISH" |
          "FINNISH" | "FRENCH" | "GERMAN" | "HUNGARIAN" | "INDONESIAN" |
          "ITALIAN" | "JAPANESE-EUC" | "JAPANESE-JIS" | "JAPANESE-SJIS" |
          "JAPANESE-UTF" | "KOREAN" | "LATVIAN" | "NORWEGIAN" | "NYNORSK" |
          "POLISH" | "PORTUGUESE" | "BR-PORTUGUESE" | "RUSSIAN" |
          "RUSSIAN-1251" | "SERBIAN" | "SLOVAK" | "SLOVAK-1250" | "SLOVENE" |
          "SLOVENE-1250" | "SPANISH" | "SWEDISH" | "SWEDISH-ALT" | "TURKISH" |
          "UKRAINIAN")
LANGFILE localfile
DOMAINSFILE localfile
DESCFILE localfile
Notes
I hope that the other languages which were available in previous versions of analog -- BOSNIAN, SIMP-CHINESE, TRAD-CHINESE, CROATIAN, FINNISH, GREEK, ICELANDIC, LITHUANIAN, BR-PORTUGUESE, ROMANIAN, SLOVAK and SPANISH -- will be available for download from the analog home page soon.
Examples
LANGUAGE ITALIAN
LANGFILE hindi.lng

Cosmetic and miscellaneous commands

Syntax

OUTPUT ("XHTML" | "HTML" | "PLAIN" | "ASCII" | "LATEX" | "COMPUTER" | "XML" | "NONE")
GOTOS ("ON" | "OFF" | "FEW")
RUNTIME ("ON" | "OFF")
DESCRIPTIONS ("ON" | "OFF")
REPORTSPAN ("ON" | "OFF")
REPORTSPANTHRESHOLD number
LASTSEVEN ("ON" | "OFF")
REPORTORDER perm("x1QmWDdHwh4657oZSlLujJkKfsNnBbpvRMcPztiEIYyr")
GENSUMLINES ("ALL" | ["+" | "-"] subset("BCDEFGHIJKLMN"))
IMAGEDIR URL
CHARTDIR fmtURL
LOCALCHARTDIR localfmtfile
JPEGCHARTS ("ON" | "OFF")
PNGIMAGES ("ON" | "OFF")
NOROBOTS ("ON" | "OFF")
LOGO (URL | "none")
LOGOURL (URL | "none")
HOSTNAME string
HOSTURL (URL | "none")
HEADERFILE (localfile | "none")
FOOTERFILE (localfile | "none")
STYLESHEET (URL | "none")
CSSPREFIX (string | "none")
SEPCHAR (char | "none")
REPSEPCHAR (char | "none")
DECPOINT char
COMPSEP string
RAWBYTES ("ON" | "OFF")
BYTESDP number
HTMLPAGEWIDTH number
PLAINPAGEWIDTH number
LATEXPAGEWIDTH number
PDFLATEX ("ON" | "OFF")
BARSTYLE ("a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j")
MARKCHAR char
MINGRAPHWIDTH number
WEEKBEGINSON ("SUNDAY" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY")
SEARCHENGINE *referrer comma-separated-strings
INTSEARCHENGINE *file comma-separated-strings
Examples
Too many to list. See the documentation on each individual command.

Diagnostics

Syntax
SETTINGS ("ON" | "OFF")
DEBUG ("ON" | "OFF" | ["+" | "-"] subset("CDFSU"))
WARNINGS ("ON" | "OFF" | ["+" | "-"] subset("CDEFLMR"))
PROGRESSFREQ number
ERRFILE localfile
ERRLINELENGTH number
Examples
DEBUG ON
DEBUG CF
WARNINGS -DL
PROGRESSFREQ 50000

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/reports.html000066400000000000000000000365121406366436600167740ustar00rootroot00000000000000 Readme for analog -- analog's reports [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Analog's reports


This section summarises all of analog's reports, and the main commands which control them. For details on these commands, see the sections on Time reports, Other reports and Hierarchical reports. For exact details on what is counted in each report, see the section on Analog's definitions.

You can get descriptions of each report within the output by using the DESCRIPTIONS and DESCFILE commands.

Note: The examples below are in the HTML output style. Most people are using the XHTML output style, but I've used the HTML output style for the documentation to make sure that it works on all browsers.

Top lines


Program started at Thu-24-Sep-1998 13:48.
Analysed requests from Wed-16-Sep-1998 09:52 to Mon-21-Sep-1998 02:04 (4.7 days).
The top two lines of the output tell you when the program was run, and which dates it includes data from. (The second line includes all non-excluded requests, even failures, whereas most reports only include successful requests.)

General Summary


(Figures in parentheses refer to the 7 days to 24-Sep-1998 13:48).
Successful requests: 79,646 (48,947)
Average successful requests per day: 17,036 (6,992)
Successful requests for pages: 31,138 (18,689)
Average successful requests for pages per day: 6,660 (2,669)
Failed requests: 9,008 (6,378)
Redirected requests: 344 (235)
Distinct files requested: 8,180 (2,884)
Distinct hosts served: 6,640 (4,991)
Corrupt logfile lines: 2
Data transferred: 976.92 Mbytes (627.06 Mbytes)
Average data transferred per day: 208.96 Mbytes (89.58 Mbytes)
The General Summary contains some overall statistics about the data being analysed: the most important being the number of requests (the total number of files downloaded, including graphics); the number of requests for pages (just counting the various pages on your site); the number of distinct hosts (the number of different computers requests have come from); and the amount of data transferred in bytes. For exactly what the various lines mean, see the section on Analog's definitions. Bear in mind that one user can generate many requests by viewing lots of different pages or images, or by viewing the same page many times.

The figures in parentheses represent the seven days given at the top of this report: it's the seven days before the TO time if there was a TO command, or if not the seven days before the program was run.

You can't find out the number of visitors or visits you've had, and don't believe any program which tells you that you can. See the section on How the web works for a discussion of this.

You can turn this report on or off with the GENERAL command. You can control which lines are included using the GENSUMLINES command. You can include or exclude the figures for the last seven days with the LASTSEVEN command. You may get slightly different lines to those above, depending on exactly what's in your logfile.

Time reports


Each unit (+) represents 800 requests for pages, or part thereof.
week beg.: #reqs: pages: 
---------: -----: -----: 
13/Sep/98: 69614: 25277: ++++++++++++++++++++++++++++++++
20/Sep/98: 10032:  5861: ++++++++
Busiest week: week beginning 13/Sep/98 (26,654 requests for pages).
These reports tell you how many requests there were in each time period. They also tell you which was the busiest time period.

The timezone is whatever your server records time in -- usually your server's local time, or sometimes GMT. You can adjust it to another timezone with the LOGTIMEOFFSET command.

You can control whether each report is included or not with the appropriate ON or OFF command. You can control which columns are listed by the COLS commands. You can control which measurement to use for the bar charts and the "busiest" line by the GRAPH commands. You can determine how many rows are displayed with the ROWS commands. You can display the lines backwards or forwards in time by the BACK commands. You can change the graphic used for the bar charts with the BARSTYLE command.

Time summaries


Each unit (+) represents 150 requests for pages, or part thereof.
day: #reqs: pages: 
---: -----: -----: 
Sun:  2031:  1193: ++++++++
Mon:  8001:  4668: ++++++++++++++++++++++++++++++++
Tue:     0:     0: 
Wed: 13934:  5915: ++++++++++++++++++++++++++++++++++++++++
[etc.]

These reports tell you the total number of requests in each day or hour of the week, or in each period of the day, summed over all the weeks or days in the report. (It's not the average, nor is it the figures for just the last week or last day).

You can control whether each report is included or not with the appropriate ON or OFF command. You can control which columns are listed by the COLS commands. You can control which measurement to use for the bar charts by the GRAPH commands. You can change the graphic used for the bar charts with the BARSTYLE command.

Other reports


Listing the first 5 files by the number of requests, sorted by the number of requests.
#reqs: %bytes:       last date: file
-----: ------: ---------------: ----
 4123:  2.29%: 21/Sep/98 01:57: /~sret1/analog/
 3064:  0.15%: 21/Sep/98 01:54: /~sret1/analog/analogo.gif
 1737:  0.01%: 21/Sep/98 01:53: /~sret1/images/bar1.gif
 1692:  0.01%: 21/Sep/98 01:53: /~sret1/images/bar16.gif
 1685:  0.01%: 21/Sep/98 01:53: /~sret1/images/bar8.gif
67345: 97.54%: 21/Sep/98 02:04: [not listed: 8,175 files]

The rest of the reports are all quite similar. Here is a list of them. If you're unfamiliar with some of the terms, see the section on Analog's definitions.
  • The Host Report lists all computers which downloaded files from you.
  • The Domain Report lists which countries those computers came from. (If you only get "unresolved numerical addresses", see the FAQ.)
  • The Organisation Report attempts to list the organisations (companies, institutions, ISPs etc.) which the computer was registered under.
  • The Host Redirection Report and Host Failure Report list all computers which encountered redirections or errors.
  • The Request Report (the example above) lists which files were downloaded.
  • The Directory Report lists which directories those files came from.
  • The File Type Report lists the file types (actually, extensions) of those files.
  • The File Size Report breaks them down by size.
  • The Processing Time Report shows the time taken to serve each file.
  • The Redirection Report lists the filenames which resulted in redirections: mainly directories without the final slash, and "click-thru"'s.
  • The Failure Report lists the filenames which caused errors.
  • The Referrer Report lists which pages linked to your files (and also pages which included your images).
  • The Referring Site Report lists the servers those referrers were on.
  • The Search Query Report and the Search Word Report list which search terms people used to find your site (provided you've used the appropriate SEARCHENGINE commands).
  • The Internal Search Query Report and Internal Search Word Report list the search terms people used on scripts within your site (provided you've used the appropriate INTSEARCHENGINE commands).
  • The Redirected Referrer Report lists the referrers which led to redirections.
  • The Failed Referrer Report is essentially a broken link report.
  • The Browser Report lists the detailed versions of browsers used, and the Browser Summary collects them by vendor. You should be aware that browsers can lie about what sort of browser they are.
  • The Operating System Report lists the operating systems of the visitors whose browser types you know (as far as possible: it's not always possible to distinguish accurately between different Windows versions, for example, because the same browser can run on more than one Windows version). Which browsers count as robots is controlled by the ROBOTINCLUDE and ROBOTEXCLUDE commands.
  • The Virtual Host Report lists the activity of your various virtual domains.
  • The Virtual Host Redirection Report and Virtual Host Failure Report give the number of redirections and errors on each of those domains.
  • The User Report lists your visitors if your server requires authentication; or perhaps the visitors' cookies or session ids.
  • The User Redirection Report and User Failure Report list the users who encountered redirections or errors.
  • The Status Code Report lists the number of each HTTP status code that you had.
Usually you can only get some of these reports, depending on what information is recorded in your logfile.

There are lots of commands which control these reports. As usual, you can control whether each report is included or not with the appropriate ON or OFF command. You can control which columns are listed with the COLS commands. You can change how the reports are sorted with the SORTBY commands. You can control how many items are listed with the FLOOR commands. You can control whether and how the pie charts are plotted with the CHART commands. You can list the time period covered by each report with the REPORTSPAN command. You can include or exclude individual items with the output INCLUDE and EXCLUDE commands. You can change the names of items in the reports with the output alias commands. Which files are linked to in the reports is controlled by the LINKINCLUDE and LINKEXCLUDE commands. The links are also affected by the BASEURL command.

The "not listed" line at the bottom counts those items which didn't get enough traffic to get above the FLOOR for the report. (It doesn't include items which you've explicitly excluded.)

Most of these reports have a hierarchical structure, like this example for the Domain Report:


Listing the first 5 domains by the number of requests, sorted by the number of requests.
no.: #reqs: %bytes: domain
---: -----: ------: ------
  1: 13243: 16.23%: .com (Commercial)
   :  1262:  1.26%:   aol.com
  2: 11783: 25.64%: .jp (Japan)
   :  9592: 22.19%:   ad.jp
   :  1043:  1.97%:   co.jp
  3: 10073: 11.62%: .net (Network)
   :  1926:  1.71%:   uu.net
  4:  9657: 13.31%: [unresolved numerical addresses]
  5:  7388:  8.04%: .uk (United Kingdom)
   :  5792:  5.74%:   ac.uk
   :  1510:  1.99%:   co.uk
   : 18502: 25.16%: [not listed: 82 domains]

Notice that the lower levels are always listed with their parents, so they break up the sort order. Also, they don't count towards the total number of items listed, so there are only 5 domains listed in the example above, as you can see in the first column. (The N column is particularly useful in hierarchical reports for this reason.)

You can control which items are listed on the lower levels by the SUB family of commands. There are also separate sub-SORTBY and sub-FLOOR commands for the lower levels. (These commands are called ARGSSORTBY and ARGSFLOOR for some reports, such as the Request Report.) You can plot the lower levels instead of the top-level items on the pie charts using the CHARTEXPAND commands.

Bottom lines


This analysis was produced by Analog 6.0.x.
Running time: 8 seconds.

At the end of the output you can see which version of analog produced the report, and how long it took.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/start.html000066400000000000000000000042401406366436600164240ustar00rootroot00000000000000 Readme for analog -- starting to use analog [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Starting to use analog


The only thing you need to run analog is to be able to read the logfiles which are produced by your web server. If you don't know what these logfiles are and where to find them, contact your internet service provider (ISP) or system administrator. Analog doesn't write the logfiles: it only reads them.

If you log in to your ISP's machine from your home machine, you have two options. If you have the right permissions, you can run analog on your ISP's machine. Otherwise, you can download (e.g., ftp) the logfiles from their machine to yours, and then run analog on your machine.

Once you've downloaded the right version of analog for your computer from the analog home page (or a mirror site), you need to know how to set it up and run it. This is very easy, but the instructions are slightly different depending which platform you're using.

If you can't manage to set up analog after reading the instructions, send a message to the analog-help mailing list.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/startmac.html000066400000000000000000000073201406366436600171070ustar00rootroot00000000000000 Readme for analog -- starting to use analog (Mac) [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Starting to use analog on a Mac


Here is the really short summary:
  1. Edit analog.cfg
  2. Run analog
  3. Read Report.html

When you download the Mac version of analog, it should unpack itself. (If it doesn't, you might have to run StuffIt Expander on it). You should then find in the analog directory a configuration file called analog.cfg and the analog application itself, as well as the Readme, the Licence and a couple of other files. When you double-click on the analog icon, it will run in its own window, and produce an output file called Report.html. (For help in interpreting the output, see What the results mean.) The window will then close if there weren't any warning messages, or stay open for you to read them if there were.
You can configure analog by putting commands in the configuration file, analog.cfg. Although this is less familiar to Mac users than pressing buttons etc., it's really much simpler and more flexible when you get used to it. One command you will need straight away is
LOGFILE logfilename    # to set where your logfile lives
The logfile must be stored locally -- analog won't use FTP or HTTP to fetch it from the internet. There's a sample logfile supplied with the program.

There are already some configuration commands to get you started in the configuration file, but there are lots of others available. You can find the most common ones in the section on basic commands later in the Readme, and you can read about all of them in the section on customising analog. There are also some sample configuration files in the examples folder.


Another way to start analog is to drag a logfile onto the analog icon, in which case analog will try to analyse it, or drag a configuration file onto the icon, in which case analog will use the commands in that configuration file. (Analog detects whether it's a configuration file or a logfile by whether it starts with "# " or not.) This enables you to create different reports without having two copies of the application.

There is another way to give options, via command line arguments. You'll see these mentioned in this Readme from time to time, but MacOS before MacOS X doesn't have a command line, so ignore these unless you've downloaded the Darwin version of analog.

If you want to compile your own version of analog (it's written in C), or just to read the source code, it's available from the analog home page. (It's the same source code for all versions).


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/startpc.html000066400000000000000000000105451406366436600167540ustar00rootroot00000000000000 Readme for analog -- starting to use analog (Windows) [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Starting to use analog under Windows


This describes how to set up analog under Windows 95/NT or later. Windows 3.1 users will have to read the section on other platforms instead.

Here is the really short summary:

  1. Edit analog.cfg
  2. Run analog (a DOS window flashes up).
  3. Read Report.html

There's also a How-To written by Simon Handfield, which explains how to get started in more detail with lots of pictures.


When you've downloaded analog, and either you or your browser has unzipped it, you will find in the analog folder a configuration file called analog.cfg and the analog executable itself, as well as the Readme, the Licence and a couple of other files. There is no setup.exe: analog is already ready to run without one.

(Some unzip programs are broken, and do not create folders when they should. If you don't have a folder called lang inside the analog folder, create one and put all the files called *.lng and *.tab into it.)

There are two ways of running analog. You can either run it from Windows (by single-clicking or double-clicking on its icon, depending on your setup), or you can run it from the DOS command prompt (under Start-Programs). If you run it from Windows, it will create a DOS window to run in. When it's finished, it will produce an output file called Report.html and some graphics; and a file called errors.txt which contains any errors there might have been. The first time you run it, this will all happen almost instantly. This is not a bug. For help in interpreting the output, see What the results mean.


You can configure analog by putting commands in the configuration file, analog.cfg. Although this is less familiar to Windows users than pressing buttons etc., it's really much simpler and more flexible when you get used to it. You can edit analog.cfg using any plain text editor, for example Notepad. One command you will need straight away is
LOGFILE logfilename    # to set where your logfile lives
The logfile must be stored locally -- analog won't use FTP or HTTP to fetch it from the internet. There's a sample logfile supplied with the program.

There are already some configuration commands to get you started in the configuration file, but there are lots of others available. You can find the most common ones in the section on basic commands later in the Readme, and you can read about all of them in the section on customising analog. There are also some sample configuration files in the examples folder.

If you run analog from the DOS command prompt, there is another way to give options, via command line arguments, given on the command line after the program name. These are just shortcuts for configuration file commands. You can use the command line arguments if you run analog from a batch file too.

If you want to compile your own version of analog (it's written in C), or just to read the source code, it's available from the analog home page. (It's the same source code for all versions).


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/startux.html000066400000000000000000000134231406366436600170040ustar00rootroot00000000000000 Readme for analog -- starting to use analog (other platforms) [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Starting to use analog on other platforms


Here is the really short summary:
  1. Edit anlghead.h and compile, if necessary
  2. Edit analog.cfg
  3. Run analog

Many platforms have a precompiled version of analog available. Before compiling analog, have a look at the analog home page to see if yours does.

If you're not using one of the platforms for which a precompiled version is available, you'll have to compile your own version from the source. But don't worry -- it's written in standard C throughout, so it will compile out of the box on most platforms. (The source code is the same for all platforms.)

First, change to the src/ directory.

Then look at the file anlghead.h, and see if there's anything you want to edit.

When you have done that, you need to compile the program. How to do that depends on which operating system you're using.


Compiling under Unix. First edit anlghead.h as described above. Then just type
make
within the src/ directory to compile the program. On most systems, that will be sufficient, and the compiled program should appear in the parent directory. If it fails to compile, have a look in the Makefile to see if there's anything that you need to change to suit your configuration, and try again. It says in that file what to do. In particular, Solaris 2 (SunOS 5+) users need to change the LIBS= line.

(Experts can pass some arguments in on the make command line instead of by editing anlghead.h: e.g.

make DEFS='-DLANGDIR=\"/usr/etc/apache/analog/lang/\"'
This is useful if you have a script to compile analog.)

If you haven't got gcc, you will need to change the compiler - try acc or cc instead.

Compiling under OpenVMS. You can find OpenVMS build scripts within the src/build directory. Unzip them within the src directory. Then to build Analog interactively from the command line, type

$ @ Build_Analog
or to submit the Build_Analog procedure to a batch queue, type
$ Submit /NoPrint /Keep Batch.com
The command procedure will use MMS (or MMK) if it is available, otherwise it will compile everything from raw command procedures.

Compiling under Acorn RiscOS. The Makefile can be found in the src/build directly, although at this point it has not been updated for version 5 of analog. You will have to make directories called C, H and O, and move the sources files into the appropriate directories: e.g., alias.c must be renamed C.alias. And you will find that there are some filenames in the header file anlghead.h that you want to change to fit into the RiscOS directory structure.

Compiling under OS/2. To compile analog for OS/2, you will need the EMX package. You should edit the Makefile to have OS=OS2 and LIBS=-lsocket. Then after editing anlghead.h and running Make, you need to run the command

EMXBIND -b ANALOG
to generate the analog.exe executable.
After you've compiled the program, leave the src/ directory and then just type
analog
to run the program. (Or ./analog if for some reason . isn't in your $PATH.)

You can configure analog by putting commands in the configuration file, which is called analog.cfg by default. Two commands you will need straight away are

LOGFILE logfilename      # to set where your logfile lives
OUTFILE outputfile.html  # to send the output to a file instead of the screen
The logfile must be stored locally -- analog won't use FTP or HTTP to fetch it from the internet. There's a sample logfile supplied with the program. For help in interpreting the output, see What the results mean.

There are already some configuration commands to get you started in the configuration file, but there are lots of others available. You can find the most common ones in the section on basic commands later in the Readme, and you can read about all of them in the section on customising analog. There are also some sample configuration files in the examples directory.

There is one other way to give options to analog, via command line arguments, given on the command line after the program name. These are just shortcuts for configuration file commands.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/syntax.html000066400000000000000000000162631406366436600166250ustar00rootroot00000000000000 Readme for analog -- syntax of configuration commands [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Syntax of configuration commands


This section describes how analog finds configuration commands, and what the syntax of a configuration file should be. The syntax of individual commands is given in the Quick reference section later.
When analog starts up, it first reads options from configuration files and the command line (assuming that you are running analog from an operating system with a command line). Defaults for many of these options will have already been set in the files anlghead.h and anlghea2.h at the time the program was compiled. So if you compile your own version of analog, rather than downloading a pre-compiled executable, you can also set some options in those files before compiling. Those options are all documented there.
The first file which analog reads is the default configuration file, normally called analog.cfg. You can stop this file being read by specifying the option -G on the command line. Then the command line arguments are read, in the order in which they appear. Finally, the mandatory configuration file is read, if you specified one when you compiled the program. This is a configuration file which cannot be overridden by the user: if it is not found, analog exits immediately. This allows a system administrator to prevent users analysing certain files or producing certain reports, for example. However, note that the only certain way to prevent users analysing things is to deny them access to the logfile. Otherwise there is nothing to stop them analysing the logfile using another copy of analog or another program.
You can include another configuration file by a command like
CONFIGFILE other.cfg
The commands in the other configuration file are read immediately, in order. The program then continues reading the first configuration file where it left off. Note that reading in several configuration files does not produce several output pages, but a single output page based on all the options.

You can also include another configuration file from the command line by using a command like +gother.cfg. (Note that there is no space between +g and the filename; this is true of all command line arguments.) But note that reading an alternative configuration file does not stop the default configuration file (usually analog.cfg) being read as well. To do that you have to specify -G as well as the +g command. This is because if you want several different configurations, it's most convenient to put all the common options in analog.cfg, and options specific to each configuration in a separate file. Then the +g command line option will read both those files.

If the name of a configuration file given in a CONFIGFILE command doesn't include a directory, it will be looked for wherever analog expects to find its configuration files. (This location is a compile-time option.) For example, in the Windows version it would be in the same folder as the analog executable. This applies to the default and mandatory configuration files as well. But configuration files given with +g are relative to the current directory at the time you run the program.

In the Mac version, you can start up a program with a particular configuration file instead of the default one by dragging the configuration file onto the analog icon. The file must start with "# ".

You can also specify any configuration command on the command line even if it doesn't have a command line abbreviation, by use of the +C command. (NB The C must be upper case.) For example, +C"UNCOMPRESS *.gz gzcat" will include that command.


Here are the syntax rules for configuration commands. A configuration file contains several commands, normally on separate lines; any text after a hash (#) on a line is ignored as a comment. Configuration commands can be continued across lines by using a backslash as the last character on the line (but can't then have comments until the end of all the lines; also the total length can't be more than 254 characters). Each command consists of the command name followed by one or two arguments. An argument to a command may optionally be placed in single or double quotes or parentheses, and it must be if the argument contains a hash or a space, or if the last character of the last argument is a backslash. So, for example, here are some valid configuration commands.
DAILYSUM   OFF   # We don't want a Daily Summary
DAILYREP  "ON"   # We want a full Daily Report instead 
HOSTNAME (Spam Widgets Inc.)  # Spaces, so quotes or brackets needed
LOGFILE logfile1.log,\
logfile2.log     # This line and the previous one are one command
Generally later commands override earlier ones if you can have only one of that thing (e.g., for the OUTFILE), or supplement them if you can have several (e.g., for the LOGFILE, because you can read several logfiles). Apart from that, the order of commands doesn't matter, except that LOGFORMAT and LOGTIMEOFFSET commands must come earlier in the same configuration file than the LOGFILE to which they refer.
If all the options seem a bit confusing, just run
analog -settings [other options]
from the command line, or include SETTINGS ON in the configuration commands. Then instead of running normally, analog will just tell you what the values of all the variables will be, based on the defaults in anlghead.h and anlghea2.h, the configuration commands, and the command line options. If you're on Unix or Windows, remember that you can send the output to a file with
analog -settings > file
Also, analog -version will just give the version number.
Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/timereps.html000066400000000000000000000172111406366436600171210ustar00rootroot00000000000000 Readme for analog -- time reports [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Time reports


This section is about commands which control the appearance of the time reports. There are thirteen such reports, which show the pattern of usage over time. Eight of them (the ones with "Report" in their name) show the usage at specific times, whilst the other five (the "Summaries") show the total (not average) activity at particular times of day and week over the whole time period of the report.

By the way, in the following lists, don't get confused between the commands for the Quarterly Report (which begin with QUARTERLY) and those for the Quarter-Hour Report and Quarter-Hour Summary (with begin with QUARTERREP and QUARTERSUM respectively).


Each time report can contain columns listing the requests, requests for pages, and bytes transferred at that time, using the following code letters.
R
Number of requests
r
Percentage of the requests
P
Number of page requests
p
Percentage of the page requests
B
Number of bytes transferred
b
Percentage of the bytes
Which columns appear in which reports is controlled by various COLS commands. For example, the command
HOURSUMCOLS Pb
tells analog to include the number of page requests and percentage of the bytes, in that order, as the columns for the Hourly Summary. The full list of these COLS commands is YEARCOLS, QUARTERLYCOLS, MONTHCOLS, WEEKCOLS, DAYREPCOLS, DAYSUMCOLS, HOURREPCOLS, HOURSUMCOLS, WEEKHOURCOLS, QUARTERREPCOLS, QUARTERSUMCOLS, FIVEREPCOLS and FIVESUMCOLS. There is also a TIMECOLS command, which specifies that all the time reports are to have the specified columns.
Similarly, analog can plot the bar charts in the time reports according to the number of requests, number of page requests, or number of bytes. This is controlled by the GRAPH family of commands. So, for example,
DAYREPGRAPH P
tells analog to plot the bar charts in the Daily Report by the number of page requests. This also controls how analog decides which is the busiest time period in the bottom line of the report. Using a lower case letter tells analog to plot the bar charts with ASCII characters instead of the normal red bars. (This produces shorter output, and it is how they appear anyway in PLAIN and ASCII output styles, or when viewed with a non-graphical browser.) So, for example,
DAYREPGRAPH b
would plot the Daily Report by bytes, without using the graphics. The full list of GRAPH commands is YEARGRAPH, QUARTERLYGRAPH, MONTHGRAPH, WEEKGRAPH, DAYREPGRAPH, DAYSUMGRAPH, HOURREPGRAPH, HOURSUMGRAPH, WEEKHOURGRAPH, QUARTERREPGRAPH, QUARTERSUMGRAPH, FIVEREPGRAPH and FIVESUMGRAPH. There's also an ALLGRAPH command to set all of them simultaneously.
There are various possible graphics available for the graphs, controlled by the BARSTYLE command, as follows. (They will all look the same if you have a non-graphical browser.)

BARSTYLE a  +++++++++++
BARSTYLE b  +++++++++++
BARSTYLE c  +++++++++++
BARSTYLE d  +++++++++++
BARSTYLE e  +++++++++++
BARSTYLE f  +++++++++++
BARSTYLE g  +++++++++++
BARSTYLE h  +++++++++++
BARSTYLE i  +++++++++++
BARSTYLE j  +++++++++++
The default style is b.
You can plot the graphs either forwards in time (starting from the earliest date) or backwards (starting from the latest date). Use commands like
MONTHBACK ON  # Monthly Report backwards
WEEKBACK OFF  # Weekly Report forwards
The full list of BACK commands is YEARBACK, QUARTERLYBACK, MONTHBACK, WEEKBACK, DAYREPBACK, HOURREPBACK, QUARTERREPBACK and FIVEREPBACK. It tends to be confusing to mix directions (and analog will warn you if you attempt it) so usually you want to use the ALLBACK command which will set all of them at once.
For the more detailed time reports, you usually only want to list the last few time periods. (Every five minutes for the last three years?? I think not.) So analog provides some ROWS commands to let you specify how many rows you want in the time reports. For example
QUARTERREPROWS 96  # only the last day's worth
MONTHROWS 0        # 0 means no restriction: show all time
The full list of ROWS commands is YEARROWS, QUARTERLYROWS, MONTHROWS, WEEKROWS, DAYREPROWS, HOURREPROWS, QUARTERREPROWS and FIVEREPROWS. Even if a ROWS command is given, the line at the bottom of the report will still show the busiest time period ever, not just the busiest one in that many rows.
The character which is used for plotting the graphs in PLAIN and ASCII styles or on a non-graphical browser is specified by means of the MARKCHAR command. For example,
MARKCHAR =
tells analog to use the equals sign.

There is a parameter called MINGRAPHWIDTH which sets the minimum nominal size of the graphs. For example, if you set

MINGRAPHWIDTH 10
then the graph will be allowed to be up to 10 characters wide, even if that would exceed the PAGEWIDTH.

There is one more command which affects the time reports. You can specify which day should be counted as the first day of the week. This affects the layout of the Daily Report, Daily Summary, Weekly Report and Hour of the Week Summary. For example, our local student newspaper publishes a new edition on the web every Friday, so they like to specify WEEKBEGINSON FRIDAY for their reports.

In the next section, we'll look at commands relating to the non-time reports.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/update.html000066400000000000000000000642001406366436600165530ustar00rootroot00000000000000 Readme for analog -- upgrading from earlier versions [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: Upgrading from earlier versions


This section lists those commands which existed in older versions of analog, but which have been changed or abolished in this version. It also lists reasons why the same input might now produce different output. The new features in this version are listed in the section What's new in this version?.

If you are upgrading from a previous version of analog, you should keep your old analog.cfg, and your old anlghead.h if you are compiling your own copy of analog rather than using one of the precompiled versions.

Upgrading from 6.0.3 and earlier

  • Bug fixes in XML schema allow XML output under Analog 6.0
  • If using XML OUTPUT a new XMLDTD command allows you to specify a public http/https URL to the public XML DTD file.

Upgrading from 5.91beta1 and earlier

  • The DNSTIMEOUT command is now off by default. On platforms where it's available, you have to specify it explicitly if you want it.

Upgrading from 5.90beta2 and earlier

  • The computer-readable output style now forces English language output. The idea is to have a consistent output style, and let the post-processor do any necessary localisation. But this may break some existing applications.

Upgrading from 5.32 and earlier

  • The default output style is now XHTML, not HTML. Also the command-line argument "-a" selects XHTML, not HTML.
  • If you are using a style sheet for HTML output, it probably won't work well with XHTML output, because it replaces the default style sheet. So you will probably need to write a new one for XHTML.
  • The default for PNGIMAGES is now ON, so bar charts are made from png's not gif's by default. Some users may need to copy the png versions of the bar charts into their images directory.

Upgrading from 5.31 and earlier

  • More browsers are recognised, which will also reduce the Mozilla numbers.

Upgrading from 5.24 and earlier

  • In the Operating System Report, Macintosh is no longer split into PPC and 68k. (68k is now so rare that it's not worth it. Unfortunately, it's not possible to distinguish OS 9 from OS X, because the browsers don't all report it.)
  • The language files have changed, so don't try and use the old ones.
  • Some dead search engines have been removed from the default configuration file, and some new ones added.
  • Kilobytes, megabytes etc. are now listed to two not three decimal places by default; but you can configure the number of decimal places with the new BYTESDP command.

Upgrading from 5.23 and earlier

  • There will be small changes to the browser and operating system reports thanks to better parsing of recent Netscape and Mozilla browsers.
  • In version 5.23 and earlier, earlier UNCOMPRESS commands took precedence over later ones. This has been corrected in 5.24.

Upgrading from 5.21 and earlier

  • As a side-effect of the security fix in version 5.22, the JAPANESE-JIS character set no longer works from the form interface.

Upgrading from 5.1 and earlier

  • The language files have all changed, so don't try and use the old ones.
  • The rules for generating "organisations" from numerical addresses have changed, which will change the Organisation Report.
  • Filenames given on the command line, as opposed to in configuration commands, are now relative to the current directory, not the analog directory. This will probably only affect Unix users.

Upgrading from 5.03 and earlier

  • The code to generate the Browser Summary has been completely rewritten. Apart from now recognising Konqueror and Galeon, and distinguishing Mozilla and Netscape, this may result in other small changes to the reported numbers. Also, if you are using a configuration file from an earlier version, remove the line that reads
    BROWOUTPUTALIAS Mozilla Netscape
  • Similarly, the code to generate the Operating System Report has been slightly modified, in addition to recognising Windows XP.
  • Numerical addresses are now included in the Organisation Report, which will change that report.
  • Some warnings have moved from category C to category F or to the new category G.
  • SEARCHCHARCONVERT is now always turned off in multibyte character sets.
  • The default plotting method for the pie charts will now take the FLOOR into account as well as the SORTBY.
  • The LATEX output style now produces LaTeX suitable for converting to PDF with the pdflatex command. If you want to use the ordinary latex command, specify PDFLATEX OFF.

Upgrading from 5.02 and earlier

  • The order of the lines in the report descriptions files has changed, so don't try to use the old versions.

Upgrading from 5.01 and earlier

  • LANGUAGE JAPANESE now selects the JIS character set instead of EUC. (Four Japanese character sets can be chosen explicitly through the LANGUAGE command.)

Upgrading from 5.0 and earlier

  • The language files have all changed, so don't try and use the old ones.
  • Organisations in Belgium are now considered to be at depth 3, which will change the Organisation Report.
  • There are some new images in the images/ directory, which you will have to copy into your IMAGEDIR.

Upgrading from 4.91beta1 and earlier

  • LOCALCHARTDIR and DESCFILE can no longer be specified from the form interface, for security reasons.

Upgrading from 4.90beta4 and earlier

  • Previously, when an output INCLUDE or EXCLUDE command was in operation, the excluded items were still included in the "not listed" line at the bottom of the report. This is no longer the case. Also, percentages of the requests and bytes are now calculated ignoring the excluded items, which will make those numbers larger, make their wedges in the pie charts larger, and change what is included by floors specified in terms of percentages.

Upgrading from 4.90beta3 and earlier

  • The Operating System Report, Browser Report & Browser Summary are now sorted by page requests instead of raw requests by default.

Upgrading from 4.90beta1 and earlier

  • There are some new files (with names beginning with sq) in the images/ directory. These will need to be copied into your IMAGEDIR.
  • *.asp is no longer included in the default definition of "pages" (which it was from 4.11 to 4.90beta1) because there are too many other equally well qualified candidates. But you can easily re-enable it in analog.cfg.
  • The format of the "busiest time" and floor/sortby lines has changed in the computer-readable output.
  • The default DNSGOODHOURS and DNSBADHOURS have been increased. In particular, the default DNSGOODHOURS is now as near infinity as makes no difference!

Upgrading from 4.16 and earlier

  • Some languages have still not been translated for version 5 yet: see the list of available languages in the What's new? section.
  • All files are now looked for in sensible directories, specified at compile time, if no other directory is specified. On platforms where these directories are not known at compile time, analog formerly looked in the current working directory, but now looks in (its guess at) the directory of the analog binary. However, filenames specified in command line arguments are within the current working directory since version 5.2.
  • The cache file now includes data on the first-request time of each item. But if you read a cache file from an older version of analog, this data will not have been recorded, and so the last-request time will be used instead. Analog will warn you about this.
  • If you specify a CACHEFILE command but no LOGFILE command, analog won't read the default (compile-time) logfile. This is much more intuitive behaviour, but some users may have been relying on the old behaviour. The actual rule is given in the documentation on Cache files.
  • Some browsers will be rediagnosed as robots in the Operating System Report. This will mainly reduce the "OS unknown" total, but may also reduce other categories.
  • US English now uses the 12-hour clock by default. If you want to continue to use the 24-hour clock, use the language file us24.lng instead. (Either use a LANGFILE command, or rename us24.lng to us.lng). Conversely, you can get British English with the 12-hour clock by using uk12.lng.
  • Because of the twelve new reports, if you use a REPORTORDER command, you should include the corresponding new letters: 1Q76wLlMRjyY.
  • Computer readable output now has an extra line reporting the busiest time period for the time reports.
  • The date codes in the OUTFILE and CACHEOUTFILE commands now always produce dates in English.
  • The REFLINKINCLUDE command now only controls links in the Referrer Report. Use REDIRREFLINKINCLUDE and FAILREFLINKINCLUDE for the Redirected and Failed Referrer Reports.
  • When doing a negative floor, items are no longer included if they have 0 of the criterion in question, even if there aren't enough items otherwise. For example FLOOR -25p will list fewer than 25 items if there aren't 25 items with requests for pages, even if there are other items with 0 requests for pages.
  • When a logfile line contains bytes but no filename, analog previously ignored the bytes. It now counts them for other items on the line, but doesn't put them in the File Size Report or General Summary (to avoid double-counting).
  • There are no longer any HTML language files containing HTML entities. So, for example, the HTML output will always contain a literal é instead of the code &eacute;. This should make no difference to the reader, but please do tell me about any problems.
  • The source files have moved to the src/ directory. And there are new source files in subdirectories of the src/ directory. Also the header files have different variables in them. This means that automatic build scripts will have to be rewritten.

Upgrading from 4.13 and earlier

  • Regular expressions in an INCLUDE or EXCLUDE command must now occur on a line on their own, not within a comma-separated list.
  • The search terms reported in the Search Word and Search Query Reports are no longer converted to lower case if you are using a multibyte character set.
  • Unprintable characters in the output are now replaced by '?', except for multibyte character sets.

Upgrading from 4.11 and earlier

  • *INCLUDE "" and *EXCLUDE "" (see documentation) now apply to items which were present but corrupt. This may have the effect of including or excluding some new lines.
  • There has been a tiny change in computer-readable output style. Previously if a time was blank, it took up only one column. Now it takes up as many columns as if it had been present.

Upgrading from 4.1 and earlier

  • The default definition of "pages" is now case insensitive: so it includes *.HTM and even *.hTmL etc. This will serve to increase the page count.

Upgrading from 4.04 and earlier

  • There is better parsing of extended format and WebSTAR format logs, which may cause differences in some cases.
  • All referrers now count as "pages" irrespective of any PAGEINCLUDE and PAGEEXCLUDE commands. Consequently, for example, "REFLINKINCLUDE pages" is now the same as "REFLINKINCLUDE *". You can recreate the previous behaviour with "REFLINKINCLUDE *.html,*.htm,*/".
  • The default REPORTORDER has changed.
  • New anchor names are used internally to the output page.

Upgrading from 4.03 and earlier

  • There may be slight differences in the results in this version owing to stripping anchors off filenames.

Upgrading from 4.0 and earlier

  • Some of the default paths have changed in anlghead.h.

Upgrading from 3.90beta1 and earlier

  • It is now recommended that you don't run analog as a CGI program, or put it in the directory with your CGI programs, for security reasons.
  • Each browser in the Browser Summary is now sorted by major version number then minor version number. So SUBBROW */* will now only show the major versions. To get all the minor versions, you need SUBBROW */*.*
  • PAGEWIDTH has been replaced by HTMLPAGEWIDTH and ASCIIPAGEWIDTH.
  • PRINTVARS has been renamed SETTINGS.

Upgrading from 3.32 and earlier

  • The form interface has been completely rewritten, and old versions of anlgform.html will not work with this version.
  • The Browser Summary now diagnoses MSIE, Opera and WebTV browsers better. This will cause differences in output from previous versions.
  • With RAWBYTES OFF, bytes are now listed as, for example, 47.68 Mbytes instead of 48,832 kbytes. This should be less confusing.
  • The DNS file has a new time encoding. It's only a few hours different, so I haven't made any special provision for it. The effect is that the DNSGOODHOURS and DNSBADHOURS may be a few hours out for existing entries (but not for new ones).

Upgrading from 3.3 and earlier

  • There is a new set of graphics in the images directory, which you will have to move to your web directory.
  • In the Mac version, if a configuration file is dragged onto the analog icon, it is used instead of, not as well as, the default configuration file.

Upgrading from 3.2 and earlier

  • In the computer-readable output style, the line L7, the time the last seven days begins after, has been replaced by E7, the time the last seven days ends. This is for consistency with the other output styles.
  • Also in the computer-readable output, there is a new line reporting the floor and the SORTBY for the report. In 3.11 and earlier, this didn't exist, and in 3.2 it only reported the floor, not the SORTBY.
  • %R (Mac-style filename) has been abolished in the LOGFORMAT. Just use plain %r instead.
  • It is no longer allowed to set the CACHEOUTFILE to be the same as a previous cache file.
  • The definition of the common log format and related formats changed between 3.11 & 3.2, and again between 3.2 & 3.3. This could cause differences in output, but they are likely to be only very minor.

Upgrading from 3.11 and earlier

  • Lines without a particular item now work properly with INCLUDE and EXCLUDE commands. For example, if you do an INCLUDE to look at only certain lines, then lines without that type of item at all will not now be included, whereas previously they would have been. This can make the results lower than in these earlier versions.
  • I have reluctantly removed support for NetPresenz logs. This hasn't worked for some time, and I have already been advising NetPresenz users not to use newer versions of analog because they could get wrong results. Unfortunately, fixing it would require a complete rewrite of the entire parsing code, which isn't going to happen any time soon. So my advice remains the same: continue to use version 2.11 or (even better) pre-process your logfiles into a form which analog can handle safely.
  • The English domains file has changed name from domains.tab to ukdom.tab.

Upgrading from 3.0, Win32 form interface

  • If using the form interface on Windows, it is now necessary to put the analog executable at \analog\analog.exe instead of \Program Files\analog\analog.exe

Upgrading from 2.90beta1

  • LOGFORMAT MICROSOFT has been replaced by LOGFORMAT MICROSOFT-NA and LOGFORMAT MICROSOFT-INT; and similarly for LOGFORMAT NETPRESENZ.

Upgrading from 2.11 and earlier

  • It is possible that there may be small discrepancies between the results from previous versions and the results from this version because the parsing code has changed, but any such differences should be minor. However...
  • If you used to use REFEXCLUDE or BROWEXCLUDE, you most likely now want REFREPEXCLUDE or BROWREPEXCLUDE instead, or you will exclude lots of lines that were previously included.
  • It is possible that this version may not automatically parse a logfile that previous versions could parse, because it checks more carefully that the logfile is in the format claimed. If so, you will have to use a LOGFORMAT command.
  • Approximate host counting has been abolished, unless there's a significant demand for it.
  • Count of number of new hosts in last seven days abolished. It was too confusing because it depended on which old logfiles you analysed.
  • The Error Report has been abolished (together with the configuration commands ERROR, ERRLOG and ERRMINOCCS). See the What's new? page.
  • The BROWLOG and REFLOG commands have also been abolished: just use LOGFILE instead.
  • The HASHSIZE commands have been abolished: analog now chooses the size of the hash tables itself.
  • The MINREQS and similar options have been replaced by the FLOOR commands.
  • Only one * is now allowed on the left-hand side of aliases, to avoid ambiguities.
  • Automatic detection of log type is now on a per-file rather than a per-line basis.
  • ISPAGE is now called PAGEINCLUDE.
  • WITHARGS and REFWITHARGS are now called ARGSINCLUDE and REFARGSINCLUDE.
  • MONTHLYBACK is now called MONTHBACK.
  • FULLHOSTS is now just called HOST.
  • The old LOGOURL command is now called LOGO. LOGOURL now has a new function, namely where to link the logo to.
  • The UNIT commands have been abolished. They weren't very useful, and they didn't make much sense with the different ways of displaying the time report bar charts. The unit is now always chosen automatically.
  • DIRLEVEL has been abolished, because the SUBDIR command is more general. Use SUBDIR */* or whatever instead.
  • Comments aren't allowed in the domains file. I don't think this should cause a problem.
  • GRAPHICAL is abolished. Instead, use lower case letters with the GRAPH commands.
  • NUMLOOKUP has been replaced by DNS, and DNSFRESHHOURS by the commands DNSGOODHOURS and DNSBADHOURS.
  • DNS cache files from previous versions are not compatible with this version.
  • You can't use PAGES in the columns or SORTBY or FLOOR for the Request Report. Use REQINCLUDE pages instead.
  • - as a synonym for none has been abolished in some places, e.g., HOSTURL.
  • The following command line arguments have been abolished from earlier versions, many of the letters getting new meanings: 7, l, n, p, s, u, v, w. (-v has moved to -settings.) Others have been changed since version 1.2 as well.

Upgrading from 2.0, Win32 users

  • Filenames for logfiles etc. should now be given DOS-style, with backslashes, rather than Unix-style with forward slashes.

Upgrading from 1.92 and earlier, Mac users

  • There is no longer an automatic progress report. Use the PROGRESSFREQ command instead.

Upgrading from 1.9beta's

Upgrading from 1.2's and earlier

  • Use *INCLUDE and *EXCLUDE instead of *ONLY and *IGNORE.
  • The syntax of the *FLOOR commands has changed.
  • Use *SORTBY REQUESTS or BYTES instead of *SORTBY BYREQUESTS or BYBYTES.

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/wasnew1.html000066400000000000000000000130701406366436600166550ustar00rootroot00000000000000 Readme for analog -- what was new in version 1? [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What was new in version 1?


This section lists the new features which were in version 1 of analog.
What's new in version 6?
What was new in version 5?
What was new in version 4?
What was new in version 3?
What was new in version 2?
1.2.6 (08-Jun-96)
Minor bug fix; will only affect those with corrupt logfiles.
1.2.5 (05-Feb-96)
Minor bug fix for weekly report.
1.2.4 (23-Jan-96)
Patch for Spyglass server logfile format.
1.2.3 (22-Nov-95)
A couple of bug fixes (wild subdomains sometimes caused crashes).
-v option now gives the version number.
1.2.2 (13-Nov-95)
Patch for proxy servers: http:// not translated to http:/
1.2 (11-Nov-95)
Can configure columns in reports to give percentage requests and number of bytes.
Wild subdomains (e.g., *.com).
Nameless subdomains.
Subdomains now listed in alphabetical order.
Proper support for numerical hostnames in HOSTIGNORE, HOSTONLY, SUBDOMAIN and alphabetical sorting.
New BASEURL command allowing statistics to be displayed on other servers.
Output always says how things are sorted.
"Last 7 days" now behaves sensibly with TO.
Filenames containing /../, /./ and // translated.
Header and footer options removed from form (for security reasons).
1.1 (02-Oct-95)
Form interface introduced.
ASCII output now possible as well as HTML.
Output file can now be specified in the configuration file.
FROM and TO commands more powerful.
DEBUG and BACKGROUND introduced.
One bug fix: alphabetical sorting doesn't now swap some hostnames.
List of primes included in distribution.
1.0 (12-Sep-95)
Only minor changes since 0.94beta.
0.94beta (30-Aug-95)
New configuration variables SEPCHAR and REPORTORDER.
New configuration commands WITHARGS and WITHOUTARGS.
New commandline options +-A and +-x. (Config.: ALL and GENERAL).
Logfile entries with - as the return code are now regarded as successes, not corrupt entries.
Fixed bugs in host report when aliases or numerical hosts are present.
Documentation rewritten.
0.93beta (27-Jul-95)
Approximate hostname counting now possible in fixed memory.
New configuration commands ISPAGE and ISNOTPAGE.
New commandline option -v.
New configuration command WEEKBEGINSON.
Proper error message when memory exceeded.
Program split into several files.
0.92beta (11-Jul-95)
New reports introduced: hostname, full daily, and weekly.
FROM and TO commands introduced.
Header and footer files introduced.
More helpful warning messages.
Ability to read configuration instructions from stdin.
Subdomain commands moved from domains file to configuration file.
Makefile provided.
0.91beta (04-Jul-95)
Configuration file introduced, enabling many new options.
Some bug fixes and speed improvements.
Ability to print "top n" reports (rather than "everything higher than n").
Request report can print only pages.
Ability to try and resolve numerical addresses.
Now less fussy about the format of the domains file.
Logo added.
Readme converted to HTML.
0.9beta
More speed improvements, and some bug fixes.
Introduced -u option.
Introduced subdomain analysis.
Included "not modified" replies as successes, not redirects.
First public release at 0.9beta3. (29-Jun-95)
0.89beta (21-Jun-95)
Commandline arguments.
Efficiency improvements.
Host count and "last 7 day" statistics.
0.8beta (14-Jun-95)
Initial program, just default options.

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/wasnew2.html000066400000000000000000000176271406366436600166720ustar00rootroot00000000000000 Readme for analog -- what was new in version 2? [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What was new in version 2?


This section lists the new features which were in version 2 of analog.
What's new in version 6?
What was new in version 5?
What was new in version 4?
What was new in version 3?
2.11 (14-Mar-97)
Minor bug fixes to yesterday's release.
2.1 (13-Mar-97)
Language support rewritten, causing reduction in code size of 2200 lines.
New configuration command LANGFILE.
New Acorn RiscOS version.
Page requests per day reported.
Bug fix: CASE INSENSITIVE could cause %7E-type conversions not to take place.
2.0.2 (04-Mar-97)
DNS lookups and wildcards should now work in the Win32 version.
New configuration command PRINTVARS.
Fix for zero length hostnames after DNS lookups.
Minor corrections in French and Spanish translations.
2.0 (10-Feb-97)
New native Win32 version.
Wildcards allowed in filenames on Mac.
Ignores browser "-".
1.93beta (18-Jan-97)
New commands BROWALIAS, CONFIGFILE and PROGRESSFREQ.
Form program can now call configuration files.
Form program now uses the default choices if none specified.
Domain report prints correctly in preformatted output.
Specifying +1 and +V2 doesn't crash the program.
-v reports dates correctly.
Trailing dots on hostnames removed.
Second argument to LOGFILE command can't be obliterated by /../
1.92beta (08-Oct-96)
DNS lookups added on Mac.
Netpresenz format understood on Mac.
New languages: Spanish, Italian and Danish.
Extra information when debugging turned on.
*.htm are now pages on all machines.
A few small bugs fixed.
1.91beta4 (13-Jul-96)
Cache file now includes page request information.
DNS bug fixed.
New command DNSHASHSIZE.
Bug in browser reports fixed.
1.91beta3 (09-Jul-96)
BSD/OS compilation bug believed fixed.
Fixed HOSTALIAS which I broke yesterday.
DNS bug (causing too many lookups) identified, although not yet fixed.
1.91beta2 (08-Jul-96)
Some bug fixes (including: HOSTEXCLUDE and CASE INSENSITIVE didn't work properly; selecting "no links" failed on the form; less fussy about what can appear on the form).
Mac version no longer includes source code, so is much shorter.
1.91beta1 (05-Jul-96)
Now DNS code doesn't look up a name twice, even if one is a failed request.
1.91beta (05-Jul-96)
Will now output in any of several languages.
Preformatted output introduced.
New File Type Report.
Can limit the number of rows in the time reports.
Number of requests for pages (as opposed to raw requests) now calculated throughout.
DNS lookup returns, with caching across runs.
Logfiles can include wildcards.
Wildcards can include multiple *'s.
Can process case insensitive logfiles.
OUTPUTALIAS commands introduced.
New commands to specify exactly what is included, and what linked, in the request report and referrer report.
FILEALIAS a a and FILEALIAS a b; FILEALIAS b c now work.
New ALLOW options to cancel INCLUDES.
REPSEPCHAR and DECPOINT introduced.
DIRSUFFIX introduced.
Debugging reports number of corrupt lines in other logs.
Hash sizes can now be allocated at run time.
stdin can now be used for any input file, but not for two.
Macintosh version now quits automatically if no warnings have been issued.
Form interface made more secure.
"Mozilla (compatible)" separated out in Browser Summary.
Major internal changes should improve speed.
Code for non-Unix platforms integrated into main code.
"Referrer" spelled correctly.
Licence introduced.
Update file introduced.
Readme updated to include non-Unix instructions.
(19-Apr-96)
First Mac version.
1.9beta6 (11-Apr-96)
Two bug fixes (number of bytes was incorrectly reported in some cases, and -v would overwrite the OUTFILE).
Documentation improved.
1.9beta5 (06-Mar-96)
More bug fixes...
1.9beta4 (05-Mar-96)
One important bug fix (I broke GRAPHICAL OFF in 1.9beta3).
New form cgi options: ch, gr and ou=3.
Code shortened.
(05-Mar-96)
First DOS version.
1.9beta3 (01-Mar-96)
Mainly bug fixes and improved documentation.
Browser and referer reports now include failed requests.
The WARNINGS option can now be specified on the form.
1.9beta2 (07-Feb-96)
Small bug fixes.
1.9beta (06-Feb-96)
Lots of changes. The most important new features are
  • Six new reports (hourly report, browser report, browser summary, referer report, status code report and error report).
  • Analysis of NCSA/Apache referer log, agent log and combined log formats.
  • Graphical time reports that still work on text-based browsers.
  • Configurable columns in the time reports.
  • Time reports can run backwards.
  • Time graphs can be plotted by bytes instead of by requests.
  • Can cache old data so that old logfiles need not be kept.
  • Can process several logfiles.
  • Can combine logfiles from several different hosts.
  • Will uncompress compressed logfiles.
  • All configuration options can now be specified on the commandline.
  • Mandatory configuration file added.
  • Lots of new options in the form processing program.
  • Wildcards greatly improved throughout.
  • Alphabetical host report right-aligned.
  • Bytes now quoted as MBytes etc. instead of long number.
  • Produces HTML2.0 compliant output.
  • New sort method RANDOM (saves time for long reports).
  • Floors for reports now work properly.
  • Can now specify a report FROM 100 or more days ago.
  • Option to turn off warnings.
  • Considerable savings in code length over previous versions.
What was new in version 1?

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/wasnew3.html000066400000000000000000000312361406366436600166630ustar00rootroot00000000000000 Readme for analog -- what was new in version 3? [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What was new in version 3?


This section lists the new features which were in version 3 of analog.
What's new in version 6?
What was new in version 5?
What was new in version 4?
3.32 (02-Sep-99)
Bug fixes, including:
  • Drag-and-drop on Mac now works.
  • Unsafe characters in hyperlinks now escaped.
  • One bug that caused crashes when printing deep Directory Reports fixed.
New VMS build scripts. Let me know of any compilation problems.
Computer-readable output now reports version of analog used.
Improved some diagnostic messages.
New language Serbo-Croatian; new domains files for Italian and Russian; corrected Polish language files.
New documentation on Analog's reports and Quick reference.
Now uses named anchors throughout the documentation, so that cross-references link to the right part of a page.
3.31 (19-Jun-99)
New command BARSTYLE; you will need to use new images.
Russian language file corrected.
Some bug fixes, including one important one correcting cache file output.
3.3 (19-May-99)
New commands ERRFILE, DNSLOCKFILE, APACHELOGFORMAT and APACHEDEFAULTLOGFORMAT.
Can include the date in the name of the OUTFILE and the CACHEOUTFILE.
Support for WebSite logfiles.
New token %U in log formats for "Unix time" (seconds since 1970).
Won't overwrite old cache files.
Now works properly on SunOS 4.
Fix for occasional crashes on Windows.
Checks language files are not too long.
"Last seven days" data now calculated more accurately and displayed more clearly.
Computer-readable output now reports SORTBY's as well as floors.
Revised Makefile will work with older make's.
Corrected Catalan language files.
Includes form interfaces in French and Japanese.
LOGFORMAT documentation now includes the LOGFORMAT commands for all built-in log formats.
3.2 (04-May-99)
Bug fixes: in particular REFLINKINCLUDE pages now works; and cache files now include all items even if they're not wanted for the main report.
Lines without a particular item now work properly with INCLUDE and EXCLUDE commands. This can cause differences in results from previous versions.
New version of form interface to work round bug in Microsoft Internet Information Server.
New command NOROBOTS.
Backslashes are now coerced to forward slashes in filenames and usernames. While not always correct technically, it usually is in practice, and it makes them behave correctly in other parts of the program.
Usernames are now treated as case insensitive. Let me know if this causes a problem on any system.
Computer-readable output style now reports floors.
Rewritten Unix Makefile, and VMS build script. Let me know of any compilation problems.
New languages: Catalan, Icelandic, Japanese, Korean, Latvian, Lithuanian. Corrected Spanish language files and French domains file.
LANGUAGE now selects local domains file automatically, where available.
Removed support for NetPresenz logs. The reasons are in the section on how to upgrade.
Form interface documentation rewritten; FAQ broken into sections; sections on logfiles and log formats separated and rewritten; new section on helper applications; and dozens of other improvements to the documentation.
3.11 (26-Nov-98)
Bug fix version.
Microsoft's attempt at W3 extended format is now understood even if there is a second #Fields: line in the logfile.
There is also a fix for a new Microsoft bug which results in an non-standard common format.
Intermittent crashes under Windows fixed.
Mailing lists announced.
3.1 (17-Oct-98)
Understands Microsoft's attempt at W3 extended format.
Several bugs fixed, including one that caused occasional crashes and one that caused the output to grow and grow.
Form interface works on Windows.
Allows aliases with two or more *'s on left hand side, if right hand side contains no *'s.
Aliases work properly with CASE INSENSITIVE.
Numerical SUBDOMAINs fixed.
Understands more WebSTAR and Netscape tokens.
Accents in domains file work.
LOGFORMAT removed from form interface as security risk.
Several warning messages improved.
Report aliases and in/exclusions shown in settings output.
Character set declared at top of output.
Spanish, Dutch, Norwegian (Bokmål and Nynorsk), Finnish, Turkish, Greek, Polish, Russian & Chinese language files included.
3.0 (15-Jun-98)
Corrected W3 extended format.
Fix for broken strcmp() function on SunOS 5.
Portuguese, Brazilian Portuguese, Danish and Hungarian language files included.
Precompiled executable for OS/2 available.
2.91beta1 (04-Jun-98)
Form interface included.
Uses less memory when compiling reports.
New operating system, BS2000/OSD, and code for EBCDIC character set.
New command DEFAULTLOGFORMAT.
LASTSEVEN and BASEURL reinstated.
More information added to PRINTVARS output.
AppleScript support for Unix-style command lines added to Mac version.
Now works on SunOS 4, and other small bug fixes.
French, German, Swedish, Czech, Slovak, Slovene and Romanian language files included.
One page version of the Readme included in the documentation.
2.90beta4 (09-Apr-98)
Mended DNS cache file reading, which I broke in yesterday's release.
2.90beta3 (08-Apr-98)
Fixed bug that caused a crash while giving warning messages on SunOS; bug that caused configuration files that called other configuration files not to be completed; and other smaller bugs.
Italian language files included.
2.90beta2 (03-Apr-98)
Separate LOGFORMATs for North American and international date formats, when using Microsoft or Netpresenz logs.
Understands the AppleShare IP server's attempt at the WebSTAR format.
Directory report now works properly even if you use the second argument to the LOGFILE command.
Wild cards in filenames work properly on the Mac.
Other small bug fixes.
One speed improvement (I gain about 3%).
Several corrections and clarifications to the documentation.
2.90beta1 (27-Mar-98)
This version is a completely rewritten version. Every single line of code is new. The whole code is shorter despite considerable improvements in functionality. Several people have reported that it is significantly faster. The most important new features are:
  • Eleven new reports (Quarter-Hour, Five-Minute, Redirection, Failure, File Size, Referring Site, Redirected Referrer, Failed Referrer, Virtual Host, User, User Failure).
  • Reads logfiles in user-customisable format.
  • Analyses user and virtual host data, and failed requests.
  • Hierarchical reports list subdirectories under directories, and allow analysis of browser version numbers.
  • Faster sorting of long reports.
  • Floor and sort method made independent.
  • "Last date" column in reports, and can floor and sort by date.
  • Busiest time period at bottom of time reports.
  • "Not listed" line at bottom of other report.
  • Knows HTTP/1.1 status codes.
  • General Summary can go anywhere in the report.
  • General Summary and "Go To"s can now be turned on and off independently.
  • Status Code Report can be sorted in different ways.
  • Time offset commands.
  • Much better checking of invalid configuration options and invalid logfile lines.
  • Only reads logfiles it might need.
  • Improvements in DNS functionality: can now read the DNS file without further lookups: also, separate recheck intervals for successful and failed lookups.
  • Hash sizes now chosen automatically.
  • More flexible language support.
  • Mac version reads gzipped logfiles.
  • Mac version supports drag-and-drop onto program icon.
  • Readme files completely re-written. Broken into lots of files, and new sections on Starting to use analog and What the results mean, as well as an index.
The following features have been abolished.
  • No Error Report. The error log was always intended for humans rather than computers to read. Moreover, its format varied from server to server, and even between different versions of the same server. The place of the Error Report has largely been taken by the new reports, particularly the Failure Report.
  • The approximate host counting has been abolished for the time being. I can put it back if there is a significant demand for it.
  • Only one * can now appear on the left-hand side of aliases. This is to avoid ambiguities.
  • For changes in the names and syntax of configuration options and command line arguments, see the section about upgrading.
The following features are not yet present, but will be added by version 3.
  • The form interface.
  • Most of the languages.
What was new in version 2?
What was new in version 1?

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/wasnew4.html000066400000000000000000000254631406366436600166710ustar00rootroot00000000000000 Readme for analog -- what was new in version 4? [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What was new in version 4?


This section lists the new features which were in version 4 of analog.
What's new in version 6?
What was new in version 5?
4.16 (13-Feb-01)
Security fix for buffer overflow bug.
Small correction to Brazilian Portuguese language file.
4.15 (01-Feb-01)
Bug fixes for accented letters in dates and for EBCDIC character set.
4.14 (22-Jan-01)
Commas are allowed in regular expressions.
Can do a FLOOR beyond Terabytes.
OS X & MPE/iX ports.
Bug fixes, especially for multibyte character sets.
Unprintable characters in the report are now replaced by '?'.
Traditional Chinese, Portuguese, Brazilian Portuguese, US English and corrected French domains files.
Rewrote the documentation on Cache files. Added some new data to How the Web Works.
4.13 (11-Oct-00)
Corrected infelicity in compilation procedure.
4.12 (05-Oct-00)
Recognises Windows Me for Operating System Report.
Can count beyond Terabytes.
PCRE code upgraded to version 3.4.
AS/400 port. Patches to compile cleanly on Cygwin and 64-bit Solaris.
Bulgarian and Croatian language files. Catalan and Finnish domains files.
Various bug fixes.
New Licence (mostly less restrictive than the previous one).
4.11 (31-May-00)
The default definition of "pages" is now case insensitive, and also includes *.asp.
Reads the extended logs from IIS 5 correctly.
Version number displayed before any warning or debugging messages.
The "number of days" at the top of the report now obeys DECPOINT (and is also now to 2 decimal places).
Improved OpenVMS build procedure.
Hungarian and Romanian language files, and corrected Spanish language files and English domains files.
Italian and Spanish form interfaces.
The FAQ now has a list of contents.
4.1 (30-Mar-00)
Regular expressions in ALIASes and INCLUDEs are now available on all platforms.
Regular expressions are now Perl-syntax regular expressions. (Thanks to Philip Hazel's PCRE library.)
"Repeated fields" in logfile header lines are now allowed.
New commands STATUSINCLUDE and STATUSEXCLUDE, and 304ISSUCCESS.
New output style PLAIN (like ASCII but with accents). New language files for this.
In the computer-readable output, hierarchical reports now have an extra column, indicating the depth of the item in the hierarchy.
All referrers now count as "pages." (See upgrade notes.)
Configuration commands can be continued across lines with a backslash.
New token %s in LOGFORMAT, allowing per-line selection of client-name and client-IP fields.
New log format WEBSTAR-EXTENDED to allow for a small bug in WebSTAR's implementation of the extended log format.
Korean language files. Also alternative Swedish translation.
4.04 (21-Mar-00)
The analog home page has moved to www.analog.cx
New column d in non-time reports.
The RUNTIME command now turns off the "Program started at" line as well as the "Running Time" line.
Non-alphanumeric characters are now allowed in the REPORTORDER as separators.
Correctly parses more APACHELOGFORMATs.
Better detection of Windows 2000 in Operating System Report.
Better warning messages when the erroneous command contains a space.
Code for NeXTSTEP operating system.
Better treatment of multibyte character sets.
Icelandic language files. Corrections to Bosnian, French, Italian, Japanese & Swedish.
4.03 (21-Feb-00)
Fixed several small bugs.
New command RUNTIME.
Brazilian Portuguese language files and Swedish domains files. Corrections to Dutch.
4.02 (31-Jan-00)
New command SEARCHCHARCONVERT.
Support for Apache's new %q code in APACHELOGFORMAT.
Fix for search reports causing crashes on Windows.
New language: Czech. Corrections for Serbian, Slovene and Ukrainian.
4.01 (17-Dec-99)
New command USERCASE.
Some of the default paths have changed in anlghead.h.
Improvements to OpenVMS port.
Language files included for Armenian, Bosnian, Catalan, traditional Chinese, Dutch, Finnish, German, Italian, Slovak, Slovene, Spanish, Swedish & Ukrainian; corrections to Russian & Turkish.
4.0 (16-Nov-99)
Simplified Chinese, Danish, Japanese, Portuguese & Serbian language files included.
Otherwise only small changes since 3.90beta2.
3.90beta2 (02-Nov-99)
It is now recommended that you don't run analog as a CGI program for security reasons. (The CGI command is still present, but it is now not documented.)
The Organisation Report is now hierarchical.
The Browser Summary is now arranged by major version number. (See notes on upgrading.)
Non-exact bytes are now given to 3 decimal places.
GOTOS FEW puts the "Go To" lines just at the top and bottom of the output.
PRINTVARS has been renamed SETTINGS.
-settings output improved, especially with OUTPUT NONE.
Split PAGEWIDTH into HTMLPAGEWIDTH and ASCIIPAGEWIDTH.
Includes language files for French, Greek, Norwegian (Bokmål & Nynorsk), Polish, Russian and Turkish.
New configuration file examples/big.cfg containing most commands.
3.90beta1 (07-Oct-99)
First beta test for version 4. The most important new features are:
  • Five new reports: Organisation Report, Operating System Report, Search Word Report, Search Query Report, Processing Time Report.
  • Browser Summary improved (will change results).
  • Form interface completely rewritten, and considerably simplified.
  • Multiple *'s now allowed on left-hand side of ALIASes.
  • Regular expressions allowed in INCLUDEs & EXCLUDEs, and ALIASes.
  • The output INCLUDEs and EXCLUDEs now apply to the lower levels of a hierarchical report as well as the top level.
  • New commands: CGI, STYLESHEET and ERRLINELENGTH.
  • New column N in most reports.
  • DEBUG C now reports which part of a corrupt logfile line is corrupt.
  • Non-exact bytes are now displayed as, e.g., 47.68 Mbytes instead of 48,832 kbytes. This should be less confusing.
  • Timestamps added to PROGRESSFREQ reports.
  • The DNS file has a new time encoding.
  • Header files split up to make anlghead.h simpler.
  • Form interfaces in German and U.S. English included.
  • New documentation about search arguments.
  • New examples directory.
  • New licence. (Nearly the same, just clarified, and slightly loosened).
What was new in version 3?
What was new in version 2?
What was new in version 1?

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/wasnew5.html000066400000000000000000000410041406366436600166570ustar00rootroot00000000000000 Readme for analog -- what was new in version 5? [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What was new in version 5?


This section lists the new features which were in version 5 of analog.
What's new in version 6?
5.32 (23-Mar-03)
Recognises Safari and Camino browsers.
New LOGFORMAT specification %D (processing time in microseconds).
Understands %A and %D in APACHELOGFORMAT.
5.31 (11-Jan-03)
Recognises Phoenix and Chimera browsers.
Fixes for Mac, OpenVMS and RISC OS ports.
Various other small bug fixes.
5.30 (30-Nov-02)
Reads gzipped logfiles without the need for an UNCOMPRESS command.
Host inclusions and exclusions can now use IP address ranges and subnet masks.
New command BYTESDP command to list kilobytes etc. to a chosen number of decimal places. The default number of decimal places has changed from three to two.
New code for RISC OS port, including wildcards in filenames. (Thanks to Stefan Bellon for this code).
Various bug fixes.
Indonesian and Slovak language files.
New How-To entitled Getting started under Windows. (Thanks to Simon Handfield).
5.24 (25-Jun-02)
Recognises Netscape 7 browser. Also better diagnosis of Windows operating systems for Netscape and Mozilla browsers.
New version of IIS How-To.
Later UNCOMPRESS commands now correctly override earlier ones.
SEARCHCHARCONVERT can now be turned on for multibyte character sets, though it's not recommended.
French report descriptions files.
New versions of Polish and alternative Swedish language files.
East Timor country code is now .tl.
5.23 (14-May-02)
Added PROGRESSFREQ to the list of forbidden commands from the form interface, because it allows a denial-of-service attack.
Also emphasised in the documentation that allowing untrusted users to run analog through the form interface is inherently open to a denial-of-service attack.
Fixed two bugs which caused occasional crashes while outputting.
Russian language files included (KOI8-R and Windows-1251 character sets).
Added new domains to the French domains files.
New How-To on configuring IIS.
5.22 (20-Mar-02)
Security fix for cross-site scripting security bug.
Upgraded zlib code to version 1.1.4 (although analog wasn't vulnerable to the security bug in zlib 1.1.3).
The PROGRESSFREQ messages now go to the screen as well as to the ERRFILE.
The second argument to SUBDOMAIN can now contain *'s and $'s.
Added eight new domains to many of the domains files.
Revised Japanese language files.
5.21 (20-Feb-02)
Corrected the MacHTTP log format, which didn't work in 5.2.
All the BARSTYLEs redrawn, and two new BARSTYLEs added, adapted from an idea by Dave Holle. (You will have to move the new graphics into your IMAGEDIR in order to use them.)
5.2 (13-Feb-02)
You can now plot the lower levels of hierarchical reports on the pie charts by using the new CHARTEXPAND family of commands.
Added MACHTTP to the list of built-in log formats that analog recognises automatically.
Recognises ; as well as & as query-string separator.
The rules for generating "organisations" from numerical addresses have changed.
Filenames given on the command line are now relative to the current directory, not the analog directory.
Ignores completely blank lines at the top of a logfile.
Makefiles for Microsoft Visual C++ can be found in the new src/build directory. Makefiles for other platforms have moved out of the source tree into there too.
You can now refer to kilobytes as kibibytes by editing your language file.
Revised versions of Japanese language files.
Revised the Licence.
Advertised new donations page.
5.1 (07-Nov-01)
The Browser Summary now recognises the Konqueror and Galeon browsers, and distinguishes Mozilla and Netscape. (If you are using a configuration file from an older version of analog, you need to remove one line.)
The Operating System Report now recognises Windows XP.
Numerical addresses are now included in the Organisation Report.
Logfile and cache file names can now contain date codes, in the same way as the OUTFILE.
The person setting up the form interface can now specify a list of allowed commands, rather than a list of forbidden commands.
The LATEX output style now works with the ISO-Latin-2 character set as well as ISO-Latin-1. New command PDFLATEX.
New LOGFORMAT token %Z for two- or four-digit years.
In the COMPSEP, you can now use \t to represent a tab.
New warnings category G; some warnings reclassified.
Various small bugs fixed. Also there is some rewriting internally, but it should be transparent to the user.
The Windows executable has been compiled using MinGW instead of Microsoft Visual C++.
Finnish translation, and corrections to German and Serbian. Brazilian Portuguese report descriptions files.
5.03 (07-Jul-01)
Bug fixes, including one bug that caused a crash under Windows.
Spanish translation, and corrections to SWEDISH-ALT translation.
5.02 (23-Jun-01)
Understands the new IIS log format with four-digit years.
Traditional Chinese and Brazilian Portuguese language files.
Japanese is now available in four character sets.
Four language files which were already distributed with the program are now available through the LANGUAGE command: BULGARIAN-MIK (MIK-16 charset), CZECH-1250 and SLOVENE-1250 (Windows-1250), and SWEDISH-ALT (alternative translation avoiding Anglicisms).
5.01 (19-May-01)
New command PNGIMAGES.
New token "PLAIN:" in ALIAS commands.
Unix man page included in source distribution.
New example configuration file examples/bigbyrep.cfg.
A few small bug fixes.
Italian report descriptions files; corrections to German language files.
5.0 (01-May-01)
How-To's introduced.
Wildcards now allowed in LOGFILE names from the form interface.
UNCOMPRESS now works on filenames with spaces in, and other small bug fixes.
Makefiles and build scripts for OpenVMS.
This version is available in 24 languages: Armenian, Bulgarian, Catalan, Czech, Danish, Dutch, English, US English, French, German, Hungarian, Italian, Japanese, Korean, Latvian, Norwegian (Bokmål & Nynorsk), Polish, Portuguese, Serbian, Slovene, Swedish, Turkish and Ukrainian.
4.91beta1 (10-Apr-01)
Output EXCLUDEs are now more fully excluded, producing significant changes in results.
New JPEGCHARTS command (only available if you compile analog yourself, with your own libgd).
New mailing list instructions to include subscriptions over the web, and the digest version of the analog-help list.
Mac version decompresses pkzip and bzip2 logfiles.
Ports to Mac OS X (Carbon) and IBM OS/390.
Pie charts work with EBCDIC character sets; and other improved EBCDIC support.
Wildcards in LOGFILE directories now work under more Unices.
The one-page version of the documentation, whole.html, is no longer distributed with the program. (It's still available at my site.)
This version is available in 21 languages: Armenian, Bulgarian, Catalan, Dutch, English, US English, French, German, Italian, Japanese, Korean, Latvian, Norwegian (Bokmål & Nynorsk), Polish, Portuguese, Serbian, Slovene, Swedish, Turkish and Ukrainian.
4.90beta4 (26-Mar-01)
Wildcards in directory names in LOGFILE commands now work under Unix. (Thanks to Owen Cliffe for this code.)
The CHARTDIR and LOCALCHARTDIR can now contain date codes, in the same way as the OUTFILE.
My own configuration file included in the examples directory.
This version is available in sixteen languages: Armenian, Bulgarian, Catalan, English, US English, French, German, Italian, Japanese, Korean, Latvian, Polish, Portuguese, Slovene, Swedish and Ukrainian.
4.90beta3 (13-Feb-01)
Security fix for buffer overflow bug.
4.90beta2 (05-Feb-01)
New commands CHARTDIR and LOCALCHARTDIR.
The pie charts are now easier to read, and work properly in non-European character sets.
*.asp is no longer included in the default definition of "pages". (See how to upgrade).
The computer-readable output style now gives the REPORTSPANs.
On Unix, now follows symlinks when finding the name of the analog binary to construct other filenames.
Various other minor bug fixes from 4.90beta1.
This version is available in nine languages: Armenian, Bulgarian, Catalan, English, US English, French, Portuguese, Swedish and Ukrainian.
4.90beta1 (22-Jan-01)
This is the first beta test for version 5.
  • Twelve new reports: Yearly Report, Quarterly Report, Five-Minute Summary, Quarter-Hour Summary, Hour of the Week Summary, Host Failure Report, Host Redirection Report, Virtual Host Failure Report, Virtual Host Redirection Report, User Redirection Report, Internal Search Word Report and Internal Search Query Report.
  • Pie charts are now included at the top of most reports. *CHART commands to control them.
  • New command GENSUMLINES to control which lines are listed in the General Summary.
  • The "Distinct hosts" line now appears in the General Summary even if you aren't making a Host, Organisation or Domain Report.
  • New commands DESCRIPTIONS and DESCFILE to provide descriptions of each report.
  • New commands REPORTSPAN and REPORTSPANTHRESHOLD to list the time period covered by each report.
  • New commands ROBOTINCLUDE and ROBOTEXCLUDE for listing robots in the Operating System Report.
  • New command INTSEARCHENGINE to allow the internal search reports.
  • New command DNSTIMEOUT (on some platforms) to reduce the time taken for failed DNS lookups.
  • New LINKINCLUDE and LINKEXCLUDE commands. (See how to upgrade).
  • New columns E and e for time of first request; and S, s, Q, q, C and c for data in last 7 days; also corresponding SORTBY and FLOOR commands.
  • Substantial internal changes to allow these new columns without using extra memory if they are not wanted, and to substantially reduce code size (from what it would have been otherwise!).
  • LaTeX output style.
  • All files are now looked for in the "right" directories. This should improve usability substantially, especially from the form interface. (See how to upgrade).
  • If you specify a CACHEFILE command but no LOGFILE command, analog won't read the default logfile. (See how to upgrade).
  • US English now uses the 12-hour clock by default. (See how to upgrade).
  • Computer readable output now reports the busiest time period for the time reports.
  • Several commands have changed to better names, but the old names should still work.
In addition, version 4.14 was also released on the same date, and this version includes all its changes.
This version is only available in English and US English.
What was new in version 4?
What was new in version 3?
What was new in version 2?
What was new in version 1?

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/webworks.html000066400000000000000000000337161406366436600171440ustar00rootroot00000000000000 Readme for analog -- how the web works [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: How the web works


This section is about what happens when somebody connects to your web site, and what statistics you can and can't calculate. There is a lot of confusion about this. It's not helped by statistics programs which claim to calculate things which cannot really be calculated, only estimated. The simple fact is that certain data which we would like to know and which we expect to know are simply not available. And the estimates used by other programs are not just a bit off, but can be very, very wrong. For example (you'll see why below), if your home page has 10 graphics on, and an AOL user visits it, most programs will count that as 11 different visitors!

This section is fairly long, but it's worth reading carefully. If you understand the basics of how the web works, you will understand what your web statistics are really telling you.


1. The basic model. Let's suppose I visit your web site. I follow a link from somewhere else to your front page, read some pages, and then follow one of your links out of your site.

So, what do you know about it? First, I make one request for your front page. You know the date and time of the request and which page I asked for (of course), and the internet address of my computer (my host). I also usually tell you which page referred me to your site, and the make and model of my browser. I do not tell you my username or my email address.

Next, I look at the page (or rather my browser does) to see if it's got any graphics on it. If so, and if I've got image loading turned on in my browser, I make a separate connection to retrieve each of these graphics. I never log into your site: I just make a sequence of requests, one for each new file I want to download. The referring page for each of these graphics is your front page. Maybe there are 10 graphics on your front page. Then so far I've made 11 requests to your server.

After that, I go and visit some of your other pages, making a new request for each page and graphic that I want. Finally, I follow a link out of your site. You never know about that at all. I just connect to the next site without telling you.


2. Caches. It's not always quite as simple as that. One major problem is caching. There are two major types of caching. First, my browser automatically caches files when I download them. This means that if I visit them again, the next day say, I don't need to download the whole page again. Depending on the settings on my browser, I might check with you that the page hasn't changed: in that case, you do know about it, and analog will count it as a new request for the page. But I might set my browser not to check with you: then I will read the page again without you ever knowing about it.

The other sort of cache is on a larger scale. Almost all ISPs now have their own cache. This means that if I try to look at one of your pages and anyone else from the same ISP has looked at that page recently, the cache will have saved it, and will give it out to me without ever telling you about it. (This applies whatever my browser settings.) So hundreds of people could read your pages, even though you'd only sent it out once.


3. What you can know. The only things you can know for certain are the number of requests made to your server, when they were made, which files were asked for, and which host asked you for them.

You can also know what people told you their browsers were, and what the referring pages were. You should be aware, though, that many browsers lie deliberately about what sort of browser they are, or even let users configure the browser name. And some people use "anonymizers" which deliberately send false browsers and referrers.


4. What you can't know.
  1. You can't tell the identity of your readers. Unless you explicitly require users to provide a password, you don't know who connected or what their email addresses are.
  2. You can't tell how many visitors you've had. You can guess by looking at the number of distinct hosts that have requested things from you. Indeed this is what many programs mean when they report "visitors". But this is not always a good estimate for three reasons. First, if users get your pages from a local cache server, you will never know about it. Secondly, sometimes many users appear to connect from the same host: either users from the same company or ISP, or users using the same cache server. Finally, sometimes one user appears to connect from many different hosts. AOL now allocates users a different hostname for every request. So if your home page has 10 graphics on, and an AOL user visits it, most programs will count that as 11 different visitors!
  3. You can't tell how many visits you've had. Many programs, under pressure from advertisers' organisations, define a "visit" (or "session") as a sequence of requests from the same host until there is a half-hour gap. This is an unsound method for several reasons. First, it assumes that each host corresponds to a separate person and vice versa. This is simply not true in the real world, as discussed in the last paragraph. Secondly, it assumes that there is never a half-hour gap in a genuine visit. This is also untrue. I quite often follow a link out of a site, then step back in my browser and continue with the first site from where I left off. Should it really matter whether I do this 29 or 31 minutes later? Finally, to make the computation tractable, such programs also need to assume that your logfile is in chronological order: it isn't always, and analog will produce the same results however you jumble the lines up.
  4. Cookies don't solve these problems. Some sites try to count their visitors by using cookies. This reduces the errors. But it can't solve the problem unless you refuse to let people read your pages who can't or won't take a cookie. And you still have to assume that your visitors will use the same cookie for their next request.
  5. You can't follow a person's path through your site. Even if you assume that each person corresponds one-to-one to a host, you don't know their path through your site. It's very common for people to go back to pages they've downloaded before. You never know about these subsequent visits to that page, because their browser has cached them. So you can't track their path through your site accurately.
  6. You often can't tell where they entered your site, or where they found out about you from. If they are using a cache server, they will often be able to retrieve your home page from their cache, but not all of the subsequent pages they want to read. Then the first page you know about them requesting will be one in the middle of their true visit.
  7. You can't tell how they left your site, or where they went next. They never tell you about their connection to another site, so there's no way for you to know about it.
  8. You can't tell how long people spent reading each page. Once again, you can't tell which pages they are reading between successive requests for pages. They might be reading some pages they downloaded earlier. They might have followed a link out of your site, and then come back later. They might have interrupted their reading for a quick game of Minesweeper. You just don't know.
  9. You can't tell how long people spent on your site. Apart from the problems in the previous point, there is one other complete show-stopper. Programs which report the time on the site count the time between the first and the last request. But they don't count the time spent on the final page, and this is often the majority of the whole visit.
There are lots of other things you can't know. These are just examples. The summary is that you can know what happens at your server, but you can't know what the user or the user's browser does with the data you have sent.
5. Real data. Of course, the important question is how much difference these theoretical difficulties make. In a recent paper (World Wide Web, 2, 29-45 (1999): PDF 228kb), Peter Pirolli and James Pitkow of Xerox Palo Alto Research Center examined this question using a ten day long logfile from the xerox.com web site. One of their most striking conclusions is that different commonly-used methods can give very different results. For example, when trying to measure the median length of a visit, they got results from 137 seconds to 629 seconds, depending exactly what you count as a new visitor or a new visit. As they were looking at a fixed logfile, they didn't consider the effect of server configuration changes such as refusing caching, which would change the results still more.
6. Conclusion. The bottom line is that HTTP is a stateless protocol. That means that people don't log in and retrieve several documents: they make a separate connection for each file they want. And a lot of the time they don't even behave as if they were logged into one site. The world is a lot messier than this naïve view implies. That's why analog reports requests, i.e. what is going on at your server, which you know, rather than guessing what the users are doing.

Defenders of counting visits etc. claim that these are just small approximations. I disagree. For example, almost everyone is now accessing the web through a cache. If the proportion of requests retrieved from the cache is 50% (a not unrealistic figure) then half of the users' requests aren't being seen by the servers.

Other defenders of these methods claim that they're still useful because they measure something which you can use to compare sites. But this assumes that the approximations involved are comparable for different sites, and there's no reason to suppose that this is true. Pirolli & Pitkow's results show that the figures you get depend very much on how you count them, as well as on your server configuration. And even once you've agreed on methodology, different users on different sites have different patterns of behaviour, which affect the approximations in different ways: for example, Pirolli & Pitkow found different characteristics of weekday and weekend users at their site.

Still other people say that at least the trend over time of these numbers tells you something. But even that may not be true, because you may not be comparing like with like. Consider what would happen if a large ISP decided to change its proxy server configuration. It could substantially change your apparent number of visits, even if there was no actual change in the traffic levels at your site.

I've presented a somewhat negative view here, emphasising what you can't find out. Web statistics are still informative: it's just important not to slip from "this page has received 30,000 requests" to "30,000 people have read this page." In some sense these problems are not really new to the web -- they are present just as much in print media too. For example, you only know how many magazines you've sold, not how many people have read them. In print media we have learnt to live with these issues, using the data which are available, and it would be better if we did on the web too, rather than making up spurious numbers.


7. Acknowledgements and further reading. Many other people have made these points too. While originally writing this section, I benefited from three earlier expositions: Interpreting WWW Statistics by Doug Linder; Getting Real about Usage Statistics by Tim Stehle; and Making Sense of Web Usage Statistics by Dana Noonan. (The last two don't seem to be available on the web any more.)

Another, extremely well-written document on these ideas is Measuring Web Site Usage: Log File Analysis by Susan Haigh and Janette Megarity. Being on a Canadian government site, it's available in both English and French. Or for an even more negative point of view, you could read Why Web Usage Statistics are (Worse Than) Meaningless by Jeff Goldberg.


Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/docs/whatsnew.html000066400000000000000000000122011406366436600171230ustar00rootroot00000000000000 Readme for analog -- what's new in this version? [ Top | Up | Prev | Next | Map | Index ]

Analog CE 6.0: What's new in this version?


This section lists the major new features in each version of analog. There's also another section about how to upgrade from older versions of analog, listing which commands have changed or been abolished, or how the output of this version differs from that of previous versions.

Analog CE 6.0.x Releases

To view the most up to date changelog for Analog CE please visit the Analog CE Changelog page.

To be notified of new releases of Analog CE. Please subscribe to the Analog CE Updates RSS feed.


Older Analog 6.0 Releases

6.0 (19-Dec-04)
Added Palm OS and Symbian OS to the Operating System Report.
ISO 8601 extended date format available in language files.
Another style sheet from James Reeves added to the examples directory.
5.92beta1 (14-Nov-04)
Analog is now distributed under the GNU General Public License.
Fix problems building unzip.c on some platforms.
Fix invalid XHTML output in non-European languages.
The DNSTIMEOUT command is now off by default, because it breaks DNS lookups on many platforms.
Recognises Firebird and Firefox as browsers.
msnbot recognised as a robot in the default configuration.
Patches for Mac.
New Makefiles for Windows and RISC OS.
Corrections to Finnish and Japanese language files.
5.91beta1 (23-Aug-03)
Reads zip and bzip2 logfiles without the need for an UNCOMPRESS command.
Automatically strips ;params section from URLs (for example, jsessionid's).
Recognises Windows Server 2003 in the Operating System Report.
First user-contributed style sheets added to examples/css directory.
Computer-readable output style now forces English output.
More corrections to XML output style.
Patches for OpenVMS and RISC OS.
Basque language files.
Country code .cs, formerly Czechoslovakia, is now Serbia and Montenegro. (Changed in English, French and German domains files, and removed from other domains files).
Corrections to Swedish and Ukrainian language files, and to German domains files.
5.90beta2 (10-Apr-03)
Internal Search reports now work properly on case-insensitive file systems.
Various bug fixes and improvements to XHTML and XML output styles.
New command CSSPREFIX to add a prefix to the CSS class names used in the XHTML output.
XML DTD distributed with the program.
Language files for Simplified Chinese.
5.90beta1 (30-Mar-03)
This is the first beta test for version 6.
Output code completely rewritten, to permit more output formats.
New output formats XHTML and XML. (Thanks to Per Jessen for XML, and to Jeremy Wadsack for help with XHTML).
XHTML is now the default output style.
The barcharts are now made from png's not gif's by default.
New command LOGOURL.
What was new in version 5?
What was new in version 4?
What was new in version 3?
What was new in version 2?
What was new in version 1?

Go to the Analog CE home page.

Stephen Turner
19 December 2004

[ Top | Up | Prev | Next | Map | Index ] analog-ce-6.0.17/examples/000077500000000000000000000000001406366436600152675ustar00rootroot00000000000000analog-ce-6.0.17/examples/big.cfg000066400000000000000000000262571406366436600165250ustar00rootroot00000000000000# Here is a big configuration file for analog version 6.0 # # # It contains most commands which you can use # (or at least one example from each family of commands). # See bigbyrep.cfg for a similar file arranged by report instead of by family # of command. # # Actually this file doesn't really do much except show you what's available, # because it gives almost all the commands their default values. # (As of time of writing -- I don't promise it will stay up-to-date.) # # Even this file doesn't contain all the commands -- you'll have to read the # docs for the full set! # # First the commands you are most likely to want to change. # # If you need a LOGFORMAT command (most people don't -- try it without first!), # it must go here, above the LOGFILE commands. # LOGFORMAT MICROSOFT-NA # The logfile(s) to be analysed LOGFILE logfile.log # LOGFILE /old/logs/access_log.* # # Your organisation's name and URL for the top line of the report HOSTNAME "[my organisation]" HOSTURL none # # Where to write the report OUTFILE Report.html # # URL for the images directory IMAGEDIR images/ # # Whether to use PNG or GIF images PNGIMAGES ON # # URL and local directory for the pie charts # CHARTDIR /images/ # LOCALCHARTDIR /usr/local/apache/htdocs/images/ # # Style sheet for the output page STYLESHEET none CSSPREFIX none # # Web server fetches /dir/index.html when asked for /dir/ DIRSUFFIX index.html # # Case sensitive or case insensitive file system: default depends on your OS. # If your web server and your analog run on different OS's, you may need to # change this according to the machine running your server. # CASE INSENSITIVE # USERCASE SENSITIVE # # How to uncompress compressed logfiles # UNCOMPRESS *.bz "bzip2 -cd" # Cache files: see docs/cache.html CACHEFILE none CACHEOUTFILE none # Aliases: see docs/alias.html # I can't list all of them, but there are aliases for individual items, e.g. # FILEALIAS /football/* /soccer/* # and there are also aliases for each report, e.g. # REQALIAS /soccer/* "Football: /soccer/*" # You can also use regular expressions: # FILEALIAS REGEXP:^/(football|soccer)/(.*) /$2 TYPEALIAS .html ".html [Hypertext Markup Language]" TYPEALIAS .htm ".htm [Hypertext Markup Language]" TYPEALIAS .shtml ".shtml [Server-parsed HTML]" TYPEALIAS .ps ".ps [PostScript]" TYPEALIAS .gz ".gz [Gzip compressed files]" TYPEALIAS .tar.gz ".tar.gz [Compressed archives]" TYPEALIAS .jpg ".jpg [JPEG graphics]" TYPEALIAS .jpeg ".jpeg [JPEG graphics]" TYPEALIAS .gif ".gif [GIF graphics]" TYPEALIAS .png ".png [PNG graphics]" TYPEALIAS .txt ".txt [Plain text]" TYPEALIAS .cgi ".cgi [CGI scripts]" TYPEALIAS .pl ".pl [Perl scripts]" TYPEALIAS .css ".css [Cascading Style Sheets]" TYPEALIAS .class ".class [Java class files]" TYPEALIAS .pdf ".pdf [Adobe Portable Document Format]" TYPEALIAS .zip ".zip [Zip archives]" TYPEALIAS .hqx ".hqx [Macintosh BinHex files]" TYPEALIAS .exe ".exe [Executables]" TYPEALIAS .wav ".wav [WAV sound files]" TYPEALIAS .avi ".avi [AVI movies]" TYPEALIAS .arc ".arc [Compressed archives]" TYPEALIAS .mid ".mid [MIDI sound files]" TYPEALIAS .mp3 ".mp3 [MP3 sound files]" TYPEALIAS .doc ".doc [Microsoft Word document]" TYPEALIAS .rtf ".rtf [Rich Text Format]" TYPEALIAS .mov ".mov [Quick Time movie]" TYPEALIAS .mpg ".mpg [MPEG movie]" TYPEALIAS .mpeg ".mpeg [MPEG movie]" TYPEALIAS .asp ".asp [Active Server Pages]" TYPEALIAS .jsp ".jsp [Java Server Pages]" TYPEALIAS .cfm ".cfm [Cold Fusion]" TYPEALIAS .php ".php [PHP]" TYPEALIAS .js ".js [JavaScript code]" # Inclusions and exclusions: see docs/include.html # Again there are these for individual items, e.g. # FILEINCLUDE /football/* # FILEEXCLUDE /football/* # and for each report, e.g. # REQINCLUDE pages # REQINCLUDE *.pdf # Or you can use regular expressions: # FILEINCLUDE REGEXP:^/(football|soccer) # You can make more things into pages with commands like # PAGEINCLUDE *.shtml # PAGEINCLUDE *.asp # PAGEINCLUDE *.jsp # PAGEINCLUDE *.cfm # PAGEINCLUDE *.pl # PAGEINCLUDE *.php # You can limit the dates analysed with FROM and/or TO: see docs/include.html # FROM 991001 # TO -00-00-01 # Controlling status codes: see docs/include.html # STATUSINCLUDE 200-299,304 # STATUSEXCLUDE 206 304ISSUCCESS ON # Which browsers count as robots in the Operating System Report ROBOTINCLUDE REGEXPI:robot ROBOTINCLUDE REGEXPI:spider ROBOTINCLUDE REGEXPI:crawler ROBOTINCLUDE Googlebot* ROBOTINCLUDE msnbot* ROBOTINCLUDE Infoseek* ROBOTINCLUDE Scooter* ROBOTINCLUDE *Slurp* ROBOTINCLUDE *Validator* ROBOTINCLUDE Ultraseek* # Whether each report is wanted: see docs/output.html GENERAL ON YEARLY OFF QUARTERLY OFF MONTHLY ON DAILYREP OFF DAILYSUM ON WEEKLY OFF HOURLYREP OFF HOURLYSUM ON QUARTERREP OFF QUARTERSUM OFF FIVEREP OFF FIVESUM OFF DOMAIN ON ORGANISATION ON DIRECTORY ON FILETYPE ON REQUEST ON REDIR OFF FAILURE OFF SIZE ON PROCTIME OFF HOST OFF REDIRHOST OFF FAILHOST OFF REFERRER OFF REFSITE OFF REDIRREF OFF FAILREF OFF VHOST OFF REDIRVHOST OFF FAILVHOST OFF USER OFF REDIRUSER OFF FAILUSER OFF SEARCHQUERY OFF SEARCHWORD ON INTSEARCHQUERY OFF INTSEARCHWORD OFF BROWSERREP OFF BROWSERSUM OFF OSREP ON STATUS ON # The columns in each report: see docs/timereps.html and docs/othreps.html TIMECOLS RP YEARCOLS RP QUARTERLYCOLS RP MONTHCOLS RP WEEKCOLS RP DAYREPCOLS RP DAYSUMCOLS RP HOURREPCOLS RP HOURSUMCOLS RP QUARTERREPCOLS RP QUARTERSUMCOLS RP FIVEREPCOLS RP FIVESUMCOLS RP DOMCOLS Rb ORGCOLS Rb HOSTCOLS Rb REDIRHOSTCOLS R FAILHOSTCOLS R DIRCOLS Rb TYPECOLS Rb REQCOLS RbD REDIRCOLS R FAILCOLS R REFCOLS R REFSITECOLS R REDIRREFCOLS R FAILREFCOLS R BROWREPCOLS R BROWSUMCOLS R OSCOLS NRP SIZECOLS Rb PROCTIMECOLS R VHOSTCOLS Rb REDIRVHOSTCOLS R FAILVHOSTCOLS R USERCOLS Rb REDIRUSERCOLS R FAILUSERCOLS R SEARCHQUERYCOLS R SEARCHWORDCOLS R INTSEARCHQUERYCOLS R INTSEARCHWORDCOLS R STATUSCOLS R # How the graphs are plotted: see docs/timereps.html ALLGRAPH P YEARGRAPH P MONTHGRAPH P DAYREPGRAPH P DAYSUMGRAPH P HOURREPGRAPH P HOURSUMGRAPH P WEEKGRAPH P QUARTERREPGRAPH P QUARTERSUMGRAPH P FIVEREPGRAPH P FIVESUMGRAPH P # Whether the time reports run forwards or backwards: see docs/timereps.html ALLBACK OFF YEARBACK OFF QUARTERLYBACK OFF MONTHBACK OFF DAYREPBACK OFF HOURREPBACK OFF WEEKBACK OFF QUARTERREPBACK OFF FIVEREPBACK OFF # The number of rows to display in each time report: see docs/timereps.html YEARROWS 0 QUARTERLYROWS 0 MONTHROWS 0 WEEKROWS 0 DAYREPROWS 42 HOURREPROWS 72 QUARTERREPROWS 96 FIVEREPROWS 288 # The floors for each report: see docs/othreps.html and docs/hierreps.html REQFLOOR 20r REQARGSFLOOR 10r REDIRFLOOR -30r REDIRARGSFLOOR 10r FAILFLOOR -30r FAILARGSFLOOR 10r DOMFLOOR 0b SUBDOMFLOOR 0.5%b ORGFLOOR -20r SUBORGFLOOR 0.5%r DIRFLOOR 0.01%b SUBDIRFLOOR 0.01%b TYPEFLOOR 0.1%b SUBTYPEFLOOR 0.1%b HOSTFLOOR -50r REDIRHOSTFLOOR -20r FAILHOSTFLOOR -20r REFFLOOR 20r REFARGSFLOOR 10r REFSITEFLOOR -30r REFDIRFLOOR 50r REDIRREFFLOOR -30r REDIRREFARGSFLOOR 10r FAILREFFLOOR -30r FAILREFARGSFLOOR 10r BROWSUMFLOOR -20r SUBBROWFLOOR -20r BROWREPFLOOR -40r OSFLOOR 0p SUBOSFLOOR 0p VHOSTFLOOR -20b REDIRVHOSTFLOOR -20r FAILVHOSTFLOOR -20r USERFLOOR -50r REDIRUSERFLOOR -20r FAILUSERFLOOR -20r SEARCHQUERYFLOOR -30r SEARCHWORDFLOOR -30r INTSEARCHQUERYFLOOR -30r INTSEARCHWORDFLOOR -30r STATUSFLOOR 0r # How each report is sorted: see docs/othreps.html and docs/hierreps.html REQSORTBY REQUESTS REDIRSORTBY REQUESTS FAILSORTBY REQUESTS DOMSORTBY BYTES ORGSORTBY REQUESTS DIRSORTBY BYTES TYPESORTBY BYTES HOSTSORTBY ALPHABETICAL REDIRHOSTSORTBY REQUESTS FAILHOSTSORTBY REQUESTS REFSORTBY REQUESTS REFSITESORTBY REQUESTS REDIRREFSORTBY REQUESTS FAILREFSORTBY REQUESTS BROWREPSORTBY REQUESTS BROWSUMSORTBY REQUESTS OSSORTBY PAGES SUBOSSORTBY PAGES VHOSTSORTBY BYTES REDIRVHOSTSORTBY REQUESTS FAILVHOSTSORTBY REQUESTS USERSORTBY REQUESTS REDIRUSERSORTBY REQUESTS FAILUSERSORTBY REQUESTS SEARCHQUERYSORTBY REQUESTS SEARCHWORDSORTBY REQUESTS INTSEARCHQUERYSORTBY REQUESTS INTSEARCHWORDSORTBY REQUESTS STATUSSORTBY ALPHABETICAL # Whether and how pie charts are plotted: see docs/othreps.html REQCHART ON REDIRCHART ON FAILCHART ON TYPECHART ON SIZECHART ON PROCTIMECHART ON DIRCHART ON HOSTCHART ON REDIRHOSTCHART ON FAILHOSTCHART ON DOMCHART ON ORGCHART ON REFCHART ON REFSITECHART ON REDIRREFCHART ON FAILREFCHART ON BROWREPCHART ON BROWSUMCHART ON OSCHART ON VHOSTCHART ON REDIRVHOSTCHART ON FAILVHOSTCHART ON USERCHART ON REDIRUSERCHART ON FAILUSERCHART ON SEARCHQUERYCHART ON SEARCHWORDCHART ON INTSEARCHQUERYCHART ON INTSEARCHWORDCHART ON STATUSCHART ON # Zoom in on some wedges using CHARTEXPAND # OSCHARTEXPAND Windows # What to link to in the reports REQLINKINCLUDE pages REDIRLINKEXCLUDE * FAILLINKEXCLUDE * REFLINKINCLUDE * REDIRREFLINKINCLUDE * FAILREFLINKINCLUDE * # BASEURL http://my.server.com # Cosmetic commands: mostly in docs/output.html OUTPUT XHTML LANGUAGE ENGLISH # LANGFILE uk.lng # DOMAINSFILE ukdom.tab # DESCFILE ukdesc.txt HEADERFILE none FOOTERFILE none LOGO analogo LOGOURL http://www.analog.cx/ REPORTORDER x1QmWDdHwh4657oZSlLujJkKfsNnBbpvRMcPztiEIYyr GENSUMLINES ALL GOTOS ON RUNTIME ON DESCRIPTIONS ON REPORTSPAN OFF REPORTSPANTHRESHOLD 60 WEEKBEGINSON SUNDAY LASTSEVEN ON MARKCHAR + # SEPCHAR and DECPOINT are usually taken from the language file # SEPCHAR , # DECPOINT . REPSEPCHAR none COMPSEP " " RAWBYTES OFF BYTESDP 2 NOROBOTS ON SEARCHCHARCONVERT ON BARSTYLE b HTMLPAGEWIDTH 65 ASCIIPAGEWIDTH 76 MINGRAPHWIDTH 15 # The following commands are only available on some systems: see docs/dns.html # DNSFILE dnscache # DNSLOCKFILE dnslock # DNS NONE # DNSGOODHOURS 100000 # DNSBADHOURS 336 # DNSTIMEOUT 10 # Sub-item commands: see docs/hierreps.html. Examples are # SUBDOM *.com # SUBDIR /*/*/ SUBTYPE *.gz,*.Z # A list of search engines. More SEARCHENGINE commands can be found at # http://www.analog.cx/helpers/#conffiles SEARCHENGINE http://*google.*/* q,as_q,as_epq,as_oq SEARCHENGINE http://*altavista.*/* q SEARCHENGINE http://*yahoo.*/* p SEARCHENGINE http://*lycos.*/* query,wfq SEARCHENGINE http://*aol.*/* query SEARCHENGINE http://*excite.*/* search SEARCHENGINE http://*go2net.*/* general SEARCHENGINE http://*metacrawler.*/* general SEARCHENGINE http://*msn.*/* q,MT SEARCHENGINE http://*netscape.*/* search SEARCHENGINE http://*looksmart.*/* key SEARCHENGINE http://*webcrawler.*/* qkw,search,searchText SEARCHENGINE http://*overture.*/* Keywords SEARCHENGINE http://*teoma.*/* q SEARCHENGINE http://*infospace.*/* qkw SEARCHENGINE http://*alltheweb.*/* q SEARCHENGINE http://*dogpile.*/* q SEARCHENGINE http://*ask.*/* q,ask SEARCHENGINE http://*alltheweb.*/* query SEARCHENGINE http://*northernlight.*/* qr SEARCHENGINE http://*nlsearch.*/* qr SEARCHENGINE http://*dmoz.*/* search SEARCHENGINE http://*/netfind* query SEARCHENGINE http://*/pursuit query # Search engines on your own site # INTSEARCHENGINE /cgi-bin/my.cgi q # Use one of these if you are short of memory: see docs/lowmem.html FILELOWMEM 0 HOSTLOWMEM 0 BROWLOWMEM 0 REFLOWMEM 0 USERLOWMEM 0 VHOSTLOWMEM 0 # Commands for debugging SETTINGS OFF DEBUG OFF WARNINGS ON PROGRESSFREQ 0 # ERRFILE somefile ERRLINELENGTH 78 # # By Stephen Turner 1999 - 2004. No warranty for this file. # This file is given into the public domain: it may be used, modified and # redistributed without restriction. analog-ce-6.0.17/examples/bigbyrep.cfg000066400000000000000000000415151406366436600175610ustar00rootroot00000000000000# This configuration file contains most of analog's commands, arranged by # the report they affect. See big.cfg for a similar file arranged by family # of command instead. (Unlike big.cfg, this file doesn't use the default # values though.) # # This configuration file was contributed by Lucian Wischik. HOSTNAME "***SAMPLE DATA***" HOSTURL http://www.statslab.cam.ac.uk # FROM 991001 # TO -00-00-01 ############################################################################### # THE LOGFILE INPUT # ############################################################################### # If you need a LOGFORMAT command (most people don't -- try it without first!), # it must go here, above the LOGFILE commands. LOGFILE logfile.log DNS READ DNSFILE dnscache.txt DNSLOCKFILE dnslock.txt DNSGOODHOURS 1000000 DNSBADHOURS 500 # DNSTIMEOUT 10 CACHEFILE none CACHEOUTFILE none DIRSUFFIX index.html # UNCOMPRESS *.bz "bzip2 -cd" ############################################################################### # THE OUTPUT # ############################################################################### OUTFILE index.html OUTPUT XHTML LANGUAGE ENGLISH # Analog expects to find ancilliary files in these locations: IMAGEDIR images/ # CHARTDIR /images/ # LOCALCHARTDIR /usr/local/apache/htdocs/images/ STYLESHEET none CSSPREFIX none LOGO none HEADERFILE none FOOTERFILE none # 'Runtime' says how long the analysis took. 'Gotos' are irritating shortcuts. # 'Descriptions' say verbosely what each report is. 'Reportorder' what order # the reports come in. 'Reportspan' is for when some parts cover a different # time span to others, but is costly in terms of memory usage. RUNTIME ON GOTOS OFF DESCRIPTIONS OFF REPORTSPAN OFF REPORTSPANTHRESHOLD 60 REPORTORDER x-1QmWDdHhw4657-oZSsfnNBbp-irtz-cILKElk-vRMujJyYP # x=General # 1=Yearly Q=Quarterly m=Monthly W=Weekly D=Daily d=DailySum # H=Hourly h=HourlySum w=HoursOfWeek 4=15minly 6=15minlySum 5=5minly # 7=5minlySum # o=Domain Z=Organisat. S=Host s=RefSite f=ReferrerURL # n=SearchWord N=SearchQuery B=Browser b=BrowserSum p=OS # i=Dir. r=File t=FileType z=FileSize c=Status # I=Failure L=FailHost K=FailRef E=Redir l=RedirHost k=RedirRef # v=VHost R=RedirVHost M=FailVHost u=User j=RedirUser J=FailUser # y=IntSearchWord Y=IntSearchQuery P=ProcTime WEEKBEGINSON MONDAY MARKCHAR + REPSEPCHAR none COMPSEP " " RAWBYTES OFF BYTESDP 2 NOROBOTS ON SEARCHCHARCONVERT ON BARSTYLE b PNGIMAGES ON HTMLPAGEWIDTH 65 ASCIIPAGEWIDTH 76 MINGRAPHWIDTH 15 # BASEURL http://my.server.com - use this if the report's on a different web page from the data ############################################################################### # GENERAL REPORT # # Shows total and average numbers of reqests. # # GENSUMLINES - which information and in which order to show (see list below) # # LASTSEVEN - each item says, in brackets, the data for the last seven days # # (If your logs are old when you run analog, use TO field to say which 7) # ############################################################################### # I=distinct files J=distinct hosts F=failed req G=redirected reqs # K=bad loglines L=unwanted logli. C=no-status logli. H=no-status reqs # B=av.succ.reqs/day D=tot.succ.pages E=av.succ.pages/day # M=tot.data N=av.data/day GENERAL ON GENSUMLINES BDEFIJMN LASTSEVEN ON ############################################################################### # TIME REPORTS # # # # Yearly, 1/4ly, monthly, weekly, daily+sum, hourly+sum, 1/4hrly+sum, 5min+sum# # 'Reports' show how much traffic over each past year, month, hour... # # 'Summaries' divide all the traffic into days of the week, hours of the day. # # # # COLS - which columns to display (see below for list of fields) # # GRAPH - which of those fields should be plotted as the bar-graph # # BACK - turn it on to have the list in reverse order (most recent first) # # ROWS - how many rows to display, or 0 for unlimited # ############################################################################### # R=num of reqs P=num of pages B=num of bytes # r=% of reqs p=% of pages b=% of bytes YEARLY OFF YEARCOLS RP YEARGRAPH P YEARBACK OFF YEARROWS 0 MONTHLY ON MONTHCOLS PB MONTHGRAPH B MONTHBACK OFF MONTHROWS 0 QUARTERLY OFF QUARTERLYCOLS RP QUARTERLYBACK OFF QUARTERLYROWS 0 WEEKLY OFF WEEKCOLS RP WEEKGRAPH P WEEKBACK OFF WEEKROWS 0 DAILYREP ON DAYREPCOLS PB DAYREPGRAPH P DAYREPBACK OFF DAYREPROWS 42 DAILYSUM OFF DAYSUMCOLS RP DAYSUMGRAPH P HOURLYREP OFF HOURREPCOLS RP HOURREPGRAPH P HOURREPBACK OFF HOURREPROWS 72 HOURLYSUM ON HOURSUMCOLS Pb HOURSUMGRAPH P QUARTERREP OFF QUARTERREPCOLS RP QUARTERREPGRAPH P QUARTERREPBACK OFF QUARTERREPROWS 96 QUARTERSUM OFF QUARTERSUMCOLS RP QUARTERSUMGRAPH P FIVEREP OFF FIVEREPCOLS RP FIVEREPGRAPH P FIVEREPBACK OFF FIVEREPROWS 288 FIVESUM OFF FIVESUMCOLS RP FIVESUMGRAPH P ############################################################################### # VISITOR REPORTS - WHO IS VISITING THE SITE, AND WHERE THEY'VE COME FROM # # # # Domain, Organisation, Host - visitor is .uk; cam.ac.uk; cus.cam.ac.uk # # Refsite, Referrer - visitor was previously at this site; this URL # # Searchquery, Searchwords - visitor got here by performing this search # # Browser+sum, os - visitor is using this browser; this operating system # # # # COLS - which colums to display (see below for list of fields) # # CHART - pie chart display on or off. # # SORTBY - how to sort the list (see below for types of sort) # # FLOOR - only list those things above a certain size &c. (see below) # # SUB - some reports have hierarchical things, like .ac.uk a subdomain of .uk # # ARGS - similar to sub: "google?this" is deemed an ARG of google, not a SUB # # LINKINCLUDE - in dir and req reports, should we link to the URLs mentioned? # ############################################################################### # Cols: # R=num of reqs P=num of pages B=num of bytes D=time of last req # r=% of reqs p=% of pages b=% of bytes d=date of last req # S=reqs last 7d Q=pages last 7d C=bytes last 7d E=time of first req # s=% reqs last 7d q=% pages last 7d c=% bytes last 7d e=date of first req # N=index number of item within the list # Sortby: # REQUESTS, PAGES, BYTES - sort by total number of requests, pages or bytes # REQUESTS7, PAGES7, BYTES7 - sort by number in the past seven days # FIRSTDATE, DATE - sort by date of first or last access # ALPHABETICAL, RANDOM - alphatical sort or random sort # Floor: only list things # 10r 10p 10Mb - with at least 10 requests, 10 pages, 10 megabytes # 1%r 1%p 1%b - with at least 1% of tot requests, pages, bytes in the report # 10s 10q 10kc - with at least 10 requests, 10 pages, 10kb in the past 7 days # 1%s 1%p 1%b - with at least 1% of reqs, pages, bytes in the past 7 days # -5r -5s -5p - in the top 5 requests, or requests in past 7 days, or pages # -00-01-00d - with last access within the last month (see FROM/TO docs) # 970701d, 970701e - with last/first access since 1st July 1997 DOMAIN ON DOMCHART ON DOMCOLS PQ DOMSORTBY PAGES DOMFLOOR 0p SUBDOMSORTBY PAGES SUBDOMFLOOR 0.5%p ORGANISATION ON ORGCHART ON ORGCOLS Pb ORGSORTBY PAGES ORGFLOOR -20p SUBORGSORTBY PAGES SUBORG *.ac.uk SUBORG *.co.uk SUBORGFLOOR 0.5%p HOST ON HOSTCHART OFF HOSTCOLS Pb HOSTSORTBY PAGES HOSTFLOOR -50p REFSITE ON REFSITECHART OFF REFSITECOLS PQ REFSITESORTBY PAGES7 REFSITEFLOOR -20q REFDIRSORTBY PAGES7 REFDIRFLOOR 0.5%q REFERRER ON REFCHART OFF REFCOLS PQ REFSORTBY PAGES7 REFLINKINCLUDE * REFFLOOR -30q REFARGSSORTBY PAGES7 REFARGSFLOOR 0.5%q SEARCHWORD ON SEARCHWORDCHART ON SEARCHWORDCOLS PQq SEARCHWORDSORTBY PAGES7 SEARCHWORDFLOOR 0.5%q SEARCHQUERY ON SEARCHQUERYCHART OFF SEARCHQUERYCOLS Q SEARCHQUERYSORTBY PAGES7 SEARCHQUERYFLOOR -200q BROWSERREP OFF BROWREPCHART OFF BROWREPCOLS Rb BROWREPSORTBY REQUESTS BROWREPFLOOR -40r BROWSERSUM ON BROWSUMCHART ON BROWSUMCOLS PQq BROWSUMSORTBY PAGES7 BROWSUMFLOOR -15q SUBBROW */* SUBBROWSORTBY PAGES7 SUBBROWFLOOR -20q OSREP ON OSCHART ON # OSCHARTEXPAND Windows OSCOLS PQq OSSORTBY PAGES7 OSFLOOR 0q SUBOSSORTBY PAGES7 SUBOSFLOOR 0q ############################################################################### # VIEWING REPORTS - WHICH FILES PEOPLE HAVE VIEWED AND DOWNLOADED # # # # Directory - which directories and subdirectories people have viewed # # Request - which particular files have they viewed # # Filetype, Size - which types are viewed most, and their size distribution # # # # COLS, CHART, SORTBY, FLOOR, SUB, ARGS, LINKINCLUDE - as above # # SUBDIR - deem something to be counted as a subdirectory. Can have several. # # REQINCLUDE, REQEXCLUDE - what to include/exclude. These are obeyed in order # # SUBTYPE - list of things that have subtypes, as in file.ps.Z # ############################################################################### DIRECTORY ON DIRCHART OFF DIRCOLS PQc DIRSORTBY PAGES7 SUBDIRSORTBY PAGES7 DIRFLOOR 0q SUBDIRFLOOR 0q SUBDIR /*/*/ REQUEST ON REQCHART OFF REQCOLS RSc REQSORTBY REQUESTS7 REQFLOOR 0.05%s REQARGSSORTBY REQUESTS7 REQARGSFLOOR 0.05%s REQEXCLUDE * REQINCLUDE *.html REQINCLUDE *.htm REQINCLUDE *.zip REQINCLUDE *.gz REQINCLUDE *.Z REQINCLUDE *.pdf REQLINKINCLUDE pages REQLINKINCLUDE *.zip REQLINKINCLUDE *.pdf FILETYPE ON TYPECHART OFF TYPECOLS Rb TYPESORTBY BYTES SUBTYPE *.gz,*.Z SIZE ON SIZECHART OFF SIZECOLS ScR ############################################################################### # SERVICE REPORTS - HOW WELL WE ARE DELIVERING THE PAGES # # # # Status - whether the pages were delivered okay, or failed # # Proctime - time to dispatch files # # Failure - people requests these pages, and it failed # # Failhost, Failref - failures arose from links on these hosts, on these URLs # # Redir - people requested these files but were redirected # # Redirhost, redirref - redirections arose from links on these hosts and URLs # # # # COLS, CHART, SORTBY, FLOOR, SUB, ARGS, LINKINCLUDE - as above # # 304ISSUCCESS - 304 Not Modified means user saw a cached copy: i.e. success! # ############################################################################### STATUS ON STATUSCHART ON STATUSCOLS R STATUSSORTBY ALPHABETICAL STATUSFLOOR 0r 304ISSUCCESS ON PROCTIME OFF PROCTIMECOLS R PROCTIMECHART ON FAILURE ON FAILCHART OFF FAILCOLS RS FAILSORTBY REQUESTS7 FAILFLOOR -30s FAILARGSSORTBY REQUESTS7 FAILARGSFLOOR 10s FAILLINKEXCLUDE * FAILHOST OFF FAILHOSTCHART OFF FAILHOSTCOLS RS FAILHOSTSORTBY REQUESTS7 FAILHOSTFLOOR -20s FAILREF ON FAILREFCHART OFF FAILREFCOLS RS FAILREFSORTBY REQUESTS7 FAILREFFLOOR -30s FAILREFARGSSORTBY REQUESTS7 FAILREFARGSFLOOR 10s FAILREFLINKINCLUDE * REDIR ON REDIRCHART OFF REDIRCOLS SR REDIRSORTBY REQUESTS7 REDIRFLOOR -30s REDIRARGSSORTBY REQUESTS7 REDIRARGSFLOOR 10s REDIRLINKEXCLUDE * REDIRHOST OFF REDIRHOSTCHART OFF REDIRHOSTCOLS SR REDIRHOSTSORTBY REQUESTS7 REDIRHOSTFLOOR -20s REDIRREF ON REDIRREFCHART OFF REDIRREFCOLS RS REDIRREFSORTBY REQUESTS7 REDIRREFFLOOR -30s REDIRREFARGSSORTBY REQUESTS7 REDIRREFARGSFLOOR 10s REDIRREFLINKINCLUDE * ############################################################################### # MISCELLANEOUS REPORTS # # VHost, RedirVHost, FailVHost - for multiple virtual host on a single server # # IntSearchQuery, IntSearchWord - for when a site has its own search engine # # User, RedirUser, FailUser - for authenticated user or cookie analysis # ############################################################################### VHOST OFF VHOSTCHART ON VHOSTCOLS Rb VHOSTFLOOR -20b VHOSTSORTBY BYTES REDIRVHOST OFF REDIRVHOSTCHART ON REDIRVHOSTCOLS R REDIRVHOSTFLOOR -20r REDIRVHOSTSORTBY REQUESTS FAILVHOST OFF FAILVHOSTCOLS R FAILVHOSTCHART ON FAILVHOSTFLOOR -20r FAILVHOSTSORTBY REQUESTS INTSEARCHQUERY OFF INTSEARCHQUERYCOLS R INTSEARCHQUERYCHART ON INTSEARCHQUERYFLOOR -30r INTSEARCHQUERYSORTBY REQUESTS INTSEARCHWORD OFF INTSEARCHWORDCOLS R INTSEARCHWORDCHART ON INTSEARCHWORDFLOOR -30r INTSEARCHWORDSORTBY REQUESTS USER OFF USERCOLS Rb USERCHART ON USERSORTBY REQUESTS USERFLOOR -50r REDIRUSER OFF REDIRUSERCOLS R REDIRUSERCHART ON REDIRUSERSORTBY REQUESTS REDIRUSERFLOOR -20r FAILUSER OFF FAILUSERCOLS R FAILUSERCHART ON FAILUSERSORTBY REQUESTS FAILUSERFLOOR -20r ############################################################################### # MISCELLANEOUS TECHNICAL INTERNAL STUFF # ############################################################################### TYPEALIAS .html ".html [Hypertext Markup Language]" TYPEALIAS .htm ".htm [Hypertext Markup Language]" TYPEALIAS .shtml ".shtml [Server-parsed HTML]" TYPEALIAS .ps ".ps [PostScript]" TYPEALIAS .gz ".gz [Gzip compressed files]" TYPEALIAS .tar.gz ".tar.gz [Compressed archives]" TYPEALIAS .jpg ".jpg [JPEG graphics]" TYPEALIAS .jpeg ".jpeg [JPEG graphics]" TYPEALIAS .gif ".gif [GIF graphics]" TYPEALIAS .png ".png [PNG graphics]" TYPEALIAS .txt ".txt [Plain text]" TYPEALIAS .cgi ".cgi [CGI scripts]" TYPEALIAS .pl ".pl [Perl scripts]" TYPEALIAS .css ".css [Cascading Style Sheets]" TYPEALIAS .class ".class [Java class files]" TYPEALIAS .pdf ".pdf [Adobe Portable Document Format]" TYPEALIAS .zip ".zip [Zip archives]" TYPEALIAS .hqx ".hqx [Macintosh BinHex files]" TYPEALIAS .exe ".exe [Executables]" TYPEALIAS .wav ".wav [WAV sound files]" TYPEALIAS .avi ".avi [AVI movies]" TYPEALIAS .arc ".arc [Compressed archives]" TYPEALIAS .mid ".mid [MIDI sound files]" TYPEALIAS .mp3 ".mp3 [MP3 sound files]" TYPEALIAS .doc ".doc [Microsoft Word document]" TYPEALIAS .rtf ".rtf [Rich Text Format]" TYPEALIAS .mov ".mov [Quick Time movie]" TYPEALIAS .mpg ".mpg [MPEG movie]" TYPEALIAS .mpeg ".mpeg [MPEG movie]" TYPEALIAS .asp ".asp [Active Server Pages]" TYPEALIAS .jsp ".jsp [Java Server Pages]" TYPEALIAS .cfm ".cfm [Cold Fusion]" TYPEALIAS .php ".php [PHP]" TYPEALIAS .js ".js [JavaScript code]" ROBOTINCLUDE REGEXPI:robot ROBOTINCLUDE REGEXPI:spider ROBOTINCLUDE REGEXPI:crawler ROBOTINCLUDE Googlebot* ROBOTINCLUDE msnbot* ROBOTINCLUDE Infoseek* ROBOTINCLUDE Scooter* ROBOTINCLUDE *Slurp* ROBOTINCLUDE *Validator* ROBOTINCLUDE Ultraseek* # More SEARCHENGINE commands can be found at # http://www.analog.cx/helpers/#conffiles SEARCHENGINE http://*google.*/* q,as_q,as_epq,as_oq SEARCHENGINE http://*altavista.*/* q SEARCHENGINE http://*yahoo.*/* p SEARCHENGINE http://*lycos.*/* query,wfq SEARCHENGINE http://*aol.*/* query SEARCHENGINE http://*excite.*/* search SEARCHENGINE http://*go2net.*/* general SEARCHENGINE http://*metacrawler.*/* general SEARCHENGINE http://*msn.*/* q,MT SEARCHENGINE http://*netscape.*/* search SEARCHENGINE http://*looksmart.*/* key SEARCHENGINE http://*webcrawler.*/* qkw,search,searchText SEARCHENGINE http://*overture.*/* Keywords SEARCHENGINE http://*teoma.*/* q SEARCHENGINE http://*infospace.*/* qkw SEARCHENGINE http://*alltheweb.*/* q SEARCHENGINE http://*dogpile.*/* q SEARCHENGINE http://*ask.*/* q,ask SEARCHENGINE http://*alltheweb.*/* query SEARCHENGINE http://*northernlight.*/* qr SEARCHENGINE http://*nlsearch.*/* qr SEARCHENGINE http://*dmoz.*/* search SEARCHENGINE http://*/netfind* query SEARCHENGINE http://*/pursuit query ############################################################################### # SOME DEBUG SETTINGS # ############################################################################### SETTINGS OFF DEBUG OFF WARNINGS ON PROGRESSFREQ 50000 ERRLINELENGTH 78 # ERRFILE somefile FILELOWMEM 0 HOSTLOWMEM 0 BROWLOWMEM 0 REFLOWMEM 0 USERLOWMEM 0 VHOSTLOWMEM 0 analog-ce-6.0.17/examples/css/000077500000000000000000000000001406366436600160575ustar00rootroot00000000000000analog-ce-6.0.17/examples/css/Readme.txt000066400000000000000000000003071406366436600200150ustar00rootroot00000000000000This directory contains style sheets contributed by users. default.css is the default style that you get if you don't specify any other. To use a different one, specify it with a STYLESHEET command. analog-ce-6.0.17/examples/css/default.css000066400000000000000000000031471406366436600202220ustar00rootroot00000000000000/* This is the default style sheet placed at the top of XHTML output. If you declare your own style sheet, you don't get the default one, so you might like to use this one as a starting point. */ /* If you make a good style sheet and want to share it, please send it to me!*/ h2 { background-color: #A0C0F0; width: 98%; padding: 3px 6px; } table { text-align: right; margin-left: 30px; background-color: #D0E0F0; border-collapse: collapse; } th { border-bottom: 1px solid #404050; border-right: 1px dotted #606070; border-top: none; border-left: none; padding: 0px 5px 1px 5px; font-weight: bold; background-color: #A0C0F0; } td { padding: 0px 5px 1px 5px; border-right: 1px dotted #606070; border-left: none; border-bottom: none; border-top: none; } td.x { font-family: monospace; white-space: pre; } .xl { text-align: left; border-right: none; } .xr { text-align: right; border-right: none; } .bar { text-align: left; border-right: none; } tr.sub {background-color: #C0C0FF; font-style: italic; } .repdesc { font-style: italic; } .repspan { font-style: italic; } .goto { font-size: small; } .gensumtitle { font-weight: bold; } .gototitle { font-weight: bold; } .runtimetitle { font-weight: bold; } img { border-style: none; } a:link { color: blue; text-decoration: none; } a:visited { color: purple; text-decoration: none; } a:link:hover { text-decoration: underline; } a:visited:hover { text-decoration: underline; } a:link:active { color: red; text-decoration: underline; } a:visited:active { color: red; text-decoration: underline; } analog-ce-6.0.17/examples/css/jreeves/000077500000000000000000000000001406366436600175225ustar00rootroot00000000000000analog-ce-6.0.17/examples/css/jreeves/Readme.txt000066400000000000000000000000551406366436600214600ustar00rootroot00000000000000Style sheets contributed by James C. Reeves. analog-ce-6.0.17/examples/css/jreeves/blue.css000066400000000000000000000063021406366436600211640ustar00rootroot00000000000000/* This is the style sheet placed at the top of XHTML output.*/ /* Created by J.C. Reeves on 02-Jun-2003 */ /* Updated by J.C. Reeves on 02-Jun-2003 */ body { background-color: #FFFFFF; color: #333333; font-family: Verdana, Arial; font-size: 10pt; margin: 2em } hr { color: #55554B; border: 1px inset; noshade } pre, tt, code, kbd, samp { font-family: 'Lucida Console', 'Courier New'; background-color: #E1E1C8; font-size: 9pt; font-variant: normal } h1 { border-bottom:3px double #FFFFFF; width: 100%; text-align: center; font-family:Times New Roman; font-style:italic; font-weight:bold; padding-left:6px; padding-right:6px; padding-top:3px; padding-bottom:3px; letter-spacing:2pt; background-color:#FFFFFF; color:#000000 } h2 { border-top:3px double #000080; background-color: #000080; width: 100%; color:#FFFFFF; font-family:Times New Roman; letter-spacing:4pt; font-style:italic; font-weight:bold; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:6px; border-bottom-style:solid } table { text-align: right; margin-left: 30px; background-color: #D0E0F0; border-collapse: collapse; font-size:8pt } th { border-top:3px double #000080; border-bottom:3px double #000080; border-right:1px solid #C0C0FF; font-weight: bold; background-color: #000080;color:#FFFFFF; border-left-width:medium; padding-left:5px; padding-right:5px; padding-top:2px; padding-bottom:6px; letter-spacing:-1pt } td { border-right: 1px solid #606070; border-left-width:medium; border-top-width:medium; border-bottom-width:medium; padding-left:5px; padding-right:5px; padding-top:0px; padding-bottom:1px } td.x { font-family: Lucida Console; white-space: pre } .header { border-top:3px double #000080; border-bottom:3px double #000080; text-align: left; ; font-size:10pt; border-right-width:medium; background-color:#000080; color:#FFFFFF; padding-left:6; padding-right:6; padding-top:3 } .xl { text-align: left; border-right: medium none;; font-size:8pt } .xr { text-align: right; border-right: medium none;; font-size:8pt } .bar { text-align: left; border-right: medium none;; font-size:8pt } tr.sub {background-color: #C0C0FF; font-size:8pt } .repdesc { font-style: italic; } .repspan { font-style: italic; } .goto { border:1px solid #000080; font-size: 8pt; font-variant:small-caps; letter-spacing:-1pt; background-color:#D0E0F0; padding-left:6; padding-right:6; padding-top:4; padding-bottom:4 } .gensumtitle { font-weight: bold; font-variant:small-caps; } .gototitle { font-weight: bold; font-variant:small-caps; letter-spacing:-1pt } .runtimetitle { font-weight: bold; } img { border-style: none; } a:link { color: blue; text-decoration: none; } a:visited { color: purple; text-decoration: none; } a:link:hover { text-decoration: underline; } a:visited:hover { text-decoration: underline; } a:link:active { color: red; text-decoration: underline; } a:visited:active { color: red; text-decoration: underline; } analog-ce-6.0.17/examples/css/jreeves/buff.css000066400000000000000000000057271406366436600211710ustar00rootroot00000000000000/* This is the style sheet placed at the top of XHTML output.*/ /* Created by J.C. Reeves on 02-Jun-2003 */ /* Updated by J.C. Reeves on 03-Jun-2003 */ body { color: #333333; font-family: Verdana, Arial; font-size: 10pt; margin: 2em } hr { color: #55554B; border: 1px inset; noshade } pre, tt, code, kbd, samp { font-family: 'Lucida Console', 'Courier New'; background-color: #FFFFE1; font-size: 9pt; font-variant: normal } h1 { width: 100%; text-align: center; font-family: Times New Roman; font-style: italic; font-weight: bold; letter-spacing: 2pt; background-color: #FFFFFF; color: #000000; border: 1 solid #55554B; padding-left: 6px; padding-right: 6px; padding-top: 3px; padding-bottom: 3px } h2 { background-color: #55554B; width: 100%; color: #ffffe1; font-family: Times New Roman; letter-spacing: 4pt; font-style: italic; font-weight: bold; border-top: 3px double #55554B; padding-left: 6px; padding-right: 6px; padding-top: 2px; padding-bottom: 6px } table { text-align: right; margin-left: 30px; background-color: #FFFFE1; border-collapse: collapse; font-size:8pt } th { border-top:3px double #55554B; border-bottom:3px double #55554B; border-right:1px solid #e1e1c8; font-weight: bold; background-color: #55554B;color:#ffffe1; border-left-width:medium; padding-left:5px; padding-right:5px; padding-top:2px; padding-bottom:6px; letter-spacing:-1pt } td { border-left-width: medium; border-right: 1px solid #606070; border-top-width: medium; border-bottom-width: medium; padding-left: 5px; padding-right: 5px; padding-top: 0px; padding-bottom: 1px } td.x { font-family: Lucida Console; white-space: pre } .header { text-align: left; font-size: 10pt; background-color: #FFFFE1; color: #55554B; border: 1 solid #55554B; padding-left: 6; padding-right: 6; padding-top: 6 } .xl { text-align: left; border-right: medium none;; font-size:8pt } .xr { text-align: right; border-right: medium none;; font-size:8pt } .bar { text-align: left; border-right: medium none;; font-size:8pt } tr.sub {background-color: #e1e1c8; font-size:8pt } .repdesc { font-style: italic; } .repspan { font-style: italic; } .goto { font-size: 8pt; font-variant: small-caps } .gensumtitle { font-weight: bold; font-variant:small-caps; } .gototitle { font-variant: small-caps; font-weight: bold } .runtimetitle { font-weight: bold; } img { border-style: none; } a:link { color: blue; text-decoration: none; } a:visited { color: purple; text-decoration: none; } a:link:hover { text-decoration: underline; } a:visited:hover { text-decoration: underline; } a:link:active { color: red; text-decoration: underline; } a:visited:active { color: red; text-decoration: underline; } analog-ce-6.0.17/examples/css/jreeves/gray.css000066400000000000000000000062661406366436600212100ustar00rootroot00000000000000/* This is the style sheet placed at the top of XHTML output.*/ /* Created by J.C. Reeves on 02-Jun-2003 */ /* Updated by J.C. Reeves on 03-Jun-2003 */ body { background-color: #FFFFFF; color: #505050; font-family: Verdana, Arial; font-size: 10pt; margin: 2em } hr { color: #505050; border-style: inset; border-width: 1px } pre, tt, code, kbd, samp { font-family: 'Lucida Console', 'Courier New'; background-color: #E2E2E2; font-size: 9pt; font-variant: normal } h1 { border-bottom:3px double #FFFFFF; width: 100%; text-align: center; font-family:Times New Roman; font-style:italic; font-weight:bold; padding-left:6px; padding-right:6px; padding-top:3px; padding-bottom:3px; letter-spacing:2pt; background-color:#FFFFFF; color:#000000 } h2 { background-color: #505050; width: 100%; color: #FFFFFF; font-family: Times New Roman; letter-spacing: 4pt; font-style: italic; font-weight: bold; border-top: 3px double #000080; border-bottom-style: solid; padding-left: 6px; padding-right: 6px; padding-top: 2px; padding-bottom: 6px } table { text-align: right; background-color: #E2E2E2; border-collapse: collapse; font-size: 8pt; margin-left: 30px } th { font-weight: bold; background-color: #505050; color: #FFFFFF; letter-spacing: -1pt; border-left-width: medium; border-right: 1px solid #C0C0C0; border-top: 2px double #505050; border-bottom: 2px double #505050; padding-left: 5px; padding-right: 5px; padding-top: 2px; padding-bottom: 6px } td { border-right: 1px solid #606070; border-left-width:medium; border-top-width:medium; border-bottom-width:medium; padding-left:5px; padding-right:5px; padding-top:0px; padding-bottom:1px } td.x { font-family: Lucida Console; white-space: pre } .header { text-align: left; font-size: 10pt; background-color: #505050; color: #FFFFFF; border-right-width: medium; border-top-style: double; border-top-color: #505050; border-bottom-style: double; border-bottom-color: #505050; padding-left: 6; padding-right: 6; padding-top: 3 } .xl { text-align: left; border-right: medium none;; font-size:8pt } .xr { text-align: right; border-right: medium none;; font-size:8pt } .bar { text-align: left; border-right: medium none;; font-size:8pt } tr.sub { background-color: #C0C0C0; font-size: 8pt } .repdesc { font-style: italic; } .repspan { font-style: italic; } .goto { font-size: 8pt; font-variant: small-caps; background-color: #E2E2E2; padding-left: 6; padding-right: 6; padding-top: 4; padding-bottom: 4 } .gensumtitle { font-weight: bold; font-variant:small-caps; } .gototitle { font-variant: small-caps; font-weight: bold } .runtimetitle { font-weight: bold; } img { border-style: none; } a:link { color: blue; text-decoration: none; } a:visited { color: purple; text-decoration: none; } a:link:hover { text-decoration: underline; } a:visited:hover { text-decoration: underline; } a:link:active { color: red; text-decoration: underline; } analog-ce-6.0.17/examples/css/jreeves/gray_expanded.css000066400000000000000000000244031406366436600230510ustar00rootroot00000000000000/* This is the style sheet placed at the top of XHTML output */ /* and was specifically written for the Analog product. */ /* Created by J.C. Reeves on 02-Jun-2003 */ /* Updated by J.C. Reeves on 07-Dec-2004 */ /* COMMON HTML TAGS */ body { color: #000000; font-family: Verdana; Arial; font-size: 10pt; background-color: #969696; margin: 2em } hr { color: #505050; border-style: inset; border-width: 2px } pre, tt, code, kbd, samp { font-family: 'Lucida Console', 'Courier New'; background-color: #E2E2E2; font-size: 8pt; font-variant: normal } h1 { width: 100%; text-align: center; font-family: Times New Roman; letter-spacing: 2pt; background-color: #505050; color: #FFFFC8; font-style: italic; font-weight: bold; border-bottom: 3px double #FFFFFF; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; margin-top:6; margin-bottom:6 } h2 { background-color: #505050; width: 100%; color: #FFFFC8; font-family: Times New Roman; letter-spacing: 3pt; font-style: italic; font-weight: bold; padding-left: 6px; padding-right: 6px; padding-top: 2px; padding-bottom: 6px; margin-top:6; margin-bottom:6 } table { background-color: #E1E1E1; border-collapse: collapse; font-size: 8pt; position: relative; text-align: right; font-family: 'Lucida Console', 'Courier New'; letter-spacing: -1; border: 2px solid #000000; margin-left: 30px; margin-right: 30px; margin-top:0; margin-bottom:12 } th { font-size: 9pt; background-color: #505050; color: #FFFFC8; border-left-width: medium; border-right: 1px solid #C0C0C0; border-top: 2px double #505050; border-bottom: 2px double #505050; padding-left: 5px; padding-right: 5px; padding-top: 2px; padding-bottom: 6px; font-variant:small-caps; font-family:Arial } td { border-left-width: medium; border-right: 1px solid #606070; border-top-width: medium; padding-left: 2px; padding-right: 2px; padding-top: 1px; padding-bottom: 1px } tr.sub { background-color: #D2D2D2 } img { } /* HYPERLINK TAGS */ a:link { color: blue; text-decoration: none } a:visited { color: purple; text-decoration: none } a:link:hover { text-decoration: underline } a:visited:hover { text-decoration: underline } a:link:active { color: red; text-decoration: underline } /* XHTML CLASSES */ /* INFORMATION LINES CLASSES */ .analysisspan { margin:6 30; text-align: center; background-color: #E1E1E1; border: 2px solid #000000; padding-left: 6; padding-right: 5; padding-top: 4; padding-bottom: 4 } .busiesttime { color: #FF0000; font-size: 10pt; text-transform: uppercase; font-weight: bold; margin-left: 30 } .lastseven { margin-left: 30 } .eachunit { margin-left: 30 } .xl { text-align: left; border-right: medium none } .xr { text-align: right; border-right: medium none } .bar { text-align: left; font-size: 9pt; border-right-style: none; border-right-width: medium } .repdesc { font-style: italic } .whatinc { font-style: italic; margin-left: 30 } .repspan { font-style: italic } .goto { margin:6 30; font-size: 8pt; background-color: #E2E2E2; background-attachment: scroll; border: 2px solid #000000; padding-left: 6; padding-right: 6; padding-top: 4; padding-bottom: 4 } .gototitle { font-size: 10pt; color: #FF0000; font-weight: bold; text-decoration:underline; text-transform:uppercase } .gensumtitle { letter-spacing: -1pt; font-weight: bold; margin-right: 6 } .gensumlines { margin:3 30; background-color: #E1E1E1; border: 2px solid #000000; padding-left: 6; padding-right: 6; padding-top: 4; padding-bottom: 4 } .credit { margin:6 30; background-color: #E1E1E1; border: 2px solid #000000; padding-left: 6; padding-right: 6; padding-top: 4; padding-bottom: 4 } .runtimetitle { font-weight: bold } /* MAIN SECTIONS CLASSES */ .header { padding:6; text-align: center; font-size: 10pt; background-color: #FFFFFF; border-style: solid; border-width: 1; } .year { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .quartly { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .month { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .week { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .hourrep { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .quartrep { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .fiverep { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .weekhour { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .quartsum { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .fivesum { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .dayrep { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .daysum { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .hoursum { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .org { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .dom { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .host { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .ref { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .refsite { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .searchw { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .searchq { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .isearchq { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .isearchw { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .browrep { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .browsum { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .os { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .dir { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .req { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .type { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .size { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .code { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .redir { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .redirvh { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .redihost { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .redirref { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .rediuser { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .vhost { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .fail { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .failhost { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .failref { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .failuser { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .failvh { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .user { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .proctime { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .gensum { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 } .footer { background-color: #FFFFFF; border: 1px solid #000000; margin-top: 6; margin-bottom: 6; padding: 6 }analog-ce-6.0.17/examples/misclogs.cfg000066400000000000000000000173641406366436600176030ustar00rootroot00000000000000From: Garrett Bartley To: analog-help@lists.isite.net Date: Fri, 1 Nov 2002 13:50:46 -0500 Subject: [analog-help] Log formats for several log types As promised, here are the log formats for several different server services that I have successfully created with good results. I can make no guarantee on any of these, but I can say that they have worked for me. Please feel free to offer any corrections or improvements. ============================================================================= Microsoft FTP Server Sample log file line: 2002-10-31 15:33:33 207.32.96.139 user MSFTPSVC2 Server1 192.168.1.100 21 [2855]created filename.ext - 226 0 165340 1468 FTP - - - - Log format: LOGFORMAT "%Y-%m-%d %h:%n:%j %s %u %j %j %j [%j]%j %r - %C %b %b %t FTP - - - -" Notes: This is with all logging turned on except for the Win32 status. ============================================================================= Real Media Server Sample log file line: 12.216.124.30 - - [31/Oct/2002:22:45:26 -0500] "GET dir/091202v1.rm RTSP/1.0" 200 23306141 [WinNT_5.0_6.0.9.380_play32_AOL8_en-US_UNK_axembed] [abc4fd5b-8b09-456b-9cdf-3e7fea4b705d] [Stat1: 8028 18 0 0 0 64_Kb ps_Stereo_Music_-_RA8][Stat2: 64083 65987 0 0 0 18 18 0 0 0 50 64_Kbps_Stereo_Music_-_RA8] 77700425 1595 905 123 0 8581 Log format: LOGFORMAT "%s %j %j [%d/%M/%Y:%h:%n:%j %j] "%j %r %j" %c %b [%B] %j" Notes: This ignores the extra statistics at the end and just reports the basics. ============================================================================= Serv-U FTP Server Sample log file line: [3] Tue 14May02 16:56:25 - (000037) Error sending file f:\filename.ext, aborting (3.09 Kb/sec - 487424 bytes, client closed data connection) [4] Tue 30Apr02 14:52:54 - (000257) Received file f:\filename.ext successfully (29 .2 Kb/sec - 5651 bytes) [3] Wed 01May02 23:18:53 - (000002) Sent file f:\filename.ext successfully (92.2 Kb/sec - 6893 bytes) [5] Tue 30Apr02 10:29:18 - (000245) Connected to 216.136.171.204 (Local address 192.168.1.101) Log format(s): LOGFORMAT "[%j] %j %d%M%y %h:%n:%j - (%j) Error sending file %r, aborting (%j Kb/sec - %b bytes, %j %j)" LOGFORMAT "[%j] %j %d%M%y %h:%n:%j - (%j) Received file %r successfully (%j Kb/sec - %b bytes)" LOGFORMAT "[%j] %j %d%M%y %h:%n:%j - (%j) Sent file %r successfully (%j Kb/sec - %b bytes)" LOGFORMAT "[%j] %j %d%M%y %h:%n:%j - (%j) Connected to %s (Local address 192.168.1.101)" ============================================================================= Shoutcast (Old style logging) Sample log file lines: <08/18/02@04:25:49> [SHOUTcast] DNAS/win32 v1.8.0 (Jan 2 2001) starting up... <08/18/02@04:25:49> [main] loaded config from C:\Program Files\SHOUTcast2\sc_serv_gui.ini <08/18/02@04:25:49> [main] initializing (usermax:200 portbase:9191)... <08/18/02@04:25:49> [main] No ban file found (sc_serv.ban) <08/18/02@04:25:49> [main] No rip file found (sc_serv.rip) <08/18/02@04:25:49> [main] opening source socket <08/18/02@04:25:49> [main] source thread starting <08/18/02@04:25:49> [main] opening client socket <08/18/02@04:25:49> [source] listening for connection on port 9192 <08/18/02@04:25:49> [main] Client Stream thread [0] starting <08/18/02@04:25:49> [main] client main thread starting <08/18/02@04:25:49> [dest: 216.253.39.2] server unavailable, disconnecting <08/18/02@04:25:58> [source] connected from 66.192.5.158 <08/18/02@04:25:58> [source] icy-name:NEWSRADIO 640 WGST (rush dr. laura kimmer) ; icy-genre:NEWS TALK <08/18/02@04:25:58> [source] icy-pub:1 ; icy-br:24 ; icy-url:http://www.wgst.com <08/18/02@04:25:58> [source] icy-irc:#shoutcast ; icy-icq:0 ; icy-aim:N/A <08/18/02@04:25:59> [dest: 205.188.234.42] starting stream (UID: 0)[L: 1] <08/18/02@04:25:59> [dest: 205.188.234.42] connection closed (0 seconds) (UID: 0)[L: 0]{Bytes: 16384} <08/18/02@04:26:00> [yp_add] yp.shoutcast.com added me successfully <08/18/02@04:28:59> [yp_tch] yp.shoutcast.com touched! <09/11/02@12:08:25> [dest: 63.236.253.100] service full, disconnecting Log format(s): LOGFORMAT "<%m/%d/%y@%h:%n:%j> [dest: %s] connection closed (%t seconds) (UID: %u)[L: %r]{Bytes: %b} LOGFORMAT "<%m/%d/%y@%h:%n:%j> [dest: %s] starting stream (UID: %j)[L: %j] LOGFORMAT "<%m/%d/%y@%h:%n:%j> [yp_tch] yp.shoutcast.com touched! LOGFORMAT "<%m/%d/%y@%h:%n:%j> [dest: %s] service full, disconnecting LOGFORMAT "<%m/%d/%y@%h:%n:%j> [SHOUTcast] DNAS/win32 v1.8.0 (Jan 2 2001) starting up... LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] loaded config from C:\Program Files\%j\sc_serv_gui.ini LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] initializing (usermax:%j portbase:%j)... LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] No ban file found (sc_serv.ban) LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] No rip file found (sc_serv.rip) LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] opening source socket LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] source thread starting LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] opening client socket LOGFORMAT "<%m/%d/%y@%h:%n:%j> [source] listening for connection on port %j LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] Client Stream thread [%j] starting LOGFORMAT "<%m/%d/%y@%h:%n:%j> [main] client main thread starting LOGFORMAT "<%m/%d/%y@%h:%n:%j> [dest: %s] server unavailable, disconnecting LOGFORMAT "<%m/%d/%y@%h:%n:%j> [source] connected from %j LOGFORMAT "<%m/%d/%y@%h:%n:%j> [source] icy-name:NEWSRADIO 640 WGST (rush dr. laura kimmer) ; icy-genre:NEWS TALK LOGFORMAT "<%m/%d/%y@%h:%n:%j> [source] icy-pub:1 ; icy-br:24 ; icy-url:http://www.wgst.com LOGFORMAT "<%m/%d/%y@%h:%n:%j> [source] icy-irc:#shoutcast ; icy-icq:0 ; icy-aim:N/A <%m/%d/%y@%h:%n:%j> [yp_add] yp.shoutcast.com added me successfully ============================================================================= Shoutcast (New W3C style logging) Sample log file lines: #Fields: c-ip c-dns date time cs-uri-stem c-status cs(User-Agent) sc-bytes x-duration avgbandwidth 66.156.94.18 66.156.94.18 2002-09-14 22:38:34 /stream?title=Unknown 200 iTunes%2F3%2E0%20%28Macintosh%3B%20N%3B%20PPC%29 409600 86 38096 Log format(s): LOGFORMAT "%s %S %Y-%m-%d %h:%n:%j %r %c %u %b %j %j" ============================================================================= Microsoft Windows Media Sample log file lines: #Fields: c-ip date time c-dns cs-uri-stem c-starttime x-duration c-rate c-status c-playerid c-playerversion c-playerlanguage cs(User-Agent) cs(Referer) c-hostexe c-hostexever c-os c-osversion c-cpu filelength filesize avgbandwidth protocol transport audiocodec videocodec channelURL sc-bytes c-bytes s-pkts-sent c-pkts-received c-pkts-lost-client c-pkts-lost-net c-pkts-lost-cont-net c-resendreqs c-pkts-recovered-ECC c-pkts-recovered-resent c-buffercount c-totalbuffertime c-quality s-ip s-dns s-totalclients s-cpu-util 203.40.128.205 2002-11-01 05:23:33 vincet mms://media.streamtoyou.com/cog/ISDN/OT_les06.asf 166 6 1 200 {CD48B822-BB6E-11D6-A01B-DD746EAE8C33} 6.4.7.1119 en-AU Mozilla/4.0_(compatible;_MSIE_6.0;_Windows_98;_YComp_5.0.0.0) http://www.ministerialtraining.org/VideoView.asp?ID=1&U=8&L=6&V=6&S=100 IEXPLORE.EXE 6.0.2600.0 Windows_98 4.10.0.2222 Pentium 1805 23113117 10638 mms UDP Windows_Media_Audio_V2 Microsoft_MPEG-4_Video_Codec_V3 - 15237 0 52 37 0 0 0 0 0 0 1 0 100 65.172.162.91 - 1 0 Log format(s): LOGFORMAT (#%j: %j) LOGFORMAT (%s%w%Y-%m-%d%w%h:%n:%j%w%S%w%r%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%B%w%f%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%b%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%j%w%v%w%j%w%j) Notes: This is with all logging turned on except for the Win32 status. ============================================================================= Microsoft SMTP Note: Analog detects the log format automagically since it is very similar to IIS W3C logging. ============================================================================= analog-ce-6.0.17/examples/robotinc.cfg000066400000000000000000000003461406366436600175720ustar00rootroot00000000000000# Jeremy Wadsack maintains a comprehensive list of ROBOTINCLUDE commands. # I don't distribute it because it's constantly being updated. # You can get the latest version from # http://www.analog.cx/helpers/index.html#conffiles analog-ce-6.0.17/examples/searchen.cfg000066400000000000000000000003501406366436600175360ustar00rootroot00000000000000# Israel Hanukoglu maintains a comprehensive list of SEARCHENGINE commands. # I don't distribute it because it's constantly being updated. # You can get the latest version from # http://www.analog.cx/helpers/index.html#conffiles analog-ce-6.0.17/examples/statslab.cfg000066400000000000000000000036301406366436600175670ustar00rootroot00000000000000# This is my personal configuration file, used to make # http://www.statslab.cam.ac.uk/~sret1/stats/stats.html # This is run IN ADDITION to the default analog.cfg distributed with # the program. It contains some commands specific to our site, so it # is NOT SUITABLE for running at your site without editing it first. # HOSTNAME "**SAMPLE** the Statistical Laboratory **SAMPLE**" HOSTURL http://www.statslab.cam.ac.uk/ HOSTLOWMEM 3 REFLOWMEM 3 WARNINGS -L IMAGEDIR /~sret1/images/ STYLESHEET /~sret1/analog/analog.css REPSEPCHAR , TO -00-00-01 SUBDOMAIN *.* DOMEXCLUDE 1*,2* SUBDOMAIN statslab.cam.ac.uk (Statistical Laboratory) SUBDOMAIN ac.uk (UK Academic) SUBDOMAIN cam.ac.uk (University of Cambridge) SUBDOMAIN co.uk (UK Commercial) SUBORG statslab.cam.ac.uk REFREPEXCLUDE http://*.statslab.cam.ac.uk/* REFREPEXCLUDE http://131.111.20.59/* REFREPEXCLUDE javascript:* FILEALIAS /~sret1/backgammon/main.html /~sret1/backgammon/ FILEALIAS /~sret1/home.html /~sret1/ PAGEINCLUDE *.html.gz,*.txt,/cgi-bin/* REQINCLUDE pages,*.ps,*.ps.gz,*.ps.Z REQLINKEXCLUDE /cgi-bin/* ARGSEXCLUDE * REPORTSPAN ON REPORTSPANTHRESHOLD 100000 SIZECOLS Rrb DAYSUMCOLS P HOURSUMCOLS P ORGFLOOR -25p ORGSORTBY PAGES SUBORGFLOOR -25p SUBORGSORTBY PAGES ORGCOLS RPB BROWSERSUM OFF BROWSERREP OFF REFERRER OFF REFSITE OFF SEARCHWORD ON SEARCHQUERY OFF ORGCHART OFF SIZECHART OFF REQCHART OFF SEARCHWORDCHART OFF MONTHGRAPH P MONTHCOLS RPB DIRCOLS Pb REQFLOOR 2000r TYPEALIAS .html.gz ".html.gz [Gzipped HTML]" TYPEALIAS .ps.gz ".ps.gz [Gzipped PostScript]" TYPEALIAS .xbm ".xbm [X bitmap]" TYPEALIAS .c ".c [C programs]" TYPEALIAS .bib ".bib [BibTeX databases]" TYPEALIAS .ppt ".ppt [PowerPoint presentations]" TYPEALIAS .jar ".jar [Java archives]" # # By Stephen Turner 17/Feb/2001, 17/Jan/2002. No warranty for this file. # This file is given into the public domain: it may be used, modified and # redistributed without restriction. analog-ce-6.0.17/examples/typealias.cfg000066400000000000000000000003311406366436600177400ustar00rootroot00000000000000# Rene Krauss maintains a longer list of TYPEALIAS commands. # I don't distribute it because it's constantly being updated. # You can get the latest version from # http://www.analog.cx/helpers/index.html#conffiles analog-ce-6.0.17/examples/virtdoms.cfg000066400000000000000000000041571406366436600176260ustar00rootroot00000000000000# THIS CONFIGURATION FILE IS NOT READY TO USE WITHOUT EDITING! # USE ONLY THE FIRST OR THE SECOND HALF OF THIS FILE! # # There are basically two ways to set up your web server if you are serving # lots of virtual domains. The first, which is usually better if you don't # have many virtual domains, is to log them all to different logfiles. This # method is covered pretty thoroughly in one of the How-To documents, but here # is a summary. # # It's easy to analyse each single domain independently, by just specifying # its logfile. If you want to analyse all the domains together, you will need # commands like LOGFILE domain1.log http://www.domain1.com LOGFILE domain2.log http://www.domain2.com # This will add the prefix for that domain to the filenames in that logfile, # so that the same filename in two domains doesn't get confused. The command SUBDIR http://*/ # or SUBDIR http://*/* # is useful make the Directory Report look better. # # The second way to set up your server is to log all the domains to one # logfile. If you do this, you have to log the virtual domain name on each # line so that you know which domain that line belongs to. You will then # probably need a LOGFORMAT command. For example, if you log the virtual # domain at the beginning of the line, which is otherwise in combined format, # you would want a LOGFORMAT command like LOGFORMAT (%v %S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B") # You still need to add the prefix for the domain to each filename, and you # can do this by a LOGFILE command like LOGFILE alldomains.log http://www.%v.com # Then you can go ahead and analyse the whole site. As above, you will want # the command SUBDIR http://*/ # or SUBDIR http://*/* # If you want to analyse just one of the domains, say domain1, you need the # command VHOSTINCLUDE domain1 # Alternatively, if you often want to analyse just one of the domains, first # split the logfile into pieces corresponding to each virtual domain. This # avoids the need to pass through the whole logfile each time. # # By Stephen Turner 1999-2001. No warranty for this file. # May be used and redistributed without restriction. analog-ce-6.0.17/examples/xferlog.cfg000066400000000000000000000010651406366436600174200ustar00rootroot00000000000000# Here are a couple of LOGFORMAT lines to analyse the xferlog produced by # wu-ftpd and other FTP servers. This only analyses outgoing files. # You may also want to edit the language file a little to make it more # FTP-friendly: e.g. change "WWW Server Statistics" to "FTP Server Statistics" LOGFORMAT (%j %M %d %h:%n:%j %Y %t %S %b %r %j %j o %j %u ftp %j %j) LOGFORMAT (%j %j %j %j %j %j %j %j %j %j %j i%j) LOGFILE [your logfile here] # LANGFILE ftp.lng # # By Stephen Turner 1999. No warranty for this file. # May be used and redistributed without restriction. analog-ce-6.0.17/how-to/000077500000000000000000000000001406366436600146665ustar00rootroot00000000000000analog-ce-6.0.17/how-to/analogo.gif000066400000000000000000000052631406366436600170030ustar00rootroot00000000000000GIF89a00÷üœ¾â„®Ú‰³Ýq¤Û}«Û/VˆòöøËÜíåïù–()u¨Ûl Óޏâˆ%*m˜ÍéÃǃœ°ä·»•»âŽ%ìËË·8:¸Ðéìôûéïø´Îì¢ÃåP„äìøÙæðx§ØÏQVèñûn ÙÈßñv%(“·Û°ßI›,2y­ä�DpÃÙñ 6oÎâóê×Û³ÊâUZq›w!£56ëñóÍAF¨Åä®22ðÎÒp£ÓîàáæïõêÓÑ­Ëç|«Ôòòö÷àâQŒËâíõÙ…ˆ_"¤(-ôîóÄÕë䨨ô·¹˜JRßéõÛŽ“ýòñ»00õûþöóõ½Òìí÷þÈ13÷ÿÿÝíù?ÃÒåój'%‘iÒáìºØñ»Ïñðúÿýýþy016aÑßéÖ®²˜VcNw­Ú~}ˆ+2aŽÇÜž£3r¼¬µÈíå郶é–!t‹´õÇÇì´²ò÷ýçŸêòþéó÷ñÚâñ×ÙóÔÖóÜÜ›¿èz}§•§½ýúý£,/ÿÿüíõøùþû×è÷F„ÐÔàðœÇë­z}4 Ü—š©ÊìIe•r ë‘a“Õ&]¢ÆbeüÜÛ3l¥R%A{Jc$µÔî²$(ßso²Ä×쬱䗠òüõÿúù¯Îë½Ðâ÷õùûêê5x£Ööææ•14USz2 ×gg¥¿ÝãìþüùôÔ_^ïòþõêìÂ…‹¾:Gßñþý÷ï°Ëðíñùu›Á¾mr޽éöñúÃÚìÓÉ×ùûÿR7Qðòîž>D¿×îõõýÇU]ÑuuÐâýÀBEþëãÙlsùØÙÊ»Èíúóu8FËØã, ´V]²ÌÂØçããí' ªâÀÕåèêñÎØëÚÖáªÕöÄšŸÎooâ?Fô¡¤£Âì(õÙÕÕy}øÑÕ0ÊÐéDCÜåûû÷ûõãêédb§Õìýa*/þåèÝ¥ ýzy¬KP>/¥Ž»ôjœãÿÿÿw¢Ï¼"ÿõûõ¦°4.K:öÓΗÿÿÿ!ùü,00ÿù H° Áƒ*\Èo–§T3eJ•!Ë m¼xq V*^BãæÓ§5Sò“–©ƒ—?:­’5³ÓŸ?^õ)6†‰J…Î,Ä D剜 ]žtY*å‚@4úP™·.«ŸùdªÂ‰S9P’%ã$¥° üèõJ¯>}H¹ŠµÖ–]Mp AH­`iqý ”U«B1g$P †~BÓ' uš^¸P§ Áåš’'<ÀÙ Õ©‹È! ò™–)t@èF€á”&MBéȣÎ Ù2É)d´ƒ‰0LŒ¡Ë Q¼°Â [lq„ÐP†CÌÑð\a†ß„-Œ0YÇ‘Âʰð†@dœ"† ¨ÍŠ1Ù`³Ì4=d`É¿ÿQ 4Ö ƒŒ vð†0Ƙ &Ùd£øÌ‘DJ ‚"}qJ%b|qÎ9„L„laÁ XÀ+äB!at¶|€ *à +¡›±Í&ÍðR „E7áˆ!ÆÚÔK 5<¢ôÏLóÂ,³Xð ˜Ô‚.ÍÔðôÏOá*›0òH*€¡‚ IrÊ!Ìpž181…ù¼²†8QÐ@! aƒDp#‰à‚8^QòU ¬°"Ô7á`ðã‡$DqˆCp®_Èßop‰KÀ¢£HH@ èA$Ð÷‚a¾~Àê‡/ÈãE#ô;„ÿN1‚Ü`œB=Ðñ†B°ˆ"H@‘7\ 7¸JqTPÂÜÀ3x†IT"¢˜„(ÐH„3œà7˜Â%öp  ðJ@€H€d(Â%Š€|Á¼P„#.XËeP ‹€A7*a‚Jš`08ƒ‹à gÀ9P@GA €µ(OPŠ3ÀŠPÀX0° l›1dÀ Q˜D€ °Ð?øá€0€Œâ™ 0åŠ0ƒ”âêØÃ A e€Ñ–1È"¦P,B˜ÀÄÂdЀ øa(XÀr0€ ôäã ÐÿÈÀ”h„È0‚I˜"è¡8Ñ¡3˜@D ‚ Fð…3L`dh¦äiÏ{â“ÈÂ0,Aˆ€yЄdûÐÆ ªNv6 ¾ØÃBà€žî4¨§=à€¨r ÈBJ}¡Ž/Ä ,(@AÆ™IÔô¦˜ÁÚ0€ž†¨ÑŒfPàa p<¬P%”Š€ªAFà„Ht H€^•€ÈS(k K€Â–µ ÓôC+XA¥”Pâb¬³'H€*`ʶQ”¢0Ú;*`hfÁÖ§ªA¡I€úYŠÿœ€ @AYï(HÀ…ÀoEÒ¶èi#‚°ZG`N!ïpƒ;P€Ý>2@ÐÃF^ DÁ–ð„'!Þ[Ø!hD#Øëˆ‹$ (ð4¤!rÃŽÂŽð´ü" È/7ôà_ìTƒ(1F”±‡6V€±…pg…A ZˆÖ.lOÀŽ%@Ap©’24‚…ðî,¸…\äâTW耚µ)sÁß-D<ÐÀåŸÄ ¸F±7´@äPE,ª@hA\A¹x q[”!œXHÐKœ ÊKP…*@€!,áп°€',q 4”!Ò‰V …]†ÉèE/h@¦X¤cר¤Q¬aÐx †Ý…%a ¨¯1â @€Ð想ù°ìj/; ;analog-ce-6.0.17/how-to/anlghow.css000066400000000000000000000002251406366436600170360ustar00rootroot00000000000000body { background-color: #D0E0FF; color: black } h1, h2, h3, h4, h5, h6 { font-family: Arial, Helvetica, sans-serif } /* Last updated 28-Apr-2001 */ analog-ce-6.0.17/how-to/anrmwin/000077500000000000000000000000001406366436600163415ustar00rootroot00000000000000analog-ce-6.0.17/how-to/anrmwin/index.html000066400000000000000000000114071406366436600203410ustar00rootroot00000000000000 Automating Analog and Report Magic for Windows

HOW-TO
Automate Analog and Report Magic for Windows

by Troy Janisch, Online Arts
original document at Online Arts site

Analog may be the most popular Web stats analyzer in the world, but it isn't the most intuitive program for Windows users to automate. These step-by-step instructions will get the program working on your server, like magic.

For the sake of brevity, I'll assume that you can download and install Analog and Report Magic. If you can't do that, you probably shouldn't be writing scheduled batch files anyway.

Step 1 - Your Analog CFG file
There is nothing magical about setting up a good CFG file for Analog. Since CFG files are roughly the same for each platform, I won't waste your time here. Instead, I'll provide you with a few useful links:

  1. Analog documentation - which tells you how to create a CFG file.
  2. The RixWeb CFG file creator - which will create a CFG file for you.
  3. This example CFG file - which you can use for inspiration
When creating your CFG file, there are just a couple of things to keep in mind. First, that you'll be overriding the LOGFILE setting when the program is run. And, second, that you only need to output a .DAT file if you're going to run Report Magic.

Report Magic is a tool that makes Analog reports look prettier. Like Analog, its free, so there is no reason not to use it.

Step 2 - Your Report Magic INI file
Report Magic INI files need to know where to find your DAT file and where to write the HTML files for the Web Stats report. In this case, here are the relevant links:

  1. Report Magic Settings Documentation - where you can read about creating an INI file.
  2. This example INI file which you can use for inspiration.
Report Magic can dynamically create file names that include date information. You'll probably want different INI files for monthly and yearly reports. It's not uncommon to have multiple Report Magic INI files for a single Analog CFG file.

Step 3 - Your Manual Batch File
If you're setting up Analog or Report Magic for the first time, you'll want to create a batch file that generates historical reports - those for previous month/years that you'll want to view statistics for.

The manual batch file needs to include two lines for each report generated. The first is the Analog command. The command above specifies: 1) the location of analog.exe; 2) the log files to be included in the report; and 3) the .CFG file to be executed. For example:

call c:\analog\analog.exe c:\LogFiles\W3SVC9\ex0203*.log +g"c:\stats\config\my.cfg" -G
The second line for each report is the Report Magic command. This command specifies: 1) the location of the rmagic.exe; and 2) the location of the .INI file. For example:
call c:\analog\rmagic.exe c:\stats\config\my.ini
This example generates monthly reports for 2002.

Step 4- The Automated Batch File
The automated batch file takes the same format as a manual batch file. However, at the beginning of the batch file you must first fetch the current month/year:

@ echo off
set yy%date:~12,2%
set mm=%date:~4,2%
Then, use the same commands, replacing the appropriate portion of the log file name:

call c:\analog\analog.exe c:\LogFiles\W3SVC9\ex%yy%%mm%*.log +g"c:\stats\config\my.cfg" -G

call c:\analog\rmagic.exe c:\stats\config\my.ini
This example generates a monthly Web stats report.

Step 5 - Use Windows Task Scheduler
Using Windows Task Scheduler, specify a time when you want the batch file to run. For detailed instruction, visit the Analog web site

Ta da! You're automatically generating Analog web stats report. analog-ce-6.0.17/how-to/anrmwin/task1.jpg000066400000000000000000000367031406366436600200770ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄO !1"AQ“2STadq‘’±ÑÒð4BRUrs¡á#35b²Á6c”ñ$t‚¢%uƒ³ÂÿÄÿÄ$1Q!2A"#aqÿÚ ?ßág ë°LN*ZHi]©Ù!2GssRv}‹wµB}ªóŸ©øh×ueN|/gzFfš’6Œæ<—Óàtkpˆ-t¥õxµdT”òÁIY#3߯kÚÒv‹h}o½z©¢"3S3ŸR× ±ÆCÒPÒ6)o³{©Üí¡±¾¶Xvy‹wµB}ªÊŽŠš¾‡ƒ¸eu X* kHÌö¾M›¯!¶¾å¡Q…apà0ËmCå¡uL—µ’êNgæÊµˆËp9nµ|L'õÛ(øiÉ “2†‘ÑEm£Å;ˆeô7Òëì3Æêfl4ô4’ÈíÌe;œN—Ü ¶fCGIŠRŠf³ 2PRç:Õ /is‹ï—”êÛZë< ‚ƒŽ~¤’+<0—æ‡bò-}ãMÿšÌÛãÄú?®Ôœâ½ïCПj‘œ2Ƥ†IYEH袶ÑâËî¹¾—_'ÂðȰ8eކ²¡ÒЉº¦Üö²]IÌüÙ@±n-Öö!CCGM’6”ÅSw;ª.A&äå:ŸšÕ_óž Í»hâïCПjú8mŠw½B}«¶®. c[:©Ù°Øl²ÈFÎòÛšü¶[x+ð)%š,òuê™Q ”8f—æÊ]¥‹r.—Z˜¥y„ͧõòcˆ £¥–Gnc .'ðcÙ¦'Þô]ê®pÜ2ŽÂg£‹dÙöT2FOq ½ÃŽR/¼€6rØÝ%='R¶Ž<ôï‹3jîOTSmͱÓ.ñÊ¥víl`™´G+Ã]Ê¿çœa3nѳ…8«â|Œ¤¦tqÛ;„†ßuÏ"DzìG¸Qô_ªÞ®£†‹Æb¥§ËM–˜Å=Üvú‚MɱÔò[zä‚Õ)K~kGë ì·îê¾öWˆwN‹õ\øY½ªtλ:ªþãIÑ~«ïeUýÆ“¢ýUYÚ§F»v¾ì¢¿¸ÒtKèá=wq¥è•YÚ§F»v½ìš»¹RôKèá-or¥è•YÚ§F»v»ì’·¸ÒôKïdu½Ê—¢T¡dÚ§F»v¹"¬îTÝú8CYÜ©º5NA6©Ñ®Ý®+;•7F¾õþ¯¹Stj ,‚mS£]»[uú¯¹ÓôkèÇjû?Fª‚È&Õ:5Ûµ§_*»?F²ëÝWs§èÕXYÚ§F»v³ëÕOsƒ£_zóSÜàè¬ ¦Õz5ÛµÆ*{œYuÚ£¹ÁÑ…ZA6«Ñ®Ý¬zíQÜáèÂû×J¡FxY6©Ñ®Ý·úç?Ї£ ï\§úôah…Mºôk·mÞ¸Íô!èÂû× ¾„]ZAdn½íÛw«æú1ta}êé~„]Zadn½íÛo«eútaeÕ’ýº0µBúÛ§F»vÚê¹>Œ}_zªO£ °YÛ¯F»vÛŽY$7…¡¤ YÏøxYŸÝ)ú?ÑEîdûMõÆuÝQ´ê ¾Çz¢ýCc›5ÿy²Ë›e›]ÿšÖÑy"©î2ꪫ®jé˜æÅg9Œµ® ¬m¿EåëÐüSÿ·gô½yúÍ¿¯ë³áwëqŒV*šYiÚÆÓ±„Hç}O <ê“°\S»Ñún÷W£MÛ²ßPQ­Wç½c“H—ŸâÞÓwº²ì#îô~›½Õߢבsn®p'îô~›½ÕàV'Ýé=7{«½E<‹›up}…â}Þ“Ówº¾Žb]Þ“Ówº»´Wɹ·W 8ˆ÷zOMÞêÈp;îÔž›½ÕÜ"y6êâñíKé»Ý_{Ä{µ/¦ïuvÈžEÓn®(pGîÔ¾“½Õ—bX‡v¥ôî®Íò.mÕÆŽ ×÷ZoIÞêú8)_Ýi½'{«±Dò.mÕÇö+_Ýi½'{«!ÁjþëMé;Ý]r'‘sj®K±zîëMé;Ý_{®î´þ“½ÕÖ"y]º¹AÁšÞëOé;Ý_{­î´þ“½‹ªDò.›UrÕÒIÞÅôpv³ºAé;غ„O"æÕ\ÈàõgtƒÒw±}«îzGغTO"æÕ\ßX*û¤sìYu†¯ºCç>ÅÑ"y6ªç†UÝ!óŸbú0:®éœû@‰¿sjª‚T÷H|çØ²-OÓ‡Î}Šõ~æÕT}f©úqyϱ}=GÓ‹Î}Ší~æÕT½i¨úqyϱ}MGÓ‹Î}Šå~æÕTã ŸéÇç>Å÷­sý(üçØ­ÑMû›UU 6¥œûцÍô£óŸb´Dß¹µU`ÃæúQùϱ}ê ~“<çØ¬‘7ìmU_Ô2ý&y×Þ¢—é3ηÑ7îmU¢(äúL󯢒NvyÖê&ýª´Å,œí󯢙üí[h›ö6ªÖïçjú 8[›Ö6ª€Bîp²Ù•zÆÕZ•4²ÎÀÆUÍçd@Íå¸>¯Ö©þ´®éî«4X›Ìû–¢¸UŒ?©!¬˜ÔK3äŠÎt¤ 6Ü:ó•ꕟ"ŸîÝê^V“lšpõé»qö[ê §„sKO€VMŽŽFG™¯i±êÚnÜ}–ú‚¦áGùn»îÿºËRó7p›hþ%?ŸôQ³…Xãœħó…¥#8‹MºH<«s ÄåÑ7„xÛš\§ób˲,nßħó…]o÷ùVyVô¹å¿Ù7ɈÍçNÈ1»ŸÎ´²/¹9ÓA–çd8ÝÿˆÏç_;"ƾ±ŸÎµ6~ðÅäüSD–÷d8×Ö3ùÐpƒúÆ:ÑÈ™< è2Þ< ƾ±ŸÎcYOçZA·YlÓD.[g„×Ö3ù×ÎÈ1¿¬j<ëS"lùmnTÑeèœ ª©­Á$¨¬šIeê—33Í iÿbºÎp eàìƒÆŸý®q´b]#„u ™Ð¸SIrò:Fø=jž Z¢<3 ¬®’ WV —5’lžÑK.vºÁÚ·-Æ„kkjµdÀí;祩ØLet±»g›%Ù µ‰×+ßøÛpÆLYiaŠih¥0—Y’R9ñ:ö9œÒòKî7Îw=ÐnuÞ†ÒLée­ýœn~rææ–~.¼[ØjV¯^0^¸¿gz¯dL, ª6wp:ƒ—]y|ËL ôt‘G SLÐÈÉ#{â»AlvæÖà¼jFûk±ñ†6–Z†ºN©.‘±åí¶¤ÜÛ›z -E³kæ.q#fØ$2 Z÷`†öêGÎákÇŽSõMDr9Ò4Ih:žË›8Ü]Ä–A¯„(ëpUVITM4|…Á•4ÛV4FÓŸã~Èk~R-Ê£fYIŠG-ðµ›7‚ù`7‹rµÍß²&ãAºÛZGˆÑËPØ"¯sÀ-sA-uÆ`·_.¶½òë¹$Ähâ{›,íad†'\#Úݦ·Üµèð£GQŠ¥Û l!…ƒ;š€.˺áÄÙÀ¼¸HÄ*ëLrÃM(-k36î±ÑºQküÂÐ<ä¶ö(7¡Äèæ‘‘µò6G¿#Y,O×Êçv®ÚÍv»¸¤) m8¦}FÓöL{˜NS|ÁÅ„¼œÂÀ çuÖ‹°ª™*l•šÖlÜØŒ‰¬Ïs¤¯ùÓ˜Þhp×Ã…IEÕ;G=ò8É$Mpvw—æî æ±µ®/krNÅèZÖ8Ìâ× ÄˆÜvbä]öMAk[)æ*,jšQ+jfŽ9#–f8ص {…‹Ž™²71½µµ‘˜eT/káÄ-#¡l3=ñg$4¸Œ—:œêìü—¾·Æ£eEieÁ›yåqklH”JÖÚïðnA°1j-›ž]0sH7A Þö³Ìw;P>iæ*f èª*'vÏ©ö’H6n±‰$kI[Ú3q¾ãpPÁ:œ `} =† 1z5Íã4:îÑîùÜÞÑ»ƒóº’¦ˆ5¬ŽFT=°oÌù2‚í5•ÀÞ÷¬uAµ5Æ­Ù%™§$npc#Øò.,ÝæÃCÌm½US,BI[3šM¿e ä>f‚O/¢’gHçSHé ó™é[)k]#ßĹ³Oí¹ 9ö+†õÃdoÙßöu0m¢7¶¹n8ÂÚè ¹ÐISˆG ¡,hë&µññ…‹àí/qÅòXß‘‰Ñ±ò²GÉ¢ÞÚ_®^%ÇRú¸s…8fÊ‹ €MwÐdÊüº>Ì,7åkË¡¶ýÇF˜g|ššæÛ©ynZo3‹¿i|¶v‚ù¹ä8´2W¾ öìŒqì×gsÜéZFý2j-¥}ÚIY^)± jw–²9#–Y$p$5¬yÜÞÚùŽœ[o"Úñ`ÏŽ~ªêÇ:­°2&JY|¹KÉ[¹‡0&üPošÎøk+¥&YÖ:šjg5£[I’ä^nTbôNsšfÉ$±¾ ûHâ‘p,×q·qNºŒ¸RɈõKnÊH›P6cSiÓSÛfcüËáQ³ ™ø„UÕUQ¾xÞÓû(‹Z#@±q7¼¤ÞüƒNU±[‡ÇYQK3ÍŒ¹H\:Þ;#uÿ–Û‰AU{¢Ä6ñÇlŒÈç°¸“$™-ž ;‰i×T‡Ãg‡mNhò´äw.œcr…È$©²Ž80þ¤ŠL£ª#›5¹#{ ¿‘Œk/à¾û¨ÎzZ…OŠœDÇôsšèœ×}׈\sáTøä>«jÙ€dû8˜Úi6ŽhŽ$³.mïß`5úîGˆÑÊö¶)ÚòùM-‡8Ç´;»Mo¹hÇ„ÖGU%kk êÉâ\i³ÊæÆÒ2ç½ÿdÝsr9±o`Š76 \×6G Ü3Þ̶ëcû¨tÝÄþbƒzŸ¢©’&A6c+Ør8væö¶lºåßmme¸«éðΦ¬ŠH&ÉOB&Ä®P,]}Z7‹ŒÀ“Ʊ-V " ""k>E?ݻԼ­z¥gȧû·z—•ª=znÜ}–ú‚§á>¼­éÿp®&íÇÙo¨*~ÿ—«~ïû„ŽG•9—fª­à¶[uxvî¿åññøÓÕ³,åv¼zr¯+:mbê¥ËÏù•…Ý„ZÛ —øø ¤pÎPe#’ÆÛ¹V[;si»›z˜ þŸ¬ÃIåøø¿ÅÕLµÄd›x~>9Ð2âöæ[<¿_r!–¾ÏKÜòjw/†ìÓã_Õl–òoÇä›?‹!–®K7v–çøð~«éaóÛ™mlõåñøø+0†óré§ÇÇáL¢È :~‘6zî7ݦò¦lg˜¿þ>=‹66úX~ŠŸF\ãÆ_ËüŒWê“ã.áã/þ–+µå¿Ú]ë¿|Ìæ—e)¨¡Æä ÊÁ¨\k¨¾¡C#Rú¨\ñSÔUKLÆœì,Úq‹¯c}‘Òöߦ¶’FÉctr±¯cÁkšápàw‚m¤¦eSê™O j2¾PÁÃM ·ÃÌ¢«eÄ+YRëÀi «†›g³vwgñ³æ¶†MÙy<7Z0㘬´ñJi¢…µm‰Ðx¡òFÞÔHKô“}™¸i­…ÔX]x„ÕûßS+óm\Æ—3ˆfº×ÍüÊ‘”q¾GÇI+Ãä- ½ÀÜÎAÖüè)è'¬2:ž lµríd‰ÏâÇ(`iÂçQc}@·*Æ—¯¯ºŸ© Çât™¦ÛÙÃ6¤OÅ]MAGQÆzH%‹9~GÆ× Æä›]N¾¤ØC´ÚlcÏŸ>l¢ù²å¿—.—æÑ~ ˆÍ]ûöÆ3ÓÃTÌ€Œ­“5˜uÔŒ»ô½÷h¡e%3Ç2žº6µ¬!€eæ°s‡âyÔÊ" """ """ """ """ """ """ ""k>E?ݻԼ­z¥gȧû·z—•ª=znÜ}–ú‚¨áð¿±ý·›·e¾ ªxCü«j7yBG)<<á‘ò[ÇÇêª1(í-õWÌfšÌl«1¸¬æºËÕxþ\+?Óæs7-Ç…Y†7]UàÎý­®¯r몴÷ oRƒ-ﯗãðKrøTå¼÷L¼¾µ¬2ŠÃ“òõ/™ÉK“Ι4×D£ דÉe˜n—: =Á¦×åºÆò^ãŸyøøõ0e o%‘25½¼ Mõ2ÀFv¼öó©é«"œ.‘&ÎÚ€<Ëánšþkc(æeÔûHÈ×_Ö“ë8öɼ´éÕ.þ†+ÅEÀØvÙš÷©{¿ôb½^/“í/E8kÕÓuKcs_³ší"}®ë¨å8‚9Ž„WDÏ‚Žº#jñl{K™ o‘­ÊÍn0½ÅˉÜFZ^"çÝM'4¢ºŠœ¹®7 |‚IcçÜLbÃ×*ìš“e±tq!”-®š†Ü€_®[‚A ,r¸®)]=$×Ó5´oŽª<ån¬l‚à绯éZûøºìKŽ×Bêš—Ñ´ÑÆgk.æ·1ˆ?s³’o³:d½îrê*Z‰kÙ_‡ÓËWLçš]²c›v¥$9™ÐÐæßÉÅ×_}IÄ'lOk£`¡sby š“c}mÚØèy9µ‰?6+‰¶¨ÐSÁÕ1½áòG± lní#mûÐ;sÚî×MÉ«ªä¥ÃMÔðËZð^6Í`Ù=úessv¶½ì‚Ñ>Ìf±ï¹`-œ=¡ÖGÔ>ý·j2fË¿[fåSG__5s°Ö>™•¹ùç0¸±Á­ˆèÌ÷¾8ö¾é;EWUaΚÐõD†SÇ%Ùžal¯½Þâëj-—”豋Äf$†AÏgØøË´|ï†ú>ÀÀìºòŒÜ¨:DU}q˜a=V[xê62›¡­›f÷ïÐeÚ9I²Óv3Xè*çŒSˆèá}I»vñç3)¿íˆÜ`s^ÜáÐ"©‹{¤£ÛúŠÊˆ o®HöšäeχÂ3âÓS×Ë þÆ‘ùOÆ äßN;λ²Ç'+P\"çÛŒ×ÿÑÈêk°ì"«nË.ÊY2Ü\¾âÙÚmó_}µåÅq)°ú=ðE-s š3u£ý´ ƒ¯;i»K ‹è:„UxŒ½o¯f!³‘ñI †VÆ39ÎhÿþÚ9ÜötµmEDóPI%\M™ø]®œJÎ$•KFƒx-6Ó‹+ µ™?67YKM%dñ@øµ126f;!).Ü."µ­Ëšÿ5c¶¯§ÇäóS>¦¦8#l¢5Œª«s’{B;a¿Á¨tH¹þ¾Vf{.ÕÍÐlãqÚl䑲/ôcm†¶tŒ›ÝM+S,°úfÂù.oÆi‘ÍŒÞü\ÍmÚlCΜ[‹…Ò*ZÚÊšlZ«e#K6¬k |“=ûù9G-†¢ÊGâ50ax¬²l_Q‡‡ñšÂÖ<ˆ„ƒ‹rGlþOlŠžLRh3&|Xë ¤n…¢Lâ"ë Ûøï#]ÖÅ0ŒF²«¨ciÇVÒ†ˆâ[%Á$ë|÷äËkq· ¸DE5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7n>Ë}AUpƒø%WÙ°­fíÇÙo¨*®ª¿Ñ°‘ÊO »¯¿Ãεki]VÐl|>U¸Å0ܽÑ0ò~ªèð£ ó9×<ÊÍŒóïS0 ÆÜ­¿Çü,ƒ.>oV¢"8_ýC”_ô_2é¹l4\ržÊÿ™2I:MõøøçTA”\yWËY¤ò­¦Ç­µµß¯ÇÆå„±ŽíÜÃwéñÊ„ËUŒÌnT¹mÉnMË:K:#cc}Ü¿‚™Ñåip¸ÓBÇ0F0Ô|-‘¹7®zºžJ $d†Ÿ ééœ$ÌAâì«øEáÖð,Þ=,Kc ›ª)ƒ‰ßηD|»¼:úþ7*¾ 4˜ ˆÞyü ï%Îÿõkî=¦pè8:ÀÜ$§íÜõj³Uø ráYÖwôµX/Éö—¦œ ÒSIKÔ²SÂúpvN`,°Ü2îÒÁG‰Ç4¸|Ñ@ƽÏ\×nÒxÀ¥òÞ×Òö¾—T8f÷V4VÑÉÔLÛlâŸe`!°,‰lÍÚÖ¸¹×U–—U°ÐAO §£†FF[OvM9„Ga}Íã| ]SBØêblφH^X‘Ï~F<_Ã}Ú‹*8ðÊÓ7VáÚR¼U9ѸÀÖl󴸜ÛÛ!âÜÞ·±l.Jªù%d9Ĭ¦`‘®Êæ5“çxÍpEÚAú†× GPQºifu$Y™’W˜Ûw·u‰å M¤¦eSê™O j2¾PÁÃM ·Ã̹ÚìWNö2šC‡²W© l$ ²+82N Í—˜ÝÜÎ*hpzˆ„“:7>­µ4Å’º\îÈÖÂÙq¶ðׂl €Ôn.¡ £§‡c$Eœ?##kFab ‡.ƒ_X×h™õ06B$Ž6Å¥ò0 ÿÍ”ÿâ9–­u$’âô“²›ha´2X0^çÂÓ»µ¸x»\±¬Âfutç1N ¦¥³‡6VîbT5¸--U,T¬ §§ˆ—£‚'2ç—+Ø@Þw[yU#ÄœÜ.Qåe QÂçíÇ-šHírÆâ/®†ài}ŽasÐÔ'dâAI¤{¢ ™÷qf~çq¤7¹nlôØs¡~Ô‘†FÆÁ#ƒš.Æ8ïHô¾¶öYPÃA$Om-1Å›1hšÐâÇ“ ð?7ãr7ÜéátÔ¸ELð6ò¶F±÷i-y_oüƒØtú&ö°¾¿ZÝkê0ÆÕÄéêŸ%8»3Ÿ-ã‡Óf/|Ã5¹ìT1TÒº—3¢†Bv¬ˆ4mëæN[›‘cáROIMQ$RTSÃ+á9£sØXyÁ;·2¯Àh'¢mK«]Q!ˆ:kæ2å†6“}猿ÃεpŠÈ1§TM‘ "T8[’—0‚Üœr;{ëcÎJ ¡IL*P)á9ÁÆLƒ1  ü„!+'Á ›M¤1»jÌ’] çnºqÆ:xJ£vRî¬dT›:é6ùq  nÍf9Ë™‚ÄXe¸í[xÛ„ëaspΤ °¾šìh¸Ž`ç°AÏO)ÄYäÔsÔ2¦zH$ž;d•ñµÎmÅŽñªÈÒSÄfžÆÆb È,mvÛ›A§€*Vá&1²E;䧨f„u8‘îŒ t `P$¿ÌiÕà•’Iˆ9±Îú‰YSi3BÖH×µáŒÍm£­v 8†Œ»ø¢áÔLÖ¿#Õ¥àî0Cü nÖöò£ …앎†2Ù¿z EŸ¥µçÐä\þ!ƒUuYfÍŒE€¶M¥­)Š¡¦B{bë¾;»Rtße.v5Ô³²”Tɦ åäˆØ—0IpÐŒ£PèÔ½PiÙ{Xm>\©yxÌ<'áßεi¨°™"’*\6›©ås›.XÖFü¶påã^Ú¡ð__æ¤ÄešhèÝN›Ò·À ^Ëô,m`´gÁ&|ÍgQÆøÍD¯˜ñrÈS —#—ˆÒ þ…¹®# †=žÎÛ²fHìÐ27M0â<b))ƒ p§„:œe„ä²µ›Í¦š.vl¯bæSñÛ ve€½‚vÙc¡ýsZc`U¦Lú*c ‚vF÷¹í˜¿f,Ñl±Ù­¹¹³n7’A6Aa,Í}´1ÉvÍŠmqä6‹))£¥êXéáe9»&°Xïwkr¦E/¤¦’}¼”ðºPs¹€ºÀæþ|«(ie…°¾ž=›Y³ À3N&Ÿ4åˆ+a5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7n>Ë}ATð‹L ¨ÿ(õ…m7n>Ë}ATð‹ø]þˆõ„ŽRxpºàku²Ó¦ý|U_ ²|ß‚·cxv—^ÚËÍ0Ø’þ Ê• [ãwÀü¿ íÁJ×o¿—Î|Ÿò.ˆ“-ÀµÏŸØ¾†è7ùÇÆ«Þ9ºÊãwÇÇëäU7›[ããȾ½ µÁÛˆ±¾þOÏôQ:`Ѩ·ÇÇáet“”٣çÁD•cª¤ÃªÜ.Ü­*q¡# b‰ßÉçVu/¤¤„¾­ÍõJÊI1Ћő§}·ÿÊų ˆOI‰6D4ÀÏRíÛþ?ájbÑÖGê¹Eßk0s.Ž†Šž‚ È3r¾Ú•Tñ×,\þî#{”˜™gßÀé¶xÞ[ºÖäýUŽ]má¶„ÿo*żV5£OL×µ­Ì5e¸ô: ÝlÒÖÚºÖû-[ËC7à ÿYßÒÕ¾¼'Þ^º}`EóÇO ¥™ÙXßÉ'@’N€ IZ­Å¨œf¼›Ýyâ¹Ý¡ÜÇXÛ\¤ W6›È£¨ž:jij'vX¢a{ÝkØrTˆµ`Ähê ¥ž Û$ug,.hE?ݻԼ­z¥gȧû·z—•ª=znÜ}–ú‚¨á'ð Ëýî¼Ý¸û-õQÂ?à5z_‰ýÂG#Îã:ëñññʶcääZÍ:ÞãËññý¦à ázaÂÐÜa;ýjV»M}zþš-FÈ9ÂúéØÁÆ:ó_UÚ-éÍ»Ÿ-‰>mÞ¿/6õæù­åЭWAsš@`qˆ!ÑßÌ\B{•¬pÜ%:o&÷ò­:ÌeŒwSP0Ë;´¸Ükf¯Æ%ÙµîÙ|â^ÑPÓÐG–6’ã½ÎÔ’š¦Ü.0Õ¤Â$–N©Åµ“xŽû•Àph fáºÚ$9ïºärž}úüs#äÙÆ÷»æßyøø²ÔDG -|J¡Ì°Æ/$‚Ãàr{TØuQÁ‘ çv¤òü{}e3êd©žQpx ŸÏãÀ¶$Ç)#[mrò¦c”Y‹ xwÿÅ f=ãynþ_Æ¢nhDl> £Áªß5d¦]KÆ‹:ã+‡ `FøY:~ýü¾«[ÁãÿÄŸ¿©ªÉx¾O´½TᣌF÷Ð ›óðÊCEÎVJÇ:×F§‘UãÓÏ]DÇáôõ¡ð™K_±{›©æÀ€íåºÚ×p±&öè‘e§3\Éå£Ä£{1Ö¾:––´<ÄèÈ~Ìx›²vœkïùÊëÛ7mVÑÓ‡æsÍò<Åœ€X[.ñmo|ÎÜD¾CUHÎÆÚy:œÚYêy:Í"ÜÄßv޽ï˜Z:FbÍî}E[ê‹´fÆV°O–»œò /›6ÈåÍü«¬Dx4 Ĥ¨¬lûWÓ†âì…í–Bð?—ŒÜ—×)Ó•k¶Ӓʦ׶˜ÔU>QNe';¤ŒŸ.BíÜ[ïã.‘SÔugZpî­ÛæâuvÃ6Ý›Ûg¯ï2ö¾«­:¾ªÙ»e×;õ7ÿ|÷Úæï2ékl¿{É¿\ë¤D½m#.0ŒÕË=Tµ=Ç+c"l‚Ç@.guö°SAOSU‹˜Ý. Ê ¯-»äffìéò‚ãÆç;Á¸uþp= æiª13G*b­uTóÒJ\ÖËB$¿#xÁ÷nýIµ®T˜WÅ>zùêdqŒ6¡†žPÑ) hç8ƒ®mcheµ6WDˆˆ """ """ """ """ """ †³äSýÛ½KÊתV|Š»w©yZ£×¦íÇÙo¨*žÿ«ûִݸû-õSÂÕ¸´Ì$52ò0ÒiqÉá iÑ5š5ª"Ñkè<6ø¿Ç…v¬¹J<å¬.7 òüÈUÒHù Ütär°¨Ë³sMÉw'ÇÆõ§“È–™ŸDB £}”BùællÞyy–eªÓ ‡c‘ÃŽÿÈ)Zæ}–œBÆ™‘ÒDØ¢åååò©½õ¿„}ߢ‰§2•‡u÷rÜoü<ë×zrJѸ5;´ü¿£ŠºybS°›ï#u­ÿ>u¶ÇnÖû·|kȤ6&ãà|~ƒ ðj¹-™¡‚ü¥mE€|é&Ó˜pë]§öö~~|nÓ›òðü~¸Ó{iEƒÒÇÛ8øw©›ÙÄl¥qÓŸ—œyVÐù7iÌUj!Ôðlß wýÿ¥ŠÑUpcø9û÷KªñüŸiw¯",(ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ!¬ùÿvïRòµê•Ÿ"ŸîÝê^V¨õé»qö[ê «„Á*|ƒÖ¬Ý¸û-õUÂà•_dz ¶÷.6 ZIÌ<ë7fyµ´ðî FG—S¿t†EF\sM æå*Y)éÜ-’ßdûT ë +îR| pÌå®Êh£9šË»•°ÁsáL ép¥ko¸hµ Œ¾·vŠKïäøýWÖÇq¿Ø¥dW·6õ½F‹¸óŸ ßàY‹Ú×ßáÞ>>4R6=Ú|||sbáa¸ƒnoŽdÔ˜|¾ëßxßäý~5_yî?Ì/›û_ÉíüÖyFýü·«3cJä±øü´X;FÜ› )œÓºöðïøåøºÌÎü qF§–üÉ©¬:ž ¸;qº¡ÿŠÙVpp„­;ÿ¥ŠÍy¯Ë¤p""ʈˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ‚Ï‘O÷nõ/+^©Yò)þíÞ¥åj^›·e¾ ªññ|¤aë ÒnÜ}–ú‚¬ÆÀv8;Ž_ê …æåÓÀ¦ØXq[ugMJÐÐâÁ2˜Ó‡moìÊ•°ºÜg°YÄ©qYªp»ÕŠxê©ã¶å¯Ã}n?ò‹Ãñ°ì$ú[}ùÐÂ&Æo SÅoÈ­Øé‹Á¿6â·b\àÃF:[ @¿„)¶!¡o7µeßkyÖdÃVL j?%Ï3¹¾><ê}›Üy‡>û­ˆ)õçLÌ&ì‡Au“¢;•£)þˆ¿=Ö2@9E¼«+…;ãçÖµ&kÚòæ\-¨WGmãE«4`öÛŠgÍÖwfvoú‡ëÿ‹ª®À³Âˆ¶ùÜõj±XžZD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDDA gȧû·z—•¯T¬ùÿvïRòµG¯MÛ²ßPUØÅúÛ-·Ý¶ô‚±›·e¾ «ña|>@~“?¨$r)cÕ½¾–äܦho•bÆ4 †Ëe kɰ¿šîË šÙ¢|RF  H< ®ÀÝ…NÓG,Ïúqå-Ó‘ÃGoðô4e9ry.µ¤F¹‚0AÖÏh ùFô˜‰äpØo«°÷ds‹Û}ZåØá<$¡ÄkɆV‹è3|sj«1zG°õ]‘nÉ+]-ƒE¦Ì­ì¦’š¥ÌÄ$‘јª–>]sòºÇ[•11ÿUÙÅ$sÆéCÚÓ”ñµɼ,Òã£mÊ¸Š¼WÂü>² ªa6¾™nw‚47çð¸-\7¨¥6sÜöÿ3ÇÿÊš¡‰ÄfV”ô  <¶\Þ Â:9ÞÖIlÇpÜï>ãÉ̺ú9¡¨fh$Ûˆòƒ¨RÊÃaaª×–dæ…ÛàXÇ•¼ê¶Kg×[×7‹©U¡ÎÐ+"ÛÃü®õ5n(0öå ýWzš§Y•@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDÖ|Š»w©yZõJÏ‘O÷nõ/+Tzôݸû-õ¡‰ü‰ßmŸÖüݸû-õ£‰ Ñ‘{qÙ¯þa WÍû(ˤ6hßau®*éö[c%Ú<+bbÐ-¿ÂUM] Urüs.좬Ç袻X\÷(UrðžÎý6œ™Šù]‚ÍÝÞÏ¡ž ×­ù–&fÙ`ü ¢¬vÆ«ö2;æ»V»Áÿ*|S«lΩ¥Ž:y,_Náĸü‡û¯?7Ö·•luÊ´ÀØS)…§ŠËè,+ªät•/sÚXwd¹9@äÕB ä[•rG9Ìàv¿J÷¿•j‘¨Ô,È–9œÃpHWxgêèÜÐ$/h<®7C¼.u}ŽT‰Àõü†4Õ…¬í#Pã”þ…t»FLÇɰ6Ýeà”n™ó²8‰ÎçXk¹v Ç߀ÓEOK+æ¨íŸµqsoÍkîZˆÌdwuLp¿æµ™ ¯}Ëøo%D„WEú(OÕu•”UŒÏíwƒr˜ýtíËHÑþ£½Ad¾³/S·.ìçÔʼnQD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDDA gȧû·z—•¯T¬ùÿvïRòµG¯MÛ²ßPZ¡µ ó³úÂß›·e¾ ªñç`ÕÚüÂG"¦¢wX›  ‰ã†Éœf½¼>e¯쪋kãé/¬ÈÂCâsŽà[Ì»²°`g5ÖµvK[âÞl²òdý¥³)¶š?DÈóÚÈ s9—íM¯mëMÍŠîñ,. ÈÞæ0 ·æ«©¥––Ii½µ\¦s…Ö¶ÂDMVUÛÆ«Â7j¥-<Ë*¢Çƒ¹{‹Ø×Â4>Å_S)’¡î$ïY1ÎÙØâÎ ‰Í#®}aY3Ù¹XÐb³Ò¼d#–×U\›×Ô‰Ç öN âOÅ034›ÙPè÷ßsYíW+”ÿ ÊòÿÞÉý®­fTDECYò)þíÞ¥åkÕ+>E?ݻԼ­QëÓvãì·ÔO´ÀªòXVÓvãì·ÔOÅð°wdþá#‘çtõNü_Åt4Õ"¢0æ<šoøøÕró4Bí Öt˜ƒ îæ]³žYuÀjçoß¾Ëè• î¿ãñÍëZ0Ö2f>>?%™Åæì/v¨-Zç»p˪•øDxƒ-P÷±UÔSåke}ÚýÚêôUlcl ãq¾ ËEšZ`f‹„.mñžFÙzÑ«Ú7-†»×;p}µ ÏOf?s¼«3QÁ9‡•F@üVýM#éåtr‚ Ösy‚À‡Q¸¾uYytQœ£•Ubæ_^U¸Ð©ï}ãñG2ã¥ÿ†Ÿåiu¿ýlŸÑë)þ7/å;'ôFºµ%DDP5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7n>Ë}ASp¡Ùx7\îhïù«™»qö[ê —…?åªÿºþè<œUçË}AF """ """ """ """ """ "")\ZÂɧРÉ<ÞUóhÞäÏ;½ªˆÑI´orgÞÔÚ7¹3Îïj‚4RmÜ™çwµ6îLó»Ú‚4RmÜ™çwµ6îLó»Ú‚4RmÜ™çwµPËSUW¹0öUKKO–Ð5—s³°j^×}#æ ‹¤U ,|bHñ|bF™®d88qµC¯jmm÷í…òs2æ¾+Œño{SÆwfÿC^ÐùtúBájŠ©ÌËšø®3ŽíOÝ›ý {CåÓé œÌ¹¯Šã<[ÞÔñÙ¿Ð×´>]>¸Z¢ªs2æ¾+Œño{SÆwfÿC^ÐùtúBç3.kâ¸Ï÷µ]>¹ÌËšø®3ŽíOÝ›ý {CåÓé …ª.o«žŽ¢„Rb•“+™O3&lV0XFÒ.7ÜAÁ]")\ZÂɧРÉ<ÞUóhÞäÏ;½¨#E&ѽɞw{ShÞäÏ;½ªÑI´orgÞÔÚ7¹3ÎïjÑI´orgÞÔÚ7¹3ÎïjÑI´orgÞÕ¡ KåÅ« !¢8YVŽsšçÕæTKYò)þíÞ¥åkÕ+>E?ݻԼ­¯MÛ²ßPQ©&íÇÙo¨(ÔD@DDD@DDD@DDD@DDD@DDDA$ݸû-õùQS%Êù£kƒ[pç€wUÓwÌ>˜TI#‹#sšÒâ9ŠªÝo–Ò ?dãœnv‡w}êºnù‡Ó ÔR>3TBÖù\ÞS®ô8ld¨(ãxÈÈEÚ .‘·$Ø~Uò7L÷˜Ék sfqnmÙ9­óÇ/"Å“P²7FÚ˜ò;{3D|¡­_Lô%™¨òpÛ2×ç²^GŽ ’ùÁ¸qÙ³Šç¯&ëòl(M]+»iéÏ7lÝú{™:®›¾aô • 7ùö§ÿ®?þÈ•ÇUÓwÌ>˜\ø®¥§áµDóTFÈ@Z]¡9ãÐsî>dØ{³áÔÎÍ›4L9³f¾ƒ–ùNõ°¨¡Ç`†‘õMŽc2‡߯ :ÇV“­™¼“©ÔÛ#¸AMÆË5ßkÎá~Úß3ÀÏHï°ÌUÈú^TWçvžŠ.¨eôÙ—JKíÊZZ“=$-:\Rº›  †Š•²²Ÿ ‚y\âÐ-:9íÉÚ5¿všçSˆG%\µbì…ÏnPönì.aqæ;ͳºÛ†l›]†6!ÃêK}„“ 7å¶XÀokᦻòŒÁö»¬•òRÂèá|U h–ÎË%ê#hɯ5¤¶A§Û•\bÉM±–'f%ù:žÚÍ~Fó8Xžk^öfÖI‹a¥¯hnæ–ÈÛ9çŒ\H˜Z°AƒSÇ,pEA&nYƱ¡ã˜¿y󠯥Å1ZªÆÐì ‚víD¯•›²ˆœc^FémlþüÕ6ŠÕb m[:š pèZø¥¾gÇèûØ~ð2›‘¼fÓrš<&’ÝJÊ(-Ý7}¯»Ÿ+|ÙÌ%³E3YD%…™"x »ºÀò Nˆ(úé]]KLêºVÅ L”ÓÂnÐ@ÛŦq~Žåm¬4ãXuKEŒÂc|”Lt¯´0¸‚yÈ:ßlu]7|Ãé„*êOãØØ‡Ôå·ÕtÝó¦• Ù&7ˆ¹Žid6-79ígȧû·z—•¯T¬ùÿvïRò´½7n>Ë}AF¹™8kLçÝ´sZÖpÔ ÎÌ©ûÎ_L&N‹˜ìÊŸ¼åôÂveOÞrúa0:t\ÇfTýç/¦³*~ó—Ó Ó¢æ;2§ï9}0™S÷œ¾˜L1Ù•?yËé„ìÊŸ¼åôÂ`t蹎̩ûÎ_L'fTýç/¦§EÌveOÞrúa;2§ï9}0˜:.c³*~ó—Ó Ù•?yËé„ÀéÑs™S÷œ¾˜NÌ©ûÎ_L&N‹˜ìÊŸ¼åôÂveOÞrúa0:t\ÇfTýç/¦³*~ó—Ó Ó¢æ;2§ï9}0™S÷œ¾˜L ×á´=Ï} 3œãrçDÒIó/jþ¯¥è[ìT}™S÷œ¾˜NÌ©ûÎ_L ¼ëVõ}/Bßbu«ú¾—¡o±QöeOÞrúa;2§ï9}0‚ó­XwÕô½ }‰Ö¬;êú^…¾ÅGÙ•?yËé„ìÊŸ¼åô εaßWÒô-ö'Z°ï«ézûfTýç/¦³*~ó—Ó/:Õ‡}_Kзذ~ …Im¦DënÍOöTÝ™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ¹¢‘²E†Q1ìps\ÚvÒ7l·—1Ù•?yËé„ìÊŸ¼åôÂ`^¿  ‘î{èiœç—:&’O™|ëVõ}/Bßb£ìÊŸ¼åôÂveOÞrúaçZ°ï«ézû­XwÕô½ }г*~ó—Ó Ù•?yËé„jþ¯¥è[ìNµaßWÒô-ö*>Ì©ûÎ_L'fTýç/¦^u«ú¾—¡o±:Õ‡}_Kзبû2§ï9}0™S÷œ¾˜AyÖ¬;êú^…¾Å,´ÔÙºšž(soÈÀÛù—=Ù•?yËé„ìÊŸ¼åô†³äSýÛ½KÊ×_7 éæ…ñu$£;Ko˜iuÈ"?ÿÙanalog-ce-6.0.17/how-to/batch/000077500000000000000000000000001406366436600157475ustar00rootroot00000000000000analog-ce-6.0.17/how-to/batch/index.html000066400000000000000000000126641406366436600177550ustar00rootroot00000000000000 Using Analog with Windows® 2000 Batch Files

HOW-TO
Automate Analog with Batch Files and
Windows® 2000 Task Scheduler 

This HOW-TO written by Rick McGuinness MCSE + I, MCT of Rix-Web.com
version 1.0, April 12, 2001

Purpose

Analog is claimed as the most popular web log file analyzer in the world. (Details). Whether running multiple virtual hosts or a single root web server, a useful feature is to run Analog at pre-determined times automatically. This can be accomplished with a batch file and the Windows® 2000 Task Scheduler.

System

This example was developed and tested using a Windows® 2000 Advanced Server (Service Pack 1), Internet Information Server 5.0 and Analog 4.90 beta 4.

Batch File Example

Each Windows® batch file contains:

To create a Windows® batch file:

  • Open Notepad
  • Type "call analog.exe"
  • Save as "mybatchfile.bat"
  • Save in the same directory as Analog.exe

A Windows® Batch file might look like.

# rix.bat
#

call analog.exe +g"rix.cfg" -G

The " +g"rix.cfg" -G " tells Analog to use the "rix.cfg" config file and to ignore the default analog.cfg file. You may use any of the command line switches in your batch file.

Analog will expect to find the config file (rix.cfg) in the same directory as analog.exe and rix.bat. The batch file can be executed via the command line, double-clicking on a shortcut or double-clicking on the batch file in Windows® Explorer.

If this batch file were executed, it would open a DOS window, run the program and close the window. If you were to add a second line to the batch file "@Pause", it would open a DOS window, run the program and leave the window open saying "Press any key to continue..." at the prompt. Pressing any key would close the window.

You could also go to http://www.rix-web.com/analyzer/, fill in your choices on a web form, and have a configuration file and / or Windows® BAT file emailed back to you (free service). Simply save the .cfg and .bat files in your analog directory and execute.

Method

Using Task Scheduler
To use the scheduling service, in Control Panel double-click the Scheduled Tasks folder. You can schedule new tasks by double-clicking Add Scheduled Task, which starts the Scheduled Task wizard. You can add tasks by dragging scripts, programs, or documents from Windows Explorer or the desktop to the Scheduled Tasks window. You can also use Task Scheduler to modify, delete, disable, or stop the tasks that you have scheduled, to view a log of past scheduled tasks, or to view tasks that are scheduled on a remote computer.


Double-click "Add Scheduled Task."


Click Next.


Click Browse.


Select your batch file and click Open.


Name your task - Select when to perform the task - Click Next.


Select Time, Day and Interval - Click Next.


Enter account information - Click Next.


Confirm Scheduled Task - Click Next.

Conclusion

You can easily use Windows® 2000 Task Scheduler to run any number of Analog jobs at predetermined intervals simply by creating and scheduling batch files.

 


Rick McGuinness
RixWeb
Back to index of How-To's

analog-ce-6.0.17/how-to/batch/rixwebsm.jpg000066400000000000000000000037171406366436600203210ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ:U"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úˆÍ²q¡¾ãg‚}>µ-Wº³Šî6Iwá†8r1èqœdzЊ+-!Y™–4—jÑ¿PGúŽùúÓ V»\@¦æQ±aeÇ^ËëêX}}¨Q¥>ûªýN*3yl?h‹Ž¿8¬Ï³ÅIm2,ס jx Eç©ýynin&´@!ˆ‰ð¸óO õþLг]ƒ˜VRå~\DÝ}zSážØ[ƒ©å ÆwtÇ­Qf’I 3"2f‰@{)ìOl °©×쑦ØÐ²ü¸*zËæ  hë"\àôÈ#ùÓ¨¢€ (¢€ ò¿|Iñ6–·ï xqM‹ùrê†UóŒF€‚Üðyô¯O¹–H-&–(Zy–%  d('Œžœ×ü@¿ñ¿Œtkma|;wa£i’º³2bvq÷œqª2Ç'q2o¡½Å»Íiù˜í/ãˆ>ŬéšÅž›k«ÃÜ[Ë#„±*J8ÝÁ “ÁäW{iñCÂòÇký¹} ¥Ü–qÏä´NɆÆJ¶Ü6O ž+|¢êŸ $‹ÃV­oq­[£y×ä´›¼Äo™€ö==k#Tøkâ]Lh¶«.–.táHBþwMÅØŒùNÿµ×5ÒÜߨÒmÅ;Yëwn÷ý:}Ãî>)ëÚWŽ–ÂÿHi7òƒ§O"³I³¢ÉœÊGQÔgÖ»ûiúv³¦è—z˜ƒU¹BÐBH}¡ºnÂàp×ÔWž|T¸¾Åþ Š+î®­RA §BQ@b:Žã޹®?Æ>ñ‹ãöÚ;›ýVá<ÇŸc|×–E £ŽØÅ76›BŽ3Œdº»[wm?-oò;Öø­âHíì—Ñ™#’혙É$'?wqàcœqÎE]×þ.iºV¥¤Üè×öW¶7÷Bù™y ¤d…àƒ†ïž•GGøE'ü zŽ›qqêú‚,Q¾I"øn22ßsïX‘üñ“iÄßi‚â+†y¦*ά@PùºŽ;þ¥+]­Í'F‚—,d½Û|ß[ký}ǽéZµ†¹§E¨i—QÝZJ2’Ær8?CíW+øgáGðg„WI–é.fÉ$v†8 ý?Zì+TîŽ ÅFVNáES$(¢Š£yi‘[[§îIòˆþP¸VÇNÞÔŸfŠ!š´*âþî;ƒÇèj[§ -±!ï ©'î·aõX¤³]Ÿ&teùP ˜Ç©õäþ‰ 2N&»Sëp8Àìªz0ý| ÞV¶–UŸ2,ŒÊYFr§}ñúÔ­-ÖÒ²Yù¨zçôÉÏéU­žâ¬–Écö´ ’p­q%ÁŠKË'rÂ<½ÁÉÞ gw>˜^A®Ú½£Ëq·—äGçF›‡Î£‡`sÊ…=zÕaåðL.š1D²Få*yËîŽïžüW¯hWúüoa¢Dštî¾t†åOË»r–*¼BH'X ¼“@?…¼Y¤ëšEþ¥o#[ÚÛÝH’µÒù[N²sÐÀó[¶×±ÝUVW1‰ 7Aû¹‰ÁãØ×x/Áºî§ÙZk)&g“í0®…ÖQü?81´T[ òž»£ýìò T•$ûñ>L»ð>ù<“Œ`äŒcb…æ7kèhÑE(¢Š†(ØÌóH>cò ô_þ¿_ËÒ¦¢Š(¢Š¦Ö0‹´•`L*øt!üÇëRZÚ­±† Í+HíŽNxúáV(  ×¶¢òŒ K ‘Ÿºá¿¦?˜C¦ Œ¡‡R$ôÉüÍ>Š(¢ŠÿÙanalog-ce-6.0.17/how-to/batch/task0.jpg000066400000000000000000000512671406366436600175060ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀѤ"ÿÄÿÄR !1T’Ò"QSU‘“”Ñ2ARað#Bq¡±5brá$346cs²³Át¢DÂ&‚ƒÓC•ñÿÄÿÄ"Q!1A"aÿÚ ?¾ô“Ò°ŽQ¶ä†efh•ATTAø-kz ÎúSkYìcÎú8L·[·‰Á¥w"E¾ˆ¾•ú:ŠšÊ©ÿÚ#ÒkY»/ìÑ!–Åm§ÀUL¹k©LUQn"hEZ¯á¿–kjÖ#?©‰œü¨?ê!uPw£Áúˆ]TêpFŸýJm¶æìäe°mªÑ5„l™³ìûi…; nY¹Tr]§%Ö@EÆÕ•%½¥tóéçõxgÇä¤^kŒ±ohœe—ýC.ªõ8#/ú„]TêpF‹!›>NÖ·å%Ù™¹-!4ÛŠoŠ«ˆ„)¢€—u/PË£ Ñòˆ‰CU:6Y+,/p7GÊ=ÊËÜ Äòˆ±’CU:6Y#*/p7SÊ3]qD¢kª ~±#{?Ô¹üCú,s½+Zæ!ª^Ó8Ëuç½Æ{B5‹äo¸È£*ãH$iQäÞ­4ÿö¬BbÖ³&^e­G/T|IWÛ©+mOì~“ÿÙ‡ûnÇhéÛÛ£¼÷¸ÏhF‘šRš)aF•Ð"AЋZiÕìXå-D,kza‰ ®µ.ácÑPUQ}h¼þñÚä·þ“‹Y‰üI‰Õ­ç½Æ{B4¿4¬@—UUh«ìø$säÜû«£a<ûï«H³Œ b‹ì1ETDr• '­­SÚ²@¥É,B“™ri…W.¼ãŠd|…ªª®š×ÙìÕDÕ ÌLÄ`˜˜ŒåCé‘)ÛÅzêѱD®Š}Ô„yéíÓþý!iw餽 äÝ›1f(‹ÒèJ†®ÝU¥/.˜¤Ê}4ÛÓ½—ŽüÕFxTUQRYt§ÞÜz¯»”L6Žrâr—™þbæ³5‰Lu/˜Ú‘ZfÙZ6ú´ŠWÙV•Ô©ÌšôŽq´nraÇÁò ³Àh‹ÏE?Œ}CÞ÷–0rdšlœuõR"#¢ &µUŽ•ózÆ+“LýËæ®ÊzLõq¦Ýr  ·§Åy+J§¯©h•O„xܤM850``Ú4$3ÀŠ š…ö¯„};Þ÷–Îô‡¼±yÔ&¸|Ð%}%mçnmÑuÚbÏŠ)Ñ(•[úie}$bþ Û­â™ÜŸ¼K­W—¥~1ô¼gzCÞXc;ÒòÑ=A®3nKÒœ™00màEMBœ­_Ì%½#m× ÇEÇiˆc>(§M U½¦‘ô`™'óo© D륊Ÿ‚¢¤gŒïH{ËDõ¸|Ã4ZùFQQƽ* ׫ZÖõk_llfÏ·˜9†^VÞr·Ü ÀB*­V«z«¦>—ŒïH{Ë gzCÞX¼›u¸|åeý!!tJmÕ¿¬EžŠiåiЈŸta[}2ÿUƒý°?«÷=oWáª>‘ŒïH{Ë gzCÞXœ‰ê pùÄÌ·9w+y_¹[¸³€Wk®•(Ó™gú6|C|QôìgzCÞXóÞ÷–,¦Ñõ¨|Í,YÿqŸßz–,÷¸ÏˆoŠ>—ŒïH{Ë gzCÞXr¬š¡ó\Í=î3ââs<ï¸ÏˆoŠ>•ŒïH{Ë gzCÞXrlj‡Í’Ç÷ñ ñG¹¢wÜg¿oŠ>‘ŒïH{Ë gzCÞXrlj‡Î3DïºÏ~ß{šg=Ö{öø£èØÎô‡¼°Æw¤=å‡&ƨ|ë4Î{¬÷áÅæ©¿užü8£èxÎô‡¼±‰Ì“cyÇÔEI¤tÒ«DOÅU›¡óü×7î³ß‡{šæù™ïÃÎ>…ŒïH{Ë gzCÞXrlj‡Ï³dß3=øqG¹²k™žü<ã¿Æw¤=å†3½!ï,965Cͳ\Ì÷áÅæÙžf{ðóŽí¹’u¡q§ÔÀÅHN¨Hº•3Æw¤=å‡&ƨpYºg™žü<ãÜß1þ~qÝã;ÒòÃÞ÷–›¡Âæùð{ðóRϘÿ¿8íÒd•ÒmUpQ†þ”E­Ÿ‚ö,gŒïH{ËMPá’Aÿð{ðórÿÁïÃÎ;ŒgzCÞXc;ÒòÄäØÕ#!üø<ãÔ’žø<ã³’21Ôˆ 颪´E¢óhT_Æ2Æw¤=å‡&ƨqi$÷;=ðyǹ¼ì÷Áç¦3½)ï,1éOyaɱªfFï;=ðyÇ©(ï;=ðyÇeŒïJ{Ë gzSÞXr,j‡’®s³ßœ{’¹ï3ßœuøÎô§¼°Æw¥=å‡"ƨr3žó=ðyÆY1ûÌ÷Áçn3½)ï,1éOyaȱªžN~û=ðyÃ'?}žø<ã¬Æw¥=å†3½)ï,95C•À/}žø<á‚^û=ðùÇUŒïJ{Ë gzSÞXr,j‡/‚¾û=ðùÁ_}žô|ã¨Æw¥=å†3½)ï,95C™F—ßg½8aÿˆÏz>qÓc;ÒòÃÞ÷–‹¡ÍaÿˆÏz>q’øŒ÷£ç3½!ï,1éyaȱªâtŒ÷£ç]N‘žô|ã¡Æw¤=å†3½!ï,95CžAN‘žô|ã*JÏz>qŒïJ{Ë gzSÞXr,j…'¥g½8r:V{Ñó‹ìgzSÞXc;ÒžòÄäXÕ :‡JÏz>pE•žð|âóÞ”÷–Îô§¼°äXÕ T&úV{Áó…æúf{Áó‹¬gzSÞXc;ÒžòÃ}P¦¾ßLÏx>q–#]3=àž3½)ï,1éOya¾Æ¨Tb5Ó³Þ {Š×NÏx1mŒïH{Ë gzCÞXo±ªx¬ôì÷ƒã3Ó³Þ Yã;ÒòÃÞ÷–ìj…n3;=àǨû;=àÅŽ3½!ï,1éOya¾Æ¨W¤Ã;=àÆ©‡Ü&Ð%'噪Ԕ‘ Vš¾ÒS\Zc;ÒòǸÎô‡¼±'Í3˜XñD|ÕbÌnYázZjÉeÑÔmɶ*žÍhQ¿õÊoZ²G• ‹·™BDBJRõ)ÊXè}äV¨ë‰W›E¡.«éúGouÝ¥âÜóŒ{GMb{}2Jt–7kÎ,e…Ö™˜[NXæ5DU5^Ó £åíÛž‘:‹‡lZeMtšsÎ$…¥é ·­Ö´»•8EØ‹xÃÒfF¿=×R½ÈñA¶^zzYÉ‹N]õh–પ¢½ñ›ÎÚöô¨%½hž‘T›rŠ•TçøDïDm«ZoÒ»5‰«RuöMä¼Û³B´Ó¥yÒ,^>âµ·¥ÿ·Oøô„=/ýºÀ?¤# »÷?¶§ý²þ­Æ´þÛ;þÿŒŸ0nnñ’¤¶•%¢kn#74ʸóŽ¿.*ë—TЉ¯G4ŸH?»¶Ÿý£¿èX¡¶äVͲ\DnÎyɤ‘RÏ.žQv¥=¼ñÓ91(ãd2Ú!"¢Ývêþ ‹TûÒ#Ê·gʸ¦Ôá’ªSëgMÄì"Tü`+ä§çÞ·I§f@G\–Ä©€%ë§q£Z Þ#T[Ú=aDè#NW-´³¾Êå¶–wÒ/¤ÝÛOþÑßô,T°ô”¬²$”õ”иú ÌÔƒ@Ú2 EJªH•$¥WÞ¢iÓÎLJ8ÙL¶ˆH¨·]º¿‚¢Õ>ôˆò­Ùò®)µ8dª”úÙÓq;•?^UÔ'Ú<¿]©…qgQª"¹8—””nÑV‰ª•-¬w§+–ÚYßHerÛK;éº9[M·š F^àáI73:Ù U\»yB¢‘¾”§Øþ÷I•Ëm,ï¤CÀ³²Œ|±ë÷ïÓ/rík_Vý)ð¥ *N~Øzrq©i†ÿ¯å±L(…†w.Tj¨ xÍEo~ò"L•´'fgåR’ÓFS ¯'K?­„|ÿ[O²±m•Ëm,ï¤2¹m¥ô€Ýþwm?ûGб++–ÚYßHerÛK;éJô¹Ø²«k!,O˜Š=-.2 Ý*µpŠúSØœd‰íªk–´­ä™ u³)ËòÍ:Ú‰ 8bV‰~ Šz‘>®ˆ‰}.&ŠJi¤mÙ«¢‹_ª™V×´Uð„©IJ´­µ5xUkõ³*âö’ªþsö´ã-M›3ŸÒƒ)B•º €(9v—’·[ÒJ¨·õiHZX¡l2“3Ø"Î ŽÍ‹m†á™MdŠˆ5º(…]zêµ^‹+–ÚYßHerÛK;éϧig ‘Êä›PW“ç«B¸d(è*’š¢¡hÖ(––ÉMI›ï>¢âŽ)«d%¡4"WÛDZÖ´¥fW-´³¾Êå¶–wÒtTúE)-3&ÉLK²é Ó*`…D' ¼é¡bÃ+–ÚYßH4’3w1fÈnV˜SdÖ¾{„•ü`+Ý›r^ÐYv_•§Úf^DDeP/ /ro‘T¹«BÖ Ï¿2Ô¨œÖ98rîM5Aþˆî;4oBT}cJW‘ðXè˜vN]‘h&…Du+©®ñ*ªÆÌ®[ig} +}vo(Æ™Ê nÞ6Œ]k¡²BÑ¢¨ZSFºÕn#NW-´³¾Êå¶–wÒ¤BÜ«l¸ùN<,«`¢ŠA¤œJ’¥*i¯Z§ßr³ÆË-H̾å’ıºÒ¸dÕFíÅe»Ëx«?½TN…¯E•Ëm,ï¤2¹m¥ô€¡±Ÿ+.H ’ü»”«h@qžÝ()]]£Ôˆ«lÎ;4¬³:"/* 8Ù½-WÚ ª7âÑÅEB¿¥5èZõ\¶ÒÎúF·Ý“˜dš9¡A-jÛê ¼*ŠîO>ÔÛ’sv¡KK2á†XhØ‘ƈAT†æœCÔ(´æZé+RÕÉÌ'%ÍÆñîÉÞ¼t+‹†!y/] *t[Ú=aDº•IKøSdWé\Y²wW5òZ~#+–ÚYßH ›Ö]¶§‰‹K8NÂbÞl¨·äòãϦ/#NW-´³¾Êå¶–wÒ ´/Å–’Î6Û¹ZÝ'Mê]ö"§ë¯ÍÚ““mì³(sD®Ì)$¸^FXº(¦."U´k[µªQR:)¢’šivjè¢×ê¦UµíEü#T‘”¿…6E~•Å›'us_%§áϳ>àZNí¨6r<¤ã¦(„â3-¡1EU=bд^xé¬÷^~Ζze¼7Üh À¢ÒTET¢éM1‰;"S0¯³ŠØ b&„%ET×û©Ù2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÝÓ•Ëm,ï¤2¹m¥ô€ÍÍlÿžßúÒ>{Y†q‘Û"W›¢!¢¯®‘ðüÛhl3=ÑyE„Zz.´œZ]Rû(K¡~~è·šuÕ&ݘbP2 %ûWy#¥i¡>èæ“´Ù+ÍÉÍ"ÿ”^Q¹Æ­g?ö“ ÏF+÷èÓ V³õ}ïø-—T‰ PÜ¡(\²Ò”‰>ƒÿ|¬¿óÓôX¯9+MÄ9I¢AÕV‹Gå†IM³éu˜ãÒ¶úT‰µDH•ŒFãñ}éíÓþý!KÿnŸðé+èª3¢ª‹“.”ûÛ‚¾îQ0Ú8tmˉÊ^d_ùþÚŸöËú·ÓûlïùÿüFߌïH{Ë ÉƒêDtÑÕZ"Ñy´*/ã&Éð–2–oÔ¢ ^ARJ颮ŠÒ´®ŠÒ±C+h›³®Y6ló“é‹uÆEÄlR‡Ê­+]5¬Ôc;ÒòÃÞ÷–9›G*?E+ka6éL·‰Ž‚ !”%Ûè‹EK´®ŸÆ"„ÚÊÈ“R“Ròí«s-¸ J¨ D/ ¢UUt%j âÕ4¤ZäÉ4Ñ8ëê¤DGDMj«ã;ÒòÇ1i¹?aΜäè°ë’ mÊ ÁG„¥ÐÔ‘Ö„Fšœ‚ÇEg¾ã˜Á4T™©µM Šú·}áZzÞÕ®ª]°Æw¤=å†3½!ï,WÚ«hŒ‰’’å2:PEºiÍTT¢üu~©ºQ&RU¼´™)Š}b²Š_…UWçÙªV3½!ï,yŽååbªi¥èƒ<3Ä­¤=·ê¢œÔ×àÕªV£b´Ç¹ZÔTP+ö©ìù怿Æw¤=å†3½!ï,`TBTªWBóÆšL¬Ò"I/J’ª*—ÜštÖN3½!ï,h)ô ˜8jˆ$HB$«¡(K¡kìçŒ'?±?þY~‘¦Ô0¶¥Äåì–äM²®* ‘RíV·t*WB{tü(Îô‡¼±‚¾ò:Ðb U”¾ÁUÿˆ¥›~UÛNÈÉA‹«2j„Ð"VŒ¹íD‹eþÑ/üGþÙÀn'ÜU'‰4ª©jˆ36¹°DJn¶±ú|Uê}ôøÒ6Î"¬±iº•E%¥h5Jèö讈¬—jUûPäæ]FÚÅlZ;¸ëZ^­kDKº=Ÿ$ YÉÚ:® O8Ž4´q²Zó~Ñ¡y–%c;ÒòÇèõåô®Ðw•éVVÕÊúÕQ¹_z”pkì¢óéÄjH+!Ë:qÌ4BdE ¡ÄUyĽUTR;ʈœ…UM–3½!ï,1éyc“+Rm,àC´X'JäâL´Bˆœ•uZºERZ ‚hÓQZå'jZ6kóîL¸ÝÒ €É8uZú¨d©] ¦µJP:t™%t›GÕ\B!¿¥kE§à½‹ã;ÒòÇ&ëÆÚ„•ªäÂKYàêa¾¢o- ƒ«E94_Æ:ˆ ŽaÑOëUUDDBÖª´DíŒfi ÁÆ'Eiê)!hEª(Õ=´ü#TÑ›m#°o8† (Dˆh«Jª'ç"=jʼû®¿"`â 6H¡.­Šºê© µ/<ÖæIÖÅÆŸSD!!:¡"êTXÏÞ”÷–*dœnJfVÆlÕánUU Fê¢ÁJéZÖ÷ÃWÆ)l™G,ïG¥§ÚÕÉvfNã ¡|ÈÔ•ƒRUT¥R«¡)Ö¬É#¢Ú¾¨á"ý*‰J­?íH ɃêDtÑÕZ"Ñy´*/ã““ïå ãSXí66ÜåjÒœµ÷*‰qnÞ=4¢\ÓZ,iI÷šze$íVJ]É¢"žuöÛB$i”A¿†Aí-kÈסj¶3½!ï,1éyc™ ÛH¤çæž–aZV›Dpp›&Ú#[Ä*©ë-Ú¦…](º-¬—ÖfÍiå'ÊõhO _$ªéärU9•4*Q`,1éycKÓ®4+æ ™ÝÔ(‰]+«ð×F›>n\dHÔ›fh@‘ÂÒ)ZÔꈈ·¯Q´ÓE×MÚé$ëMM¸l›¯ "$uU%¥(«]i^d×­+7Þ÷–>uéœÃV†XìÊLZ-ÐåADCJÝíõ½J¢ÕUWN½76 N§¤ÄÌĸ0—ï°¤EýºÐ¯¢&‚Àu˜Îô‡¼°Æw¤=åŽU‹Aðže•™læ]bY[GIr‡¤ šB‰¤‡•ë*×Zk³¦rk*Í–zØ)f‘…Gž%hU‡D[DaT†‰¬ÖŠ—¹:ô,]ŒïH{Ë gzCÞXæä&m‰ÉY¹…;³„¡* ò°špÁT´¥UTRº¯*­tRÒË}É©b›2«Oöž«tDüiN”½OdÓ}äP£‡ÊpjK©Iþ`ìÃâ)pȈŒEMQ*ª‰ÿ1­ÍlÿžßúÒ1}T@ @Îã€WA*«CEÐåî„Ê0û¨$HŠ*.ª¢Öº4¢/²=n}MÌ5x…Ïq\E_ÉW²)ù (ÏO#ÍÎe‘¹ PPWH­ÛΑ6Λmù—°Qɺ™«Wê*%=eçøj€—7:ì´©½xÊí4^TöÒ4KÚs.c²ûå³%%CUÔ‰¢3`¦e Q*i-ZÒ! ν5 1´Ó7ÑQB ®š/º´„ ç﹆¯¹î+ˆ«ù*öFÓ™6ÀŒ4JªÕuDYGÛ'\P‘ã¡ÔQi­4¢iMhžÎh‘nl¾€ùª]1UTQZVŠšÑh¨¿ŒxÜî+Ž6ÜÁ4´:­Õæ_ÃâœñÏÎÄÄù¥‰Vɶî¼à’.”м­5M/^ÔT;{3,ö’U“e´ªa˜Ð„ªµ½Îµ­WMuÕkX ØÎô§¼±ƒ“DÐÕÉ…ÕR:DKIÖØ’'™É›B'¯"\E$JéÑÛrSröµ¢ó-Ú‚JÀ¦‰G.⨕+·„P´ !%)¥Vô@&à¡äBº”N©#ïc\Ä:a‘zË­Sÿ’Å,«â°ËŽ8Ñ2á:¤·•U—ŸúÁE]*¥JíbÙ?µøOýaŒå¦’h*ó¦ˆU§-›Sž"ý"—é¼(ò×'Nd™7€ÒXèLÌœ°ûg ~þmZbDê­¦Nòª%®æOi¡S”•W“ì«AðDÖ°F26ÈOL<Ë;y%¼Šœ¥$MKû«ùDìgzCÞXçeIçg'ŠÍzTžY60ÍfNm¥\Gµ¸´"æø|iVRÚ%"k$¸Í•n‚sUUj¿_ª•aŒïH{Ë gzCÞX׃f3½!ï,1éyc\ 6c;ÒòÃÞ÷–5Âf3½!ï,1éyc\ 6c;ÒòÃÞ÷–5Âf3½!ï,1éyc\ 6c;ÒòÃÞ÷–5Âf3½!ï,1éyc\ 6c;ÒòÃÞ÷–5Âf3½!ï,1éOyc\ 6c;ÒžòÃÞ”÷–5Âf3½)ï,kyÇ ÂTÇoB¯ï¤#5³þ{ëH£„ô¿öéÿþ‡¥ÿ·Oøô„zùƒswŒE%´©-[q¹¦UÇœuùqW\¿t]B¦„Mz9¢aªŒð¨ª¢äË¥>ö௻”L6Žrâr—™þ`ˆù\¶ÒÎúF#1$d0$kxÕyKDJ¯>„Dü"f3½!ï,`3$db©ÓD?Uh‹EæÐ¨¿Œ£+–ÚYßHerÛK;éÛ™'Z}L P„„ê„‹©Qc»µ»áá†a>»µ»áኊ,é6çÙœvØz`Ù%!\jíTU=‚‹¨–,ÖfY]hò–h ª¼´ö‚§üļÂ}wkwÃà Â}wkwÃÃ+–ÚYßH¡Ÿô~Çžpˆ§Ül o+Bè^Ó¦†…Mk¡4'±#§Ì'×v·|<0Ì'×v·|<10(Y—´%¦%çm™f°Á±>R¥)E%-#©iJÕN„HµÊå¶–wÒ$æë»[¾fë»[¾`FÊå¶–wÒ\¶ÒÎúDœÂç]ÚÝððÃ0¹×v·|<0£erÛK;é ®[ig}"Nas®ínøxa˜\ë»[¾`FÊå¶–wÒ M2ÜÆ£n>ÀÞÃhÚº‹DOhªû9âã0Ÿ]ÚÝððÃ0Ÿ]ÚÝððã’’“”ŸYµ˜w ›LW¢"ª*ú¢žêEžW-´³¾‘'0Ÿ]ÚÝððÃ0Ÿ]ÚÝððÃ6W-´³¾Êå¶–wÒ$æ:îÖ…λµ»áá†+–ÚYßHerÛK;és wkwÃà Âç]ÚÝððÃ6W-´³¾‘WhJ32Nµ¤Ë*â]1:SÛJªWšõÝkv«X½Ì'×v·|<0Ì'×v·|<0Â9¹ &I™¡™´šuµ¨"P@WØ´R%UM?jš–•JÅÞW-´³¾‘'0Ÿ]ÚÝððÃ0Ÿ]ÚÝððÃ6W-´³¾Êå¶–wÒ$æ:îÖ…λµ»áᆠaÉ™geß}’iÐP1ÄD¨ªQS\lÊå¶–wÒ$æ:îÖ…λµ»áá†C™–UI–y.-M5!"ÿÄe•Ëm,ï¤IÌ.uÝ­ß 3 wkwÃà ن¬é•«Ókë)"  ˆŠ¨‰Íû©Ê™&flLrŒ.òÞJU™9¢Ç0Ÿ]ÚÝððÃ0Ÿ]ÚÝððÅDl®[ig}#[Îɼ('4š}GJ*.ºûbnas®ínøxa˜\ë»[¾˜Ut Y’ffÄÂ^0»ËxU)T^dæÇ3(àÃ*$”TÄMQ/0Ÿ]ÚÝððÃ0Ÿ]ÚÝððÅE|šÉI² ÜËdDJn8n"›„ºÈ—Ú¿ÿ‰¡#`ÌJ †c2Ê_¥RðëçûéDü&fë»[¾fë»[¾˜²¹m¥ô†W-´³¾‘'0¹×v·|<0Ì.uÝ­ß 0¨ fÉwr_$hÞ[Î]5çUMz×¶6$Ô¶=ü¥šaúé­TWÿŠÄ¼Â}wkwÃà Â}wkwÃà "¦ÒfNÑmËA ( ¥Qt¡‰&…XÔü°ÌáåÌ;„hãx™9\4ÔIVô*sÅÞa>»µ»áá†a>»µ»ááŠ*å]‰§¦^µJiç€IãoB ’¢%ÔOyb^W-´³¾‘'0Ÿ]ÚÝððÃ0Ÿ]ÚÝððÄÀ•Ëm,ï¤2¹m¥ô‰9…λµ»áá†as®ínøxa…FÊå¶–wÒ\¶ÒÎúDœÂç]ÚÝððÃ0¹×v·|<0À•Ëm,ï¤2¹m¥ô‰9…λµ»áá†as®ínøxa+–ÚYßHerÛK;és wkwÃà Âç]ÚÝððÃ6W-´³¾Êå¶–wÒ$æ:îÖ…λµ»áá†l®[ig}!•Ëm,ï¤IÌ.uÝ­ß 3 wkwÃà Ù\¶ÒÎúC+–ÚYßH“˜\ë»[¾f:îÖ²¹m¥ô†W-´³¾‘'0¹×v·|<1û!Æ‹öÝ«J'ÿÈ+®¿»ð†™\¶ÒÎúC+–ÚYßH՛ϯ-}ñò…ŽóøSâSSaMa :u[¨5ûµªÀmÊå¶–wÒ\¶ÒÎúD¬gzCÞXÓ3:ë—HÜp•Ö¨”J­=°ò¹m¥ô†W-´³¾‘µ‰Å˜eiã -Õ4**.”T] ‹¥6ã;ÒòÀEÊå¶–wÒ îÉÌ2MР–µmõÞEH×*’2—ð¦È¯Ò¸³dî®kä´ü 9û.rÐoÑÂy™¹.ܳ-‚Š 6$Ó*fEEÔ„KZQ4ª¡%6©8m¶‹& á ”«­“ÏшÝð@sI* '±UQQzL®[ig}!•Ëm,ï¤m8ëÖÌÓÌã\¿A`ÀÚi‘KEñsન¼ªj¢IÑéÒþó?í»r¹m¥ôˆÌ3$ìÔùÎ>Ò³0 \™@4PBªÕuÓBóû#¯µp<´§çÛµpeœ¦RÒ]eVî*·y/aÒ”WVú*(Äë,¯zOi­ký[ýOD|ÝèþÑ1ÿö®û"Mž65šë®J»CyLœÅUA­–kOY{c4ñzÌOK3ð‡h¼ý‰2õ¡:.Ì¢ãΊ£fâ3ê 䪪¢*«M³ Zùþ@ré,£%™\LŒî\¼Æ‹¸µ­}·¿lL`ìIi·&¥ÙjaÚâ:BgUªÔ‘jµ]0”;J™2ô½L%h5Òº—Ût{š;2¬“ôŽÑŸy‡Ø’R—ˆ(Šè6^º˜­Sˆ Zkårc­§>Sö=¨áK(ÎJ¢´Ð´H­¯ÊŠ¡弨‡®ƒ¥5{"èNÄÙ|YX 6\L+Í….Š×BQWBsÆ"6¼û£-g “Bñ¢5WP½d%®”_muÀUZ–Ä˺m2.9,.J°"šK¤è«UDUButTkDJ¦¸™)jZóO„´¬çÖ‘¸ëhâ]kB¶­Õ\dÖk kNRRK#`0Ñ4ĵœÓd$$ /"¢.¥º•ç¢s@ÆÀ96äŽZÎ)VÊð0¨Ò€®(5¢.•íX ò_ý2aÑuöœ—²…æÍ—µBtiJ§ÁtFûbј±VìÖœ™6fdUt‘µRT«†â*VééD5JjÔ‹c–Yy.IY\žæöî\¥.Ò´¥4R5N‰h\ËٚíÌ|#»]tªèÔ6Í£:®9/4ÍŦ—•yn€Í4ˆhíû‹Z§%PU/%tiY™ÚwHÜV”x„Mñ`ÝpœQÁõ›$Ð7ˆiUÒ€©ud¶v#Fé¶Ì€Æ.:C„Šf‹y téT]5çoØ™~_ƒ!–mU‰ªžµk«GÝo…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Â!gY-¡žø<ád¶†{àó€›…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Â!gY-¡žø<ád¶†{àó€›…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Â!gY-¡žø<ád¶†{àó€›…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Â!gY-¡žø<ád¶†{àó€›…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Â!gY-¡žø<ád¶†{àó€›…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Â!gY-¡žø<ád¶†{àó€›…d¶†{àó†u’ÚïƒÎl"u’ÚïƒÎÖKhg¾8 °ˆYÖKhg¾8gY-¡žø<à&Å}¤*M “dHˆ†4¨úÚRµNØÏ:Ém ÷Áçv¤ûî8) íš­Ñ/+ó(‹]:‘+ÏObÉúDÝ ùÛ ½,Ù]d ]²Ñ*”æçøk°±½KSþùБ§(µ:[Åÿ(Ùf*JKÍ,ÜÔž#ó´iô$D»Oøˆ©¯9„ɹJÜ*sÒ)ŸœµR\æì¼2hÀ&…š»3G0Ì”¯PtÞTM(ˆšÓRZ”Ô¡ ‰L2¨ºÓLC³’³EÐfÐ'pï‹nº$óÝöéöÕV«§Zª¨i99©k:aÕpÊjaÆÎcV‚B†€‰¦¨J§)h”û(•ÍZML<Åœ–tŒ¶ cNÉ*;vò¨Ý¼škëèÒ©&W-´³¾Êå¶–wÒM’û“x8é_[æ"tþ°ÕôhÒ(+TеѢ$¹­ŸóÛÿZF\¶ÒÎúG‹0ÃŽ2 ûdJótD4UõÒˆô¿öéÿþ‡¥ÿ·Oøô„qhO¿)3.̳ó¯¥EÄT+­tj¬jË펭wÆ5Å ÿÛ¶_Üçû+­KEé+FL[YS`•ð ( *i¢")ÕUu *Árûc«]ñqC/¶:µß×@sÒ$å…Ùû¢$ûíÞº-¸£Z"–„OU~’6¼Àb)Ê̈6NTè¸Ù]pýjݦŠUj”EÓB¥åöÇV»ãâ†_luk¾1®(ŒÅ¿"ýª¶{gõ·É´[áÊ!­Rê-ô¥ÕÒ¢‰£^”­¤/¶:µÏ×2ûc«\ñqD™bY‚~‰Amh½O[çà±”L¾Øê×|c\PË펭wÆ5ÅáDË펭wÆ5Å ¾Øê×|c\Q.2ûc«]ñqC/¶:µß×K„L¾Øê×|c\PË펭wÆ5Åá/¶:µß×2ûc«]ñqD¸@DË펭wÆ5Å ¾Øê×|c\Q.2ûc«]ñqC/¶:µß×K„L¾Øê×|c\Qƒ­©0Ò:Íœé‘"VÞš*¢ûyÑbtA°ÿbË}îÿºpåöÇV»ãâ†_luk¾1®(/k>*g>BDD”Ic¾D"‚&EuÊ ÞDAå"Õ`vÃÌOÌ,ÄœÈK7,Û®'Õ®)Ä"*‹A®­U‚'åöÇV»ãâ†_luk¾1®(„¾’Ùƒ8ô¹»w§xWH"©¥ÔU4¥ÒÒ¢ˆ´ÐºR©{YÒ¶ŠVfYùqp›r⪣ĥQ%ШÝ5ëM^Ø ¹}±Õ®øÆ¸¡—ÛZïŒkŠ+ô…‰yÉ’|‰Ûl”®#‰r‰Qúªé$Õδ‹i Æm 6æ¥Ê­}¨ºQh©TкQt¥S™V ¾Øê×|c\PË펭wÆ5ÅáDË펭wÆ5Å ¾Øê×|c\Q.2ûc«]ñqC/¶:µß×K„L¾Øê×|c\PË펭wÆ5Åá/¶:µß×2ûc«]ñqD¸@DË펭wÆ5Å ¾Øê×|c\Q.2ûc«]ñqC/¶:µß×K„L¾Øê×|c\PË펭wÆ5Åá/¶:µß×2ûc«]ñqD¸@DË펭wÆ5Å ¾Øê×|c\Q.2ûc«]ñqC/¶:µß×K„L¾Øê×|c\PË펭wÆ5Åá/¶:µß×2ûc«]ñqD¸@DË펭wÆ5Å ¾Øê×|c\Q.2ûc«]ñqC/¶:µß×K„µmC}ÆFÎuM¤4ÊÛäÖ´Ó_‚Æy}±Õ®øÆ¸£ /ÚÖ§ÜÇèq_7mLË=k‰6ÍÉfÉeVêòŒOO¶õQØ'Íg—ÛZïŒkŠ}±Õ®øÆ¸¢ úA$å¢r-^qáS0«†µדRé$DѯJU1lª²ÉJ½0¿„T/«2Tê:QE/WV”ÖŠˆòûc«]ñqC/¶:µß×Dµí“•a'd¤Ûy· ]𢍍""rÇÞ^ÈØ6¸ “¯Ì˼ѱ&nµM"„„·tÓJ\-tö@oË펭wÆ5Å ¾Øê×|c\Qª^Ömù”ieŸh çmÓ¹uÃ*¢P•SÔ%Ò‰«îŒ_z|mÆ%›zY%ÝlÝ¡0Jh€ Š—¯ÓMõÓMÔ°òûc«]ñqC/¶:µß×@”ô€&jìœË¦b$Ž6Ž]DSÑÉZéZhTª­+’zKfã2àíìl:áM&ˆ —UPÖ·‡J ¢WJèZ7/¶:µß×`v¥¨Û­4vs·Þ%­µ­U}¼È±: ÌþÚ²þ÷¿Ú(+<¾Øê×|c\PË펭wÆ5Ź2cjËÊ¢ ÇXuÂ_mD›DÿZþQbÞ‘•´”™<2lÔ¯h@¾¼”%4䢮‘DÑñJ„œ¾Øê×|c\PË펭wÆ5ŵŸvvM¶ä™lÏÖl•ºPÕ.r×UWU4Ú¶»Òv‹¬6ü á˃Ͱ઻2J¦—o&žJ&¥ÒZ½EŽ_luk¾1®(eöÇV»ãâÑe¼z‹‹ƒ0ܹhM$w(©§WÖçìëX'ð¿£L1ŽÖ38·>°4URé-)xuÓ_ßmË펭wÆ5Å ¾Øê×|c\Qjz~VjÐÄ~['”•Êh2ħEÄ¢YE¥Äæ¯Ã\l+y€ÄS•™lœ©Ð)q²ºáúÕº+MªÕ(‹¦„KË펭wÆ5Å ¾Øê×|c\Q‹~EûUlöÏëo“h·Ã”CZ¥Ô[éK«¥EF½)[Hµ§,ÿg¸ ¶*DY[kDí‰2óV«“-´ô“Œ‰Ò2™»ø"Ö"zCû sø?æ.?÷ÿþ_ù‚¾uéíÓþý!KÿnŸðé¾ÖuµìÇ:#œ–ÁL—êWR&˜Ðû­?0/=eÚgu£e@¤ÉD„ÔUj”Óê'çæ¼–?Þì¬j¶æ¦›q@g_å(‹R­‘(¢’ªÑÁçø­U™#6›D1™EYÍ ‰J¶×¤޶M¾æMxÞ".R/´ÏJQt鮈䴻8ÚÈ[(.70ÚÒTµîÒ\TE¿¦¥ªŒükU¯¬U4Ü®^䘔Þ$»M:ªS.**Ñ>Ö•ú5ç]wŠ»Â*›µM¤DjË´UÙJ~QŽq.­´üÅ”‹¶|Ó¸r§h¡ „³Ù¢\¢¡—$ÑnŽ¥Z¢’éB*íi¹\½É1)¼IvšuT¦\TT%¢}­+õ:kκïB£8—VÚ~ áœK«m?q| …ÚÏ&”¬Ë‹ªîº–ŸQ>ú—¼UÐÓr¹{’bSx’í4ê©L¸¨¨KDûZWêt×uÞ*°*3‰um§àÎĺ¶Óðgí7+—¹&%7‰.ÓNª”ËŠŠ„´Oµ¥~§My×]âªq¹[:AéÇ l›•i]$I‡ U}¥¥~­5ë©WÖ*°*3‰um§àÎĺ¶ÓðgSÎYöP²SNZH„AAfJÔn×J¨Ši×R×x«%‰Iri§æî¨‰ 8û¨_f•BZ×5Eç*úÅV&q.­´üÃ8—VÚ~ âÝÖåe“hŠmI÷p›þ’â¢(…ý5-TgãZ­}bªrHY|˜rmm¥PT˜t–¨ƒOz«È²U©h[Ä„À¨Î%Õ¶Ÿƒ8gêÛOÁœu0‰ËgêÛOÁœ3‰um§àÎ:˜C–Î%Õ¶Ÿƒ8gêÛOÁœu0‹ËgêÛOÁœG³¦œ”³XaË>ÑSêWeE\%Og2¤v0ˆ8BgT¦™·&D£fr—U®P•Fè"/(t¢ú¼Õ®DظÌÐLK[oÔ¾Nã…)E»ËÒ”Jò×ÙìOǹ„QÃ+M3g'm³ØŠ²Ù1 Të}jˆ„µ¼ZUºBS^NªñL8û“<‹˜Õ»·ÓB SS†šQuÇ{¹6š[á/n$Åo#Ù'(Jó„¥K—tãj¥=©X²—œ&Yò]ÅMf䩪’®•]_’hMHˆ‘Ö–Î%Õ¶Ÿƒ8gêÛOÁœu0‰ËgêÛOÁœ3‰um§àÎ:˜C–Î%Õ¶Ÿƒ8gêÛOÁœu0†-œK«m?pÎ%Õ¶Ÿƒ8êa [8—VÚ~ áœK«m?qÔ¶q.­´üÃ8—VÚ~ ã©„09lâ][iø3†q.­´üÇS`rÙĺ¶Óðg â][iø3ަÀ峉um§àÎĺ¶ÓðgL!ËgêÛOÁœ3‰um§àÎ:˜C–Î%Õ¶Ÿƒ8gêÛOÁœu0†-œK«m?pÎ%Õ¶Ÿƒ8êa [8—VÚ~ áœK«m?qÔ¶q.­´üÃ8—VÚ~ ã©„09lâ][iø3†q.­´üÇS¸t´ËÎÏLŸhÝ{ 2C¯%¾ÏŠvÄYéf'¥¦ØvBÙ›q# RB¸ ·Vš*#EøóÇw *Û¦M1n6¦bÐÊ­Ð2ª©'&«¤•hJ©UÕ¡)‰4Ú 2vÛ7 mFX‰[:(©%äZ©!-kZª©kUUîaÇ>ëOÌ ÏYv™ÝhÙP)2Q!5Z¥4ú‰ùÄ9©a™dÚ·›GYV!•¼®7Ê ª®«Ê•ÖµÒªºc½„MàRϵþ¦aÉþŠZHïÕF¯¬_Ê7ÊëSKgZ·ÚlÛÉ ”%_gî'ç|!ÂIËKɋԅ²¨Ã‚àÞ•-*Œà¥t{º~þÈJ0hÐKË[€Ð^i%–Ž ­Úêª"¢-5iZ÷p€å³‰um§àÎ#;4ã–”“égÚ" b©VPý­’'³ž‘ÙB â§ æfY˜m‹jYÖ€Á ©:Õ EUð/º‘¤™L \m›q° ÖÚNH¡"’T~Ù-U*º©¢;¸E$» K:/3'lŒÆ!8ã©'EvõÛÈIvî›Z"/']Uk!ÒeçÞuÛ2Õ%y°l“%4¥Å%J%QjU­tQ)HìáÂ8Ê8ê³n «ºè$¦‡L.Ћ‘Tõ¨4M£t¶®G‡gÚë’K¬»u•-"·4®|„ü㵄3‡5–bYöºeré.å%K@¥ý)£_-(Òä³4ãk!l ¸ÜÃkIRÔñÞ?g±SGüÇw)‚À™W•¶ð¯“‚ÆLW‰UIt Vª¤´UTÓ«BRfq.­´üÇS`qv´ËÓ–dÄ»6m¥ˆàPoJ?Hµb{ÓI9àsCŽK¾uM=ê'ñê)ô¿öéÿþ‡¥ÿ·Oøô„EvóÞKï?öV5Újá̾ ºâƒÏJšD]Hµ¹©t*Vµ¤l™þòXÿyÿ²±v쬳ç}ùvœ$JTÁ iøÅ>§.)ZY`—G „B~Ïan`Þ%FßRUR ‘>iÎζ§e_ž•z[ú™U–lÛÄYŒGEoã*%ç…UT´"-WZôá#&Û€ërrâ`µFÑVŠšÙ¡U?ð$Y ´9žM)Y—UÝu->¢}õ/xªIœü¹™ëyé•Iy 9üy£Î—9ÛÈÚ^EÄäßm=]thD‹; E%­IçØ±ó\»¬2Ýæ$â’ѲTÔC®-A»C™äÒ•™qu]×RÓê'ßR÷оƒ!v‡3É¥+2âê»®¥§ÔO¾¥ïBË>uÐ0“›””AvRb`L^Dp ãb†Bp\ ¼‘[â‹£ÕÂfÂI†çß–±•u,ñ !i ‡ž^BŠªÔj‹íOj-: d.Ðæy4¥f\]WuÔ´ú‰÷Ô½â¨$ ´9žM)Y—UÝu->¢}õ/xªÉ؉OO:ÑL·8îQro mPÐÑ´¼#ŒWo…¢"…SÕ\˜²ÞbØKBFÀ))v ’Ƀ Õ@˜QA;µúÐÖ©¡™:@d.Ðæy4¥f\]WuÔ´ú‰÷Ô½â¨$ ´9žM)Y—UÝu->¢}õ/xª‰Øv”Æ3J>Û.»ˆãL™¸*ôÑ Ý5VÕS¢åhÑ£J$g=aL•’ô¹ÙNÚ ä‘5(.›$RŽ)8µZÝÐm§ÕÕå5ªõa È]¡ÌòiJ̸º®ë©iõï©{ÅPH2hs<šR³..«ºêZ}Dûê^ñT5[2ïLɶÛx’j]ÅJ¢rAà"]<È*±OkÙÓóûmK:DÓìa>Ȱ‚,¡Š¸†Eõµþ³@rUÚQz …ÚÏ&”¬Ë‹ªîº–ŸQ>ú—¼Uƒ!v‡3É¥+2âê»®¥§ÔO¾¥ïC–—°'ÉYY)@„%˜t[I£ú—…IÒl¨hªb•EÒZ——À«èóÌ”˜°©.mäàˆb”EJ •G™..ŠTkÉá È]¡ÌòiJ̸º®ë©iõï©{Å\NÌ•6•§1ÜmFé“rt*)iE¸•®º•}b¨M„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!„!Œõø‡õHÎ0{ÔOâÕ >SéíÓþý!KÿnŸðéŠíæ?¼–?Þì¬tQÎÌy,¼ÿÙX袡BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=ê'ñꑜ`÷¨ŸÄ?ª@|§ÒÿÛ§üúB—þÝ?àÒÛM¤v9¢%OJÿ’±Œ×JÉì÷÷†Æþ5ÿn!Ûž’9fZt‹bé½<ø⪂’!-}¥§W³Zû*GXS ŠÍ¢’ÐQM4­+ÿ c5Ò†òG96fvõ|”¨ñë_ÜX°Æw¥=å†Ež3](o$1šéCy"³Þ”÷–Îô§¼°Ê¬ñšéCy!Œ×JɘÎô§¼°Æw¥=å†Ež3](o$1šéCy"³Þ”÷–Îô§¼°È³Æk¥ ä†3](o$Vc;ÒžòÃÞ”÷–xÍt¡¼Æk¥ äŠÌgzSÞXc;ÒžòÃ"Ï®”7’Ít¡¼‘YŒïJ{Ë gzSÞXdYã5Ò†òC®”7’+1éOyaŒïJ{Ë ‹ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—Ù_x{~~ËìÁÄŸÚÃp¸¡‰?µ†áq@N¾>ðöüü?—ÙÖüËrì“Ë|Ðëb¤K¥5"|öh‹‰?µ†áqCk Â‫rvQÙ¦fœ³'‰æ‘³YRä^¥iØš|ã&¦VvܲɹY¶Å§IL`… ©®,±'ö°Ü.(Í¢'€NeT‘€¨ª›Ð¥ÿ·Oøô„=/ýºÀ?¤ ;{C E}Ì6²b¾wî]V÷³ïŠË.dÃЩi‰ÝjA±NUãõhšùIJE³¯JeBnM¶* ܺ„+¦‰_oîǹT†Ø£ÅËMÎÍʦ{¿&ÜÀOÞkjÓèAyæ¤ •åüR2™Ÿžba§DȘxÌE fzõÕ¥@¯ªé ·h‘ÓåR`vk¿fe9FR íˈJI kZ&Ñ^z%u$ŒÁ4ÐÎÚ̱,Jå'Z0$%K—BùÖóž¨ýŠV¢P— ¸îÌ‘‚Ú¦O°WS/ºm.„¼—TªéЉ¡h½U!¶hñF·Î̘dšzd ÷‘4¢¢¢ÕJ*iE€¨jd&§mKBh]—FÝG§YiºÝ¡ª"+TU§¬¨º(––YÌ9eIœÚL®Þ«~êV©ìÓìŒæÌ™d™zd ²õ†òP“™téNtÔ©¡cfU!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pÂ0ʤ6Àí8eR`vœpŒ2© °;GÎT†Ø£çœ# ªClÑó†U!¶hùÀgÃ*Û´|á•HmÚ>pVˆ•Uˆ§2†à n(µ~íñÒ®—µ÷SÚ¿‡ßìÃò® 63£kýg-I9‘k¡9þk¤M$<µ”:ДU€š€tòSŸžô¿öéÿþ=,1;lɲB¢Š¢¤ )!EB„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ÿÙanalog-ce-6.0.17/how-to/batch/task1.jpg000066400000000000000000000367031406366436600175050ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄO !1"AQ“2STadq‘’±ÑÒð4BRUrs¡á#35b²Á6c”ñ$t‚¢%uƒ³ÂÿÄÿÄ$1Q!2A"#aqÿÚ ?ßág ë°LN*ZHi]©Ù!2GssRv}‹wµB}ªóŸ©øh×ueN|/gzFfš’6Œæ<—Óàtkpˆ-t¥õxµdT”òÁIY#3߯kÚÒv‹h}o½z©¢"3S3ŸR× ±ÆCÒPÒ6)o³{©Üí¡±¾¶Xvy‹wµB}ªÊŽŠš¾‡ƒ¸eu X* kHÌö¾M›¯!¶¾å¡Q…apà0ËmCå¡uL—µ’êNgæÊµˆËp9nµ|L'õÛ(øiÉ “2†‘ÑEm£Å;ˆeô7Òëì3Æêfl4ô4’ÈíÌe;œN—Ü ¶fCGIŠRŠf³ 2PRç:Õ /is‹ï—”êÛZë< ‚ƒŽ~¤’+<0—æ‡bò-}ãMÿšÌÛãÄú?®Ôœâ½ïCПj‘œ2Ƥ†IYEH袶ÑâËî¹¾—_'ÂðȰ8eކ²¡ÒЉº¦Üö²]IÌüÙ@±n-Öö!CCGM’6”ÅSw;ª.A&äå:ŸšÕ_óž Í»hâïCПjú8mŠw½B}«¶®. c[:©Ù°Øl²ÈFÎòÛšü¶[x+ð)%š,òuê™Q ”8f—æÊ]¥‹r.—Z˜¥y„ͧõòcˆ £¥–Gnc .'ðcÙ¦'Þô]ê®pÜ2ŽÂg£‹dÙöT2FOq ½ÃŽR/¼€6rØÝ%='R¶Ž<ôï‹3jîOTSmͱÓ.ñÊ¥víl`™´G+Ã]Ê¿çœa3nѳ…8«â|Œ¤¦tqÛ;„†ßuÏ"DzìG¸Qô_ªÞ®£†‹Æb¥§ËM–˜Å=Üvú‚MɱÔò[zä‚Õ)K~kGë ì·îê¾öWˆwN‹õ\øY½ªtλ:ªþãIÑ~«ïeUýÆ“¢ýUYÚ§F»v¾ì¢¿¸ÒtKèá=wq¥è•YÚ§F»v½ìš»¹RôKèá-or¥è•YÚ§F»v»ì’·¸ÒôKïdu½Ê—¢T¡dÚ§F»v¹"¬îTÝú8CYÜ©º5NA6©Ñ®Ý®+;•7F¾õþ¯¹Stj ,‚mS£]»[uú¯¹ÓôkèÇjû?Fª‚È&Õ:5Ûµ§_*»?F²ëÝWs§èÕXYÚ§F»v³ëÕOsƒ£_zóSÜàè¬ ¦Õz5ÛµÆ*{œYuÚ£¹ÁÑ…ZA6«Ñ®Ý¬zíQÜáèÂû×J¡FxY6©Ñ®Ý·úç?Ї£ ï\§úôah…Mºôk·mÞ¸Íô!èÂû× ¾„]ZAdn½íÛw«æú1ta}êé~„]Zadn½íÛo«eútaeÕ’ýº0µBúÛ§F»vÚê¹>Œ}_zªO£ °YÛ¯F»vÛŽY$7…¡¤ YÏøxYŸÝ)ú?ÑEîdûMõÆuÝQ´ê ¾Çz¢ýCc›5ÿy²Ë›e›]ÿšÖÑy"©î2ꪫ®jé˜æÅg9Œµ® ¬m¿EåëÐüSÿ·gô½yúÍ¿¯ë³áwëqŒV*šYiÚÆÓ±„Hç}O <ê“°\S»Ñún÷W£MÛ²ßPQ­Wç½c“H—ŸâÞÓwº²ì#îô~›½Õߢבsn®p'îô~›½ÕàV'Ýé=7{«½E<‹›up}…â}Þ“Ówº¾Žb]Þ“Ówº»´Wɹ·W 8ˆ÷zOMÞêÈp;îÔž›½ÕÜ"y6êâñíKé»Ý_{Ä{µ/¦ïuvÈžEÓn®(pGîÔ¾“½Õ—bX‡v¥ôî®Íò.mÕÆŽ ×÷ZoIÞêú8)_Ýi½'{«±Dò.mÕÇö+_Ýi½'{«!ÁjþëMé;Ý]r'‘sj®K±zîëMé;Ý_{®î´þ“½ÕÖ"y]º¹AÁšÞëOé;Ý_{­î´þ“½‹ªDò.›UrÕÒIÞÅôpv³ºAé;غ„O"æÕ\ÈàõgtƒÒw±}«îzGغTO"æÕ\ßX*û¤sìYu†¯ºCç>ÅÑ"y6ªç†UÝ!óŸbú0:®éœû@‰¿sjª‚T÷H|çØ²-OÓ‡Î}Šõ~æÕT}f©úqyϱ}=GÓ‹Î}Ší~æÕT½i¨úqyϱ}MGÓ‹Î}Šå~æÕTã ŸéÇç>Å÷­sý(üçØ­ÑMû›UU 6¥œûцÍô£óŸb´Dß¹µU`ÃæúQùϱ}ê ~“<çØ¬‘7ìmU_Ô2ý&y×Þ¢—é3ηÑ7îmU¢(äúL󯢒NvyÖê&ýª´Å,œí󯢙üí[h›ö6ªÖïçjú 8[›Ö6ª€Bîp²Ù•zÆÕZ•4²ÎÀÆUÍçd@Íå¸>¯Ö©þ´®éî«4X›Ìû–¢¸UŒ?©!¬˜ÔK3äŠÎt¤ 6Ü:ó•ꕟ"ŸîÝê^V“lšpõé»qö[ê §„sKO€VMŽŽFG™¯i±êÚnÜ}–ú‚¦áGùn»îÿºËRó7p›hþ%?ŸôQ³…Xãœħó…¥#8‹MºH<«s ÄåÑ7„xÛš\§ób˲,nßħó…]o÷ùVyVô¹å¿Ù7ɈÍçNÈ1»ŸÎ´²/¹9ÓA–çd8ÝÿˆÏç_;"ƾ±ŸÎµ6~ðÅäüSD–÷d8×Ö3ùÐpƒúÆ:ÑÈ™< è2Þ< ƾ±ŸÎcYOçZA·YlÓD.[g„×Ö3ù×ÎÈ1¿¬j<ëS"lùmnTÑeèœ ª©­Á$¨¬šIeê—33Í iÿbºÎp eàìƒÆŸý®q´b]#„u ™Ð¸SIrò:Fø=jž Z¢<3 ¬®’ WV —5’lžÑK.vºÁÚ·-Æ„kkjµdÀí;祩ØLet±»g›%Ù µ‰×+ßøÛpÆLYiaŠih¥0—Y’R9ñ:ö9œÒòKî7Îw=ÐnuÞ†ÒLée­ýœn~rææ–~.¼[ØjV¯^0^¸¿gz¯dL, ª6wp:ƒ—]y|ËL ôt‘G SLÐÈÉ#{â»AlvæÖà¼jFûk±ñ†6–Z†ºN©.‘±åí¶¤ÜÛ›z -E³kæ.q#fØ$2 Z÷`†öêGÎákÇŽSõMDr9Ò4Ih:žË›8Ü]Ä–A¯„(ëpUVITM4|…Á•4ÛV4FÓŸã~Èk~R-Ê£fYIŠG-ðµ›7‚ù`7‹rµÍß²&ãAºÛZGˆÑËPØ"¯sÀ-sA-uÆ`·_.¶½òë¹$Ähâ{›,íad†'\#Úݦ·Üµèð£GQŠ¥Û l!…ƒ;š€.˺áÄÙÀ¼¸HÄ*ëLrÃM(-k36î±ÑºQküÂÐ<ä¶ö(7¡Äèæ‘‘µò6G¿#Y,O×Êçv®ÚÍv»¸¤) m8¦}FÓöL{˜NS|ÁÅ„¼œÂÀ çuÖ‹°ª™*l•šÖlÜØŒ‰¬Ïs¤¯ùÓ˜Þhp×Ã…IEÕ;G=ò8É$Mpvw—æî æ±µ®/krNÅèZÖ8Ìâ× ÄˆÜvbä]öMAk[)æ*,jšQ+jfŽ9#–f8ص {…‹Ž™²71½µµ‘˜eT/káÄ-#¡l3=ñg$4¸Œ—:œêìü—¾·Æ£eEieÁ›yåqklH”JÖÚïðnA°1j-›ž]0sH7A Þö³Ìw;P>iæ*f èª*'vÏ©ö’H6n±‰$kI[Ú3q¾ãpPÁ:œ `} =† 1z5Íã4:îÑîùÜÞÑ»ƒóº’¦ˆ5¬ŽFT=°oÌù2‚í5•ÀÞ÷¬uAµ5Æ­Ù%™§$npc#Øò.,ÝæÃCÌm½US,BI[3šM¿e ä>f‚O/¢’gHçSHé ó™é[)k]#ßĹ³Oí¹ 9ö+†õÃdoÙßöu0m¢7¶¹n8ÂÚè ¹ÐISˆG ¡,hë&µññ…‹àí/qÅòXß‘‰Ñ±ò²GÉ¢ÞÚ_®^%ÇRú¸s…8fÊ‹ €MwÐdÊüº>Ì,7åkË¡¶ýÇF˜g|ššæÛ©ynZo3‹¿i|¶v‚ù¹ä8´2W¾ öìŒqì×gsÜéZFý2j-¥}ÚIY^)± jw–²9#–Y$p$5¬yÜÞÚùŽœ[o"Úñ`ÏŽ~ªêÇ:­°2&JY|¹KÉ[¹‡0&üPošÎøk+¥&YÖ:šjg5£[I’ä^nTbôNsšfÉ$±¾ ûHâ‘p,×q·qNºŒ¸RɈõKnÊH›P6cSiÓSÛfcüËáQ³ ™ø„UÕUQ¾xÞÓû(‹Z#@±q7¼¤ÞüƒNU±[‡ÇYQK3ÍŒ¹H\:Þ;#uÿ–Û‰AU{¢Ä6ñÇlŒÈç°¸“$™-ž ;‰i×T‡Ãg‡mNhò´äw.œcr…È$©²Ž80þ¤ŠL£ª#›5¹#{ ¿‘Œk/à¾û¨ÎzZ…OŠœDÇôsšèœ×}׈\sáTøä>«jÙ€dû8˜Úi6ŽhŽ$³.mïß`5úîGˆÑÊö¶)ÚòùM-‡8Ç´;»Mo¹hÇ„ÖGU%kk êÉâ\i³ÊæÆÒ2ç½ÿdÝsr9±o`Š76 \×6G Ü3Þ̶ëcû¨tÝÄþbƒzŸ¢©’&A6c+Ør8væö¶lºåßmme¸«éðΦ¬ŠH&ÉOB&Ä®P,]}Z7‹ŒÀ“Ʊ-V " ""k>E?ݻԼ­z¥gȧû·z—•ª=znÜ}–ú‚§á>¼­éÿp®&íÇÙo¨*~ÿ—«~ïû„ŽG•9—fª­à¶[uxvî¿åññøÓÕ³,åv¼zr¯+:mbê¥ËÏù•…Ý„ZÛ —øø ¤pÎPe#’ÆÛ¹V[;si»›z˜ þŸ¬ÃIåøø¿ÅÕLµÄd›x~>9Ð2âöæ[<¿_r!–¾ÏKÜòjw/†ìÓã_Õl–òoÇä›?‹!–®K7v–çøð~«éaóÛ™mlõåñøø+0†óré§ÇÇáL¢È :~‘6zî7ݦò¦lg˜¿þ>=‹66úX~ŠŸF\ãÆ_ËüŒWê“ã.áã/þ–+µå¿Ú]ë¿|Ìæ—e)¨¡Æä ÊÁ¨\k¨¾¡C#Rú¨\ñSÔUKLÆœì,Úq‹¯c}‘Òöߦ¶’FÉctr±¯cÁkšápàw‚m¤¦eSê™O j2¾PÁÃM ·ÃÌ¢«eÄ+YRëÀi «†›g³vwgñ³æ¶†MÙy<7Z0㘬´ñJi¢…µm‰Ðx¡òFÞÔHKô“}™¸i­…ÔX]x„ÕûßS+óm\Æ—3ˆfº×ÍüÊ‘”q¾GÇI+Ãä- ½ÀÜÎAÖüè)è'¬2:ž lµríd‰ÏâÇ(`iÂçQc}@·*Æ—¯¯ºŸ© Çât™¦ÛÙÃ6¤OÅ]MAGQÆzH%‹9~GÆ× Æä›]N¾¤ØC´ÚlcÏŸ>l¢ù²å¿—.—æÑ~ ˆÍ]ûöÆ3ÓÃTÌ€Œ­“5˜uÔŒ»ô½÷h¡e%3Ç2žº6µ¬!€eæ°s‡âyÔÊ" """ """ """ """ """ """ ""k>E?ݻԼ­z¥gȧû·z—•ª=znÜ}–ú‚¨áð¿±ý·›·e¾ ªxCü«j7yBG)<<á‘ò[ÇÇêª1(í-õWÌfšÌl«1¸¬æºËÕxþ\+?Óæs7-Ç…Y†7]UàÎý­®¯r몴÷ oRƒ-ﯗãðKrøTå¼÷L¼¾µ¬2ŠÃ“òõ/™ÉK“Ι4×D£ דÉe˜n—: =Á¦×åºÆò^ãŸyøøõ0e o%‘25½¼ Mõ2ÀFv¼öó©é«"œ.‘&ÎÚ€<Ëánšþkc(æeÔûHÈ×_Ö“ë8öɼ´éÕ.þ†+ÅEÀØvÙš÷©{¿ôb½^/“í/E8kÕÓuKcs_³ší"}®ë¨å8‚9Ž„WDÏ‚Žº#jñl{K™ o‘­ÊÍn0½ÅˉÜFZ^"çÝM'4¢ºŠœ¹®7 |‚IcçÜLbÃ×*ìš“e±tq!”-®š†Ü€_®[‚A ,r¸®)]=$×Ó5´oŽª<ån¬l‚à绯éZûøºìKŽ×Bêš—Ñ´ÑÆgk.æ·1ˆ?s³’o³:d½îrê*Z‰kÙ_‡ÓËWLçš]²c›v¥$9™ÐÐæßÉÅ×_}IÄ'lOk£`¡sby š“c}mÚØèy9µ‰?6+‰¶¨ÐSÁÕ1½áòG± lní#mûÐ;sÚî×MÉ«ªä¥ÃMÔðËZð^6Í`Ù=úessv¶½ì‚Ñ>Ìf±ï¹`-œ=¡ÖGÔ>ý·j2fË¿[fåSG__5s°Ö>™•¹ùç0¸±Á­ˆèÌ÷¾8ö¾é;EWUaΚÐõD†SÇ%Ùžal¯½Þâëj-—”豋Äf$†AÏgØøË´|ï†ú>ÀÀìºòŒÜ¨:DU}q˜a=V[xê62›¡­›f÷ïÐeÚ9I²Óv3Xè*çŒSˆèá}I»vñç3)¿íˆÜ`s^ÜáÐ"©‹{¤£ÛúŠÊˆ o®HöšäeχÂ3âÓS×Ë þÆ‘ùOÆ äßN;λ²Ç'+P\"çÛŒ×ÿÑÈêk°ì"«nË.ÊY2Ü\¾âÙÚmó_}µåÅq)°ú=ðE-s š3u£ý´ ƒ¯;i»K ‹è:„UxŒ½o¯f!³‘ñI †VÆ39ÎhÿþÚ9ÜötµmEDóPI%\M™ø]®œJÎ$•KFƒx-6Ó‹+ µ™?67YKM%dñ@øµ126f;!).Ü."µ­Ëšÿ5c¶¯§ÇäóS>¦¦8#l¢5Œª«s’{B;a¿Á¨tH¹þ¾Vf{.ÕÍÐlãqÚl䑲/ôcm†¶tŒ›ÝM+S,°úfÂù.oÆi‘ÍŒÞü\ÍmÚlCΜ[‹…Ò*ZÚÊšlZ«e#K6¬k |“=ûù9G-†¢ÊGâ50ax¬²l_Q‡‡ñšÂÖ<ˆ„ƒ‹rGlþOlŠžLRh3&|Xë ¤n…¢Lâ"ë Ûøï#]ÖÅ0ŒF²«¨ciÇVÒ†ˆâ[%Á$ë|÷äËkq· ¸DE5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7n>Ë}AUpƒø%WÙ°­fíÇÙo¨*®ª¿Ñ°‘ÊO »¯¿Ãεki]VÐl|>U¸Å0ܽÑ0ò~ªèð£ ó9×<ÊÍŒóïS0 ÆÜ­¿Çü,ƒ.>oV¢"8_ýC”_ô_2é¹l4\ržÊÿ™2I:MõøøçTA”\yWËY¤ò­¦Ç­µµß¯ÇÆå„±ŽíÜÃwéñÊ„ËUŒÌnT¹mÉnMË:K:#cc}Ü¿‚™Ñåip¸ÓBÇ0F0Ô|-‘¹7®zºžJ $d†Ÿ ééœ$ÌAâì«øEáÖð,Þ=,Kc ›ª)ƒ‰ßηD|»¼:úþ7*¾ 4˜ ˆÞyü ï%Îÿõkî=¦pè8:ÀÜ$§íÜõj³Uø ráYÖwôµX/Éö—¦œ ÒSIKÔ²SÂúpvN`,°Ü2îÒÁG‰Ç4¸|Ñ@ƽÏ\×nÒxÀ¥òÞ×Òö¾—T8f÷V4VÑÉÔLÛlâŸe`!°,‰lÍÚÖ¸¹×U–—U°ÐAO §£†FF[OvM9„Ga}Íã| ]SBØêblφH^X‘Ï~F<_Ã}Ú‹*8ðÊÓ7VáÚR¼U9ѸÀÖl󴸜ÛÛ!âÜÞ·±l.Jªù%d9Ĭ¦`‘®Êæ5“çxÍpEÚAú†× GPQºifu$Y™’W˜Ûw·u‰å M¤¦eSê™O j2¾PÁÃM ·Ã̹ÚìWNö2šC‡²W© l$ ²+82N Í—˜ÝÜÎ*hpzˆ„“:7>­µ4Å’º\îÈÖÂÙq¶ðׂl €Ôn.¡ £§‡c$Eœ?##kFab ‡.ƒ_X×h™õ06B$Ž6Å¥ò0 ÿÍ”ÿâ9–­u$’âô“²›ha´2X0^çÂÓ»µ¸x»\±¬Âfutç1N ¦¥³‡6VîbT5¸--U,T¬ §§ˆ—£‚'2ç—+Ø@Þw[yU#ÄœÜ.Qåe QÂçíÇ-šHírÆâ/®†ài}ŽasÐÔ'dâAI¤{¢ ™÷qf~çq¤7¹nlôØs¡~Ô‘†FÆÁ#ƒš.Æ8ïHô¾¶öYPÃA$Om-1Å›1hšÐâÇ“ ð?7ãr7ÜéátÔ¸ELð6ò¶F±÷i-y_oüƒØtú&ö°¾¿ZÝkê0ÆÕÄéêŸ%8»3Ÿ-ã‡Óf/|Ã5¹ìT1TÒº—3¢†Bv¬ˆ4mëæN[›‘cáROIMQ$RTSÃ+á9£sØXyÁ;·2¯Àh'¢mK«]Q!ˆ:kæ2å†6“}猿ÃεpŠÈ1§TM‘ "T8[’—0‚Üœr;{ëcÎJ ¡IL*P)á9ÁÆLƒ1  ü„!+'Á ›M¤1»jÌ’] çnºqÆ:xJ£vRî¬dT›:é6ùq  nÍf9Ë™‚ÄXe¸í[xÛ„ëaspΤ °¾šìh¸Ž`ç°AÏO)ÄYäÔsÔ2¦zH$ž;d•ñµÎmÅŽñªÈÒSÄfžÆÆb È,mvÛ›A§€*Vá&1²E;䧨f„u8‘îŒ t `P$¿ÌiÕà•’Iˆ9±Îú‰YSi3BÖH×µáŒÍm£­v 8†Œ»ø¢áÔLÖ¿#Õ¥àî0Cü nÖöò£ …앎†2Ù¿z EŸ¥µçÐä\þ!ƒUuYfÍŒE€¶M¥­)Š¡¦B{bë¾;»Rtße.v5Ô³²”Tɦ åäˆØ—0IpÐŒ£PèÔ½PiÙ{Xm>\©yxÌ<'áßεi¨°™"’*\6›©ås›.XÖFü¶påã^Ú¡ð__æ¤ÄešhèÝN›Ò·À ^Ëô,m`´gÁ&|ÍgQÆøÍD¯˜ñrÈS —#—ˆÒ þ…¹®# †=žÎÛ²fHìÐ27M0â<b))ƒ p§„:œe„ä²µ›Í¦š.vl¯bæSñÛ ve€½‚vÙc¡ýsZc`U¦Lú*c ‚vF÷¹í˜¿f,Ñl±Ù­¹¹³n7’A6Aa,Í}´1ÉvÍŠmqä6‹))£¥êXéáe9»&°Xïwkr¦E/¤¦’}¼”ðºPs¹€ºÀæþ|«(ie…°¾ž=›Y³ À3N&Ÿ4åˆ+a5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7n>Ë}ATð‹L ¨ÿ(õ…m7n>Ë}ATð‹ø]þˆõ„ŽRxpºàku²Ó¦ý|U_ ²|ß‚·cxv—^ÚËÍ0Ø’þ Ê• [ãwÀü¿ íÁJ×o¿—Î|Ÿò.ˆ“-ÀµÏŸØ¾†è7ùÇÆ«Þ9ºÊãwÇÇëäU7›[ããȾ½ µÁÛˆ±¾þOÏôQ:`Ѩ·ÇÇáet“”٣çÁD•cª¤ÃªÜ.Ü­*q¡# b‰ßÉçVu/¤¤„¾­ÍõJÊI1Ћő§}·ÿÊų ˆOI‰6D4ÀÏRíÛþ?ájbÑÖGê¹Eßk0s.Ž†Šž‚ È3r¾Ú•Tñ×,\þî#{”˜™gßÀé¶xÞ[ºÖäýUŽ]má¶„ÿo*żV5£OL×µ­Ì5e¸ô: ÝlÒÖÚºÖû-[ËC7à ÿYßÒÕ¾¼'Þ^º}`EóÇO ¥™ÙXßÉ'@’N€ IZ­Å¨œf¼›Ýyâ¹Ý¡ÜÇXÛ\¤ W6›È£¨ž:jij'vX¢a{ÝkØrTˆµ`Ähê ¥ž Û$ug,.hE?ݻԼ­z¥gȧû·z—•ª=znÜ}–ú‚¨á'ð Ëýî¼Ý¸û-õQÂ?à5z_‰ýÂG#Îã:ëñññʶcääZÍ:ÞãËññý¦à ázaÂÐÜa;ýjV»M}zþš-FÈ9ÂúéØÁÆ:ó_UÚ-éÍ»Ÿ-‰>mÞ¿/6õæù­åЭWAsš@`qˆ!ÑßÌ\B{•¬pÜ%:o&÷ò­:ÌeŒwSP0Ë;´¸Ükf¯Æ%ÙµîÙ|â^ÑPÓÐG–6’ã½ÎÔ’š¦Ü.0Õ¤Â$–N©Åµ“xŽû•Àph fáºÚ$9ïºärž}úüs#äÙÆ÷»æßyøø²ÔDG -|J¡Ì°Æ/$‚Ãàr{TØuQÁ‘ çv¤òü{}e3êd©žQpx ŸÏãÀ¶$Ç)#[mrò¦c”Y‹ xwÿÅ f=ãynþ_Æ¢nhDl> £Áªß5d¦]KÆ‹:ã+‡ `FøY:~ýü¾«[ÁãÿÄŸ¿©ªÉx¾O´½TᣌF÷Ð ›óðÊCEÎVJÇ:×F§‘UãÓÏ]DÇáôõ¡ð™K_±{›©æÀ€íåºÚ×p±&öè‘e§3\Éå£Ä£{1Ö¾:––´<ÄèÈ~Ìx›²vœkïùÊëÛ7mVÑÓ‡æsÍò<Åœ€X[.ñmo|ÎÜD¾CUHÎÆÚy:œÚYêy:Í"ÜÄßv޽ï˜Z:FbÍî}E[ê‹´fÆV°O–»œò /›6ÈåÍü«¬Dx4 Ĥ¨¬lûWÓ†âì…í–Bð?—ŒÜ—×)Ó•k¶Ӓʦ׶˜ÔU>QNe';¤ŒŸ.BíÜ[ïã.‘SÔugZpî­ÛæâuvÃ6Ý›Ûg¯ï2ö¾«­:¾ªÙ»e×;õ7ÿ|÷Úæï2ékl¿{É¿\ë¤D½m#.0ŒÕË=Tµ=Ç+c"l‚Ç@.guö°SAOSU‹˜Ý. Ê ¯-»äffìéò‚ãÆç;Á¸uþp= æiª13G*b­uTóÒJ\ÖËB$¿#xÁ÷nýIµ®T˜WÅ>zùêdqŒ6¡†žPÑ) hç8ƒ®mcheµ6WDˆˆ """ """ """ """ """ †³äSýÛ½KÊתV|Š»w©yZ£×¦íÇÙo¨*žÿ«ûִݸû-õSÂÕ¸´Ì$52ò0ÒiqÉá iÑ5š5ª"Ñkè<6ø¿Ç…v¬¹J<å¬.7 òüÈUÒHù Ütär°¨Ë³sMÉw'ÇÆõ§“È–™ŸDB £}”BùællÞyy–eªÓ ‡c‘ÃŽÿÈ)Zæ}–œBÆ™‘ÒDØ¢åååò©½õ¿„}ߢ‰§2•‡u÷rÜoü<ë×zrJѸ5;´ü¿£ŠºybS°›ï#u­ÿ>u¶ÇnÖû·|kȤ6&ãà|~ƒ ðj¹-™¡‚ü¥mE€|é&Ó˜pë]§öö~~|nÓ›òðü~¸Ó{iEƒÒÇÛ8øw©›ÙÄl¥qÓŸ—œyVÐù7iÌUj!Ôðlß wýÿ¥ŠÑUpcø9û÷KªñüŸiw¯",(ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ!¬ùÿvïRòµê•Ÿ"ŸîÝê^V¨õé»qö[ê «„Á*|ƒÖ¬Ý¸û-õUÂà•_dz ¶÷.6 ZIÌ<ë7fyµ´ðî FG—S¿t†EF\sM æå*Y)éÜ-’ßdûT ë +îR| pÌå®Êh£9šË»•°ÁsáL ép¥ko¸hµ Œ¾·vŠKïäøýWÖÇq¿Ø¥dW·6õ½F‹¸óŸ ßàY‹Ú×ßáÞ>>4R6=Ú|||sbáa¸ƒnoŽdÔ˜|¾ëßxßäý~5_yî?Ì/›û_ÉíüÖyFýü·«3cJä±øü´X;FÜ› )œÓºöðïøåøºÌÎü qF§–üÉ©¬:ž ¸;qº¡ÿŠÙVpp„­;ÿ¥ŠÍy¯Ë¤p""ʈˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ‚Ï‘O÷nõ/+^©Yò)þíÞ¥åj^›·e¾ ªññ|¤aë ÒnÜ}–ú‚¬ÆÀv8;Ž_ê …æåÓÀ¦ØXq[ugMJÐÐâÁ2˜Ó‡moìÊ•°ºÜg°YÄ©qYªp»ÕŠxê©ã¶å¯Ã}n?ò‹Ãñ°ì$ú[}ùÐÂ&Æo SÅoÈ­Øé‹Á¿6â·b\àÃF:[ @¿„)¶!¡o7µeßkyÖdÃVL j?%Ï3¹¾><ê}›Üy‡>û­ˆ)õçLÌ&ì‡Au“¢;•£)þˆ¿=Ö2@9E¼«+…;ãçÖµ&kÚòæ\-¨WGmãE«4`öÛŠgÍÖwfvoú‡ëÿ‹ª®À³Âˆ¶ùÜõj±XžZD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDDA gȧû·z—•¯T¬ùÿvïRòµG¯MÛ²ßPUØÅúÛ-·Ý¶ô‚±›·e¾ «ña|>@~“?¨$r)cÕ½¾–äܦho•bÆ4 †Ëe kɰ¿šîË šÙ¢|RF  H< ®ÀÝ…NÓG,Ïúqå-Ó‘ÃGoðô4e9ry.µ¤F¹‚0AÖÏh ùFô˜‰äpØo«°÷ds‹Û}ZåØá<$¡ÄkɆV‹è3|sj«1zG°õ]‘nÉ+]-ƒE¦Ì­ì¦’š¥ÌÄ$‘јª–>]sòºÇ[•11ÿUÙÅ$sÆéCÚÓ”ñµɼ,Òã£mÊ¸Š¼WÂü>² ªa6¾™nw‚47çð¸-\7¨¥6sÜöÿ3ÇÿÊš¡‰ÄfV”ô  <¶\Þ Â:9ÞÖIlÇpÜï>ãÉ̺ú9¡¨fh$Ûˆòƒ¨RÊÃaaª×–dæ…ÛàXÇ•¼ê¶Kg×[×7‹©U¡ÎÐ+"ÛÃü®õ5n(0öå ýWzš§Y•@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDÖ|Š»w©yZõJÏ‘O÷nõ/+Tzôݸû-õ¡‰ü‰ßmŸÖüݸû-õ£‰ Ñ‘{qÙ¯þa WÍû(ˤ6hßau®*éö[c%Ú<+bbÐ-¿ÂUM] Urüs.좬Ç袻X\÷(UrðžÎý6œ™Šù]‚ÍÝÞÏ¡ž ×­ù–&fÙ`ü ¢¬vÆ«ö2;æ»V»Áÿ*|S«lΩ¥Ž:y,_Náĸü‡û¯?7Ö·•luÊ´ÀØS)…§ŠËè,+ªät•/sÚXwd¹9@äÕB ä[•rG9Ìàv¿J÷¿•j‘¨Ô,È–9œÃpHWxgêèÜÐ$/h<®7C¼.u}ŽT‰Àõü†4Õ…¬í#Pã”þ…t»FLÇɰ6Ýeà”n™ó²8‰ÎçXk¹v Ç߀ÓEOK+æ¨íŸµqsoÍkîZˆÌdwuLp¿æµ™ ¯}Ëøo%D„WEú(OÕu•”UŒÏíwƒr˜ýtíËHÑþ£½Ad¾³/S·.ìçÔʼnQD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDDA gȧû·z—•¯T¬ùÿvïRòµG¯MÛ²ßPZ¡µ ó³úÂß›·e¾ ªñç`ÕÚüÂG"¦¢wX›  ‰ã†Éœf½¼>e¯쪋kãé/¬ÈÂCâsŽà[Ì»²°`g5ÖµvK[âÞl²òdý¥³)¶š?DÈóÚÈ s9—íM¯mëMÍŠîñ,. ÈÞæ0 ·æ«©¥––Ii½µ\¦s…Ö¶ÂDMVUÛÆ«Â7j¥-<Ë*¢Çƒ¹{‹Ø×Â4>Å_S)’¡î$ïY1ÎÙØâÎ ‰Í#®}aY3Ù¹XÐb³Ò¼d#–×U\›×Ô‰Ç öN âOÅ034›ÙPè÷ßsYíW+”ÿ ÊòÿÞÉý®­fTDECYò)þíÞ¥åkÕ+>E?ݻԼ­QëÓvãì·ÔO´ÀªòXVÓvãì·ÔOÅð°wdþá#‘çtõNü_Åt4Õ"¢0æ<šoøøÕró4Bí Öt˜ƒ îæ]³žYuÀjçoß¾Ëè• î¿ãñÍëZ0Ö2f>>?%™Åæì/v¨-Zç»p˪•øDxƒ-P÷±UÔSåke}ÚýÚêôUlcl ãq¾ ËEšZ`f‹„.mñžFÙzÑ«Ú7-†»×;p}µ ÏOf?s¼«3QÁ9‡•F@üVýM#éåtr‚ Ösy‚À‡Q¸¾uYytQœ£•Ubæ_^U¸Ð©ï}ãñG2ã¥ÿ†Ÿåiu¿ýlŸÑë)þ7/å;'ôFºµ%DDP5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7n>Ë}ASp¡Ùx7\îhïù«™»qö[ê —…?åªÿºþè<œUçË}AF """ """ """ """ """ "")\ZÂɧРÉ<ÞUóhÞäÏ;½ªˆÑI´orgÞÔÚ7¹3Îïj‚4RmÜ™çwµ6îLó»Ú‚4RmÜ™çwµ6îLó»Ú‚4RmÜ™çwµPËSUW¹0öUKKO–Ð5—s³°j^×}#æ ‹¤U ,|bHñ|bF™®d88qµC¯jmm÷í…òs2æ¾+Œño{SÆwfÿC^ÐùtúBájŠ©ÌËšø®3ŽíOÝ›ý {CåÓé œÌ¹¯Šã<[ÞÔñÙ¿Ð×´>]>¸Z¢ªs2æ¾+Œño{SÆwfÿC^ÐùtúBç3.kâ¸Ï÷µ]>¹ÌËšø®3ŽíOÝ›ý {CåÓé …ª.o«žŽ¢„Rb•“+™O3&lV0XFÒ.7ÜAÁ]")\ZÂɧРÉ<ÞUóhÞäÏ;½¨#E&ѽɞw{ShÞäÏ;½ªÑI´orgÞÔÚ7¹3ÎïjÑI´orgÞÔÚ7¹3ÎïjÑI´orgÞÕ¡ KåÅ« !¢8YVŽsšçÕæTKYò)þíÞ¥åkÕ+>E?ݻԼ­¯MÛ²ßPQ©&íÇÙo¨(ÔD@DDD@DDD@DDD@DDD@DDDA$ݸû-õùQS%Êù£kƒ[pç€wUÓwÌ>˜TI#‹#sšÒâ9ŠªÝo–Ò ?dãœnv‡w}êºnù‡Ó ÔR>3TBÖù\ÞS®ô8ld¨(ãxÈÈEÚ .‘·$Ø~Uò7L÷˜Ék sfqnmÙ9­óÇ/"Å“P²7FÚ˜ò;{3D|¡­_Lô%™¨òpÛ2×ç²^GŽ ’ùÁ¸qÙ³Šç¯&ëòl(M]+»iéÏ7lÝú{™:®›¾aô • 7ùö§ÿ®?þÈ•ÇUÓwÌ>˜\ø®¥§áµDóTFÈ@Z]¡9ãÐsî>dØ{³áÔÎÍ›4L9³f¾ƒ–ùNõ°¨¡Ç`†‘õMŽc2‡߯ :ÇV“­™¼“©ÔÛ#¸AMÆË5ßkÎá~Úß3ÀÏHï°ÌUÈú^TWçvžŠ.¨eôÙ—JKíÊZZ“=$-:\Rº›  †Š•²²Ÿ ‚y\âÐ-:9íÉÚ5¿všçSˆG%\µbì…ÏnPönì.aqæ;ͳºÛ†l›]†6!ÃêK}„“ 7å¶XÀokᦻòŒÁö»¬•òRÂèá|U h–ÎË%ê#hɯ5¤¶A§Û•\bÉM±–'f%ù:žÚÍ~Fó8Xžk^öfÖI‹a¥¯hnæ–ÈÛ9çŒ\H˜Z°AƒSÇ,pEA&nYƱ¡ã˜¿y󠯥Å1ZªÆÐì ‚víD¯•›²ˆœc^FémlþüÕ6ŠÕb m[:š pèZø¥¾gÇèûØ~ð2›‘¼fÓrš<&’ÝJÊ(-Ý7}¯»Ÿ+|ÙÌ%³E3YD%…™"x »ºÀò Nˆ(úé]]KLêºVÅ L”ÓÂnÐ@ÛŦq~Žåm¬4ãXuKEŒÂc|”Lt¯´0¸‚yÈ:ßlu]7|Ãé„*êOãØØ‡Ôå·ÕtÝó¦• Ù&7ˆ¹Žid6-79ígȧû·z—•¯T¬ùÿvïRò´½7n>Ë}AF¹™8kLçÝ´sZÖpÔ ÎÌ©ûÎ_L&N‹˜ìÊŸ¼åôÂveOÞrúa0:t\ÇfTýç/¦³*~ó—Ó Ó¢æ;2§ï9}0™S÷œ¾˜L1Ù•?yËé„ìÊŸ¼åôÂ`t蹎̩ûÎ_L'fTýç/¦§EÌveOÞrúa;2§ï9}0˜:.c³*~ó—Ó Ù•?yËé„ÀéÑs™S÷œ¾˜NÌ©ûÎ_L&N‹˜ìÊŸ¼åôÂveOÞrúa0:t\ÇfTýç/¦³*~ó—Ó Ó¢æ;2§ï9}0™S÷œ¾˜L ×á´=Ï} 3œãrçDÒIó/jþ¯¥è[ìT}™S÷œ¾˜NÌ©ûÎ_L ¼ëVõ}/Bßbu«ú¾—¡o±QöeOÞrúa;2§ï9}0‚ó­XwÕô½ }‰Ö¬;êú^…¾ÅGÙ•?yËé„ìÊŸ¼åô εaßWÒô-ö'Z°ï«ézûfTýç/¦³*~ó—Ó/:Õ‡}_Kзذ~ …Im¦DënÍOöTÝ™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ·ë õEûf{¬X7Õí™ìU™S÷œ¾˜NÌ©ûÎ_L ¹¢‘²E†Q1ìps\ÚvÒ7l·—1Ù•?yËé„ìÊŸ¼åôÂ`^¿  ‘î{èiœç—:&’O™|ëVõ}/Bßb£ìÊŸ¼åôÂveOÞrúaçZ°ï«ézû­XwÕô½ }г*~ó—Ó Ù•?yËé„jþ¯¥è[ìNµaßWÒô-ö*>Ì©ûÎ_L'fTýç/¦^u«ú¾—¡o±:Õ‡}_Kзبû2§ï9}0™S÷œ¾˜AyÖ¬;êú^…¾Å,´ÔÙºšž(soÈÀÛù—=Ù•?yËé„ìÊŸ¼åô†³äSýÛ½KÊ×_7 éæ…ñu$£;Ko˜iuÈ"?ÿÙanalog-ce-6.0.17/how-to/batch/task2.jpg000066400000000000000000000607361406366436600175110ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄR !1"A2Qa“ð#RSTUq‘’±ÑÒ34drs”¡²5BbtÁá$6¤Óñc‚¢C%ƒ„´ÃÿÄÿÄ&1Q!"2A#aq‘ÿÚ ?Ÿág„÷Ú&§­¤6­[¤„ÉNN|þj¤öý«|ZÃП¾¯5‰ú¿†ŠÝJòç~—ÑæÑ7MI"yvxsýÆ î‘Ë}){½Zò+Ky`´¼‘šdý¥uR*0qÀ üsνTч)™Ï‰G µÄ†9¤±´X¥ÏFínÀ>8ñÅ#Ûæ­ñkB~ú²³²¶¿±ðwL¾±TõHÜêðÄáx÷„ýõèðÛTø½¡?}'D½»‹ÁMk£º:ƒ¢Û!d9Ç“=ø©z«èRK4[äêt—£í —ݴ· Ú>~­LR¼ÂfÓúò µ‹‰DPYÚË#rD€±?¸O·MOâö^‹ýêçMÓ,ìõ&{8º%‘Ý \$‰>D'9 v‘ždÀ–Öí-í:ªÙǾÝâÜ·y'¬óŽKƒÃo1ßR»v¶0LÚ#•ˆðÏRø /Eþõï·-Kà,ýûÕÒ¥¦« &”I¯¤eú4ìÆÐñp3ÄgùgD˜v)'·‰'iõCjò:ÄÈ"àÅAp3žeg4ýªü»Aê_gè¿Þ½öߨüŸ¢ÿzwØËY5 “žé¼ ˆZ) “’Ø2${ÃÿË€óòsYÒôÍ2ÒñÖÕݖô¤l aó€OÏÀdÕþ¼ã ›vm<)Õ^'‘--š8ñ½„…Ï,žêO¶íGà,ýûÔëë8l´mf+[}¶ÛmŒSåOÄrNÝŽu’ªR–ü&ÖÖƒÛn¡ðž‹ýëßmz‡ÀÚz/÷¬ø¥ ÞÕ:g]šáUÿÀÚz/÷¯}µ_ü §¢ÿz ¡Mªtk·kïmÿiè«Ñá=÷ÀÚú*¢¡Mªtk·kßl×ßkè«Ñá-ïÁZú*£¡Mªtk·k¿l—¿kè«ßlw¿k誔R…Mªtk·k‘áçÁ[z*ôxCyðVÞŽ©Å(SjíÚàxAyðVÞŽ½ö~ïà­½T P¦Õ:5Ûµ·³×oèëÑ®Ýü¿£ª¡JÚ§F»v´örëàíý+Ù»¯ƒ·ôuV)B›Tè×nÖ~Í\ü޽öfçààôb«(TÚ¯F»v²ÅÏÁÁèÅ+ÙkƒƒÑŠ­¡Mªôk·ke®>F+ße.=ä>ŒUx¥ ›Tè×nÓý“ŸÞCèÅ{ì”þòF*¥ m×£]»MöFoy£ï²{Ƚ¨B”)·^ví7¯Íïbôb½ëÒûȽ¨b”)·^ví/®Ëï"ôb•×%÷±z1QEz*mÓ£]»Jër{Øý¯zÔžö?¨*0¥ m×£]»KŽY$ s … qO/îóR·?Â[ú?ö¦¡üŒŸ¬¿a¬gR›¬tBïÚïXÏQÁÝ»?”è¶îè·qèóþ,c…y"©æ2Õ]_dÝÛ#!x¡Ü̉Œd`㟠åõÐûSVÿ.ŸÒõÏë6üj¿­Ÿ…Þ Þë¬W6²Ûª-º!3ž'¸-R{EÕ>Ïë·á®7Ž?U~ÁMÖ«ëÞ±ˆI¤KŸõO‡³úíøi^Ò5O‡³úíøkEkÜ\Û«< ÔþÏë·á¥µ?‡´úíøk{EOqsn¬´½Oáí>»~ôx©|=§×oÃ[º*û››uaGºÃÚ}vü4¡àv£ðÖŸ]¿ n(§¸¹·V x¨ü5¯×oÃ^ûPÔ~×ë·á­µ÷Mº±CÁCá­~³~Wµ-Cá­~³~ÙÑSÜ\Û«<¿ø[o¬ß†½ _ü-·ÖoÃ[)î.mÕö«ð¶ßY¿ (x-ð¶ßY¿ k¨§¸¹µVKÚ½÷ÂÛ}fü5ﵛúÍøkYE=Å×n¬ ðf÷ámþ³~÷ÚÝïÂÛýfû«UE=ÅÓj¬°ðróá úÍ÷W£ÁÛÏ„ƒë7ÝZŠ)î.mU™^|$Y¾êôx?wð}c÷V–Š{‹›Ufý€»øH>“÷R½»øH~“÷VŠŠ{‹›Ug†…uðý'î¯F‡uðý'î­ß¹µUÑ.~¤ýÔ¡¢Üûø~“÷Uíß¹µU°×>þ/¤ýÕèÑî=ü_IûªîŠoÜÚª—Ø›Ò~êôi7þ/¤ýÕsE7îmUN4¹ýüIû«ßbç÷Ñý'î«z*oÜÚª¨i³ûèþ“÷W£M›ßGôŸº­(¦ýͪ«Ÿ7¾é?u{Ô%÷ÉôŸº¬¨¦ýª«úŒ¾ù>š÷©Kï“é©ôS~æÕPEœžù>šôZIåO¦¦ÑMûUC²yWé¯E³ùV¥ÑMûUFïåZô@þQR(¦õª˜·”Rº#æ§h¦õª¢\ÚË:K¹ äôD ß>AóÔb§ùRûÒ/á«:+yŸ2ÔW ±§õHo&7ÌòE†iH'€8ä–¹ÍuKÏ̧ý›}•Êé6ɧ½7Ž?U~ÁU>Í-¾y44r${•Ôàƒš¶›Çª¿`ªo ?å»ïÙÿ­e©s6ð›\Qý¥?ÓþÔÚxU®3u)þ‘P¤NÅC^ž·0ÌNZ%ð[eÙ)þ‘÷R½±kxþÒŸé]æ<óùé{kz\òŸí‡[îÔfúhöÁ­ãûJ¦¡l¯vyi Êg¶o?Ú3ý5ç¶-kåþš‰Ñù«ÃÍûé¢ Êw¶kåþš„×Ê3ý5e<ÕtN>k_(ÏôÑíƒ[ùJ¦¡Í+£¦ˆ\¥Ÿ5¯”gúkÏlßÊ7MDÙGGߌwÓD—Dð*êæ÷D’âòi%—¬²ncýЪ@ÿìkAYÏÆßd¥?ôGZ:ãhĺGº•ËÚÚt‘.ÒGî⻄ŽünÎ8gÅA½¾¾ÓcŒÞOhQÝapDR9Ên$à ïâ Ì­a$’ÇdPM3ôˆê"ÙÙe`à̹Q‘œñýõ[-†¡¬ÚÉ¢Ò[2îL(†ŠDàG9íääã€s53QÖ`·´¼0>éàŠVMñ·FîŠIP܉N@9à|†¬!ž9÷ôM¸Få Ç Ž`üráÞæ VͤÜIkwd·ª–·l/C— &âw6x€\€ãÏ3­-z®øãø~Xü—”ïy`wq°*ì¼#‚wF¸rÚCpªQ‹.âáÉáâ £¶@sž"¬“Pµ’ë«,¿qPLl˜sPøÚHÁÈ<ÔÐöØ\Ú žÌ¶+dÑñU^xñ8qž\Gvpk¢Em©›µØéPÝYzbÎI ÉÞ;Gð<òާh·j^A":£7Dû˜|mÉÈážð)µÖ´ö†)„²tr§H¡|*w;pì)Áí6žêŽ4ë©oï ²Çœ—qÎ&]Ê,x!·` ÉŒÏå“ì­’ZÇv¡Í,î E’è Œ§Éí·=ÝÜ8q SëZ}¼Ž’Ë ¿/йL¢–` ¤€­Àð#<Ú…ºË ?L†eàu^.IÅɫعá3J„-(}Ì$vÆYxŒŽÐòÓÒ^ÛGÔ¯&Ó=9Ú{@ÿ¿…V®„ý1½Ú‘iÇiˆ±´+£ ý®ß“–Þÿ(Ä«m3m½ôW³u‘|å¥ìì1ª<»<;ñÞO:í·OÐtžéÒô;vŸgI«Æ£¶µ§ª$²FYÂ’G$‚@ Fxí8áÄŒ žtýÉšâA(‰ÖIcì3HÛ½Ðqì‘ÒJqË·þMÙx?Õu»ßi×Vèím:;RUâ7>ëÏü"‚u®§ Ö ö±!`Y„˜=ìêTðìW‘ãχdÒm5ööa}Þi^ݺ1Ù }ädçnclwò¢ÃLê7R̳né·ïR¾Y^EÇî‘òðåÞÝÖ‹÷77 'G,¨½Æz)S¿ŸÉÅ×cüF+¬ÃÉ-åÄP[ô’$a‘³„tŒ–9Àí“ûŠž5 êÖ]¸i‹1#£X$2 c9@7kÄï(¦ntXä6K Vh¨‰·w’'9ÿÚÇïóqK™5 o­n£Iäv>ëu R5#Îb9ï<;è ;Y‚âÒÌÎûgž(™öFÝ;¨!KrîçˆòŠš¥“ÆŽ³å]"u;O+mŒòï?G~* ¦„öÐCl.•­ÔÂò‹¶Ï@mØôk‘ƒßÇAàý´=_k~FRçí Û±9ðÛÑÃÇ¿£ãã KëkÍý^MûqýÒ2&æ§ 8‡k®ÚMcks/Iž•—£vÞÇoexÑÀ 8T>ÎKN›¤¸éD¸›@òœ{ãÌãž N`ûëkÕb»QÚ­œ»¢Ë4K¸.Ó‘‡Úç$‚ ÁÀåAay¨ÚÙ022“ËÂ6l"XœÈçå¤Ýê–Vsn&Ù!Û…ØÄ’ÛöÄÏ#ã)¿ÓRúRe‘•ÚkfUq&Ì|Û|õ="sªG¨]^¬²+!*ì^ÊʸI•ÏxƒÜ@eñÜB²ÂÛ‘¼Ø Žx‚iÊ‹cjöi$fUti$v0AyÏññ€ýÇËÂU@QEQ@QEQ@ÍçæSþ;ÊåuÕ/?2ŸömöW+ª:ôÞ8ýUûSøOÇÁÛÑÿ·þ¢®&ñÇê¯Ø*ŸÂ_ùz÷öê)ŽTÉ”ãUn ˃å«À™^Yþ^¾¿¾ží6ÎkµãÕyYÛqˆqãNíòÿ3H°ËCç#×í©aGv}}EtŽɤw`ã—}+£Ç“‡/':x ÿ·¯¯XR{ý}sëš©”q'__-23%HÙóúúúæ½ÙC(ý ä÷q<«Ã û¸zñÿz’W¼ƒûþÿ_åGGëŠEÙ…åÃ__7û×¥'Ë%Jèø÷ƒûý}M!…òwðáëëû©“['‡óõõ=Ôt|yòáÌÓËò9ÿã×ç†îî¨jlü t¤¿ø¯ê“Àñ·CaúKÿJUÝyoö—zðnânahnaŽh›šH¡ïäjJ=KÁí †[ÔŒ1äè‹–*ÜNÌsóÝŠÐS/im%¯U’Þ·/DÈ `rypÀ¨¨k}púD— °õ…‘áŽÕgY yžò8)nd ßÞªùõ­@ø[x§X Nã ¤nqƒ½ÔÅù3œ‡ÚIÅí_tõ~­ÐÇÐlÙÑmvãÇ,cº›{ 7è7Ú@Ý[cSÑc/“åä ­´Õ/§Ô½ª­›Ï,çjñBà ïËgaá°c<ûâ/ Ù€§µÛòàcùl,Öh¦[H°¦ÈœF¹Eå€{‡‡°³~ƒ}¤ Õ±Ðf5=1âù9^J÷ÓÞ{#mig$tË+4±JT––ÒÛµ¼¶ð¼.K4l€«rI?ž‚–ÆY­&[H#‚ ú‡D𪖎%è:B#ñyã9ÀÁcÀó"ë7‹¤ò sä)r0Œ:÷ÆqÏk );» mÎ<—QZ[CQÃo i -¢œä¨îñÒi+af>ËH¬ç§Äj:\çÆòó<ü´+¬^ÈJ-ªÅ'Fï¶e(Fæ¢O2—Œº0šn}kPþÞ)ÖӸ©œ`ïu1~Lç!ö’Añ{WÏ2t$1·J›$ʃ½xð>QÚ<<æ›{ 7è7Ú@Ý[cSÑc/“åä ‘E%#H×lhª¤–ÂŒq'$þòI¥TQ@QEQ@QEQ@QE Þ~e?ìÛì®W]Róó)ÿfßerº£¯MãÕ_°UG„Ø7©þ¢­æñÇê¯Ø*§Âì;®~(åóŠG)<9ÂGÝŽ~¾¿ïU”x—W_à‡ã£©ê+¯ðCñÐN¢ õ=Cåuþ~::ž¡òºÿ?ê*SÔ>W_à‡ã£©ê+¯ðCñÐN¢ õ=Cåuþ~::ž¡òºÿ?ê*º[{ø¢yWE,qd;¿ùÒ,àÕnlmîN­}ÑV³xãõWìUáö%Ö}èûE#”ž5åž~-E½µkµ.Ÿç©‰OU‡“õWg¥_s6O’¬Ñ>žtò‘Èã½sëÿŠPL€ÑëëÆµÂÿÓ;FÚ¼ÛÕHQ‘Þ|¿Ë?¿è£iâIâ8œñõõòÕ m=yŒ)=õ)cã€qŽ<øúúò¤Kèyrò_íëßBeqɧvã»Ü©v˜hŽywþêy£Ú¥†G_50F0ˆð¬‹±‡:Ï_[Éap$Œ§ÏZ{fn öG¯úU„Pn>jÍãÂĤi³u‹`ÄóòÔÑ/?·×•Uø4¤ÀpG3åóUÞÌž~~ukæ<¦pÐx:t’wcÿÕjΫôÛ¥mÿÞoéZ°¯©ö—¦œ ê~>Ÿþzëk7Ok§¹„°šB#Œ¢o`IÁ`¸;¶Œ¶Þ𦓫—ÈÆªÏ×aÚíîï88¬Æ§á”–:ƒ[\ÙÚÉ5´Œ2»cÊqä8ÏŸ û©Zͧ¹ÂÖÒöhá·Ó¬Yb+sÐFnmÜFî‡a*Ü6ìɡʮØÕÃ0AäPS‡!ôVUW¡so"nèeygºŽ)Ih‡ZŽ03ž oÎ2G f¥&¡©É©{†Ó¥¤NclvDLMßû¸Æîìç¸Î}#Wvv{MŒŠUÉ.w öxä*Ü<”A¤jÖê‹og£D#P!uÚ É Ã$@öŸu×të[½›:ÄI.Üçn@8Ïï©=?]Š5Ž(t¤UU‘ÀP96Òú—„óLô²~`?E1Ô¼ ÷šg¥“ðÑÔ¼ ÷šg¥“ðÓú)Ž¥á¼Ó=,Ÿ†Ž¥á¼Ó=,Ÿ†˜ÑLu/=æ™édü4u/=æ™édü4À~Šc©xAï4ÏK'ᣩxAï4ÏK'á¦ôSKÂy¦zY? KÂy¦zY? 0¢˜ê^{Í3ÒÉøhê^{Í3ÒÉøi€Æ“â_ÿž“ú«î#u’ãGÝäâDáÙè_ŒÀž|ÄŸ1–>##6ú^¹l’„]8™gi˜™Ÿ¼(ljþçK:~ºdt£"‚¡ºGÈÛæ@ ¥¹×u–îám#Ñõ„‰Ÿh¢Ç;òÙ({;<{9/jšÍ´7‰/R•#¶|«)ÄŽ#.AâqÝîgšœ†8 NmTi¥™¬tS,ÉÑÊçvd^Xc³ˆà8R¤Ò5ydi%´ÑžGŒÄÌÅÉd<Ô¼¼Ô·ºÍ嵤ת h‹ÜEEU¢YæmÜAè Ÿ6VW7-{=­Ø‡|qÇ01g9q·>o_ž«ám‡Ýõõõ567 Ã5í¬¼Ó wgÍüÓª=yzåûé”<¹ uX“ž}ÿIù½qóWD9· c'éû«Ð¼?˜zúñ¤îóý'4¬Ž^¾¿ïóUB€Î1ëëóW® «äFy÷?ö¦š`£ˆÇ¯¯îÅ6I‰Úp£ÏÃÔÑ%X×Ri×l-w¨È\ëBD+ÜO>怜î^ÒÒ÷l¿aªT´“X¸ÌQtŠyãŸþkÌx‚ ý¦¤°B!¶{–åÏ×ÿVŽò8Ç[”eñ„JÑØÙ[ØD»ßMU8öKW'ÎM&&cÉħèvÝžó+Ëîÿz±ÛÇ|p'ý>zJöQTpó 7gÇqEn< ‹c8c+cªµ: hg:a?ûÍý+SëÁê}åë§ÖuOOÿ=õЬÔï4øôˆ­¯ç¢•ܳÂë!M0¶+`o*Fx§ÉVzŸ§ÿžƒúÅEºðbúâI–[{iayd$ Ö¤F™ä‡BHñÈ8oš¹Z&kˆý-6Ž!O&±gk¢ÃàÁ´š9ÅúÂTtY[ăp@=Õ¡¾¿6Z6‘d·öÖ“In%\ÊcFè•H]Äç´å28å7ñÎ*5çƒ7S5Äz^Ÿotó¬½`ßË)CÒ+±Uhð Æ8cŸ’´šeˆ´·…åÝõh ™Ã`8î›7u¼Dx†í1Ÿ±kS^t-¦ÙtÈÖ±]¸’Q„“vУ3v*9qâq-râ ÒÞCÒÞñºE˜¨X"¸DbP ªIï8N.jÙô=:CÚ€,ÅÂÊê$ÜÅÈpw3v[#´x`š~->Ö®³[eíà†8Ê—Âç%>|ždäʦóÂG†nŠÚŧf–TŒŽ‘ƒ¬[UÎ#ØìWŠàí'žDƒ«ã¤ÜX‡`Ig2g9æ–SÍI;qšj?ôØÜ?C+¸~“|³É#Ìm’Y‰íÉÙˆ#wãÆVdúE•ÇGÓG+lA÷w÷T–N>è8žŸùNWq¦Zܪ‰z}ÈÌVD¸‘n9#zÛsŽÎqÀpà0»+«©ì—Q–úY®"º²dÙbt‘m÷ž‚œô®rW##–ðzF¿²¶Rj–×7Ö‹3—¸nóýE[ÍãÕ_°UG„Ø7|3ØÿQHäs¸Ï>¾¾½õ&>îꌧŽr>__ôz7sé‡ BbÏí§U¸qûxÿ· ˆ²(¯ZtAÚ<|™ã]¢ÞÓwíÁ'èåöüþNtÓÍýÕïàj_A“º@šuˆ!Ñ¿Ä)®!<ÊÖ8r ’žÉÎ~z‡y¬¢7V°C,íÃ#ªÕšÿX—£Wn‹ûįl¬mì#Û’Ç›7M5M¸\aÓH’Y:ΨÝ,œÄyåW‚€©ÈrÇëëó3¿<²Gyòóãëä¡äèãwoîç™õõÅj"#„”}Já’5†1™$£»ï§´ë>§Å{q'¿×îªû+Ëg¹’æyFA삟¯š¤I®ZF;8'v÷Ó1Ê,Æ@~GŸ¯ÝL¬ÂGq̯>ÿ__ßQ7„\Ø)½íæ¼”ËıÈáY×\:„s¥“ÃòïßæZ°ªßÿ¤ŸÛ¿Øµe^/Sí/U8AÔü}?üôÖ)zÈk·’x£(W¸•Q#ü{«ªøÇû§9ýôOÇÓÿÏAýb•¯h³\Ï%Üš¼–á· Ë"lÈU9e•3£˜©ŽVTSßÞé ú„MÅz±dV[ /ÙÂù7.FL„äV‚ßP¾ö¹¢ÇgºãPžÒ9Ø3Œº¢+>Y¸e˜ªg˜é7tÖz Ñ-ųx]§Î‘¾åQ¹e‹x±Ìª;Y#‡Ø1«²Ð4ç±²[´‹QH-"‚34jé…¶€ç²3LjUòRy<ã?†µ|&s>“óÉÔ ÒK@!VV1»##²N'³ÄrÊuO´°K½ÏRŠi–yÀM²ˆ¢”²(-»!£ç€;<ðx¿?ƒVòÛKo åݼsDÐJ"(wDYÈ´§j®ö ·p0^x7ov7¼»[fiœ[©MŠÒ««°%wgÝñ8ÉåŽøOa©Ÿ8h®‘ZHó¸P®íÄö—І^<ø:5èZÙ§KK¶÷Qk±W¤%ŠŽ%‚©È#k`p¨/¶˜½yîcº¹‰du’XQ€I'¹*Œãˆ99`è0›{ˆºåÞg`YÙ•ŽíÚAR®6ð%Ã1á’J®½vúHàÓZ ‹»hîn6»Am¾]½ŒÂŒAÊ®{9yW–ZÄ¢ÊÝ^ ïn¥i¶$AÚ8äÛ½· Ø)¹xÌFÑ‚ËÝ1na´Hî®mÚÑ÷Å,l®ùØÉĸlðcÏ4tXÖ8zµÝͼðôŸñ °»ô¾L†R½¦¸ŒpÀá@˜õûIž7‚9äµv‰MÐ"4J)‡ÉÞœ”¸dŒ jgTÑm'bÒ¹·ˆË>G¯l wƒÏœs=Ò ’xíQ¢cj(íPŒIò6'&í'/éÚTbD–¯(XáHX1&Ð]¸xÀ dc#žp¸ (¢€¢Š( (¢€¢Š( (¢€¬ä—Wñë·êmJ ºŠ8Y#ƒ¡`ËÜ ‡.År¼yŒhê¾ãL[›¡,—W&é+[n6t «q† ©À dqNB»[¾¼†]Ií®Z%ÓlíQUJÌÇ¥ì¾A;}Èx¥OÇ– [ÛÆ¼µîY£º¿¸´6åb,}.N7n÷!œ’;MÀpÄÛ½;¼ô·w>ëÛÜíÙÿÏìðñŸŠm=£ä=…g2%ÕÊ*¼’ÃÙ¶\6é+’{oÁ‹/k—€F ×ßÛ´¬Ï,¨©f#]­W¤v8Ý †QƒžÕvŸªM{“\Ê—“Z¼Ó-Õ™è­äVŒ7¯m†w7%9÷ÖÞŰÕ%¾Q»ŒÊÈ^ "(BŒÉBÁyœ͘ŒJµÒÖÞè\=ÕÍÃ"á阉 ¨ ÙÚ¼X±ìóârI}}6£\Kqwwk,÷–ÂY ¥P¨Ú°§.IÛÍGœO«Îú‰rÒKj=Jö°3 IØ\7zÄüâÅt®ŠÂÎÒÒúîØZD!I#(K(vƒ)Rx8ÈîÀ'#hð‹H- žxÕ”Ú²& &Ì.àAKxÛ¼cæÀW^½ä¶6c­Üô÷-áÙ J e‰gWBC*+\®J“ŠÑÕ}®•¬ÐJ#<)*åˆí™]]ØðæYsÉá˵¼¥X ÉÁ*à#qÈ>/5ä?žO 5 ÿ(ß?¯Ûüüý©µ ÿ(ß?¯Ûüüý óŸ¯¯—ù÷çµsÅ~cýF¤sõõòÿ>üö£Îx¯Ì¨ÔTKÏ̧ý›}•Êëª^~e?ìÛì®WAצñÇê¯Ø*§Â?ì¿Ôh«i¼qú«ö ©ð„ÐîäTæ)š™{@i8dwyÅJh•8*ÓEF3ÀyñëŸ_=v¬¹I½åP±Ég¿×ÿ"«¤‘ä9cøUaq·£e9%»½}yÔ=Ÿ5-3>ƒGýÐu˜¶ðâhP]Þ˜#£|’pâÎùÆî$pÈ^ârIÒÉ¢G4ð½ÅÕÔ‹ Egx¤{l΄Ý„È>ó=õÒѳùÿïôëHü;6¹¦C*Æ÷jY¢YÁE.:&Î$$vN[á’2)¡¯ØG#Ã-ÃI"³äÇm&ÕÄŽIÁ·!QÇ´GÄ a|Ûc}h.ýÎæË©Gvwö°²ò™Ï#ðwd—ÖóÓO¿“å²êIñÏ¿¤Ûû³æ¨‰Ï«ÙGS´’t2çÝ.V<7H@÷<{±Œò5 ~ÞFv™úÜFchŒ†9V0PãŽK´Ip5QðK®[ÍY¶n›¦ãsiÒô=$Žû£í ÛÁæÏF³±³¼T–Ò$ŒHðîI6®ÞÒäwðaÄ$dG³ö°Zû!q{„iKtw‰‘H÷L€B.I$àgÆ8Í;콡µë*.]ôl‰k+HŒá.åáƒÄyEA›ÁÞ–Ñá7xi-návèøo¸pìÀg€ žŸ ’ûÁîµs<ý-´4æ^†îÛ¦ˆ{œi›†Xt|<°ÇÐ?&¿gÖíà·-p%¸HHÑŠ©xšE † œ²p):¥q¨ååžÉû¤¶‹"[G?þ9NOŒ Âq^\{-i¾ûol‹w½í§ŠUcÛn°F{Ô1x9ã‹þÄÜÍ+½î¢ÎÂÞKhd‚>ŠDWÛ–-’ öç‡,öú½ŒòGÉ*I#ìXå…ãrv³ËpB?Gié2kštgµ;ƒ•‰ØGµŠä "îVí6dñÀ5]màÇAðY, {”ˆGÔ캊HÙ™$+¼î!˜!Ú*÷ÁkIå„àŽ;tµÛqj. q¦vôee»G‹ ÃÈ\Z^Cx²µ»3,R´,J2ÊpØÈâÈÈáÀÔš‹§Úu+g‡¤ßºy¥Î1ãÈÏÝ»º¥PQEEPUukw€Û5¼“Ç @Œ²n#,8Af#kvPœŒömj¨Ø_eïRöØÄÛUc’Ù™ã†åVÉÎÜòÎB€_T»´–ôÛt=>Ì]ʲ!c0='eH#a÷#Ćñ¹pãyT×ú5ÅçK›È“®Z­­ç¸½î1ö»Ýžþï!ÍÍEPQEEP ÿ(ß?¯Ûüüý©µ ÿ(ß?¯Ûüüý óŸ¯¯—ù÷çµsÅ~cýF¤sõõòÿ>üö£Îx¯Ì¨ÔTKÏ̧ý›}•Êëª^~e?ìÛì®WAצñÇê¯Ø*«ÂìKŸ˜}¢­fñÇê¯Ø*«ÂìK¯Õh Á•ÎK $ƒûƒ'ËKmÎqŽ~BœHöñ<üµÒ1™cºnÉÞiÙ-íØcf?TýôèŸþzë¿ ïnWi·YÝDCÍm,“sÝ ¯÷‰å»‰µ´ÆUI¡Ý]ZêöÝEs—$‹ë¶GhîËð‹8²ãp]£+Ã8;_S‹JµYå áqÇų·#⢻c¿n+!¨C«CªÛ_Ë¡¯ ŠñGé¢a6ÈO¤^H8sâFkU{¦Ü]ê‰r·²Ú,0âh%›.:°Çb º¾»ëïg§ÚA4‘D’ÈgœÄrÁq„lžÃg—w>ãMÕ£Ôe™ckH.јñ"]øw³ËßP,tÍOJ*m#´¸Ý-É;G¶8žNŒä#nb®7pqxzf§¤Ë±ŽÒî4°·µ-4í Ì[øà#p;Ç}zZ\ê m¼ÛR6·–á¦gÚFPù»yÏv)M¨Ø$N×ÖË ÑÍ!•vÆùkð9#òÔwJ¸Ôz^ã]úuÕ¨ÞHíÉÑí<.ÁÏ´iÍÔ“X%²‚íÓqŒÆc2ñV B`H?ºÀ€ÊF á«Ø /’k˜ ê.©9™ÕBîUe<ùØãŽ Ó§Q°o­‡M³£÷UíïÎͼxîÚqåÁª–ѯ¡‚x­^ ’˦8íCÆc2Ѩ(Ž'>)áÄöðfê=?SIE°¸»²’Þ&éZB…åÈ.˸tLžd¯ÍAs&µ°ÚŽ£n:^¡Ó¬‘ï‹9SŒã8ÈóqCë–½gH†Òû+¹¡8#ÜÄe÷rýQƒƒÚóSRéW àþ©¦«Gºë¬ôNIÝK7k‡ #†x ÷à!t«ä¼/ ì ªåG<ž’g~ïŽ@ Ôl$ë=í³uLõ²©èqœïãÙäyù (^Ú·Quk¥-éed•÷Ã<+=càÔöÖÂ'Ž ÞÜAIw<&@$¹‚6nÚpG‰†™•z³Y»‹"Wå‚ãq_жC¸ä6«e€Ã ³Q°‘åHï­áqª²©1¹m¡OžòÒ_VÓÎ;ÇÔmÖFÚ“™Ô#<gð?A¬ì J-!µ!‘ Xb -ÔÓ £Ycgì7f0D~( 8ïã¹Òµ©uH¢ë <’‰c™†ÆŽ%š8ßycˆn|1AzºƒÜCß[4· ÒC•KH˜'rŒñˆòSW¤ ¦-õ£ÇuŽ‘DÑÈ ;³„¡ž3Ž<* Ò|º·ŽÈ\F¤¶’]×rÅk·¢C±Îcq=üˆ^62Ø\Zø)afW¤–˪@¶DRF\¨æx) c'Éš 0_ßÉ®Oa%²C ,¦arÌŸ^ÎÁÇ)Äg†yš„ö³hZf¦«ý£éùSÀìñG—„RÒâöÒM;M¼Uv& ¦;yö\6ÃŽco÷¼n M޷םm"ŽÊx໳7QÍ#&{Ÿ “Ÿtãœrážtí®¡rú‚Z^Ù­»MÍÙ·ªTüVí¯XsãÀe«&K)t %WŽÆÁíYˆÁbz,y=Ì÷÷Š4x58¥’MNÞÓ¦•s$ñ\3–#’…(»Pdàdã¿%™ˆ[ÑEQ@T'ü£|þ¿oóóö¦Ô'ü£|þ¿oóóöƒÎ~¾¾_çßžÔyÏùõ‘Ï××ËüûóÚ9â¿1þ£QQ/?2ŸömöW+®©yù”ÿ³o²¹]^›Çª¿`ª½|gE¹È>ÑV“xãõWìY­€ÚLàò;¨RC»¿‡šžè0;+š³¶µP¡Š ýñ· xãjìÊ•alw _@ÃNê³\éy»ñÝZÛ\•xüùã‘û«Ë-gOÔ*‚Oy&9çËC–3žŸŠl#Sc´n.|œMŠQ*çcµÀâ|âžèBŠœTÈ ‹/<`·Ì3Y“²mãˆþTßG¹¼ž¾¿M?Ñ» òóÍH‚ß–™˜L#¤<iMåV‰oïF|¹¤Éïùë+…;Çåí¨“+«–Sņ8Џ’8ËÐkh¬† _0…EÓuë‹S†vuÿ˜ÿ榨GDŠÄn«K{P>+7£xGg;ªIÇäßO#Ýä­}œÐÜ&è$ <œˆùÁâ*YHè08Ôya«&QL:ù«¢xö¯–«dÆþ<üÕo|½ž&«Bn¬‹m cMÿ÷[ìZ™Lië¶ÀýÖûŸ¬Ê ê~6Ÿþzë_®xA©û-so¦Í.ØH ‘D§ ¸œ©lïx râ;ì5?Oÿ=õŠ÷Â]"É#{ùQƒLŽåP18ßä7Ÿ§§1Ÿ)7Ûùc(ú°÷óÛØëÖ¢IZRösÉ΃w p Ã~z›‹ˆ­cNÛU#ö™‚¨áå$ ÃèÖZ_UÕ¥E¹¼¹„M³Õ-Èñ€<‰ pQŒd- Öí®µèí’Î;‹h¡s"Ï+BŒÒƒkª±$'HáùE<ñ‰h[^/i˜Œ‹úfêâ+KY®®d0¡’FÁ;T “ÃÍXù®/¥šh¦}Hê±iѬ*ÆnCÌ¥ÙW±µ™‚à¸îÍ5wÖnôÝI,½’žåÞþ;€Ý3DÑ™QSwc;º v¹÷n¬£o‚E,¡€ ËÚR§Çw}üÇ %‘ ‰å•Ö8ÑK3±ÀP8’Op¬²uα/²Ëíß/SêÝ&wõ‰¹ã³½Þ—±6ê­GªÞ^ÞAl—!®’â·è¦1ìèdÝ#7B70Œö@ ¶ ñ²$;:€ÙFÚr¤@ðÏ1ǘóŽ`Ó•’=7]—­{/ìNóÑô}c¤ÏCo³Å÷L~[9á»;»X¯làÖD-w{-ñ½K«DèÃ{˜ ˆUì°ã&y… ‘ƒ“Ayw«ÚZ]YEËÌHVYeÚ¤ ا*~Š™‰;1q‘Œ7 µ’® Y/ý–Ûô±êý&íË4 n#²{{'Ÿµ;§Ç©ûcw¸¹¹ü¼»âêòô}k£í—è¹tg°»óÀÿ|Ð\6¯h/žÉzËÌŽ±¾ËY]ˆávŽ >« ÎZ»ÛøM¨t²êQ¬×HR$³/€Ãî.#8â÷€x÷Õv¥%üM;\¾ –Fà,3 “i»ŒHoœâ-¼v ×5ÄIu«>&‘E\*¥A?K¯ÓOV_M&¹æ;Ób©(­s£¸E‚wãtLdàñ#ËËÊ8ŒŠªš¥œW¢Õäq&ईآ±ä¬øÚ¬r0 î_(ÌÚ;µ×îÚ»Ýsy¤"Ð<["Gf“oe€WÀÞ8ªð9íÅæ©ge(ŽâF ·s˜F¾ùÈ"ð<[ò#Õ,å½6©#™7ÆÁ‡5WÆÖaƒ #ky)5¡$ÞÊtV÷/ìž––öØøÉî܇¹þQ8¾ä8!C=¬2[Üî³Ôn®æ"+Ñ0œ©VOH•%¸òàprj–q^‹W‘Ä›‚’#bŠÇ’³ãj±ÈÀ$¹|£(‡YÓgµšêÞò9 ú7xŽð\€B®Üí¸wn5åö‹4Yhòéæªâ ÄqÏ’±30­–á•ãt7^ã#u¸«y¿óOêšÚÌ×:T±Ço& Û°ìd1ÿZçç ãùêG²W¦îe0©ì¦x E…uÜ%˳©CËfIÚwdÝS.äŽs¹é}ösŸž¢#ˆâ+2ŽfCH«½3Â;»6P$. ÷±Èù1YÚô;é×ô_ m¯ ¤î¡ˆâí?»¸Ö—¤I‘ŒdàrÅpK6™çHâ'{6U°M}ôh­íey®9 1"š êdU Éž àãÈp~ƒNVrÆÒòÏM·±Xa0Çñ ïwd®Tœ âùNêu—S.¤k(P:¸Ë8-‚çAnJåJgEÑ‘Ëu2–TÏ2qäH¡$IEGVhÛk…9*pàƒûÅSÞÀ×:½†¡ßBÖk"˜Æâ²‡+ܸaN<ø=Ø-XZKio|‡SÍyqÖt¤%TPêÃogà;³A¡¢¨Yu2êF²U«Œ³‚Ø.qÄ@`6ä®T¦qOÊ÷]içƒQYHËx׳ÀŒ*¶w`ñcÃ#†AP·¢¨V+õéÙÙn⤳´ˆÂñÊóS€§Ëý«ÝEqÒ\j"xÄA}PNâw’%¶í08Ž ·¢¢õÅÿÒßuqÁô·ÝPJ¦å%P²"º†V†@ äœî¦zâÿƒéoºŽ¸¿àú[î •EEë‹þ¥¾ê:âÿƒéoº‚UB“VÓ"½rj6‰tX(…§Pù<†Üç'#é¥õÅÿÒßuUÇo4:•Õä:“*ÜN²µ¹@c "!Ïgvpœ`ǃš-®/m-e†+›¨!’vÛI S!áÁAæxŽ^ZöÒKײK¨Zê5Üð‰u8•æôŠ©¿´[ßdÿâ:ý’Úr'f:N×.?”åמˆm>©ÿ‡«ÞÏwÈöºN—³Ë†:^áóð f½´Žõ,žêº‘w$&@‡!y‘Àýš³Õ´ÛéŒV:¥Ìw†er—òâ*ìKtñ„x"„ΓÎù] ÝÜPr8pç^Komuu<·éouˆ±¤2!dDqàAâ[ž*pìä„Û[LµŠnuHcwDòNª$8©'ˆâ9yjLR$ñ$±:ɨeu9 AïžMxâÒÒRHO³6»áEÌ™èøöÕ€çËüü¶ñ]°‰¯Èoe  žò›&‚u®/ø>–û¨ë‹þ¥¾ê UŸ×ླྀ´tÓo:­ÐÉG(¬ Üx0 ð>QÇì6ÝuÁôŸº©n­õ®HõkxГµ:±m£<³ž5v™­‰;ëw=Ì‘’P"Áá•O”òòyM–™ý‰¦ÿ•JŽú~¥"26³nU†ꇗÓS „[YZÛ +`1œQMÞ~e?ìÛì®W]Róó)ÿfßerº½7Ž?U~ÁP5C‹?ãOë>o~ªý‚ªõæ)£\8æ æ)Š›‰Ûà`y}|ôÒ?l,›ÆìãÏôTx'K¨»XÉæ=õz›ñ3@¯’»²°@žLÔkí&Öö3ظ5*“gºcu=Òp8~Èç·ædÏŠqœs¨l£‘­Þ¥¥Áy² sÜ;ë!sk,.RHÊœãr˜Ì3H ŠÈE4@îãYSdæ8ÒJË:Tù)#?=QcàîÁ~ÅÑ\„ #îªû™L—Äžt¤f·£ÞPi¦R<õsãõ&tåV6¬ö® 2ߌÕWw:ö‘8á]“Á=IõM Í'4¸hùç’§ßW5”ÿÓ_ù^_ó²Du«¬ÊŠ(¢ (¢ŠŠ( (¢ŠŠ( (¢ŠŠ( (¢ŠŠ( (¢ŠŠ( (¢ŠŠ( (§d(²2ˆ“ Hæ~úó¤_‚O¥¾ú¡º)Α~ >–ûèéà“éo¾ nŠs¤_‚O¥¾ú:Eø$ú[ï nŠs¤_‚O¥¾ú:Eø$ú[ï nŠs¤_‚O¥¾úas%Ì·½&ŠäÆŠ£’…_¼ÕÞ~e?ìÛì®W]Róó)ÿfßerº½7Ž?U~ÁU>pЮøGÚ*Úo~ªý‚ª|#ÐnÁå³ýE#‘ÎíîšìþúÐÛ\‹ˆÃ)æáÏ××eæQ p9¥Új €¯/%vÎye¬ n|ù⽨<³ûý|ŸmA†ñ&@À__åH31s”..4ªÎÜ€?uôˆõÅÀysƒUÖSåU•ò¯ËWÑ]¢.* n·à¼¶[¥¶h¹ùÅfÞ3ܸ®´núEÛÇgu¯ÖäíðϳɾzÌÔ`™}6@ýõ>æÑíåhå05—È+ž#"¼Î“8åÌòÀâh+mõËÉc·ÝkµæèSòmŽ“rôßr¹Àæ rgÅ¡õ›þ‰R(à–âyBı ÛT£¸8,¡Ô„àá—9<R¦ØI§®Ü=¨ØìëÅ{,s’<çsqóšm“Ihe…’ÈÅ3ï•L;sÉç€ã@æ›q5ÍŠKqÇ.Y]U”ñV#¸9rÉÇ,œTª†=ŒUU^¨U·€C”¸ñJq.,£]±Í‚KaYGrOï$š ]¤~WQÿ8ßÒµ/­Û|f®*ŒC>¢ÊAíˆ#¿²´/?2ŸömöW+®©yù”ÿ³o²¹]^›Çª¿`ªo oƒwÍä?ήfñÇê¯Ø*—Ÿùjÿö_ëAÉÅÞóÛ4èu ¸U|‹·•.9;85¦Sí¯^)²Og5w é:w(¬¸u'6ÎèÂõ™xJFr–û袜éà“éo¾Ž‘~ >–û袜éà“éo¾ Cròê×¢8R-ª<§vOÙôUÞ~e?ìÛì®W]Róó)ÿfßerº½7Ž?U~ÁMÓ“xãõWìÝ@QEQ@QEQ@QEQ@QEQ@QEQ@QE´ìïÿ“sÿö$©µKa«iö¶­ ÷q¤‹ss¹Iâ=ÞNu'Ùí'ãÑ:¢]ÜÏok$±ÂÓ: „^ÿ´ýŸ '…Wꤷ‚Wî× p^ÎVéT­”'³Žï'>âyÓ¾Ïi?‹ùÔ{KFšÎ[d¿Š—;¶"žg-Á”ƒœœäwš-›ØÉoÔ[Afý=½°ß÷wU<“´ÇòàµäU¦§©]ÏÔJCmt†Mï,[ ">"¿ ô£ûçÅóà5§Ë¢XÇ$+©¤–ò©C£g’x q§ºÇ‚ý[«lÓú ûú.…vîÆ3Œc8ï óJ½wÕ®“ÜU'_¤ ½d=^#µ ûìž`p‰[êª:¶†Û³qlw¸vìøÌ1‚xsW˜SžÏi?‹ùÐXÕÿ0xCúðþµ7Ùí'ãÑ:­ðzæÖuéÄÉÑ;Áµ‹`ÊÐhè¦zÝ·Æaú⎷mñ˜~¸ K{Ô³’v¤h„ï9Ç”`~ìÒQåXbXcc¶Ø’ q^Y,1âž»Oiú­Ö ‹vZ pЫÅ.w1‘ø>p?(NHæ7p™m“iŽª–Pc?’¼ñž^]«ô% šJÍÊ–BXSdNe–îO ?e/¯­mšîÕb†æKiá9P@éâáÁØ¿v®08v°5UIäxÒÉW!P€»O”ƒÇ>Z‘Öí¾3×Uu§öö£úýRúÝ·Æaúâ¡XºI­ê,ŒJC‚§#ûÔo?2ŸömöW+®©yù”ÿ³o²¹]^›Çª¿`¦ë3'†¶Ìù[9±Œ °â óÛ•¿Äåúâ˜z+1íÊßârýqG·+‰ËõÅ04ôVcÛ•¿ÄåúânVÿ—ëŠ`iè¬Ç·+‰ËõÅÜ­þ'/×ÀÓÑYnVÿ—ëŠ=¹[üN_®)§¢³Ü­þ'/×{r·øœ¿\SOEf=¹[üN_®(öåoñ9~¸¦žŠÌ{r·øœ¿\QíÊßârýqL =˜öåoñ9~¸£Û•¿Äåúâ˜z+1íÊßârýqG·+‰ËõÅ04ôVcÛ•¿ÄåúânVÿ—ëŠ`iè¬Ç·+‰ËõÅÜ­þ'/×À¹“FÒe‘¤—L²wv,ÌÖèKÌ“ŠO°Z7ÉÃ'ÝUÜ­þ'/×{r·øœ¿\P[û£|‘aü2}Ô{£|‘aü2}ÕQíÊßârýqG·+‰ËõÅ¿°Z7ÉÃ'ÝG°Z7ÉÃ'ÝUÜ­þ'/×{r·øœ¿\P[û£|‘aü2}Ô{£|‘aü2}ÕQíÊßârýqG·+‰ËõÅ¿°Z7ÉÃ'ÝJMJ=™d¹ç¶éTÞÜ­þ'/×{r·øœ¿\P^{§|ŸkèWî£Ø­;äû_B¿uQûr·øœ¿\QíÊßârýqAyìVò}¯¡_ºb´ï“í} ýÕGíÊßârýqG·+‰ËõÅç±ZwÉö¾…~ê=ŠÓ¾Oµô+÷U·+‰ËõÅÜ­þ'/מÅiß'Úúû¨ö+Nù>×ЯÝT~Ü­þ'/×{r·øœ¿\P^¦›a«¥²²œ†X”~Š•YnVÿ—ëŠ=¹[üN_®)zúm„ŽÎö6ÌÌrY¢RIú+Ïb´ï“í} ýÕGíÊßârýqG·+‰ËõÅç±ZwÉö¾…~ê=ŠÓ¾Oµô+÷U·+‰ËõÅÜ­þ'/מÅiß'Úúû¨ö+Nù>×ЯÝT~Ü­þ'/×{r·øœ¿\P^{§|ŸkèWî£Ø­;äû_B¿uQûr·øœ¿\QíÊßârýqAyìVò}¯¡_º‚ÖÚÛwV·ŠÜö \ýžöåoñ9~¸£Û•¿ÄåúâƒCyù”ÿ³o²¹]kæð¾Þh^.©(Þ¥s¸pÍd(ÿÙanalog-ce-6.0.17/how-to/batch/task3.jpg000066400000000000000000001124001406366436600174740ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ[3"ÿÄÿÄQ !1"Q2ATa‘±#35Rr¡¢ÑÒBSUqs’“ð4”Áâ$bt²á%C•£Â6D‚³cÿÄÿÄ(!Q1A"2a#q¡ÁÿÚ ?ð›Â3 P,Òq2Ÿ8]¸ ÿ)Ï•PýCoÕIýQø*CÂÙl ×´9uXúK5/Ò.ÝÃÉL<à;¼Ç•F7ƒö÷­ Ôš•¼ÚwTžåd‚ÍmYŒd) N2GÀàW§ pí—(ç•Ë~?ú†ßª“ú£ðWßþ ·ê¤þ¨üŽ™§éóéZ½ž—zÒCrlQž‰ÚR¤q »óι×ÁÝã\‡LµÔe ™"–>.v*“œ”PTŒv¹ƒ“ŠÖº^|3¼½ºÿú‚ߪÓúƒðSÿ¨ ú­?¨?Fé‘éRhÝÁ±”¤"ßæC %È;_gg<<ÞocÁ¸¡:µ;‹D–ƒ£šæ ,Aáµ¹òåVôúz·´îËÚOòý¿U§õ௿—Íú±?¨?qjvZÖ7ÚůYŠxÐAJ“Ñd*7äþÎmóx+gÖ.ìàžušÎ[XÞWÃ,) ¸'<ÏúÔíé~Ãy7þ^·êÄþ ü÷òñ¿V'õà¬m<Òî®hבªê2Y¶eS‘³nŽ wÔ~•£Ø^¸™žu²yã¶ŠGFí!¡´#ÿ 9qîk£èÞI/˶ýXŸÔ‚¾þ]7êÔþ üª/ìLöVo-ÁžîK˜úPÊ D€vc'8å¸T>§ao›§ßÚôª—‚LÇ#(Q±Ìœþʳ•º¹eß—-úµ?œ~ûùpß«“ù×ðÖ®•§Ïá.£BðGgjn"ePøE¨ÛÙçÄñ¨›û=;PÓÝIJZ\CÃÆNX)æ¹Ï#Ç…1Ã¥ –Sõ3ùnß«“ùÇ᯿–íú¹?œ~ÎM"×Xº·k+Ûv°žé£"+%…ã— 2Ü2}G¸´Ç²>ël¶óˆ·Ü†u,Nóɶày¼ÕžÞŸ£y{uþ[7êäþqøkïå«~¯O熵Üx;¦X5Ì—×’#ºXŽÉ |ðVÉÃc9ñ­þéö–zž—r’É;Ý=ÀÇaB #%H$çŸ1ŠYÒÖä7–þØ~Z7êôþqøkïå›~¯O熹‡kúI¾Ië¼Ç—ÝË—×ë©MsM°“R¼¿Ôn4ë1À’1ðJIà­“êáËMt·âËÛŸòÉ¿W§óÃ_,[Ðù‡áª¼Ê‰4‹$jÄ+íÛ¸yŽ<ÕðWn/ã<™-_– è üÃðÓò½½?˜~« ÈSƒG&KGå{z2þûù\Þ‚ŸÌ¿†ªõ§ŽL–ÊÖôþeü4ü¬oBOæ_ÃU¡_E80ôrd²þU·¡'ó/᯿•OèIüËøj¶+è§ŽL–OÊ–ô$öÃ_*ÐÓÚ? W+í80ôrd±~S·¡§µ }ü¦oCOhü5^©Á‡£“%ƒò•½=£ð×ßÊFôDöÃUúÈS‡G&IïÊ6ôDú¾êûùFÞŠŸgðÔ¬…8pôrdü¢oEO«î¯¿”-è©ö A ÈS‡G&IÏÊôTú¾êxý½>Ïá¨Zú)ǤäÉ5ãçôdû?†¾øõ½>ÏÝPÂ¾Šœ8z92Løñ½>¯ÃO·£§Õ÷T@¯¢œ8z92Køé½=ƒî¯¾9oGO`ûª$WÑN=™%|pÞŽžÁ÷Wß7èØ>ê‹ôS‡KÉ’SÆíúö/Ý_|lß ObýÕ+è§ŽL’~5oЧ±~êxÑ¿BžÁ÷Tp¯¢§““$ŒÛô)ì_º¾øÉ¿DžÅûªêâôS‡G&N޼ߣOå_º¾õÖý*ýÕÆ+!N,=™:ºãüÄþUû«ï[o˜ŸÈ¿urŠÈS‹G&Nž´ß1?”}Õ±d™×pHñœq =õÈ+¡?Ã/Óop®}L1ÆnFðË,®¶Ûºo™µ+LWFi%Ž!4-µð p>_œ*±£èñÛøG ŠM«§¡N•k¦—´LÄqÀó8óÍLhŸ«Ô7ÿ…q–_ÇK,ýJî›æCíJÒ÷}Â@ýHêX( { €OÚ*¡ª^ÝExš}ÝÛiÀ¿¤6gó„LNyy@³˜î ÑrÔÁ'IR;~ý˹pwyÿm1²Ýh²Éö§øBKë׌Ù'¤ùØ¥|×þ\¼ýá¥e¥£Ã+ VîçO›HY°+eã”#.UG<]VÛEðµî’éúË\F»VSv¥Ôqàìù϶½"_,}÷ ºcÖ¸ÍHÍÂ[·Í£xYp®·fUp÷jÛ€9å¸à’g.“átû:g»“£pé¾ð¬9Úà}uè4­|‹ê'yÿм.ëc}ßO·gI×í¹Î3»8Ïš´Gàç„1Ã$1ÛºÅ.:DYÐÇ‘»Ž+ÑéO“”ü‡yÈðw¯Õú»ô;·ô}:íÝŒg±œyëlº'„ÓÛ¥¼É<Ç‘½Ê²®ìè4§ÉËÔ8â¡xž\ÃKnÐ,RGtY·)Ü‘ÀžÄÔ}®‹á-žî¨³Á¿º+•]Øåœ5_éRuìñ¨¼qCO„ý"Iÿ¾2Å­ ©o(Ž× ùûë[hóÅ/´qg£FHLóÀÝÃ5è«ò2õŽ(£Jð˜HëÀ6ÄzÈø1Œa{\8wV-¢x@÷=fH¥iÁ¤3©lŽG;³æ«Û²ÆŒìpª2Oª£ü}¤út_]>F^¡Ç‰t¿ g’9'ëÒ}:/®ž>Ò}:/®œùz‡VBÕäv’KrÎÄ–f•I'¿ªz/ÿq~ú³øûIô辺xûIô辺¿'?IÅ‘ jž‹ÿÜ_¾¾ø‡Tô_þâýõeñö“éÑ}tñö“éÑ}tù9ú8¢·âOÑ¿û‹÷×Ñ¡j~‹ÿÜ_¾¬~>Ò}:/®ž>Ò}:/®Ÿ'?GW|G©z7Û_¾²¥èßm~ú°xûIô辺xûIô辺|œýQâMGѾÚýõôhº£ýµûê{ÇÚO§EõÓÇÚO§EõÓäçèâˆ/ê>ö×ﯾ&Ô=í¯ßSž>Ò}:/®ž>Ò}:/®§ÈÏÑŃGÔ=í¯ß_Fèÿm~úšñö“éÑ}tñö“éÑ}tùú8¢Åÿ ûk÷×Ѥß~ƒí¯ßRþ>Ò}:/®ž>Ò}:/®Ÿ#/GD&ûôm~úËÅW¿ ûk÷Ô§´ŸN‹ë§´ŸN‹ë§ÈËÑŃK½ýÛ_¾¾ø®÷ôm~ú’ñö“éÑ}tñö“éÑ}tùz8¢;Å—Ÿ¡ûK÷×ѦÞ~‡í/ßR>Ò}:/®ž>Ò}:/®Ÿ#/Gp 6óô?ikèÓ®ÿEö…wxûIô辺xûIô辺|Œ½QÇâû¿Ñ}¡_FŸuú/´+¯ÇÚO§Eõ×m´ñ]@'·}ñ1 09ÓädqD@°ºýÚôX\þ‹í š¥O‘‘ÅÝFçôhWÞ¥sú?¬TÅ)ò28¢ Y\~본ýÚ+J|ŒŽ(‹sþë÷ªOú?¬T)ò28¢7ªÏó>±_z¬ß3ë#J|ŒŽ(êÓ|ϬWÑo/ÍúÅwÒœùQÃÕåùŸX¯½¿7ë®ÚSŸ#Š9:>o×_D2|ß®º©N|Ž(æèŸæýuôFýÕÑJsäqFž»«MÌzƒí[[˜àA’A‡y$ú÷z«²•/VÙ«täúC¦Ÿ©G4“Gyl²ËŽ‘ÖÑA|p;¸â¶ÛY_[Ap"º¦¸—{Èaà9r]Þª“¥c¿_vÿ´gVÖ?YEþX~*[XÝ® ·wW)3,f0-œ ¼÷T)ݯ÷ý¼Û_ùró÷†”×þ\¼ýá¥EzlÞXú+î®¶M墾áZë*R” R” W:\ïÔf´ÙŽŠ(äÝž{ËŒcճ뮊žøµYn­ ¶™%‚8È–vŒ‚¬çÌŸ/ê ì[»gº{T¸…®nxƒê8q+ÌsÚ祴¯kÔå†å'œÂ^)C"67Ñåë¨ûæê²y!Žß¤¸•&³“(`¦éOÇ;y ð]h×:•ÚÜ^ô0ʯR—ìªJ3’£92ñR¸Àãœâ¨˜{„êé4RBÉ!M®d°bÁãž|;Ξ±ŽþÎ]ÝÜ·fvȧünF;ë–ý'’ÂÞ+½1¹‡&$vS¶PÙàÜ…óðã>zÓ§éSXG¥¬iü%¡‚@ PYš2Ì8qòúÉ䀒¼ÿ?îÛÝ]6+kàÆ!dRmáP\ð¨õãŸð®kÏðSþí½ÕÕ¦ÆÒx7¦´c2Åo ï;GñVk9ï¶è}©m58¦?2YAþ*2>¿õ`Ô„š„vrF¡å…¦FŽMêUYAãÇ´>º‹³/WõgO—î¨ßRäø]3 ;جE¼ÏÏlñi$Œ²ö€Ïfþ>ªòt/W»Yo_ôÖRinkÛHïRÉî¡[©rBdØqâ™°Ö)¨ØJ’¼WÖΰÆ$•–U!Á›G÷TN©¤êšœr««Â·J¥®äŒD¨êÅz%¬w1Ïkš+\^ÝÛiúl²A ÚX5¼(Ù¢fÁ*£p_ʲkÜÂOÇqŠh$µ–Þkƒr²‚Š#d,vÏðÛ[_VÓÎ;ÇÔmÖFÚ“™Ô#<gð>ÃUØ|Ô:ÃÜ1¥3$mu$äÖ̪duÝ‚m؃·pÀ8Åm¸Ž÷KÔªð,·W-.ëx–iXW="DÇ? Œï?7ˆOÜßÁo§5ønšÓ¢!Œ¹òBw–$ÞH®UÕ÷x?iª;WI H·ð)P ¶9eÆN9y*Ók£Ë/ƒzM•ÄóÚMi%„E¶‰ŒÁ”€xòæ«+ :öÓÁÈ4¹:µËCj‘“1ÊJy2aq€‰ã’;A‚k7rݬ`:‚3ôˆ×$D¬lH}„“‰“†ÑùÝÃ9iØj“VXá™¶4PÉ*ô²#D’goìr8gÉküí÷SBÉJ­ø÷Qô{_çoºž=Ô}×ùÛ’•[ñî£èö¿Îßu<{¨ú=¯ó·ÝM %*·ãÝGÑí¾êx÷Qô{_çoºšJUoǺ£Úÿ;}Õ² gP–â8š UáKcŒšhOH‹$mçk§ñ]L¶öñÁuŽ$‹¸0<ÕÏxÝs²q1†#>ª†}^kx¦Hìq,k ¥b¡†@8BÁåRå1›´OuÆÿŸÚ>êuÆÿŸÚ>ꇴ]föÙ.mN—$R †IüAr<êuÆïhûª;©xAó4ÏêÉøiÔ¼ ùšgõdü4=q»ßÚ>êuÆïhûª;©xAó4ÏêÉøiÔ¼ ùšgõdü4=q»ßÚ>êuÆïhûª;©xAó4ÏêÉøiÔ¼ ùšgõdü4=q»ßÚ>êuÆïhûª;©xAó4ÏêÉøiÔ¼ ùšgõdü4=q»ßÚ>êuÆïhûª;©xAó4ÏêÉøiÔ¼ ùšgõdü4=q»ßÚ>êuÆïhûª;©xAó4ÏêÉøk‘(ßwEafê¬Ë¸M€H$~±A9×½ý£î¨ëÍ>Æöá®.£älEÃ(áêr¡ÖÈ“¦N·1‚Ì%™‡Ìä1üxVøíõÉ¢Y"ñS£€ÊË3Àò í ×âM'Ñî?Í=vC ÖÉmk$HIœ±É9f™ýY? úVŽ¥áÌÓ?«'á§RðƒæiŸÕ“ðÓC}+GRðƒæiŸÕ“ðÓ©xAó4ÏêÉøi¡¾•£©xAó4ÏêÉøiÔ¼ ùšgõdü4ÐßJÑÔ¼ ùšgõdü4ê^|Í3ú²~ho¥hê^|Í3ú²~âkQ]ø¼•%NLj8?™M JTQ»ÔÕK1°s$Oø+ªuË›xçƒÅoªK&|šjŽºVŽ¥áÌÓ?«'á§RðƒæiŸÕ“ðÓC}+GRðƒæiŸÕ“ðÓ©xAó4ÏêÉøi¡¾•£©xAó4ÏêÉøiÔ¼ ùšgõdü4ÐßJÑÔ¼ ùšgõdü4ê^|Í3ú²~ho¥hê^|Í3ú²~u/>f™ýY? 47ҹŦº§2.œqb²9 z†Úê‘BÈÊ9)"ƒÍ5ÿ—/?xiMåËÏÞUG¦Í墾áUWåÛ¯¡¸Õºo,}÷ ¨ê¿.Ý}ýƤVŠR•¡¶Úº¸HbâÌjľØ…žè¶8„gꨯ¾Zƒö7ý¦­³<¤˜­Âv–Ëçj÷gÿv+Ã×Ë+ŸlXªjZ%ŽÀ{šâÝøSµö ƒí¼räñu÷¡ÜLÕ¦ýã²…n®.gB#c±¤Á'† Çdc—"|ü3àþ¹.£áRì°+63+‚8þÜÀ†}fºwu0Çd›¨éc’z)‘£“hmŒ0psƒŽîÙXÔ‡…uëSÿŒÿ÷ ®½§~=Ô³T­Öã`ýâûëMn³ÿïß]hÔþ&ïè¿úÖ> Gx9bÏcæTwšËSø›¿¢ÿë\V*ÅŽ»ufÚ6«ÂeFHÜ„ñ9<üæ¼Ý~ÎO:Y[¼#H Ðu ‹x£ŠdÝ%E êÁr#ÏëþÎÏ µ¸´ýRßO‰zK{žIšcŒ0p¥0§,61üß7<>Iàòj6L¯ê3Û\GŒƒŒ<ÄGȃÌT–£¤Xê[ºÜréÑ¿G3ÅÒ'Ël#pâxã'¼Öº;ÓžL¬¿NºªIu=§üyãGI3+<"BùBàŸqüÞ'^ë¶Do,í"y³#]8·F<¹z>ËØŒ9À=§GÓÚw•í÷ô›³»4Y`C;A9l2w7yÎD²h–)îHÃ)%äÎ8È`[´¼<“‘χ]ÙIR” R” R” R” ùPº® ú}ãʈ$,‘®Ì[ãO e¼Ùà­Ëa5U½råÍíÄÚØ^ÂÑ"MÇHØa¹ÀÚ±¸'ŠœsË'Ò娟 ¿*ôÍa5 2ÄôSMhûCI6äq$ç´½ Éþåá>£wŸª[éñ/Io`ÓÉ3Lc1†¦冯?›æãÇ„}ߌu‹K: =9d¶’$q<€ªƒ·1 Œí<<Å&RlZŽ‘c©nëqÊw§FýÏHœ{-°Ã‰àsŒžóAÀºýÂnšm;6í<ðCÐJd–G‹¤üÍ  ˆ›cĨóä-µË«¾Žkk)näé¢Ý¶ÈÕ6L{–LȽ‚¼8äŽU"Ú]›D‘ôlª’É2•‘”«É¿q‚zGý™áŒ ÔtK IÕ•‹t«s"ÊÙÆs mäp^þjüÑ€à½ðž+é’kf{XÖM³B壗%dlqÁÉÈÁŽß³ÝkCZ²Akh$k{‚Ћ×èÈ =”2F6ò'š»¤Ðôé.zy g;™º6•ÌY`UG™!›<8î'™­¶ºe­¬©,};ÈŠê¯5Ä’ná—'‡a}ž³AmáH¼»…-4ë™-äèƒ?G!e2"¸òP¦uÎ\Çá›FÅ¡éÐ4(VET¾Ã°¥“;Y€UÃOexð%@¥)@¥)AòªZì÷¨º|6BÓÞ\èpXª—nG9ò{‰óyðmµOÔ`¼¼v‰ì`žf›£dººŒÌsžŽ<ææ|õœ¦æ’ÍÍ ,´Ó©kÑGz:xe¼h¥¸t)p]a$¡$ÆØÔðÇÆpâ8\u=RM=o­-,ÊÅc§õŽ•$T1 UPTñÌcÆsÈàÑôË¥¿µd¶µ·†Úåî&êiefhš<âDÎ8çóMXî4û[ž³ÓE»­Â-æíº1»‡«Ën#clnçn3|GβmìOhز‰î'*àŽ‡ P¯{6Ò0q­ÇKð®§©C¯Mo=´=<ñ@–ð-Ó4@ž°ÌÅŠ¤¬g’žKü&J±ff{efvrå‰bûÆ6|¥ ´ävW‡dct 9zC¶å¤“ne{¹ZEÛ»\¶åòÛ‘=i—åÃJÉ„DE²9K\‰^g€Øâ»ÓÊàvœíÏ ïm_oƒ÷z¡ƒµj“‹ñ c–Pàã—˜r­‰£éè0¶üú<í–1¹‘I9âw±bOOÖ«ÝÖâÆæÞ%èžhn"Y2[gLw9Æxå°}Ø æ—Z¿†ò;ÓíôŽ€(»n‹c,¬þ9øÛç{µOá$âÒêkkäk[¥’à ^D!C»Œ/Ì/ ½ä ;}"Æ #•c•ä÷¬’Ìò8;YGi‰8߇!¸žuêø5 ô} õX¥éÆÃ y±b2®6rqጂÔ¥(¥(LÕ¼Òuo5MF)¤’Ý¥P]€€ìxžC‰æx? ¹Õj{mZÞòd¶Öã‰Úaé)PÄã$7¨÷r¤¹Oñºö:‹qc{*XÉÅ# d*2ÛA9 „ò<[çÒº6ªÖº^d"‰V[+|Íq!‰ e"¤4œ ØJžXÏk¶Óµ5€iðk6¶ð²²¬#G1)˜±ÞO]LYh–öö¶LòÎÖPÇæGXØ àÆ<íÎx‚A Ç€¦ížhâ²Öï/ÂtÓ٠ݣܥ¿N¹e>ß+¶Û{@rÝ‚{Ú}ß_µ[¤M°K†‹qxÈ1›ž`sÆ3ƒ5Oh €Ûæ+x:¼k½±Ñå2‡h‹œç `ð';WO´«¬Xd™® p²*H¸†lŽY$ó9 ‚ѵ«¨tK¨ÇK.œ³Á'Xi Ä~ÆC3H˜9$žgÎË]½Ô5{X ¶X¬Ëu¬èS »£ HYy\äñÀÈA i–ðt1Ã)M‚4\I!‰A,ħSÙÇSæÎ ÂOÒ z^•®dg-…,[%HDÊ“ƒ´páA%JRJRJRƒ\ÿ'Ñ>ꌟãäúGßRsüDŸDûª2“é}J¯2×þ\¼ýá¥5ÿ—/?xiU›7–>Šû…Tu_—n¾„~ãVé¼±ôWÜ*£ªü»uô#÷‘Z)JV„—ƒß-AûþÓSÚŒËi:ÞH²ð²ÊP!ãv9Ç1çÅTí˜\[Ç’¨!VF!NF8}uþSëgÿáXg÷ïøkÇÔÃ>NìfÖkMšÆ¥ex‚ßR*î;{0FÒ9 9Ãwqã\~[½b;ĉ–;]ÛØ6U›@ yp9ï<ži.îd`[I°Úz5»•cþ@6ÿ qÉ®ÄðƒVHÖ8ôí9FVgG˜cm^¤Ë?3?öÖ6OºÛá1'\¶Ï>¬üþ® \\ÝßÞ%ÍÜPDcŒ¢¬NÍ»$œŽ_]+¯Cެåw|ºÏül¼_}i­Öã`ýâûëª-ŸÄÝýÿZÇÁ˜Õ¼³r_sF2C‘œp~àð¬µ?‰»ú/þµÍ¤éÚ¯‰ìž¥m o*Ihde%AþªîËPð’ÞA·³»šK†^‚5 ˆÊî² ÌR#~†áÄ æ—‹{k¹å¸v[qI.Q ;u‘K1 ‘ÑmŽÏr3²_Â>œl/'€Ú,Q2…ÄqÇ*.2¤n&^9Ç,Þ¾Ú£ôÑ\\Çp0Âe*X>éI|+–é¤ÈÆ;\À ûiáüÖðØÇ-ËÌ#hþ 7”,rÃp ¬2›¹z×35&‹ïkÖnîgŽÚA(Ž]ŒPK Û¸žJBã†1Â¥(¥(¥(SÖ/-ì»Ï “¬ÓN²‰ÒÎØmIS$qɼ³ÃeUµK‘o3Û]YÞ0‰žA%¾¤–á•Ë>HéPð ÜÇæ68fƒiæoo-Ä“ÝÍÒ<ŠÎ1Üsf>QâÇ‘$TìWR>µudBôq[Ã*Ÿ>]¤øv×PÖ--þ£§GœðG§K$²5ÅâNÇ+$xÈwlî'Ÿà ðÅK˦—ÕzüW·01DŽHÐFREFbܤ-¹AÇgá 3Ø­ÓC;[Çn³\Ý**¤DÄ$Á]å³µ”áCy@dñ­VþYÝí[[yî'iDbe…Ïvp“f1ðÝž¸Œï·ðvÚÞÛªGqsÔÞ öä®Ù€ŒG–;wµWÉ påÏ=é O÷×wRÁ/H+ C¦6ªŒHÇ8Éá’@ƒ5¨î¦Ž™¤ÿÞ °u~Û'o,3ÚGÞIïÕ¤xK§kMofù`†Dí£o@@Ή^cƒ…–­=Ì‘Ý\·X2¤lfFàq¹IU ÀŽFbšD1K–óÏ@ÄDªT„¶–ˆ”¼rR *R” R”*«­jWÚ|ka*Fn.çGgx3¶qÃæóÈÀÉõ‹US5Ižk…ŒÁ{ ÚÏ9Ž[k«E's=²Hà}GÎRÙ¨–[5*Üßk:ÌvóÞÎÉs;G%Üž.1`?Äð>R“æÍÊïS·Ò žÂÚ ÇQ±éÃ÷¤q…p3–?Œd‘æÜV#F³¸mBÒHm/5½’êâæââÝûML|ú>o=Xîô¨/:÷Hò޽j-dÚGøŽþ¾ªcŽ£w;q˜úrêšßT²¿0A)»µ†YJH• ¤«±Ïb0rxŽ_n¹õØtKC«•2ï,÷2[¬ŠâJ«Üác6yôÝh]¥È’âä5ÒIÎe£`@Lc.{<2OϻǩtßñW6Ýb¯?C³ácí`ÊØÆöâ0{_³e§IÔ¦½Õ¯¢gÌ0¢…^Œ.Oh×ÏæÎqXËá%¼O<ÖwqÛÄÓ¢ÊB+E¼²¨ œâ7#p‡>"·Á¢Ao,ÒCqr3«±W”Ï69r&F½xzë<éí®`Ô/'’9e¹xâBbéZA¹NÝÛ¶HGFIáÀPuuº,.ã¼,¡-£.ûƒA³ŽNl<“Þ3Ù§^®¡h.)!øG£“nådrŒ Ôò5Ǫi-<¯}hÌ/ÂÆ"n B½ ÎJ8ÎÙ\qSæäxÖýÊm?MH.%éf/$²?)Ýœò8-Œàgž* R” R”*#QÔL»šâTÌ}JÇp]¼dã“ÀqÇ29÷àqUÝzhÒøÇ>Ÿ-Ê\8×ÁarX.ÅÉÎs"öp !¸öNçŽF³’õYYV¡âèÛ·“ÌƒÜ Žy8ážX͵™Ya!§,Òåò7aÇÛ<8ù¸Ðr=¼¨…Ù0£fNGç ªµ×eåÀh£_ ½$Š®Bóó8ä<üëŽ[¬ÿÆÁûÅ÷ÖšÝgþ6Þ/¾ ´jwô_ýkVmÖƒe,à;ôA{H§x28r­ºŸÄÝýÿZäÒ"ÖáѬ’Î 0#+KpèÇ#' !óžÿ7ð¯7ò0Ë9&+ï‹èZ ͳ…¤Š)0É€2–vù±‘Àc…H]ë¶W¦Þá›qXö,QI+±nãj©áˆ˜ç#œpÌN¥aá¡§\Ùµ¶™ž&p»ã ŒüWu'>‘Ók°ê}>:.àösÚ³/<ÿÿ³ëᮆ9ã?±–¿cÕ쥂Y¡’YV,#…Ù™I²¨eb.w8à|ýæ¤ï´‰'Õñ¢Xú?1Û¸¶R\dŽ\1“VùõK=*³’äÉsmiÓ.âÌŠ­Ûv xvN8e€5Ý× Ô¬c†+¦Ý¨Ku+6[hã nÉ» qÏç«%þ‘×?ˇ/]1–O-ÜíÆc¯§Cj¶*̯rªÈÎ0*S`ËÏ’ wÒñí èo4ÄEif–"ÒÖ9mäI Å@B¡Žv°8‘“°¹ÑÛÝ™îÛ±=¼áPÐá‚îeÜNãœînÚôyßSƒQ½¼ŠKˆIè (…U%P0YŽs3çÌ:Ó.•ÕìZý,ÖIL®í°…ú6p *$ÆÜ­‘ž`Žb—zŕѶ¸’E‘PHäBì‘¡$gjŽËq$r5Ÿ¨&»o.4ëk©nú(,Ò,™ƒ’{Rž€æqÚO£êW7WÍy·¸Ó¡µ¹˜ÁÛ˜ƒ(r˜`áóÄ0íãA"šæœòÉ£³©’Xž8ÉLïØ$mnG’“ÈÛc©ÚßK,Ptë$J¬é5¼‘88p2;-˺¸.|ŽêÁlæ¸n¬\ÌÅW‰„ÀÜGMÏ“Ë48uFÔ//õXÖ6–(¡E„=ƒ!'I>žï1à9œ¥)@¥)Aò£no"²Ôdy·aãFÕÜ÷’8žG=ü"J«¾ ig–ÚòA’X£!­­aÏÀŒ§Ÿ"˜óЈ{ÿ ¬µ«Kù4{ëË{­2 .#"8öÌ;\C9pìœ1ø¸O¨[Áu«™Zi1ÙŽ'“h'¶Ðv‚sŰ8ãT{7G³Òo£Ñ´ýmg–ÎXÒࣗÛÇŠð=…õú­×ÚS]j–÷k4pˆ¶îhã+;€ÙÙÒò ÆP©Ÿ1xC§L±O µ¬‘<½6× cù8Ú:A¸’6àç“m‘‚â+Ž“¡mâ71±ãpæóàð8äAÁ¨¸4YmàÓ’ íedlúNˆA1e€'â3ŒädŒç=V–2ÙÃomÖÛkwÂFc˜¶±–õnxPNICÂÖ(|_Ò±ša™¬¦‘1±ßr(¥&2‡AÎ9÷.¯b×éf²JewhÕ„/ѳ€IQ&6ämlŒósÍi£Ïn4ød¼íô×ÝD_h‰ã›qáÁÈ‘áLJ,z~ ší¼h¸Ó­®¥»è ³H²dIíJx^™Çh;.5¨­5™¬î÷,)o¢U…Ø)f1vª¨8¶<ü{𯵅¥÷G¸]Ao$±‰aqŒ¨\øŽppqÆ‹öç¥Yu(Ùn¬£³»&Û· ]û™`ž‘¼Ìu˨ø%×n&“¬Û/IÓ|+Zn¸øHÝ6´›¸ªïà1ÉTy³Ab‚â+Ž“¡mâ71±ãpæóàð8äAÁ­ÕÉeiÔ·ÅŸð¼:(¶üWzƒóy`y¸Ãzè¥(5Ïñ}î¨Éþ>O¤}õ'?ÄIôOº£'øù>‘÷Ôªó-åËÏÞS_ùró÷†•Qé³yc诸UGUùvëèGî5n›ËE}ª:¯Ë·_B?q©¢”¥h ™¯”º  ³r\ñ5ôI9yyºøå”“ŽË«‹½Fšf¹ki>%S½Ôd€_<ñÃ8'Îrs]Òê[ÞÝCvñ[Åm R´òH~psËŠwñÍAjçV¿Ò.ìâÐoç…ãRÓAŒ‘Ÿ„åR:–—{=ü÷V²¨I"†3™á2l2’:EA™äsÚAàk] œŸØË_ŽöÕ´Å–›Q´Y.Z3¨2à¥FxƒæÇ:ÏÆ6¨uÛn¹èý*ôœ³äç<¸þʯÚx;{•ªÛ»À$½³xPtÏ Vi'~Ó°É™xó8?Ç(a¼]´°K}öö׳ݵÆ$^,§SaÁ”O àqÇvVŠR” R” R” R” ©êÇNŽu—S™”ÞK$eÞ[uTT/q)É?%sáÛpöʨê÷v%…¬ºõ¶<Ì^9%•†}ËÂ9SÍÇŽyðÇœ6Yݱ†ÇK°ñäý”×^Geg,×v±L›JÛmG–PÎÚÄ7i€#9FpºðšÊ ¾­SݳD’#Ûìd}îˆ1`7|*¢ÀùÅcw¥ßêRÃsv¶ÐMÆ#Ž)ZEØ&ŠG%ŠŽ$DáÇ$ç³Ë©ø1½"K­ž$Ü^+ƒ…|ÏöBDPp8G(,sËqy¬æ´`ØÙ1BO¯°Ì1ü|Õϥ뵬3Ù\Äý2oïRëÁIpFåÏvEcaݽ½¼)e§ÙD’ðÛ¹eí'+Ø\6ò8cÏž¸F»“F´Ò§‚;ETYŽd.B®P€ý ã'³•ÉÝ• -^Âúò{[k˜žhv¡Ô—BŠÁÔÅpàg¾¤*6ÂÚîÞúêI’Ží–w+!&9:4B€m—±ÙŽ6ùêJJRƒåVuÛM6¤—K[É.nfAµWvC±â[‡ |þoe˜Õ[¾°–[t[ý+¦³º¸/ÕßGµ‰e”žÏ1‚ðÎ[×´»×·4^êSj†ËJŠÖÒk™ %«GÅFI»vÞ%>Iç®MyŸföî9n!„3å’6…cœÎÇ<ñÙ

ꌟãäúGßRsüDŸDûª2“é}J¯2×þ\¼ýá¥5ÿ—/?xiU›7–>Šû…Tu_—n¾„~ãVé¼±ôWÜ*£ªü»uô#÷‘Z)JV„¯ƒ?,Çô[ÝVÖ?úŒ?º“Þ•GÓ%0jH²ôxÜwc#É<ý_ß œVžñÒçMŽ™’X䔦Ìà7pxú¿hÏ ä™Ï§9ÔÆçpýaáF‘Úf¯{u;Ϋo,@@Æz ÇçTO-ܲ­‘\¡¹öãûÇmR÷U½Ó.좘-Ý;vw3äúë[IÕíÑXö•@ú¿¿ï—ËÇínå1›¨m`çÂ+~þ«&+årÏ8¸×ÑÈ[w_W”¿ß÷Šê¯MÂáýk8g3ǺºÏül¼_}i­Öã`ýâûê6´jwô_ýk ®®4+ŽcT¯æŒdåOue©üMßÑõ®S[ÎÞKKöu‰[tVrȤ7ha•H<þÅy¿‘ߩر%%ýæ•¥É>¢"¹ÈÍ$‘¶ÔqÎÜcv=`g»•KK"ÅÈኢ–!T±áÜ}BªZî¤/tKëh,u6–[wEO˜d@MwkZ<··¼ÉoÒ<ºX‚Ô—é10< À8u™ˆÏZè\ì½æR~,u¥®"K¨íYñ4ˆÒ*àñU* öºûj}>v¹º—ªÎH²¬Iê$†Bf@NÕgä8åOýÉ1ŧèÒCwcq>laäXãHaI#,bÛ3€Û7²Pçp£ˆÙYî."µŒI;mVtŒÚf £‡y Vꣶ…¨Mu+K`ÅeQ%â·Xn$Yâ“´À…”/×2jV×N‘ gÆðýƒæŠæžî'Ò„çuÀEéf:TሷsìsãÀòüÄ̆}keo «ÃA}$“C¶Eëâ0Ð œ…a†#Ÿéd×ø³»íÍ„^ÝÜ¥¼:ËK;ìE·%‰õygöpù£¿ÿNõmKSÔ¯ýä { –'æãÎ|㇠;0zn¯aga’uxà0É$ÌÒ¬‚Tg ‚:Lƒ‚3Äš–ÿô餗ÂFYnúëô* Çm·qw\ù±ÄŽ\Ž29õ5q¾4Ö;ÜòôjR•äv)JP)JP|ªýî¡e§Æ’ßÉxZ{‰QRHÜœðڧ̘yªÁU-n n‹Cm%È·º¹wXå$º¯–Àslò<½|s–õá.õáÊžÜu¹ ÒìÌâI:(¢šv2†Ø­¸©·˜òÁ«|rKŠËx•#Ý(…Y†@ã´s>¡Î©šNŸ$Ý…Õä;‰5 6vœCÕä`GÙò‹úùw ™Ö´yogÕæK~‘åÒĹqŽ“Àœ‡qó1âiŽõå»”¸É¯?«*¯ªéWwêB¥ÄÇoJ>VF\´t™Ç‘œÿîIZσÒK{V†å XAм9†]ÎZFyC:“¹NôË’¤œµ¦V+;Õ¼yÄQH"‰ÌbVÆÙIV 3ž ¤qՑƺêK²}6ÚâXì#ëW²4¥J«‘÷Ôœÿ'Ñ>ꌟãäúGßR«Ìµÿ—/?xiMåËÏÞUG¦Í墾áUWåÛ¯¡¸Õºo,}÷ ¨ê¿.Ý}ýƤVŠR• žÂiíD¬·QÂzX†w”AÍ·Éö¡•ÚJʃ#»È©ècx¶á‘ºº&%“½#dëo>qç¬"¶·:`Å#±F- ^ÀœÛ€‡ ãØ«Ý–µ¿ vc½ëÊ,EpÛ˜j:™Ú2OHœ9qò?ej{c'—¨7 q–?ÁSâ#YƒÆa !²HéŸù†A†A„q+A2¹Y¥mŠÄñ1‚Š8ñ G9ÇRx»‹d³U„0N&In”#)$ÉGp®š—ꃠiNé'ìo‡z<—óžJ§®£.Q#ºš8›tjä+g9àim¾jÉ'Ó]n³ÿïßZkuŸøØ?x¾úŠ´jwô_ýkšVÚÇKÒb¸¾{uê(ïÑǼŽ=“€{XïÁî®Oânþ‹ÿ­UmmõXç°=XÍÀ³Šn‡x…¶G¤.'Ï“¾–3,µXÎÙ<,sksZZè*^\[VdtŒ2cqŽ<ûøŒS—¶–²ÃÍÔÉ;m‰$)ðà óÿiýKÆSÛövÁ7Zˆ§Âò4Á¸‹“˜iã†éº¶®µe$°Þà PÝ!e‘à;„‘(í!+LjãA4’$"£«4mµÂœ•8¸àƒüElªM¥½ô–²Évº’j¯e$†3,`ÆEºÊ{Tl¬€ò`üÚ–Ñ㽇QŒJo R-ÒÉÓ3°ø9•aò¹x/™ÉãA?\r ¥¿xÖæH•"FÂâIló¸W`¨zÞîy%6(Ï2$L° ÿº8q^ÿ3¯ ñ>KÛ«_\h°uÆK»ÛhÑš}¢!ѨÇjsÏ–yy¹ÒûÁí c=åý¤,H/,Ò¹à0Ù$“ÀÇö`|ÑŠE¿ƒzÖ‰¥kw:“‡[­>s+¤Û·IÙÛ¸`ÞYÝ“Ìòã›v· ü—¼¶òß– ²B̦"a‘ŽlÞ¼d) lÛÁ/Ûvt¸;YÎ29îõÿÌ~¯š0o¼mÙÒàíg8Èç»×ÿ1ú¾hÆvýcÇ-¿¯u-ïÐnÎ:^;÷~wGÏfîÎwyº*ÔÓ5Æ«k=ÜZ”Vòà ÛF‹*씳ˆø ËìóÇçUîËÚj5Zø=àÅüO-¾›FX®í޳ž*N7/lá—‡,ÈÄ•†‰¦i³¼öQA+®Öel“iú‡p¨+6²ÑtX®—T[Cgºá!{†‘'ÛÑ„;Õ@vF6qS¾I$Þi’Êí$’ZDÌìrX”$ùÍ7M$©JTR”¥”¥ÊªÞØø=ûÍYl iç‘wÉkƒ‘Ì¡Éóñ=ç¾­UOð‚'‹Ÿ¢¹uŠîåØÁlóå€0ªy’<ã†hÎVɸ—zðãƒVÐôÛ¦›NÑã¹Ãôv÷0ÛC4…ípÄàd/ŸÏžH§+b·7ª¶ÄG¾UgEÃ'-˾¨ú%‰M~Êþh%ŠY5 aMð¼!ãîÁ¶7’qŸù¯3ºÜ7òO«Ko-èi`Û$,ÁZb&æÀmà;ÁÆBÇzÝnÜ{f§ŸÕ’•WÕzÿC©uot]ýOfíÝ>ÆÏ.Öß™žÝæè«^µm©Å{V÷×¢5€$Xe™žrÌ\Žˆ?3„ŸæÂ´ÊÙJª¤²Ç¯Ø­Ãê w%üë c0¡Ù1Œý¢vˆÏ9‘÷Ôªó-åËÏÞS_ùró÷†•Qé³yc诸UGUùvëèGî5n›ËE}ª:¯Ë·_B?q©¢”¥h)Jé}Û@³t@FÃr–u\ØNkgŽ?åG5*nÛDˆÛm½˜Ås(ãÈÏ-ß´ðãü8ÔEͼ¶³´ ¶Eæ;ýcÕ]5ãlÌ¥úb$aDaˆb=c8÷𯔍Ñ[¬ÿÆÁûÅ÷ÖšÝgþ6Þ/¾ ´jwô_ýkž7³ñF ëièÌ2µÚä¨02GήOânþ‹ÿ­T ’å§³ŽâÆwF·Œž†!3:*œ`ˆr‰ãÌoØ<¥hˆíSKÒôÈ·j½vk9„¦9/"ðÉl; qóã†yãp¯.·Âˆ´­mµóyÑ\éóɉHdVvãì=§ìáŽ;6Ï./kH— ¶ÖºWMд*á݄ÎAìöFF8ày²,´¨k{Ù_Y6íw›ew蟣¦~;¡ÝÈìâxq<¹Ç&u6©ΩkÿªuK9 †k_!:ã;6W¶¤œœoãÌ`$eMÖ"x¦ŽÒú8e*êÁe æã†ý¼k¦Y#‰CHêŠYT8“€?i$ãU-6y,´ +fK;I섆éúØÁcÙ,›pAsÄ;yð5²ïR[¯ìšê÷£¹)§ÜÜM…^Œ<©Ûâ6óV=ÃF(-µ­$IEGVhÛk…9*pqÁøŠª\k7Í£‡T^‹¬0ƒR–x¢Žd„ƒ'FÈ[{°Tp¸åN^ êw77/wtV {¹awhײÓ=¬CŸ!xðï8…¾”¥”¥ʬ¾k4²Ï%Ñ€Ë<“u:çG%ŸpóÕš©‹VLKÙ­£‹®\»u†HüÙãÄÀgøålžÛ&ã(îô *ù¦ž[™ä´cÑÌ’\IsË3&í¯ßçóyíöÒõ‹h¦èä¤@û$eÈÎóóÏ­-æ×,î¢xÚÜj2@±FâH‰X ôŠp;£ÆÏe“_¸¼ ­"\*ÛZé]7BЫ‡v9³ÙãæÈf6ß5»ÛÛ5÷ú³R«Ój7)st‘ß±D²´N›c’P¬LNü¶ÇÌ‘‚@Æs™Š“Y¿6¶ý¥ÑÂÏ(’öæâãfP˜Xå22ÏŒ bQ¹m+ZerxÒGš6Ü…†Jœ‘ÜpHþ&‚44¡HÊŸHÀÏpÉöšª\ë·Ñj ÷E#5´S[I ¦2 ñÄÑô…Fò3½pPävNr¶Ôo¬wiZ´#Q¼Ç~2´D¶ /Á>Ù$‘ÓncQÌ„çË4:U&ë\»ŠÒú[][§»ïUíquTŒM±ö…Ü8¤c,H;ýb»¯/nì/šÂ}RU¶ø–úU‰^q7Ÿh@7DƒŠŸ,Žd`-¨¿n¤¼ÒÒ]u¯†~ÏÂ"Êê§²ò@ä*RJRJRJRJRJRJRJRƒ\ÿ'Ñ>ꌟãäúGßRsüDŸDûª2“é}J¯2×þ\¼ýá¥5ÿ—/?xiU›7–>Šû…Tu_—n¾„~ãVé¼±ôWÜ*£ªü»uô#÷‘Z)JV†Ûkyn§X`]Ò6p2›>z±EmHâˤž$D‰]Ób,xäž|8u ¤ÏÕµ;y P7m%¹xì5ucÇÁóׇù\z’úY6‚ºƒS–y`Å´­¹ËH…À9ÈÆp{<‡˜ãŠX.g‡¥ª§G†ŽRë ‹Í´Žl¼Xñ$“ç7ãÇ¿•j” axØd2•8=ãßð¦_ÌÏ)«†8îÅ ¢–ÚöîÚe(c“(¤ç°@ ƒçÝÇÔG›•këw—-xáä·•­Ó•F9~ÓÄŸ?ì •ìÇZšúO¢·Yÿƒ÷‹ï­5ºÏül¼_}UZ5?‰»ú/þµªÊy¥é±upæ(›wYxhrìŽ>EmÔþ&ïè¿úÔy¿—MÑlî¢u@¶V¡‹·_žâãŽl¼qÄœ+ 轋I°hãÖ-¢œõ)0ÜàÄdqüû¸Õš¼ºß^×õ-+[‡ZFH¦Óçšx eví“´e{g™cÙµ®~ëZvö±‡§ê›¤èÁÄ|qÚ.»s±ø€ç‡.@‘=J®.·uo‹ÍB[n¢÷W0mHXN2xVÝ#S¿»º°k†¶êú…“ÝÇDÁâÁ X± ÂNx¿…õ)J)JU5NÅu&2j÷–èÊG-º‡ ÍÇ“Ï>ʵÕbïGÓï-/¯n4د.¢yV=êO&$ $dž@žàO ²Éö"no´»Ûi-'ð—Rš)”£F'´%ᎠŸe]¬îc½²‚îLSƲ&FÒ2=õTÓmloôKéÍ„`A¸C4nLr¨U*W´ylEsV*§xG “¦lê¦îàÈRCdoo(cTs g´g+Û6–êm±d±³Õ£:Æ¿+\ر• –xXqB9*+gkòóù³V‹i㺶ŠâݨÈ# ñ¯:Ò4î›Y·‚}Íaã‰í¥Á&U„¶Iåv¤|ÉÏk<9Úµ½FöÕb`Zi½e‰.±€ ©€r#¿*ÆÛ6ÝííšûXiP¯©^‹ë«8#¶žktyB‡ÚfìF3ä°%wC„ìÇoVvŽÎÖ5ž÷t†`¶› ;yB0ü(;•Èå€s‘¦VªUe¼ ¼im&‚Ù^ÕšÞ+»]b’]œ»Æàˆr¨À÷Œ¹Øjzµý®˜7YAqjn÷tO""ÛÊI&Lç<<ž×•Ac­+o]It©‰¤E›'Š©bµÛÛUh¯õ=7NžKu†åf¼¿Kx-¼H­<ƒ$7lÐãÃŒ¾·qs©ÃP|ó“›jÜ#àçáxòÛ,~v ˜··ŠÖ3 µYÞB2Oi˜³=ä“K˜æ†C*£c&)Z6çž ¤í¨MGX»Š[Éìe´’ÎÎÁ/H1—3ƒÒ+†AŒ7<ñ­ë×öV’ê m5¹žî(àDduèD¬ rĈqä+>l±[[ÅiÃmsç$’NI$ñ$œ’ONMn¨­>âÿÆ·v7òÛKÑA ¨ðÂÑùm ‚íó¶¥h¥(¥(¥(¥(¥(¥(¥(5Ïñ}î¨Éþ>O¤}õ'?ÄIôOº£'øù>‘÷Ôªó-åËÏÞS_ùró÷†•Qé³yc诸UGUùvëèGî5n›ËE}ª:¯Ë·_B?q©¢•Ô¶m&ž—eœÌc(8œap@ý§ÄVw:{¥×C%7fuÈÇ«hqUƒò²Ð ²Ãu¼y[ab¹óãÕQñÁÕešt‘öº áy†>p~m}k):fHÙJ…VÞìa†Frqœy³æ5ëÑOº³-%…v$ñ†óü»y¯‡Â«ÿ³wþ]ª'©ÜÙŒxÛœ«‡3·™Íæ=Õõl®^I#7Få,S‚y“Ü­ì®_mrW/H&»»¸U`“L]7 §—𬫡¬®A ;Ž888óäñà0 ÉáŽ<«è°¹;ˆEÚ¸Ëô‹³ŽpwgàGíáνXcیŋvæ­Öã`ýâûëcØL«1ºE,Áˆ]˜b½¬ž‡“˜ c€ãœã,§fÑ,L—O‚Ú [yX3,0GŒ‚v²•'€æ lÓ´»M6Ú-¢P!VUb ¹·7 ¸à`rÀ á}fî+¡a-ŒPvN䘈e‘/°q ðÚ7¼ã|¿þ…q©ÝÁÑõ^Ÿ¥Ž'é>)™[i!sœ3ŽtVšu…–:•µ¾3ŽŠ%NxÏ!çÚ¿Ê;«–ËC³²Õ.5(Æn'Ü tq¦Ð͸ŽÂ‚Ü@âÛ|Ny­µùÚÖâæïN–ípó>%P# å—¤ Û’äx{5…÷„7— Òg’QžXã#*30P6#)|!È%W<’ÃJRJRƒåV_KšYç–ßP×Qg;a–@wàœg¾¬ÕR×§½tèl.&…缸 ÐãqU.ÜŽsä÷æóàÌ®¦ÒÝM· #zJ—:þµE%Öi¡ÆÜq9ØF8ñúùÔÅ……Œzd6ð¤wýU ÞÁ[¥ˆ.Œ0Á>®'¾¼þËMñ–½ wƒ§†[ÆŽ[‡R—ÖJ@lmO |g#…ÇSÕ$ÓÒúÒÒÏlV:Xéc‘P ÄUT©ã˜Æ8Œç 1¶Í·f=²Ëæ¦E½º”Ûcc´‹„—l凬îlŸù}j·Ó¬- è-¬m¡„¸“£Ž%U,!°0@ãê®êw+¦jÖñBÑOog,­*Ë€‰±ú7R8î%OÚÜ|ùË®^Áw„ºlm{#¢ªEs˜ÂºÊU‹2ƒÀÂÙà8dzZe'o§X[]ÉuocmĹé%H•]òrr@ÉÉãZ£Ñt˜ –ô«$†lt±­º“#pǽðŽKKyîÍ’µªµÄq0›¶òB² »pªz'ÁŸ'‡Œ¥ð–$¸’(í¥œ¤ïX²]Õc•‰UǾ.|ÙäFBz• ¦km{w»ÇlD•ÏApÒte ckE*ß ÅHÈǯ‡—„—wË A§@íqoº#ᜆÂ(RÃ#$8rËJŠŸWÿЭõ;H:NµÐtQÊýƲªî 61¿Ž3ʹ—Z¿’øiðiöÆñ:N˜=Û,k´DÝ–èÉl‰—šŽ óæBz•^Â9."ŠîÎÉ^Í¥·‰ÚY¶H¦nŒŒ RUüáÇ>¢l4 ©]é—×ò>c²¹&—¢jJS.ri‡œsÀÎ*ÙU-z{Ø×N†ÂâhZ{Ë€Ý RíÈç>Oq>o> Êêm-ÔÛ=;K’ÚîÞK‰ìma±•î X‹pÄÆP¶DŒ0 þÁʬB+K¨ÚA3%ÌAY¶†ÇÇŸ:ö«‰ï¯8²Ó|e¯B—£§†[ÆŽ[‡R—ÖJ@lmO |g#…ËSÕ$ÓÖúÒÒ̬V:XéRE@ƒUR§ŽcàF3ž@4Ç+fôݘöË/š•’ÊÒHº)-`x÷3lhÁlî8ï;›=û}k}'L{8ìßN´kXÛr@`RŠxñ ŒÄûMs˪Í÷› ^KTi¤X˜1hðÛ lÌT¼0U¸ù;øb×§šE*,ƒ'‘Ó®{ YéÄnpóóìé”ÅÆaswÕÅ´·c£•âVtÁÈÁ##'Ó¬.mc´¸±¶–Þ,tqI²&*O ®á1G&9›¢MbYBÌnØü¢œ?GŒ€|ø•Õ/g´6‘ÚÛÇ<×SôJ%”Æ«„wÉ![ÌÞz¡on¥6ÁØí"áeÛ9aë;›'þcßHí ‹¢è :èãÚ€lN‘Ü;#‡¨Tð’ã2%„fL·dÜÃkÊŒ#;\ald®r9yº£Ö.$¾·E³©Ü]Kj²™ÏH1&IM¸Æb`;\ˆ>ª þ#Ó ú^5œ$QG!¢R!X®Î“ÚówêìöêSlŽÒ.v]³–³¹²æ=õº”z6‡g£tÆÔfI¶‡nŽ8ò8cU_Ή÷Tdÿ'Ò>ú“Ÿâ$ú'ÝQ“ü|ŸHûêUy–¿òåçï )¯ü¹yûÃJ¨ôÙ¼±ôWÜ*£ªü»uô#÷·M墾áUWåÛ¯¡¸ÔŠÊÙ …#ˆ`©s»?8(ö‚ ^;«|w¡QæÊï Ž>$« ?v1»‡yäj>•¡ÑocÇ>¯]as|g‰ã"FË! $¥Øcw3ÿöóc—ñ®%`Û‡]‘‡q©ÐkíEwɨ¬·Bw€ð/Á_ÌÌ[±ùÄ‚<¼õÏjCj¡A”£ãZ+uŸøØ?x¾ú‚Ñ©üMßÑõ¨]6ÇP·´´™Ï¤sF¦)duÂ"ç³ÃÌ<ßœGšÔþ&ïè¿úÕ~ßVº™tÛk “Çj‘'DˆäöfmøÓh‰Éà+]Jú¹fe;n©3¹É] ¥X¼I۫ƲÉ0F%†é7ïÈ<ÁéáÆ¹Ó@ÓC#Ã,îq“qq$Ù]qÛcøÇ.ÕpêžÒµ ·¹·dK˜íîFQå‰_ Äÿí±í(ŸX-WÂAiis%½œìgHn'DÒÄŽÅHÝ¿‡/7ŒƒªãB·6rEjÌ— ÊËq<²ÊëŒò}áÀÃ0Àaå7yÎV%­­¤p̽e•&FiI`ÂWß “HQ'‰ÂŒ#p@Ç ÄgžgÂÛ >öb×OjU|‰ÒnÁf€#'<¸Ï L:=”XÄrHÁÕ÷M;ÊÄ®vä±$€I ñxÖ/¡éα¡‚"ìØ²º«&IØÊH r â²Ó5X5-Ý J˜D•7ð‘>vH0Oµ¸0Ç*¼"¸¶ÒoåžÞ^–'¼[iä ÑJÑ4¥S Û¸*$$ñÉ E*]|C7C6›|’F`LGa‘Ù#S‡æÌ¸È#Ž2Ó56¿Õ®• ,1ÛÄDlRN’d9c™8sÉ zR”*Ÿ¨ÁwxíØÁ<0Í7FÉuu;˜ç=x'ÍÌùêáU]kR¾Óà³[ R6¸»ž=àÎÙÇ›Ï#'Ö3•’n¥²MÖ>™r·ö¬¶Ö–ðÛܽÄÀ]M,ŒÍGœH€ùÇþi«ÆŸksÖLÑnëPˆ&íº1»‡«Ën#óÛs}¬ë1[Ï{;%Ìí—pNz<¸Ä€üÀùJO›7+½NßH‚{ h'Fǧ ±ïHã àd–?Œd‘æÜUŽ[›ÓwÛ.þÝ“hú|é"Ko»¦é:FÞÁœH6¸-œF9 «Œm\-ô‹$ŽUŽW’7Þ²K3Èàíe¦$à~†âyÖ3k6Ð4ËØcv–8xÙJ± ¹N;˜ð@ryóÎøIoSÏ5Üvñ4貄JÑo,ªg8ÈÜáψ­§]En†K ¸ï (KFè˾àÄCìÆ#“›$÷Œ„½+“N½]BÐ\,RCðG&ÝÊÈå9©äk®JRJRJRJRJRJRJRJRƒ\ÿ'Ñ>ꌟãäúGßRsüDŸDûª2“é}J¯2×þ\¼ýá¥5ÿ—/?xiU›7–>Šû…Tu_—n¾„~ãVé¼±ôWÜ*£ªü»uô#÷‘Z)JV†¦#Ý4÷Š´¨µ”Ž2“ŸÿÖª³†(:1—VW œnÚw¨’¶Öôù¬ èµ;¤ˆ¾RyÄgq­ô®³›qþD·§dXn:> c ­Êª×öªÊéÓþá[$Õ` ƒ¬èø=×™ÿñ®%¾Ó⼂Yµ8¬r+‘¬ççæú¼õîéÓÃåò§ñúÝÓÃLuÿW?ÿêõ²´Û±q4…YzK‰œŽ~£[«ç_·Ú+uŸøØ?x¾úÓ[¬ÿÆÁûÅ÷ÔU£Sø›¿¢ÿëP£DÓä³Ó.¶Ú Ñ Ç5Ƀq*½®ÈÉåÈðóŽ$ækSø›¿¢ÿëZô»Èl¬lžmø{eWqò\òO#Èþ@ÆÙôšß†¡osq§I¦Ù -PÄPîÙŠƒçò8ó©=WERé¿â®mºÄýÏ…µ€w+cÛˆÁí~ÌV/ü*²Ö­/äÑï¯-î´È$¸ŒˆãÛ0íq @åòpÄwâáy¨[Øì7FEWÏlDìˆ2ì=l@çÜi½ù5¯;¯í.ì:”’N#ég—*Ã9”HÍËá[°sóðÞx9=íóÃ%ÃE¥–•Äk(bZXÝ\€cÊœÊí’ì?åãÙéÔ<"µ‡O¿’јÜ[E9¥‚EäŒ6T11[€9À=ƳԼ#±±†ä¯K,°¤¥@‰ÄrXÎ=*ú¾_ø{©n—$qy:LƒÃ—¶?`®xu«xm¡7Ó³JÊYÙl¥ˆ"î 3«dƼ ¤ò2o4Õ݉¥¬æÜ¬PI!éì®OìÁäFAm¢AiiÅÊtpÛÀ8¤,YAÀóî!»Çu}—B²žÕmfé<Ó-ÆQ u8óbVÆ8òã]6Z…­þþ«.ý˜'²FAäÃ>Rœ0È88'¨xEkŸ%£1¸¶ŠsK‹Él¨bb ·s€{AÑcvg¸»¹žVè7HûnŠS"ù*6ÁáÈ?Ûa¥Aas<ð¼¬×ÜŒ„’N;åoàñ凜¥ʦj“<× A{ ÚO9Ž[k«E's=¶$p>£Ç]*³ªk7T6©k 2½ÕÜÑ…‘Êòv<ÆO˜Ž\Èþ9ÊÉ7RÝyqhÖ— ¨ÙÉ ¥ãD·²]\\Ü\[¿i dÇÁŸ£æóÕŽïJ‚ó¯t¯ ëÖ¢ÖM¤ ßÄpçðõU%u-kP×E˜¹’Îæéöˆ½ÇÑùŽÝŲ’ã$rጚ·Ï©Ùé05›Ü™.m­:b&ÜY‘U»nÁOÁÉÁâG °–xnã¬f[ûm›F¶¦iÞy ¼såøK:3ŽJ3Ã#‰ÎY÷`ÚDÑÈu[Ósà—;aÞ¶å1³n2Šs·<9ã…t6«b¬Ê÷*¬ŒáÃ¥6 ±lù*qÀí/ÐÌYðšÝ5’PÑZE9iíå‰ó¶wl)\#Ì?;‰8¦]“¶©ÑÇmqsol †Ù ”v‹nÂK)nQ àÃÉï$°èˬ–±ßÞˆL&TH«¡ì` Ã6â1ωÏIÔ-F&£ÒÿÂF!“iÆÅÎXwŒ ‚9Ž#9®V×ôõE,×*Ìâ1´—¥$†#àöîÆ¸ã“ÝA­4W}NòâæîSo5Ôw l›v‰RÇnì†Là68X¤ÚBÖZV{^‚Ûtxƒ+´ñ DsÊžU²}L·ƒ¦’iJl29ŽÞI J ¸U%8«Ö8«1Ä­^…aue ËßÏÓ\\ÏÒ¹ÜoaP ÁP’9ãŽ2e)J)JS5™$ë Ö×ÖÏi,ÒG,76ˆJ¾ó»á6«÷p ÝÂçU›ÞŠV³šn±<¢i"kÊŠ‚HÙ;HÆJù ǰ ÍlpèÖÓ6­j±[^ŽöK«©®.-Ü‚bx¹Fß9q˘nê²ÞiP^uî•äzÔZÉ´Ž7ñ9ü#}U {AºHÚK‹‰RDÝ/“ÑÊvâERBœmJy•q%©jòZjYD–‚I@(nîº!$€±ö[{ q1¹yæ¨Û6m;LÓÉ<†á^9òü%Ç%áŒÄç,û±}-庰k‰ºÊZïv–UQ#¾FÀv¨]£Êä;IóW-Ž»=ýí͵´ZihdèÍùé» PAdÎpÏʲ±Önæk~µcKqy%ª˜îL„Ä»‰Ê/ ÅÃéy±Š müWŽXõ;‰n!yîdKp@­'B‡ÎɱcŽ@ŽèôçXÙeÔo¦‘ž6éÕHÁ‚áT.xdƒ‚ycŽ]fíõ‰tÛd’6|´×&1…H[<¸ü8ÿ—×[çÖ¢C·ÕÒ^Ž€„ÁÞWUä¹É³œãiàßOms¡y<‘Ë-ËÇ JÒ ÊvîݲB8’2OºµM%§•ï­…øXÄMÒW¤ÉGÛ+Ž*|Üê]RÍ™PÈË#2(ães¼e{$gŽ8mlãkc SM_K·¾Ž)"éQX££ ¤¨8¸qò‡@Ñl¦ÓôÔ‚â^–bòK#ðòÙÏ 3‚ØÎyàr© RJRJRJRJRJRJRJRJRƒ\ÿ'Ñ>ꌟãäúGßRsüDŸDûª2“é}J¯2×þ\¼ýá¥5ÿ—/?xiU›7–>Šû…Tu_—n¾„~ãVé¼±ôWÜ*£ªü»uô#÷‘Z)_UYÝQ³1Àd“@¬ÁŠ©!FN!Ê´9îL‰ÑÍíÑ>þÏ>DpöÒeÓ/‹KiaÈY£¼1å™2xmeÆ{Î ¬ÜZÎáNz1:"~Ü"/·ÍÃÔ™(õˆÓdk\` ÒrÆ>pÍu$—LL‚>>m™÷“ÞßÌ{é©¢]V¤‘^{€–Ïmnª‘1ÉQ±sÇÎ3’=DVÊÄt…”É `©±FÀ03ŸãÌÖUu ­Öã`ýâûëMn³ÿïßPZ5?‰»ú/þµâÚ]"ÎÚòA’[ b¯khÓ €ÜaóäAó`“Ôþ&ïè¿ú×~…òÿKý¢“Â)wng¤ßG£iÚÚÏ-œ°*=¥Ã#—ÛÇŠð=…õú¬¾ø;㮓ám‡I‡þ&Û§è¹ö£í Úâxçj÷qž¥ ÷ƒ½oJ6=ofgº—GŸŽY†1Ÿ7Müvù³Ã‡PÐõ Û—Óc=œâQ3Ĥîš9Áe°Ó€ò¸v­” ˆÔôy/¥¸1Ý,QÞ[‹[•h·“Ýä­ðƸp9Î#£êŸž¯{=ß‘åt/gŸ t¼ÿåõð”¥5†‹-„q,¸hímm‹tC´°³àOç#ÕÏp~O^ßXÜÚÞÝE &{Ǻ™Lª›~m”œ.<m R” R” U7W‘§’(ã[Ȥµžà’ÚL÷ÛË/ aHÚǼûnT©fÅDµè5;áŠé·jÝJÞ,–Ú8Ã[²`nÈ@óùêˤußü>οd-<ŒìÇIÚçÇã9påë©JU:1»{³=Ûbö'·œ*:0@½Ì»‰ÉÎw7 m ÃàÕÞ§$òßj0t’ÅÑ ©@G:r.r~ž›>jËJ½~ÒîóJ½†ÕóÒÙOƒá$eNãËGwkÕZ£Ñç}N Föò)."u'¢€¢T•@Áf9ÌÌsŸ0êf”=SCÔ"·»·ÓJÚ’Mîñ)HÕ¤‘×ÿqJã¦`HÈ£‘¶R” R” R” ©kÙ]:Û_Ûêà–V –.‡mà Ñ8åŽXõòám¥VÁ#{­ÖÂÚõb±šIdyìM¸ ÑÈ>b.w8à|ýæ¦5[½B)mˆÅ2˜ HAÈm¯¼pxeN*’¥^ae3§]¶{6žYz>¬ÂNÛ³ã~üp-óy Àèò%¬KÊ­Äs]DïåF“ ¨`H +qúª^”#Á¸'¾š¨¶½vé ˆöã.Â% ªÅ±…„g%Ê»ïìe½©ºÚŸñ!Œ’Fû÷;B8p^g5ßJÞ¡r÷±^Kx¦â%¡!Âl;zA‚IË9áµyö·íÒ¬äÓôø¬še–8G ´ˆÀCq9nHÀ=»i@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)A®ˆ“èŸuFOñò}#ï©9þ"O¢}Õ?ÇÉô¾¥W™kÿ.^~ðÒšÿË—Ÿ¼4ªM›ËE}ª:¯Ë·_B?q«tÞXú+îQÕ~]ºúûH¬´Ï•-?~žñ]…à6W†PÓÄ$`ø?„Q´w îáݶ¢«ê±WVÊœñÊÐìÔ!‚@Ò;¯žˆà§ìóóãß[î-¤}RY%¤óá¥ÎÕd/æ'ïþóTl’4²s’¼z…cQ¦ã·’yì–9U 躌n@³ùÌ9ã…l6PƒqÐÚtÏ ’5´wmhÆãƒœá.ª†¬’FEuS€ãkzÆA÷A*š|R\Û"E‘Óp7 !ÓÝĸ~âk%†ß{@Ò°†«3îp[‡"1p;³PÔª®»øáˆ@°&+Ų[¶Àg€åZ¬ÿÆÁûÅ÷ÖšÝgþ6Þ/¾ ´jwô_ýkftcÐôàHÿ %Ïæã¿ÕZõ?‰»ú/þµÅ¼—~ Z[Ãs%´’Y*¬ÑóCŽßâ9ÔDÄš¢‹if‰–AnC†W Œç¼b±°Ôd¸Ó­n&Úh–B8 ÛUÝÂ}/Á!ctK LÓ{LA´jSLùMÿ¥J*[¯zþÇû©×½cýÕÃJî½ëûî§^õý÷W (;º÷¯ìº{×ö?Ý\4 îëÞ¿±þêuï_ØÿupÒƒ»¯zþÇû©×½cýÕÃJî½ëûî§^õý÷W (;º÷¯ìº{×ö?Ý\4 îëÞ¿±þêuï_ØÿupÒƒ»¯zþÇû©×½cýÕÃJî½ëûî§^õý÷W (;º÷¯ìº{×ö?Ý\4 îëÞ¿±þêuï_ØÿupÒƒ»¯zþÇû©×½cýÕÃJî½ëûî§^õý÷W (;º÷¯ìº{×ö?Ý\4 îëÞ¿±þêuï_ØÿupÒƒ»¯zþÇû©×½cýÕÃJî½ëûî§^õý÷W (;º÷¯ìº¸õ]^K-2{˜•]ãL¨eÀϯcQÞü…yô?Ö‚ÇÓ·pþÿ¿«öáÓ·pþÿ¿«öãW/ïûîú¼Øì¹ßwÕæÇd½;wïûú¿n;wïûú¿n5rþÿ¾ï«ÍŽË—÷ý÷}^lvCoNÝÃûþþ¯Û‡NÝÃûþþ¯Û\¿¿ï»êóc²åýÿ}ßW›ÛÓ·pþÿ¿«öáÓ·pþÿ¿«öãW/ïûîú¼Øì¹ßwÕæÇd6ôíÜ?¿ïêý¸tíÜ?¿ïêý¸ÕËûþû¾¯6;._ß÷Ýõy±Ù ½;wïûú¿n;wïûú¿n5rþÿ¾ï«ÍŽË—÷ý÷}^lvCc\8 p8ïûõ~Üj–ùbG$Š˜¢‚¾QÁ8xðÿ ù'g÷îú½]šç†:UÞ¯µ½”½ ¥êÊÓg v‡Ÿ9#ó÷s¢¦5MUíà‹£Uc4É Ü¸Àc‚yÖÉþ>O¤}õ«)KkgináÛnÐâqì©yþ>O¤}ôG™kÿ.^~ðÒšÿË—Ÿ¼4ª=6o,}÷ ¨ê¿.Ý}ýÆ­Óyc诸UGUùvëèGî5"´R”­ –ð½ÍÂC˹Àã]WR%–Èmm Ü>T™€%HÆF8ŽÏÀó ŒýÑ®µé²'Á·iÏexs5ºêÒýïdt¶Ð¢ìsóÈ'ëä9ûdéãÕÎanŸ?ù™ç­a’N.cN‡{¨Äk´‘žn~îñVK:Û¥˜@¶ñ°6ÉÒ±l¢·šAßUíCK¸µ´i¥´–$FJöH$pÏ0sŸh­Ú|—ºimï.º,lK+i#v žc‘[œ}<®1Žw¥­ê’ø ¡QÂjÆî’E$d“ùƒÏ_kJÈ&‘æ“¢ÚÎ`HBàä(Tb1ÛÎ{Éâ|Ûªee»n2ɪVë?ñ°~ñ}õ¦·Yÿƒ÷‹ï¬´¶^F%3Æ[h}Ëœg¨ôÑÑ#HÓVÔ•#PŠ  C•IOñò}#ï¬*ÑÑ”«jÚ‘§ª‰£¢F‘¦­©*F¡A@‡*壘WõƧíOºž)_ןµ>êWõƧíOºž)_ןµ>êWõƧíOºž)_ןµ>êWõƧíOºž)_ןµ>êWõƧíOºž)_ןµ>êívXÑŽFIõT´ŸN‹ë ÏÅ+úãSö§ÝO¯ëOÚŸuaãí'Ó¢úéãí'Ó¢úè3ñJþ¸Ôý©÷SÅ+úãSö§ÝXxûIô辺xûIô辺 üR¿®5?j}ÔñJþ¸Ôý©÷V>Ò}:/®ž>Ò}:/®ƒ?¯ëOÚŸuÒ}:/®ž>Ò}:/®ƒ?¯ëOÚŸuÒ}:/®ž>Ò}:/®ƒ?¯ëOÚŸuêxÎ/EÔ¿øëÁOÅ躗ÿqø(Œ|O j÷ ñÇúÍÈÕ?ëý‚¢»©JT âÕ~"ßþ¶×ÿ÷Ž»k‹Uø‹úÛ_ÿÞ:£¶”¥A¦òå,짺”1H#i/2ÉÅrÇ4W¥ ù‰æ“—P¨T6âUqåÿ?/>Í]]"îEY¢hÉŽ&‘—pÆv¯Πon.5(.ÚKIc”X\CqÁ;o.âÍäîöÑ`]JÁí^é/­šÝkJ%]Šxp-œcÛYû1ÑæîÒìèþ{{ó·ùÁÇ~ DÝéW··vu…&CØbºu J>5T2üiä“? F ¶¿P°,·6&Þ3½Ü£3JÍ–l’2ë“ç#8‚”¥AáÈWŸCýkïƒÿþÝÓ?é"ÿ°WÏ~B¼úë_|ÿöî™ÿIý‚¨£kÿ.^~ðÒšÿË—Ÿ¼4ªM›ËE}ª:¯Ë·_B?q«tÞXú+îQÕ~]ºúûH®¹4½—×QøQÝ_>VÀÎ8ž?E»«…íåD.É…2r?8d}UÔú”4ŒW°æV »–ðF?`ÜHý§¾±¼¸ p#+áW¤‘AÕÈ^~`§‡Ÿhl“O"™$·2õqò?göÖ˜,&–HCaVFPNàJ‚@®sŽ#Ú;ë4Ô$ô`¬J“ȄٸzùÿEf5YDqc¤-Ì+Jz>Æ1Øïì?ðVµ™U˜¨Ú©¿!Ý·?ÍY=•ÊÜ€$Þ¹áÌœ0xŽumŽüƑƘ‘ŽT·CžÎqÿ3ñÿ›Ô(×åÇI*¸Øèvvr1Ï´Þqæ Æk"‡,>]Ä€0*¡ByûûXý¸ë+Už dê÷²:°œÜOÜ=µö]C¥Þ­c’w•“wÎÇ.Ç?_vAåYvÚÉß-Õ÷g–ÿ* ®âXn5'†æ¤€JŸXåü)gþ6Þ/¾µ©hܬOMêáæïöú«m¦Þ½o´7§3ž9¨-³ü|ŸHûë Γé}q>¥a×U’úÙn 茪'ÛœñÈ¬ŽªV¸g†á7ÛͫÊ0aÄ9zˆ?°ŠÙ@¥+‘$]Ѻ²‚W*sÄü"ƒ*R” R” R”È‹$mçk§ñ]L¶öñÁuŽ$‹¸0<ÕÉrͬ®§ ¨Ä^+E†«^X[ÝxÞ$éâY6õ@vîÆwUÝq»ßÚ>êuÆïhû«‡Äº¯ë˜¿ÉÅOê¿®bÿ&?w\n÷öºq»ßÚ>êáñ.«úæ/òcñSĺ¯ë˜¿ÉÅAÝ×½ý£î§\n÷öº¸|Kªþ¹‹ü˜üTñ.«úæ/òcñPwuÆïhû©×½ý£î®ê¿®bÿ&?êuÆïhû«‡Äº¯ë˜¿ÉÅOê¿®bÿ&?w\n÷öºq»ßÚ>êáñ.«úæ/òcñSĺ¯ë˜¿ÉÅAÝ×½ý£î§\n÷öº¸|Kªþ¹‹ü˜üTñ.«úæ/òcñPwuÆïhû©×½ý£î®ê¿®bÿ&?êuÆïhû«‡Äº¯ë˜¿ÉÅOê¿®bÿ&?w\n÷öºq»ßÚ>êáñ.«úæ/òcñSĺ¯ë˜¿ÉÅAÝ×½ý£î§\n÷öº¸|Kªþ¹‹ü˜üTñ.«úæ/òcñPwuÆïhû©×½ý£î®ê¿®bÿ&?êuÆïhû«‡Äº¯ë˜¿ÉÅOê¿®bÿ&?w\n÷öº¸oí,õVK¸çvQ¶vPìñ.«úæ/òcñV™tÍV&ÁÖaÆiߟù½TüI¤ú=Çù§®«[k[(Hß{n¾N1ç®^£©þº·ÿ(~úËJ’i"½‰ž Žˆ0M€¹åûOÕAÙJR W­ÍÅ–Û.‹¬$ÑKJHBRE~8ãùµÙ[!$I‘À…oqª+=…ߥÒÿ¿:? ¿K¥ÿ;~ ³tÒþ‘ÿ˜Ó¦—ôüÆ‚³Ñø]ú]/ùÛðS£ð»ôº_ó·à©Û½Mlö ¥œ³äªD#9ª ÇÇ—ß[ ¼70¬°Îìë ‚8Aâ<‘÷Ô6ž·>9ÔÙ&„[‹¥Ü†"\ž‚>M»Íù¦¦·ÈÍŒn9¬j M®§~`õ¸mÅÉIf¸–U„êöøŠ2ñÜÇ7às9g}s&§7+½àVx ¹' ŽÑàþO4 0ÍR‚æþtÕ$ˆ]m•n"Ž+wH Œ3cŠão6'„>j“î";hz.Š)H‹1‘î$ƒvCàP6ÞÖxßSQÙé‘éý@Y@Ö»QLNƒm.r{D^'æŠÊ}6ÄpXÛFƒn0Ö,¼sGq$ÐGÛë7rÏn¬m¯ Äç´ÂVˆa+Ác െ¸v=4rõH:HYÚ7Ú™BþY< Ïúèë)Ýö—ï ßJÑÖS»í/ßN²ßi~ú ô­e;¾Òýôë)Ýö—ï ßJÑÖS»í/ßN²ßi~ú ô­e;¾Òýôë)Ýö—ï ßJÑÖS»í/ßN²ßi~ú ô­e;¾Òýôë)Ýö—ï ßJÑÖS»í/ßN²ßi~ú ô­e;¾Òýôë)Ýö—ï ßJÑÖS»í/ßN²ßi~ú ô­e;¾Òýôë)Ýö—ï ßQú’–‰Ñ]£f\e|®#9Úéë)Ýö—悔Qõ $Qa™qžlñä{è t[?£Ô'}cTY­£m°¢D‹ÒðòŽF;»ý\ä4o#Tÿ®?ö l×G¦]¾êÛ¦Z\Z[ݳI=ÇKˆŸpn?Ò¢ºiJT Ù–~‹{k¯2ÛÆòº»SÙ 1ÈÇ*´¨ï' êåZž8OAÔ?ʵËæêú­­Ü‘ÊЬÆLQ4„34dvTÉŽ1í¯ÜÞË–Î;»vHšH6Ã3´¯Çª’Ÿ„ËÆTŸŽÐuò­O' êåZ‚2HµXíÚ{I.Úî[‹¤UåQ1)²{ nXðǼ íáKµ•­ÓdÔã¶éW¦iÒw m$&òº<í8ûu'ã„ôCü«SÇ è:‡ùV æÐâ¹KÉžäÌû­¢U’HÊnI°0I<¯3»ˆÏjj£¼pžƒ¨•jxá=Pÿ*ÔwŸà§ýÛ{«V‘ò=—ý<öŠå¸Õ[yc[+üº¶o8®=Œ:m„ ™Œ ˜ñ‚ (É=À{ø~À¡ëÿ.^~ðÒšÿË—Ÿ¼4ªM›ËE}µכ¶½«3kérO}|ñæ«éÓ{ji^“Jóoj¾7¶ž<Õ}:om4=&•æÞ<Õ}:om36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄQ  !1"AQ“2RSaq‘’±ÑÒð#4TUdrs¡3B¢²Áá56b$ct‚”¤Óñ%³uƒ„ÿÄÿÄ$1Q!2A"#aqÿÚ ?ŸÂÎ×`˜œT´Òº7S²BdŽææþ?¤íûú5R}ªóŸ‹ðÑ®âU•9ð½éšhnHÚ3 ó_Mÿ‘ƒ[„@ùk¥/«Å«"¤§– JÉé˜þS^Öë´XÛ@3ë}ëÕM˜r™œú”wðÛd1Í% #b–û7ºÀ>Úëe‡o˜·Ñ¨:“íVTtTÕô<Ã+¨ZÁPkZFgµðâlÝyˆÕ÷(V ±ÐVÔ>Z7‚2ö²]IÌüÙ@±n=Ö£o‰„þ»e 1¹!’fPÒ:(­´x§q ¾‚æú]}ƒ†xÝL͆ž†’Y¹Œ§s‰ÒûVÌÃhhé1JQLÖa†J*\çZ¡…í.q}òó[k]g`°PbÑÏÅ$†AŠÏ %ù…áØ¼‹_xÓê³6øñ>ëµ'o8¯Ñèz“í[Ã,jHd•”TŽŠ+m q ¾ë›éuò|/ ‹†Xèk*-›ŒÁžÖK©9Ÿ›(Ö#-À纈PÁA€ãÐÑÓd¤ ¥1TÝÎã “rrOî€5Wüçˆ3nÐ ñO£Ðõ'Ú¾ŽbŸG¡êOµc‚VÕÅÁLkgU;6 –YÙÞC{t_žÊEJü If‹<œAõL¨…Ê ³Kóe.ÒŹG—K­LR¼ÂfÓúù ±Š‰DPQÒË#·1ù±íÓú=UýÕΆQÑã8Lôql›#ÞÂʆHÉî!7¸qÊE÷À.[¤§¤â­£=;âÌÚ»“Æ9¶æØé—xçR»v¶0LÚ#•ˆáž%à(º¯î¾öå‰x >«û«¦²“‚I¥c쌿fÎLn‡W}Eía¿uõQ&ŠIéâdîŸ1Æ×ÈöÄæ´qh#[ ß©g4ýªÿ] Žâ^ªþëïmø€£ê¿ºÛØÊY1 “öEOm ¢É9.±‘‘çþ­vÌg Ã0ÊJǶ•ïsjöQ©¡P òè.Uÿ<ã ›vÖÎ⯉ò2’™ÑÇlî}×<ËÛ±GÕu:ºŽ,Š–Ÿ-6Zc÷qÛê 7&ÇSÍmë’ T¥-øM­®ƒ¶ÜCÀRu_Ý}í¯ð4W÷\øY½ªtλ:ªÿIÕu÷¶ªÿIÕu@A6©Ñ®Ý¯»h¯ð4Rú8O]àiz¥DA6©Ñ®Ý¯{f®ðT½Rú8K[à©z¥FA6©Ñ®Ý®ûd­ð4½RûÛo‚¥ê•(Y6©Ñ®Ý®G«<7T¾ŽÖx*n­S…Mªtk·k ÏMÕ¯½Ÿ«ðTÝZ¨ ›Tè×nÖÝž«ðtýZú1Ú¿OÕª ² µNvíiÙʯOÕ¬»7UàéúµVA6©Ñ®Ý¬û5Sààê×ÞÌÔø8:°«È)µ^víd1ŠŸV]–¨ðpuaV…Mªôk·kËTx8z°¾öR£¼‡« ¼,‚›Tè×nÓû'?yVÞÉOÞCÕ…,‚m×£]»MìŒÝä=X_{!7yV ² ·^ví7ÍÞÅÕ…÷KÞEÕ… ,‚m×£]»Kã²÷‘uaeÇ%ïbêŠЦÝ:5Û´®7'{VÞ5'{ `² ·^ví.9d8Þ†5gOåâYf„§êÿ²ÕìdûÍõÆq)¸ÆÓˆUö»Æ/Älsf¿í6Ysl³k³¿ú­mžø‹b!Úžã.ªªºæ®™Ža|Pæs˜ËZàÚÆÛô^^½ÿ☷ü»?•ëÏÖmøÕ]Ÿ ¸7[Œb±TÒËNÖ6Œ"G8êyéT¢âžÓwº½nì}Öú‚Öµ_žõŒBM"^|8Šxz?MÞêË´ŒSÃÑún÷W~‹^Eͺ¸ÀœOÃÑún÷VCXŸ‡¤ôÝî®õò.mÕÁö—‰øzOMÞêú8‰xzOMÞêîÑ_&æÝ\(àn#áé=7{«!ÀìGÃRzn÷Wp‰ä\Û«ˆÄ|5/¦ïu}íCðÔ¾›½ÕÛ"yMº¸¡ÁCÃRúN÷V]©b—Òwº»4Sȹ·W8'_ái½'{«èॅ¦ôî®Åȹ·WÚ­…¦ô«ü-7¤ïuuÈžEͪ¹.Õë¼-7¤ïu}íf»ÂÓúN÷WX‰ä]vêåk|-?¤ïu}ín·ÂÓúNö.©ȺmUËVxH='{ÑÁÚÏ ¤ïbê<‹›Us#ƒÕžIÞÅôp~¯ÂAébéQ<‹›Us}€«ðyϱeØ¿ œûD‰ä\Ú«žW„‡Î}‹èÀê¼$>sì]&ýͪ¨ Sá!óŸbÈ`µ=ü>sìW¨›÷6ª£ì5OœûуÔwñyϱ]¢oÜÚª—±5ü^sì_FQßÅç>År‰¿sjªq…ÏßÇç>Å÷±s÷Ñùϱ[¢›÷6ªªlýô~sì_F7}œû¢&ýͪ«7}œûÞ!/|Ï9ö+$MûUWñ{æy×Þ%/|Ï:ž‰¿sj¨"ŽNùžuôRIÒÏ:š‰¿cj¨b–N–ù×ÑLþ–©h›ö6ªŒ)ßÒÕô@þ¤"oXÚ«@…Ý!e²>%µzÆÕQ*ieŒ«š ÎÈ›Ëp|j?b§úÒ»¬oº¬Ñbo3îZŠáV0þ) dÆ¢YŸ$Vs¥ ¶à:Wœ¯T¬ù”ÿ†ïRò´›dÓ‡¯MݺßPU<#šZ|²h$tr2<Í{Mˆ7VÓwcî·Ô7 ?Ëu߇ýVZ—™»„ØãGø”þìµ³…Xãœħó… Fr6é ò­Ì3—DÞãnh=’ŸÎ=‹.ر»‰Oç º6Þ;ïò¬ò­ésÊl8ß6#7;`Æíþ%?BȾäéMS;aÆïþ#?|í‹úÆ:‰³ñ/†/'æš Ì§vÃ}c?1¯¬gó¨9'‰]S1¯¬gó§lßÖSùÔ Û¬¶i¢)g„×Ö3ù×ÎØ1¿¬j<ê&DÙóÚÜé¢ ËÑ8US[‚IQY4’ËÆ\ÌÎ?ºÒñÐ.s€c/djòFº5ÆÑ‰tŽê3¡p¦’8åætŒ/òzÔ*ºY°Úëå‡k\èÛnhf|º“¸k¢™S4F4µ.&Ù",xùDK=cðì>‚::ºyi6a•O0Ù£+ŽP÷jX^±#Ê¢¬ ưú‰È¥‡d³ö/ »ÚÐ^FPHst&ú½n¦Ä)jå1Á#‹€ÌÜѹ¡íï˜H³Æ£Qq¨é ¶›š9篎 %ãÙYɆ*fÆ÷7M^ýK$n°ß¦ëî;âŽ26^lÑ9­qµì×bm­¾‡ ­g¢ޤ3ü³ñ”Ù„€Z ­a|Â×Þt:(mÀòãWí)ÎÎW˘Óü»³5Ã)“6­´t hæR%Ã6œgå­·«†§¹îrlôßϳßãñ Ê\ZŽ ™Ó1Ñ Lë¸7-Ëå9¢í¿t:B7¡s^vÎEìèÜ µÍrˆq \‚@:è«bàÖJ¦M·€lòò›M–Ym,r^Gæå¸ì÷Øjâ|KuGÙQd“5Á¦getYšKçlÀ}@,ŽpNä&ÄánU_t‚š7½Ñ¼:7]­Íb»n-¼n ¤X>h¡–W\íƒØÀâ'Fqf¸ß”Þ´³k0Z¼=®‚#TÇ´˜)ÄlisrÜ4Y'Çk”Ø[䪑¡¢ži㨑†;¼½™-g^À|›n,yõ×@ÊlZá1âP¶I`‘ñ†ü›šH{ÃnlǺ¸×›z9©ªŒÓÇоvæ1¹ÌnÍϵí½Ù[˜´‘®å!¸f\›r©Ùd™t.Œ´‚E÷]¢âû¹ùÔzÌaÜSŒåùZ‰3lïûQ(µ¯Íµüòó]„5ÔÓT¾ž)/#/~IÖ69NçXèm{ ”xqhŸK$òC8ÔIÀù ,qä·q¶ýÀé{­”ÔrC]QPêœì—÷2ëÒã¸4l9¬‡Síc SÈÆË$ŽªŸkÊ;1»s ¸;50q;ÐlÄ1ªh(ª¤¥š9&ŽòÇ¡tn!…àf—[^ùuݪ°†xçϲvaË ¶—À<öݧ8#x*Ÿ°q.)ǬÎ#Å „:žF]uÕ£W¼lë•=+é]³‚VŠPnØ‹/³7kMô±ÆÚ¥²†ê†Ìè\)¤Ž9y# ÀüµO-Q…VWI«ž3lâsrµÑ9á f%ÎÌÐiêæ«eKŒóHÇ=î`å°1Œ-p¹$ki¥Á Õ8¥-I§žl²† r8åa$g64e7'A¥íp•%,’¶¡òE²ays¢xi¹k8ÚæÀ“¡è+]nÆû!òÙ8å ¦îo’ÛMwëÝîñ*úî q¹å~Þí6¿*i³MËc™c&mZ3è-¹­×AdÌ^…î±™ÑØã4nŒ6Âäà,rŒÖ:Û]Ú­Ô•°Vg™™lÌ–'Fàã•ÀhuÝ¡èPk06Vij¹¬žwJàÖê§Øë{x¬·aXcpý©ËH×I`E-(…¶Þ.I:ž{n°Ü6E‰ÑÏŸdù‘…ãäŸòìÓ–7jÛï!kv5‡· 2É´“6X¶/ÚÛ\d¶kÙÀÚ×±¾íV–aâ­i§Ž6Å 6»ZE„šòônRPAwH¶8VØúÃQ´€_iòPSì˜3ˆ†ƒ1·ì¿<È$Wâl¥2Çò°TË”º&:R[³{hmÉÕ£§K¬‹Ðµ¬q™Å®‰¸ìÅÈ»ì9‚9V¶SÐVžÅ͆ÓÓUFÙpü¹d’"àûFèûánêûÔYx59ÔÒ½à‰]5+dµÞ÷“Ï#Y¿6æï±¸_""€ˆˆˆƒMģü7z—•¯T¬ù”ÿ†ïRòµG¯MݺßPTü'׃µ£þõ ânì}Öú‚§á/ùz·ðÿ¨HäyS™vjªÞ e±éW—nëþŸ=[2ÎWkǧ*ò³¦Ö!®«n^ŸÔ¬(.è|d|zÔ°ÑÍ€ºG å£)Ö6ÝβÙÛ£MÝÖà/ý¾>5Y†“Ïññ‹ª™G’mãøøé@ˋۡHÉåøøøºû‘ £ìô½Ï6§røa>Í>5þêIo9óöü~‰³ø²EÉfîÒÝ?/î¾–OMº­ž¼àþ`æÞŽ}4øøü©–¬€“§ëñðy“g®ã}Úo+sc= ÿüøö,ØÛéaùs(jv| p´¿Ÿý Wê“ã.áö—ÿ+Úòßí.õá_Ž>faÀÓK²”Ô@Ðãrå`Ô.5Ô_PªcĪpºª2SššÀØÁ!äµÓI˜»pî mcÓ~eÒI%ÑÊÆ½®k…ÃÞXˆ!n[CÈ÷=¼‘Éq½ÈñœÎׯTT&ªºig‡±¾0×4Ù­$Žä=öîwß]tÑEn-Têg€`uTh§dMϘçs½¡ÍÈÒCó4EMµ-%5f:Jx`a9‹b`h'¦Ábê 7Ã,.¤€Å3óÊÃl÷o¹çAª 8±¼FbHdlöq½Œ—m;á¾°°;.¼ã7:KŽbEÏm=$rqV9Ó»’ì²HÍî{v`쉿.×ñky1ˆá¤§ƒ-šØÚŽ.gGŒÝAG#ã|”=Ñ<¾2èÚKMÉoÒ‚=uE`Äi¨èÌ ÛE$Ž’V¹Ùr–f‚/ÝZ×7ÒÆ½¸íLÜN¦žŸ5,›NÜ£äŸ.[ åàè$aцý#\·Æ6[!cKÚ C­¨×ü‡˜(îÃh,2:†˜¾ÖÄão€6ÒÜÖAOGŒâŠšZŽ,æÉ,¯k"stÙ¸Û)ß[ÞÖnõ#Å+ë¤ÕT­Š˜6ðžH rtÑî/ÑÃ\­µ†œ« AILÖµ­§„5­c@ °~GQÐRSSÉ,”ôðÄùŽiÆ—ž’Fýç΂¦lb¦à‚ŽŠÚJÚù`|\zå³\÷>8Yq¯$ ƒû×ݦó»Å+ë¤ÕT­Š˜6ðžH rtÑî/ÑÃ\­µ†œ« FRSGÎ:xZ˵ÙZÀÛl¦Þ,­·E‡BAIMO$²SÓÃæ9¤s^zI÷Ÿ: :¬f¾–ŠjÇqg°ÉUQˆœÒÓ”‚çfå_e¨oߦ²ŸˆVG4…ΧtTõÒÊÑ‘ÏÙòÚsr@Ú ,{úé*Ÿ §3¹´°¹õC+ßKžâç4›j5µ0 C©)ŸTʧÓÂê† ¬”°gh×@íãyó ¡~1‰ìè¥k©kâd‘4ÂâbÍ$-³Ž~]„§½Ô,±,v²‘óË-’—,̉îŒ4 #î79îuÂÙ[åéGRSUÉTÿ—žMï’(šo˜:ü†‹›´›F–ÕJ“  –¡ÕÐÓ>g‚×Hèš\àEˆ&ÝyA§Ä+ˆ6š¥Ôò4TqWãs vËmŸW-ÉËÓ­ù’\F±••',Zž®{Xç~ÐG­ïac%ùï»K\Úl!Úm61çÏŸ6Q|ÙrßË—Kôh†]šðÆs½¯w$rœ-b|c+uñûñÊý£DQG²ªÈúIäŠÃ!–6_(—re\›·k¦Rc•°³•S>Bøâ°´‡²fBI»µ¹~`.ÛZ×=Ò¸n@Éß;(i›+Îg¼DÜÎ7¹6×”ò…°ÒS9®k©á-s^Ò ¡æï™Ôô „ÔÕTA(®‰±Í™ºè ËC—ºÝ˜ôóÙNZ`¤¦§kOO B6–°1¹A7 [uÈnPi¬ù”ÿ†ïRòµê•Ÿ2ŸðÝê^V¨õé»±÷[ê £„à5sú…o7v>ë}ATð‡ü«r7yBG)<<á‘ó[ÇÇ÷U”v–ú«æ3M@è6U˜ÜVs]eê¼.Ÿéó 9›–ãÆ¬Ã®ªðg|­®¯r몴÷ oRÑ–÷×Ëñù%¹ükyoMÓ/?­k µXs~ž¥ó/çú-¹<é“MtL+Xn¼ÞK,Ãt¹ÐxÑî 6¸¿=Ö7’÷;ÏÇÇ©ƒ-¼Ö>DÈÖöñ(o©–3°åé·o¦¬ŠppºF͵y—ÂÝ5ýTŒ£ y–¹©ö‘‘®¾%­&%Öp9í“yiÓŒ»ù¯aØ`OfkÞ¥îþ+Õâù>ÒôS„LF¢jxáâÍÒÍ3"B@»¹–Î%Âó ëd÷VŒO»Ãÿç þp¾IU²fÔ>*G¹®« ´Gi³Ž¦(öm9µ{Åì4Ù6¹i#‰pƒ¼Ã:Ù=Ôâ\ ï0ζOulÕQÂÙXi2µÏkŸ)¶Hc3¹¯³6FGrí2´µÚée^b g'p”·öoŒµÍÚI`¸.ùep ‘wÄð•Q#‰pƒ¼Ã:Ù=Ôâ\ ï0ζOuD‚£­Ç)ZóMIY ,y’! soNíXÉNCÊÞtýákI1ieÀhk)bËW^ÈÌå]ÎnrÝ\ÀlÐíK›»ò!‰pƒ¼Ã:Ù=Ôâ\ ï0ζOuDg±I)ë*8½4MÃéLó±àç{™$ÌsœCslo{».î]î5ð“«u% aχÔAULÉva¶‘È]ÊÎIåFñl÷6‚áy†u²{©Ä¸AÞalžê¯«£§“|pIKµ©…–¼[)Ì_r;¦QlÃSml0úŠþÊÕÐ×ËM.Êecá…Ñ÷nA{»ÁçA ‰pƒ¼Ã:Ù=Ôâ\ ï0ζOuD“„x“ei†š9!«É%’·dׯf‰šÙï:¶`nZÒ-Ü›ØJ—Ä–‚±MˆÃ9iÙSݲF˃]+rØÊÁÝ“Ïmy!÷‰pƒ¼Ã:Ù=Ôâ\ ï0ζOuUÒp‚v2¾¶bgaž&Iwf¨â´Æ8Ó1vgh59tçVux¬übH¥e±q¨[.ÓŒGp7³ˆ$ß¹1¹ àCˆ}â\ ï0ζOu8—;Ì3­“ÝS°júŠÝ°©u1-ÊöIî|¦ú‡´q ¶mFV–­s¼K„æÖÉî§áy†u²{«¢E;ĸAÞalžêq.w˜g['ºº$AÎñ.w˜g['ºœK„æÖÉs¼K„æÖÉî§áy†u²{«¢Dïáy†u²{©Ä¸AÞalžêè‘;ĸAÞalžêq.w˜g['ºº$AÎñ.w˜g['ºœK„æÖÉs¼K„æÖÉî§áy†u²{«¢EE Ø«%½p£lV?±sœâmq¼š´ªý˜ÿ«ùJ«RTDEšÏ™Oønõ/+^©Yó)ÿ Þ¥åj^›»u¾ ª¸Aþ U÷G¬+Y»±÷[ê «„à•WïG¬$r“Ãnëïñô¨µ´®«h¶>?*˜Å¸n^舘y?UtxQ…ùœëž…fÆy÷­Ìãq·;oñÿÅeÀÍññªÔDG ÿ­9Eÿ²ù—MÊCEÇ9éý/ùù“)Ô“¨Ôß_Ž•FŒ¢ãʾZÍ'JlzØ[]úü|nXKØîÝÐ7oŽt&QXÌÆåmËnksnYÒYÑîçü–çG•¥ÂãM?$ÁÂ#álÈá½sÕÔòPT #$4ø×OLá&b$|E_Â(@§°¿‰fñébR0Ù¸Å0q;úTÑ>﾿ʯƒM&b7žŸ»Écs¿Ç½Zûiœ:°7 iòî?ÂÕf«ðå²ÿÆwòµX/Éö—¦œ#ÕÓIRúMž_’©ŽWfu¹-7*в„–“I-qsy,З‡“¿ypò€w¨h²ÒuéL§0Da“6xù]˜’ë‹ërMún’qYv»X"~Ù›93d9Ù¯$ë¨Ôéã* &FÙ0ìX"‚L*‰ðÛe¡ˆµ—79G5Ê“Rik }=\M ­š9r9®±¾ ž•"LTøl4阮†š8^Í›£c# s.NR:.çiþ£Ò±–‹ š¥õ3aÔ’THÒ×Êèã/p#)ï"Úy4Z2%:=¼ÕPÁ“0±ÕQ¶=­¬9Íïk ÷Ã(0m±¥|ÙCß–îì2ÆÞwkkë¿Ab&FöQa,¨’¡˜u#f‘ÙŸ Ž0çÁ×'y9€>P ʦŸ «c™WCM;^ñ#›+#ps€Ë˜ßžÚ_¡FDÈÚÚ:6VCišöX,÷ƒãPA¦³æSþ½KÊתV|ÊÃw©yZ£×¦îÇÝo¨*žiUôXVÓwcî·ÔO¿ÀªïÞXHå'‡ ®·RZt߯‹ãÊ«ávCoÝøøø*loÒëÛYy¦濊ßý[Z¾7|ÓóZXwn k\I¾þ9ò|[Ⱥ#f[kŸ?±} ÐoòV9¼~su•ÆïïäU7›[ããȾ½ µÁÛˆ±¾þo×û-N˜4j-ññùYk’br›4xôø(’¬uT˜u[€Ñ»¢à%N4$alC1;ù¼êÎ¥ô”—Õ¹¾¢©YI&1Qx¢ØR4ï¶ÿþ¬[1ê†úLI°B!¦z—nßñÿÅ޲8Ç”]ö³Bèèh©è" ƒ7;í©UO’ÅÀoìâ7¹I‰˜öq)ø6ÃûËwZÜßÝXåÖÞ;hOôò¬[ÉcZ4ñÍ{ZÝQæ[C ÁmØÍ-m«­oºÕ9@ÀÍðÂã;ùZ§¯É÷—®ŸXk¨žh]5LÑÃw¾Gͼ¬ijé«#2RTC;Ê]À= >pÖˆœÖ¿ŒÓå.€;fZââþuô,ãn«§T=Ë8nÂ8£h‘ÀÝÙÀ%Æ× ƒp,« /¤‘‘Fé%{XÆç9ÆÁ o$¬—'-Emd'¬Ñ¼L´ÂZKªˆæ ›1ºÛ)ÔbÌC¬†*·Ã[þôÎ2K•‡`Æ2BÉ2Û0¾Xõq çݨAÔ"ç̵Çu?dg uX¥$Whâ\ÑÝâ±6KltòVÑð~¶GlŒ’Ç,Ž`ѥпMo`\àÞžP¶¶Ap'„ÂÉ„Ñì¤Ë‘ù…šÀXóÞâÞU±rt5u´Xf ©ÎÚšx]›@Œ e›Ï«d7$uw+Œ®J®0$ªÛ–>Çäò†t܇rÚorA¢Åò26æ‘íkI »µ&À~d€¸÷âU8g¨ [b–šŒ=ͨ•‘‰\Œ@d%Å¥¥¥ ´‹‹››‰˜eD’ÔÂÚ†ÌèêiËa-ÊÖü¼a ›fg?u|ÂÎf—h™ ö­ŒKTçT4iH `ÌMÖ† ið6¨añlœ3 wIi¿Q”tÚû¼z,´–‹ëšZâÓ̪°ìRj˜¨å«¥ŽV°:¦K’Ìù]É9A<ãC¨ÒðZ"‹Çéždl4Ò>)ÛA.ËckØï°ç:,püFÚ*ZŒÑ±õ aÙçµÅù|¹Müš ˜ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ4Ö|ÊÃw©yZõJÏ™Oønõ/+TzôÝØû­õSÂ?ð¿¸=a[MݺßPUÇöPGƒUÉlÍ ç*TXïI6+€wX‚í?§³õóãpF§ãûãLAí ,–>è9ÇǽnlD>N ÃeµÇNž~‘åX;CäݧAU¨‡SÁ³|)ßóþV+EUÁðsøîþV+Uãù>Òï^ëéEe ÔÄ‘´m®­ÙTD9a’Ö.n'¦ÛíñãPh¶›-£6íõó,«:‰ZÖ¾R‘½šÒM€è“ä\Î+Ë0ÊZÈfŒP†¶34çhü†;¸º6†¶Î=;Æ¢Úôx·pq ä´»y·7¯™imdNËfOʵ¯Nñ¿/útîÇ“^ôØ(û ˆI[ ÓIŒysJê™e"hž\E£¸ŒèÝ.@ÜX&,3DÇ—¨Än$Æ[ž E±vRmv€A¶¥Ûô!]6²'e³'åZ×§xß—ý:wcɯzlmdNËfOʵ¯Nñ¿/útîÇ“^ôØ$"ŽÚÈ–ÌŸ•k^ã~_ôéÝ&½é¶PUCPç62ìí qcØæ8. ˆ§óoA¹šÏ™Oønõ/+^©Yó)ÿ Þ¥åj^›»u¾ ª¸Aþ Sä°­fîÇÝo¨*®‚U}Ñë82ÛܸØ(ÒH?p\ô¬Ý™æÖÓǸ-Œ.§Jé 4EF\sM èç+l”ôîÉoº}«h:è û”ŸÜ39Ge4QœÍeÝÌJÁsãL ép¶µ·Ü4Z„Æ_[»E²ûù¾?ºúØî7ûÖE{to[Ôaˆ»Iñþ%˜½­}þ=ãããE±±îÓãã㣠Ät||t&¤Ãå÷^ûÆÿ'÷øÕ}æ¸üþ>?P¾oé'·õYå÷óÜs¬Í-'Écñúh°v¹6[œÓºöñïøçøºÐæg~P9#SÏ~„ÔÖO܃¸ÜaÿŸ%ŠÙVpp„­;ÿ•ŠÍy¯Ë¤p‰ŠË,8]D”í&V°åè«â£¿Y…7Ž\Ò‡ŒS7Ê8Úùö£ÇÉÊ5¶½ÎŠéÀ9¥®ƒ¡nÛ¿.[éæÝú(¨8Ý4Uto¦š,ñJøÛ#-Ì\ÛmÏäéot*#Æ*iöšJfGLŠ8£‰’=á¡£¤Û¦Û®CA'˜ÄDPšÏ™Oønõ/+^©Yó)ÿ Þ¥åj^›»u¾ ªññ|¤ë Ònì}Öú‚¬ÆÀv8;Ž_æ …æçÓÄ·l,9-º³¦¥hhq`¿™n4áÇ[[Ä»2¥l.·0Yìq+n+5Nz±OU <¶Üµñøï­Çä¾Qc8~ ÀÖ„ä–ß~”0ÔØÍô |P9Öý › #1x7èÜTØ cEÀW80ƒ-† _ÆíˆhS‹H€QeßkyÖdÂ,™@6Ô~‹^Ï3º>><ë~Íî=§}Ôˆ)õéLÌ&Ù‚ë'Dw+FS÷¢ý7XÉçò¬®ï¤Z‰3^×—4êámB¸’;o(³Fu¸¦paqÁœÝ‡vgfÿx~¿ô±Zªì›<(‹oÇøZ¬V'–¡¦®¡””²ÔIÜÆÜÅbÜ?t ÏJɈ¹¤s9#ÅœÏvýe?á»Ô¼­QëÓwcî·Ôv1~ÆËm÷m½ ¬fîÇÝo¨*üX_ùŸÌ9±êÞïKsn[šåX±á…ÄsÙl y67õ]Ùa3[4OŠHÁcÁiœÀcx°©Úhå™áÝüyKtæpÑÛüGĽÍNg\žk¨Ò £\Á ëg´|£zLDò8l7„UØ{²9Åí¾­rìpžPâµäÃ+Eôƒ¾:5U˜½ #ØxÝ‘nÉ+]M‹E ˜cÙM%5K™ˆI#£1T3,|úçæ#uŽ·*bcþ«³ŠHçÒ0‡µ§)åj“xX=¥ÇFÛqx®'„1ø}d2ATÂm}2ÜïhoÓâpQpÜz¢”ÙÏsÛþ§!ÿêš¡‰ÄfV”ô  <¶\Þ Â:9ÞÖIlÇpÜï>ãÍкú9¡¨fh$ˆòƒ¨RÊÃaaª,*ÉÍ CÛâXÇ•½*¶Kg׉[×7“©U¡ÎÐ+"ÛÃþ×zš¦-{rÐÿÞ¦­ë2¢‡ÙJ3ÅøÜ[^÷7ŠûÓÛv*§‹þ×fm»óßâW0Òáýˆe;)ãâ9£{4¶ýAÖ÷éÖþ4”xkèç¨}4pI÷6æï‚ PY‹Ñ9Ìfišù$lmðH×Ü‚G$‹f»•»’uЭt8Õ-U-¯.‰õQµù ]ÈÍ ÖÒæàlÜ×Adˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ4Ö|ÊÃw©yZõJÏ™Oønõ/+TzôÝØû­õ6¡qÿ[?œ)ówcî·Ô^<âÌ¡ã{@?¨HäTÔNëaaÓñãZ˜þXl™ÆkÛÇæQà•Qr­s¼wËë20øœã¸ô.ì¬Ñu» ¥­ŒòoºY@ù2|¥³-ÛM Ÿ¢dyíd9œË÷&×¶õ ÍŠîñ,. ÈÞæ0 ·æë©¥––Ii½µ\¦s…Ö¤9„-DmVU¬€íãU‰aµ[KOBÄ_ʨ±àîA^âö5ä0€Ç ±WÔÊd¨{‰;ÖLs£vv8‡t‚µ9¤xÕϬ#ë&{7+ VzWƒ „sÚê«›zú‘8á^ÉÁ@,xÊE”ÖTä±´¾ÍnQ˜ÝÞ‘ß岊âÒçÔ“Ì vb—&×,ü[é;l½-Ûôò ±s‹œ\yÕ4ü¦›Œfwí¥Klìß®m¤Úóm4îB·•ì…|β0\÷8Ø4 äô/¨+ëpÎ7Ù–ÉÇ)7s|–Úk¿^ïw‰A›ƒQHê¼®¦`¨lÖ“Šƒ0t×Ìûês`:}÷ºŽxes›ѽÍîƒ\ n¤kù´(= bì¦ÉˆÍWžûX£-·d/7¿?è«[‚ºž‘lΔÃ+ZÀ ö/ÒæÜ­ÚÒÖ'„ÂÉ„Ñì¤Ë‘ù…šÀXóÞâÞTp\<ÑÓæ8Hæ†5Ž ì¢ivÎ=:µ:êN¤Yk ¨m (ÝZÓ 8ŒS ­³sK ù\®ànË{Ÿ[dAK.ùÅSæªnÚª ¢‘̊ͼ †æ6°ˆisrN£rK†×35”SBÁ(½ÒÄ^qCl ¾È›þJéR³0Å=5c™LÙ ”±Ñ‡9΋ » ˆÆá{ë{rV·ðj'¶—SH"´Ù§¥l®°œ¹.l×ÙÚ’$a¹_"-§’‹š8vÓ=ÒJñ± ä.Ó9˦n~ÉA¡Ã'–™†gTRHÆMh nHÞû<¯vK¶×q¶¢Àeµâ £¢àÿÄWž’<¯k¶t´›œ¬•ºŒÇ_•ßþ¤A„Ék*í6mù>Q`Ü/~q”:àƒ”@*Ñ@DDD@DDD@DDD@DDDA¦³æSþ½KÊתV|ÊÃw©yZ£×¦îÇÝo¨*žiUôXVÓwcî·ÔOÅð°wdþ¡#‘çtõNüŸÍt4Õ"¢0æ<šoøøÕró4Bí Öt˜ƒ îè]³žYuÀjçoß¾Ëè• î¿çñÑëPa¬dÌ||~‹3‹ÍØ^íPZµÏvà—UµøDxƒ-P7±UÔSåke}ÚýÚêôUlcl ãq¾ ËEšZ`f‹Œ.mñžfÙzÑ«Ú7-†»×;p}µ ÏOf?'s¼«3QÁ9‡k ~j}M#éåtr‚ Œæô§Q¸¾uYyôZÎQΪ±s/¯:Ön4+}ï¼~hæ\t ô¿öiþV—[ÿ¾Éü‘®±rŸìÙ¹x/(ûlŸÉêÔ•DÅb–l.¢:w+˜rOôW°Éi˜ÆÅ²€2‹´[¹°þš*Õ–wä˘å辈>T±“gŽF¶F9¹^× ‡icåsL­¯¤ÙæŠIø‹8œ—šÛi]lŽ>3hºm·:ò\ºDAËÉ Nú×SÕYÔXdR¼ìÅêÓ1»¯}n]mI=Ðç×U‹bqɈ¹µTìtL¨´ƒŸX×ä~L—mìÃw<´æÝÊuˆ‚¾†J–b54•íòEÙ²ؼ¼ýÑZ÷:›’«¢ÿ'aÿ‡ÿÙèV¹¡dÙ3™Íáã$Žf£¦ÇQâ: æãÅ« skv’º°egûƒ‹ãMšé/7ìõÜo2޾wa¸´´•]’u3Ü)Ÿf»hDLpo yD5WÂÚˆ]Ì®Þc‘Ì>“H!cMK ,e‡XœÎsÞ^ç’âI:5æs ¡muLµ°RÐb¼fžI˜ÓU–7›˜æ/`-·F—ÚÜ+Œ*y*(³LìÏd²ÅšÖ. ‘ÌÛKÛ›i~…1@DDD@DDD@DDD@DDD@DDD@DDk>e?á»Ô¼­z¥ģü7z—•ª=znì}Öú‚¦áC²ðn¹ÝßõW3wcî·Ô/ ËUÿ…ýPy8«Îyemhf`«än]Ë8ä䨭2ŸMZø¦¹<›«¸gdìæ=!ráí&ÊmQ…Õ¢dtð–Fn;®“ªÚƒÍçUÐÔ v›¯®ÍivG]¼Üêä\Á3®.ýÅ4ÌËiÍιO+ÚÓ Ç+][eoK •–Þ9õRU+Ã(ë)Ë£mŸm óÚúiéetof^k¯O§sÜ뛎ËmVKˆBæU5†û­¡PxëÛÎI²Ö[ÎÝW]ðJ|<æ£d“Åç .bHßìà1"ãMËí­®ô-•¾ûµ_G'BƒÓ?ÙÏùbOùÉ?’5Ô®_ý–eÿœ“ù#]Bˆ """ """ """ """ """ """ """ """ "" 5Ÿ2ŸðÝê^V½R³æSþ½KÊÕ½7v>ë}Ak[&îÇÝo¨-G5¹9s¨?@TQaiþÍÖ¿ÜKOönµþâ£4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷Óý›­¸ƒ4XZ³u¯÷`83–Yšû˜IüÀA¦³æSþ½KÊתV|ÊÃw©yZ^›»u¾ µ­“wcî·Ôµmqk&žH7$ôyWÍ£|<îöª5¢Ù´o‚gÞÔÚ7Á3ÎïjƒZ-›Fø&yÝíM£|<îö Ö‹fѾ žw{ShßÏ;½¨5¢Ù´o‚gÞÕC-MU_ äÃÙU--; Ø}  rBÚèä§•¤>2±×°$†0_AmVî)ñn-Åðí†|û,ŒËšÖ½·^Üè!áU¯~-TÏ‘k'¯Úgl‡‹Är°é~úçx©mòŠdÃÝšï¥9Þ×»Vòœ-b|c+uñ³Ó}&L ܨi¿Ïµ?ÿý‘+Ž7Mô˜}0¹ñ]KOÃj‰æ¨‘:€´8»BsÇ éÜ|È:dUÝžÂ~êžÂ~ê‚\¥á%E~wl)è¢ã ¾›2éI}¹ËKAòg°$…—®¦Â¨!¢¥l¬§Ã`žW8´ N…Î{rw•goݦ²ç®Ã¤ª}DXü°9í "6E¸n1“ÎN§œ¬¢«À 4sTÓTº—ö2K/F[4k Àn4Wbµ’¾JX]/Š¡ÙÙd½Dm5å´–È4ås«ŒBy)¶2ÄìÄ¿'¶³_™½'¢×½‡)±'€9®k¥¥-s^Ò 7‡›¼nç:ž•°ãX9‘²¸KÚ C­¨×ü‡˜ ³E]Ùì'éÑ~©Ùì'éÑ~¨+øUóœþ~/çjèW)âuµX@¤¨d¥µÑ\7›–ÕÕ¨6MݺßPZ×ÊŠ˜.WÍ\Û‡<¸-\n›é0úaQ‘ñ`X„‘½Ì{)¤s\ÓbÒlAZf‡Â#|”pAMQ#2±‘07hKšÖÝ€€îSš.H¶mâåNãtßI‡Ó ,`ÔñËPDÉ›–F±¬hxè oÞ|è+éqLVª±´;( »Q+åfì¢'בº[[?Žÿº·aø­V ÆÕ³‹AN _·Ìã#ý{ÚSr7ŒÚL¦ ¤·e¿ìƒ¾×ÝÓ•¾aÐfÙ¢™¬¢ÂÌ‘<]Ý`y†§D}”®®¥¦u]+b†¦Jiá7h mâÓG¸¿G r¶Ör¬:¥ŒÂc|”Lt¯´0¸‚zH:ߥHãtßI‡Ó7*êOñìGîCêr—Æé¾“¦*²LosÒÈlZn?yÚÏ™Oønõ/+^©Yó)ÿ Þ¥åh=znì}Öú‚Ö¹™8kLçÝ´sZÖpÔ ÎÜ©þ‡/¦§EÌvåOô9}0¹Sý_L&N‹˜íÊŸèrúa;r§ú¾˜L1Û•?ÐåôÂvåOô9}0˜:.c·*¡Ëé„íÊŸèrúa0:t\ÇnTÿC—Ó Û•?ÐåôÂ`t蹎ܩþ‡/¦·*¡Ëé„ÀéÑs¹Sý_L'nTÿC—Ó Ó¢æ;r§ú¾˜NÜ©þ‡/¦§EÌvåOô9}0¹Sý_L&N‹˜íÊŸèrúa;r§ú¾˜L1Û•?ÐåôÂvåOô9}0˜¯Ãh${žúg9ÆåΉ¤“æ_;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±`ü ’ÛL2‰ÖÝšŸè©»r§ú¾˜NÜ©þ‡/¦[ö ú¢ƒþÙžÄì õEý³=Š£·*¡Ëé„íÊŸèrúa¿`°oª(?í™ìNÁ`ßTPÛ3ت;r§ú¾˜NÜ©þ‡/¦[ö ú¢ƒþÙžÄì õEý³=Š£·*¡Ëé„íÊŸèrúa¿`°oª(?í™ìNÁ`ßTÐÛ3ت;r§ú¾˜NÜ©þ‡/¦\ǃaQHÙ"Ã(˜ö89®m;iˆ6S—1Û•?ÐåôÂvåOô9}0˜¯Ãh${žúg9ÆåΉ¤“æ_;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±;‡}_KԷبûr§ú¾˜NÜ©þ‡/¦^v+ú¾—©o±m‚–š›7§ŠÛò06þeÏvåOô9}0¹Sý_L èk>e?á»Ô¼­uóp¾žh_”gimó .¹GÿÙanalog-ce-6.0.17/how-to/batch/task5.jpg000066400000000000000000000430531406366436600175050ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄS!1"AQ2STadq‘’“±ÑÒð#4RUrs¡35Bb”²Áá6t¤ñ$c‚¢Ó³%CuƒÂâÿÄÿÄ$1Q!2A"#aqÿÚ ?ßág ë°LN*ZHi]©Ù!2Gss~ÿyRuý‹w5¡>ÕyŒOÅøh×q*Êœø^ÎôŒÍ47$mÐy¯¦ÿÀèÖá>ZéKêñjÈ©)å‚’²G:f¿”×µ¤:í6Ð úßzõSDDf¦g>¥®þcŒ†9¤¡¤lRßf÷S¸ÛCc}l°ëóîjB}ªÊŽŠš¾‡ƒ¸eu X* kHÌö¾M›¯1²¾å¡Q…apà0ËmCå¡q˜#/k%ÔœÏÍ”k–àsÝj6ø˜Oë¶QðÓ’&e #¢ŠÛGŠwËè.o¥×Ø8gÔÌØièi%‘Û˜Êw8/¸lÌ6†Ž“¥Ífd¡¥Îuª^Òçß/9Õ¶µÖx -üRHd¬ðÂ_˜^‹Èµ÷7þk3oèþ»RuóŠ÷=¡>Õ#8eI ’²Š‘ÑEm£Ä!—Ýs}.¾O…á‘`pË eC¥¡q˜#sÚÉu'3óeZÄe¸÷[Ø… = 6J@ÚSMÜî1r 7')ÔþÈUÎxƒ6í 8oŠw=¡>ÕôpÛîzB}«¶®. c[:©Ù°Øl²ÈFÎòÛ¢üö[x+ð)%š,òqÕ2¢?(p&Í/Í”»Kå=.µ1Jó ›Oëä.Æ*%AGK,ŽÜÆ@\Oà ǯLO¹è½÷W8nGGŒá3ÑŲl{ *#'¸„ÞáÇ)Þ@¹ln’ž“жŽ<ôï‹3jîO<æÛ›c¦]ãJíÚØÁ3hŽV#†x—h¢ô_Ý}ëËí~‹û«¦²“‚I¥c쌿fÎLn‡W}Eía¿uõZ“ŽÅ$ôñ2wOŠãkä{bsZ8´­…ï¿Ô³š~Õ®Ú#†8—h£ô_Ý}ë¿í~‹û©z™K&!RbÃÞÈ©àm¡tR'%Ö22<áÀÝ ïî“ÂðÌ2’±í¥{ÜÚ½”GjF@èC‡Œ|z •Ï8ÂfÝ£g qWÄùILèã¶w ¾ëže]Øh£ô_ÝoWQÃEƒc1RÓå¦ËLbžî;}A&äØêy­½rAj”¥¿ µ£õÐuÛˆvŠOEý×ÞºñÓI迺çÂÈ-íS¦uÙÐWöšOEý×Þº«ûM'¢þê€,‚mS£]»_uÑ_Úi=ú8O]Úi}¢ ›Tè×n×½sWvª_D¾ŽÖöª_D¨ÂÈ&Õ:5Ûµß\•½¦—Ñ/½qÖöª_D©BÈ)µNvír8EYÚ©½ú8CYÚ©½§ ›Tè×nׄª›Ñ¯½_«íTÞTMªtk·kn¯UöºF¾Œv¯µÓú5TA6©Ñ®Ý­:¹UÚéýË«u]®ŸÑª°² µNvígÕªž×£_z³SÚàôaVSj½íÚÈc=®F]V¨ípz0«BÈ&Õz5ÛµUª;\>Œ/½T¨úú0«ÂÈ)µNví¿Õ9þ„>Œ/½RŸèCèÂÑ ›uè×nÛ½Q›èCèÂûÕ ¾„^Œ- ² ·^ví»Çæú1z0¾ñé~„^Œ-0² ·^ví·Çeúz0²ã’ý½Z¡} mÓ£]»mq¹>Œ~Œ/¼jO£˜°YÛ¯F»vÛŽY$7…¡¤ YÓøw–YŸÛ)ýöQCú>Ó}EqœJn1´â}nñ‹ñÙ¯úM–\Û,ÚìïûÖ¶‹Ï|E±íOq—UU]sWLÇ0¾(s9Ìe­pmcmú//^€ÿÖ˜·ùv+ן¬Ûñªþ»>pn·Åb©¥–¬m;DŽp7ÔóÒ©:ÅÅ;}žïuz4ݘû-õÕ~{Ö1 4‰yðà>)Ûèü÷{«.²1NßGç»Ý]ú-y6êàq>ßGç»ÝYb}¾“Ïwº»ÔSȹ·WÖ^'Ûé<÷{«èàf%Ûé<÷{«»E|››up£¸o¤óÝ±ÝIç»Ý]Â'‘sn® p?íÔ¾{½Õ÷­ G·Rùî÷Wl‰ä]6êâ‡qÝKç;ÝYu¥ˆvê_9ÞêìÑO"æÝ\hàm¦ó‚•ý¶›Îwº»O"æÝ\Zµý¶›Îwº²¯í´Þs½Õ×"y6ªäº×®í´Þs½Õ÷­šîÛOç;Ý]b'‘uÛ«”­í´þs½Õ÷­ºÞÛOç;غ¤O"éµW,89YÛ óì_Gk;ds½‹¨Dò.mUÌŽVvÈ<ç{ÑÁú¾Ùœ}‹¥Dò.mUÍõ¯¶Aå>Å—Pjûd>Sì]'‘sj®x`U]²)ö/£ªíùO±t›÷6ª %Ol‡Ê}‹!‚Ôý8|§Ø¯Q7îmUGÔjŸ§”ûуÔ}8¼§Ø®Ñ7îmUKÔš§”ûÑ„Ô}8¼§Ø®Q7îmUN0¹þœ~Sì_z—?ÒÊ}ŠÝß¹µUPÃgúQùO±}lßJ?)ö+DMû›UV >o¥”ûÞ!/Òg”û’&ýª«øŒ¿IžU÷‰Kô™å[è›÷6ªÑr}&yWÑI'K<«u~ÆÕZb–N–ùWÑLþ–­´MûUk wôµ}?¤-„MëU@!wHYlyJ‰½cj­JšYg`c*æ€s² fñÜú×êTÿZWzFûªÍ&ó>娮câÖLj%™òEg:R Ðn¥yÊõJÏ™O÷nõ/+I¶M8zôݘû-õSÂ9¥§À+&‚GG##Ì״؃um7f>Ë}ASp£ü7]÷Õe©y›¸MŽ4~²ŸËý”láV8çq)ü¡iHÎBÓn’ÜÃ19tMá6æƒÕ)ü£Ø²ë‹·ë)ü¡WFÛÇ}þ5žU½.yoõÃób3yS® n߬§ò­,‹îN”Ðe¹×7Ö3ùWθ±¯¬gò­MŸy|1x¿Ñe½×5õŒþT ƾ±ŸÊ´r&Nòº ·1¯¬gò§\ßÖSùVmÖ[4Ñ –Ùá5õŒþUó® oë*ÔÈ›>{[4A™z'ªªkpI*+&’YxË™™ÇöCZ@ÿÈ®sœx; ð§ÿ$k£\m—H᫉T¾’…óF˜·3»Ápîï4ã»@uÔ0b ej*j`¨kß–9)ç‰~Ëcqc 'F“¦ nNÉ$…͆]”›Úü¹€=ñÎ9ŽãmÄoUu'ÜfJyªQÆÒŸ4%Û=¶dÞÙ{~½å#q˜8Ü­.¼HÜé÷:@æåÜlõ¸³¯»I‹Ðµ¬q™Å®‰¸ìÅÈ»ì9‚9V¶SÐU{ø5ÚÞU1, Ë©FÇ02ßÓå…î, '[ìA„MHZhª¡€¾1¹i€=ÃfÐ@f¯vðîkß[„VoRk«„½œŒû2ᣭÏmâöÝ̱¥Æ`–¶¢žWä-•ŒÜk£c†{ö$¹Ä ÚäXj¦êkWBùa©2êÑg4HIv¼ú¹ÖÓu·Úæ>¥½ñÎ%¨i|Õ0Ô¸¶; dz¸ç~ϧKóÛPئÄ)jå1Á#‹€ÌÜѹ¡íúL$YãQ¨¸Ôt…¦ÌršÎ|îtA’Mb÷¹å’¶0Z@×W7@®ßÉ)ƒà‘ar^1M•‘ì˜b¦lostÕïÔ¸òFë ún¶2`yæâ¦ÌŽWÈÖìîySG1ßé0Ûœ:5 ¦âô.kÎÙÃ(½v Y ŽQ!¤ H]Å5T5Q—Â]`r¹¯acšz HhAטƒÎªê8>ʈÃ$™® 3;+¢ÌÒ_;f‹ê`s‚w-ªL1´øtôñÂgÍ™Ôq »@½Ž—¹$ß½`ìkk’Y#.x`d½$‚@ "úå6ÓR,.tPâXå=6=E;,­ò1¢¿)Û8här«v.è6†‹ƒüWe^zHò½®ÙÒÒlZr²Vê3~Wî„›˜ÁW5ll㬒9‹à/ä¹ò«3%ª‚9 lOه׶÷enbÐnF»–ÀÃ2àðáí›æû=“Ë{[fa}{{ZúÚ×Ó^³ãXwã9~V¢LÛ;þ”J-kóm¼×Aa u4Õ/§ŠKÈËß’@uŽS¹Ö:^ÇCe¯-édžHg:‰ "8!%Ž"ü–î6߸/u%5×TT:§;%ý€Ìºô¸î$ k4êp=¬a‚JyÙd‘±ÕSícùGf7nawf±æ"Çz 1 jš *©)fŽI£§|±è]ˆax†„åÖ×¾]wj¬!ž9óì˜FòÂm¥Æð=·iÎÞ §êœKŠqë3ˆñBá§‘—]uhÕÀo›:Ä…iIKÅsÇÿåôÙÅoÑt€~ŽëmFë†.;I5 -L»HŒð¶W7f÷çqËÉn‡”lå]u5N1&L×ý’l÷nh¸»Ž‚âåVõ í¥â±U´DúVÑËš+¹Ñ70nSqgåy¹ ‚ll7-ìBŽJÍŽÊ£bc~käÌG}§™ÛÇ;lâ H(#‡‰ô²O$3D’Ç~KwoÜ—ºÅøÕ/‚ §NØ\ö1Å­Í‘¤,íݸ:æÊœk`’žF6Y$luTûXþQÙÛ˜]ÁÙ¬yƒˆ±Þ”‚ œï‚Xäk¶v,"¿;A;ô$o¶¡p‹ÃÄm¹®}†g4eóØ\ÛʲPCYó)þíÞ¥åkÕ+>e?ݻԼ­QëÓvcì·Ô? õàíhÿ§ýB¸›³e¾ ©øKþ­û¿ê9Tæ]šª·‚ÙlzUàeÛºÿ—ÇÇãOV̳•Úñéʼ¬éµˆkª—/OæVt=ò>=kl4s_ãà.‘Ã9A”ŽknçYlíѦîê`/ý¾>5Y†“Ïññ‹ª™kˆÉ6ïü|t eÅíж2xþ>>.¾äC-}ž—¹æÔî_ 'Ù§Æ¿Ýl–óoÇä›?‹!–®K7v–éøïuô°‚zmж¶zóƒøü|ƒ˜Cz9ôÓããð¦Qd??ƒÌ›=wîÓyS63Ð@ßþßÅ›},?e NÏ#.ñá/çýÆ+õIÀñ—pð—ÿ+Úòßí.õጒ2(Ý$¯kÀ\ç8Ø4 ä•<ðÔÂÙ©¦Žh¹ñ¸8mákâÌø{̲ìZDzA!n`Âׇáôn÷i}FõR&uT”Sm!ÊÌHf«¦`lsü‰ë}äˆ÷EÀEtH¹ŒÖKTa†µ­lîa Fù©¯$ÈÖöï-7ÔËØrôÛʧ¦¬ŠppºF›;jò/…ºkù­Œ£ ysSí##]{ËZLK¬àsÛ&òÓ§wò1^*.ðÀžÌ×½KÝÿƒêñ|Ÿiz)Ã^²®:8›$Œ‘ÙžÆæ%Çp²‡ª.ú·þ é‰öxùè?œ.¥e§-Õ}[‰ÿõõ‚¢E&‹†»yŽ X|­± sÇ&«¨cgt‰"Ï$Tñ¸¾‰åÌ)lO+–u!–Ù¸Ú×ÊÅ1š¼*y_)¤¨kb–QIÄ±ÆÆ=ÂG:ý‰, ìà\Û•pXëÌq¶6ḩ ÔÒ8þ$ê|eeÕ}[‰ÿõoAQWÕ š×Á,ÅÂXb1‚^-”¹Ú™Öüû´×‡…ugmk+pºÙÝHùßMO¦"'>ïùG¡Í :7W FâÀÛꋾ­ÄÿƒzuEßVâÁ½nž2Zìžš7\çCÛ¬Fó•ö<—æa7ì7…x˜·T]õn'üÓª.ú·þ ë©E09Gb¡¦ÎÃñ{ô®_:°ÎáÄ?…r´Åñ!E3cÕ½Îh7‚'8®ò31šÁ_$¯ãî¦sd"‰àµÃyÍ}oÑnŽýʰ¤¨ãQ>VÃÒôÓ†–$ÒçÐei6­…ÆÜÀ:äùI¶‹¶³Î ¥®sMÚâx¬öÒö×ùÅe¤TcèŸLz¡NöQAÅ©†ÊÄDK3g9¹N´mŒ ›Ɉa}S.†»cèþPÆÖ06V—±Ì7}ì@lŽ·$ÆäØÞ]´½µþqM´½µþqL‰(`t5SÖVÖÁ5DÌdDÃÍŒ.#’\ã{½ÚߣN˜úZÝDãŒù—ÛX} ™²ßñµÓm/mœSm/mœS#çRèÙˆGW Ìc›Tj47ù'³(è{ŸÏÊsí+M´]µžpU›i{küâ›i{küâ™{h»k<à›h»k<à«6Òö×ùÅ6Òö×ùÅ2%¯©Š7\r‰Ùc/é¾àm̪Ù[WǤ2A³khß´ÍÏsºß‡?{]ý´½µþqM´½µþqA <Ž–:—¸84Êܹš[¦NÖK'H÷ 9î#¾V(ˆ """ """ """ """ """ †³æSýÛ½KÊתV|Ê»w©yZ£×¦ìÇÙo¨*žiUݰ­¦ìÇÙo¨*ž~¢«¿Ñ°‘ÊO\ n¶Zt߯{ãÆ«ávCoÙøøø+v7‡iuí¬¼Ó €9¯Þ·û©Z¾7|ËñP°îÜ­q&ûùü§Åñoè‰2Ü \ù}‹ènƒˆ||j±Íßò›¬®7||¨È¼Úß%õí®ÜE÷ó~ÙDéƒF¢ß…”aÒLNSfŽþŸUŽª“«pº7s´\©Æ„Œ-ˆf'7•YÔ¾’’ú·7ÔU+)$Æ*/[ FößþëÌz‚!=&$Ø!Ó=K·oøÿe©‹GYcÊ.ûYƒ¡tt4Tô@Á›öÔª§Ž©bà7ôqܤÄÌ{8–þM°ÃÀ~òÝÖ·7÷V9u·~ÚýO¼½túÀŠº¨héÌõÁ€†òXçI$êBRÔÇU’&ÌÖƒo•…ñŸ#€?ŠæÒdD@DQU’ÚIœÒA¸‚9´A**º:ZI"â©Ç«Y][ dl •™Ø\Hn[†ò]©è¶õgÖã~¶Äý+=Õp>¢‚|Eb1|L yl<ã÷{ëA”ôrWÉBÌ~¼ÔÄÀ÷ÄÌÀÇwÅÇHAl‹G¾Î½®šY¶U[6ºW\Ø6þ-ä­äDPnž6Ô2œ»å^Ç=­¶ðÒ?ù* CYó)þíÞ¥åkÕ+>e?ݻԼ­QëÓvcì·ÔG ?PV_èP­æìÇÙo¨*Žþ¡«Òüê9w×_Žu³72ÖiÖ÷?é4oo Ó†ã ßëRµÚkë×ûhµ é ë§c(ëÑ}Wh·§6î|¶$ù7zü}ÔO›ö[Ï¡Z®‚ç4€òÀãB†##¿x&¸„÷+Xá¸2JtÞMïãZu˜Ëî-@Ã,îÒãpU­š¿—f×»eûD½¢¡§ ,m%Ç{©%5M¸\a«I„I,œgvÖMâ;îWÁ 5›†ëh>>'FƒÚ“ÏñìUôU”Ï©’¦yEÁä‚?ŽòØ“¤ŒrlMµËΙŽQf,4$ßÜwü{-˜H÷å»ùþ>?‰¸E¡°ú‚«|Õ’™u.7,댮ádéúwó÷š¬oÿI?~ÿSU’ñ|Ÿiz©Â·„ {ð¢#Ûflð:ð³;Ú¬$†ØÞÀ¸îQºY]†2¦šZÙßI&w ¡to™¶9›“+sr\rؘ7 « ªJjÈÄutðÎÀsÊÀàMŠÆ’‚Ž‹?¤‚Ÿ=³l£k3[uíãYiÏ×SâÌ’&º®v¿dà RÊÓ;žâð2¹ 4]»[¶ÖèrÊvW²,¬’¤K[%m4aÒ¸e{žLoÔèÖ²2téЮ™G°‡ŒqŒ{|™6¹Fl·½¯¾×æA"†³æSýÛ½Je„±‰a|dåimí{]4±Èü?‚îcæÆæ9ä †Ž- ¹è ~!t ®’VRRCMœY m¥ÌÔ€-®ªn;ßÿÃÿôª"Æ)TØÇ©¦k'c–îÔo¸T,¦¦’ºJ&ã¾Þ&¸ìÐã›-??1è*ÛgkÇjiÃo}ƒZ3xïu£Ô–ýq‰ùYìPc°G"Àùҙܩ²°PÑQÃC±Å4Ó:iv®t ^ö·2™\Ý4XÎΑ’É&¯Š›¾ãdà\óÞ~Y…ÿh·\®‘r0GŒñ9I©©56ñiåŽÎÜö%ü«7imˆóXäRCMˆºhÉ*f±Î.èß ÜÂènƹî.i$>ÅäEœ:¤ASå“kÛÇvOŒ8fikÛsƒ¦¤î6ÎÃ¥²"€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ!¬ù”ÿvïRòµê•Ÿ2ŸîÝê^V¨õé»1ö[ê §„¨jþÀõ…m7f>Ë}ATð„`u@î-ó ÍL¼Ì tš\swÂÚtMfjˆ´Zúý¾/ñß]«.R9k Èüÿît’>Cw9€Ü¬*2ìÜÓr]Íññ½iäñ%¦gу(ße$¾y›7ž~…™j´ÃaØÆdpå¿ò V¹Ÿe§±¦dt‘6(€9yùüj@o}oßßwÇöQ4æR°î¾î{ÿ‡•zãNIZ7¦§vŸ—à´qWO,B v}änµ¿ßʶØíÚßvïy”Ã0&ÄÜ|ì0 «’Ùš/ÎVÔXíI6+€wX‚í?§³óòãpF—ãûãLAí¥KdãßÞ¦lD>N Ãe+Ž<ý#ưv‡Å»N‚«Q§ƒføS¿Ì;ùX­W?SŸ¿wò±Z¯Éö—zð"†®¥””æiœ.Ýîsˆ ÆH鮩K;ª#.t@ðlæJÇâ ~ðOFðB¦E jXêÙi@vx£d„óYÅÀ!ü”ȵÍm3hæ«2|„;M£²žNBC´ß¡iYARÉå¨ÁÔòß~s‘®ÓðpA2"†z–A-e?ݻԼ­QëÓvcì·ÔW?RTø‡¬+Y»1ö[ê «„©*¾Èõ„mî\l´’Ø=+7fyµ´ïî FG—S¿¥t†EF\sM èç*Y)éÜ-’ßdûT ë +îR{ËpÌå®Êh£9šË»˜•°ÁsßL ép¥ko¸hµ Œ¾·vŠKïæøþëëc¸ßìR²+Û£zÞ£ EÜzO|ïï,Åíkïïï)í>>>:1p°ÜA·GÇÇBjL>_uï¼oñWÞa{Çããó æþ—ñ{5žQ¿=Ç:ÌØÒ„ø¬~?-Ñ·&ÂÊg4î½»ûþ9þ. s3¿(‘©ç¿Bjk§‚îÁÜFî0ÿÇ’Ål«88ÂÖÿÊÅf¼×åÒ8k×ǵ£‘» ¾ã?!67ä»™ÃxÔj£x¥ªÃëjpÑã©Ø œâïŽYLY-”™ ˜ï”årœl-m@¢EÉÉ‚V5¦9ÝNxóB÷½¡Óœ™\6zgŒÚÙE¹$Ø-ˆ°¹b‰ðù+² §JÌÔ®Îó|ÂÙ4sɃl–ÊÛôˆ‚¸d‡Å([qËTú’w<ÈIkµÐ8q~OE¯®Ü%ÂIª¢£ØÌjéÝÌÐbˆ6 ð,lÝö›oÚ‹.süÂ硨2NÉÄ‚,“H÷D3î9c ÌýÎåHn3sæ6ŽL:­¸„rÁ‡Fk#¨ž^=&L®k™&ͤƒœ™µ´Ë¦€.‘qðSM‡VFè ’3¶‰ÔÔ³º̯´‘ÈCaÐÙâì¤Ù½¶!Ã] f"ãN‚hHa ùFˆ#hvG¯is±pÜls4.¡Uáìsqz›ŽÂ’ž'!xB[˜êMœÓ®¶p<ê¤`ÕC. kKDL¬s‹¬p–"d6<­!åÙܽڕÕ" ^áÓV‚ø`lÎu00]·kÞÑgk»±-¿ïk‘«‰`²™Ÿ,2q#²|‘FXã3†Ô8‘%Úç]Ñ_¿-îH ¤Dâ‚vpu”ñ²GM Û4qHö’ì’ À nàÝ4o5À×F£¯,’1;¥k#¾fµ­2™$cæhãSÉ;[hºdAÉÉÌi i§«u+_!âÖ¥sšHeŽG7dÑÉcsË¿í8 ì; ¬¤¬uDítíÚ0¾Pò>F6C´¹»\ À6¹¹kï‘?ŒaÒÔâ523ÛI-#"¦ªäËH'*äæÌÓv‚tï-:¼²I169ßQ+*m&hZÉö¼1™­´u®ÁgÑ—$_¬DÜø4õRMƒc,¯¨Ú×rNÒ'¶@ÆoÎræf„ÈÐèÃjäž*Џ¶¬“=Lôöa´™Á¦Æì{[}ß%sÙ•Ð""(ˆ€ˆˆˆ€ˆˆˆ€ˆˆ!¬ù”ÿvïRòµê•Ÿ2ŸîÝê^V¨õé»1ö[ê ¯Áj@è°­&ìÇÙo¨*Ìla3ƒ¸åþ`8Qn};Êm…‡%·VtÔ­ ,ò)8qÖÖï.Ì©[ ­Ì{œJ—š§ ½X§Žª[nZøû÷Öãð_(±œ?`kÂO¡%·ß¥ "lfú}kRf½¯.iÕÂÚ…q$vÞ4Z³Fe¸¦paqÁœÝGvgfÿ˜~¿ö±Zªì›<(‹oÇÿ«‰å¨hbÆC,qÍ$[j¨â.a±ÆÅoõ¸ß­±?JÏuASMÆ_Mò`†vLK×)½•ÇoîyO±ƒÚZÖî o¨.víp|6¤Eÿ5W,1>,¿£»šâ/pÛ8Xþû:WCRü¡Î¦RÖ 5¶»ˆ…íù®Z "¥‚6á5ûX™NÓ'ÈYÛ'4’×Bì]ÍoÑAu./C ¥Læ¶òçìÝå¸5Ö³ˆ±¸AA‹Ð˜ÜöÌç@ ln.}ïbÆw‚ˆ"à†“ÌV^ú˜&¦5Mm;ŒÏŒl¹m|¡à’ìÖ maaÍ®šìUáo›ãÐÔ69˜Øöañæh-ƒqq{‰O8±~äÒã1>‰µ5BHÚùfhpöcY!h/Ó‘ Ín}Ö[‘VÓM+bŽK½ÛK §ÿ¶ðÇù@Tµ\}U#â–¦šGÈÙC-&pÂ÷½åÑŒüƒËßs|­è[Ø]™Q5\ÑÉg¿aÜÒbkÈsïkܹàæÂÖ¶¡¢"(ˆ€«ðºLS e[qHâsÀa¥µœFüáX,ð&:ƒ Šš|»F—¸å{Hå<»§¾¬ #£¨¤‰í«ª/$YÍf×K\ô*üB²²šª–*jX&mCöaÒTì®vàÃ¥›¿¤îWur \-¼ipzz{ ¹ÀѸêG6òl”øÕ5Q§âñË#gæh ³²Ç•ghKs¡$ ¦×Ñ¿.Z¸kZÒ7[å·—;<áÒµôoË–®šÖ´ÖùmåÎÏ8t…ZÜeÒVÅ#a™”FŽj€ç˜Ú&Ç•ÀæÓGË/e¯{(¸IC-4“0Há2ÊðÒÇ冒35Äg¶Ö$tØ‹ ¶ŽFKd‰í{𿛇¸‚²Zø{³áÔÎÍ›4L9³f¾ƒžî¿”øÎõ° """¯Áp§bXdusb˜ƒ÷¼ed°³ÈÚy‚¢ÁÖÐ6‚7°TO9%§4î#~‚À*jÜFfcF‚:ú Kã—:W9Ïm›ËoÑ;Ð\"¯8½ÔÿÌYŒÚ4´Âû¹Ì{Zrž~S²ØrtÜTtØÃ$m\²G>Ê* a´²—ÛfÇr™–ãWlïÄ-jLjÑÊö¶)ÚòùM-‡8Ç´;» o¹m(ˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ!¬ù”ÿvïRòµê•Ÿ2ŸîÝê^V¨õé»1ö[ê Cù“¾Û?œ-ù»1ö[ê G£"öå³_ûÂ@¯›ä£.Ù£}…Ö¸«§ÙmŒ—hï­‰‹@¶þùU5t1T\eËñл²Š³¢ŠíasÝû¡UËÂ{;äé´æÌWÊìh®èîöw• ñ¸oб30®Ëác¶5_##¿eÚµÝï÷Sâ˜[fuN,qÓÉbúwEÀßâ?Õyù¸6µ¼kcªU¦Àú™L-<–_@‘a]W#¤©{žÒû%ÉÊ6ªO2Ü«’9ÎgµúW½ükP´F¡fD±Ìæ‚B»Ã8GWFæ!{Açq¸ñás«è$s¤N¯à¼1¦¬-dïhq‡§ðæ+¥Ú2f8ÆM¶ë/£tÏ‘ÄNw:Ã]˰f>üš*zY_5Gdý«‹›~‹_rÔFc#»ª`;…ÿ5¬È]{î\îÃy*$"º(€wÐ@ñuÔRVQV3<µÝíÊcômÓ·-#GýGz‚É}f^.Ü»³ŸP_%QMNʇÀd{š!™³ ¢÷-7lRGEEQS=%I¦Û”hs6ýB †¯m ”8OLÏ“ ë¸G8ç 90)§2ISQI<²Jds%¤.‡°c{þÈdÑÙ¿iÚj¯„:švD†™‘¶6»(ÚJÖ̶Øe_¦âö*ñ@DDD@DDD@DDD@DDDA ģû·z—•¯T¬ù”ÿvïRòµG¯MÙ²ßPZ¡µ ï³ùÂß›³e¾ ªñç`ÕÚüÂG"¦¢wX› ŸŽú‰å†Éœf½»þE¯쪋•kãé/¬ÈÂCâsŽà[л²°`gEÖµvK[äÞd²òdùKfSm46~‰‘çµæs/Ø›^ÛÖ›š7ÝâX\‘½Ì`oÌ9×!SK,/,’2Ó{j¹L ç ¬!l9„(ˆÚ¬ª2·V%„nÕJZz"þ5Er ÷±¯!„8h}о¦S%CÜIÞ²c³±Ä;¤šG}\úÂ>²g³r± Åg¥x0ÈG=®ª¹·¯©ŽìœÄŸŠ`fi7²¡Ñï¾æ³Ú®W)ÿ Âòÿ“ù#]ZÌ«GìðÿóÐ8]J£,Îa’6¿#ƒÛ›™Ãq[iýù»Úƒ^¶êa’žvæŠXƒÛÚí-± ‚g‚×Hèš\àEˆ&ÝxUÕ⸕4üHA µRË6M¸`p”ÚÎss[du»o{ØZÆH1JǾ”JÚh®rLÒðã›9`¹kˆŽùM‡(v\i=%5CdmE<2‰ðöfÜ}ö$””ÁÐ8SÂN2Âr’µ›Ñ¦š çÅ}Kªhqß ªh$ue?ݻԼ­z¥ģû·z—•ª=znÌ}–ú‚©á˜QýÑë ÚnÌ}–ú‚©á¾VìŸÔ$r<îž©Ð?“ø®†š¤TFÒ‹Mÿ®^fˆ]¡ºÎ“tÝÝ ¶sË.°8 \íû÷Ù}´×ü~:=kFÆLÀàGÇÇä°38¼Ý…àîÕ«\÷nxõR¿eª#¦ö*ºŠc­l¯»_»]B¾Š­Œm”n7Áyh³KL Ñoï…;3ÌÛ/Z5{Få°×zçq®¶¤éìÇïäîwfj8'0ó¨ÈŠß©¤}<®ŽPCZÎo@Xê7î«2>Š3”sª¬\ËëΣ7=ï¼~(æ\t ô¿øiþ—[ÿÎÉü‘®±rŸðÙ¹x/(ðÙ?’5Õ©*""€ˆˆˆ€ˆˆˆ€ˆˆ ¸ã˜[I­Œ¼«ŸÿÃÐ}¹ù¨Õ¤«§­‰ÒRÈ%cNRæî¿Bn×óÿÛÿô¹lj(ÛQ5lðÁW=8{Øé2ËLy/CÊwMÛ¬c^€¼ESQоT4ìAe|±i˜¦Ïqüœ8Õ¢–¡”Ùëàcã ´D¾&\Üò¿Jm-k\öH:$\ÜU5ôõôðº9뤫ÎDtúb¹Êékf`ìŽýÝ~75l´­ØÆÃ;ØýÉsatùü[C“5­Í½â"(ˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ‚Ï™O÷nõ/+^©Yó)þíÞ¥åj^›³e¾ ©¸Pì¼®wDwüÕÌݘû-õKŸðÕÝTN*óžYR‡´30Uò7.åœrrlV™oÓV¾)®O&êîÙ;9H\¸{I²Ý£ª0¸r´LŽžÈÍÇeÒu[ ¨<ÞU] @‘—iºúéÜÖ—duÛÍήEÌ:âïÑ\SL̶‘ÜÜë‘dò½­0¼rµÕ¶Vô² YmãŸU%[XÎGYN]lûhWž×ÓOK+£{2ó]z};žçX´ÜtîRÕa4¸„.eSXoºÚ޽¼ä›(Ëy۪뱾 O‡œÔl’x¼¤ÌIã}œ@æ!¸Órûkk½ @åo¾íWÑÉРôÏøsþ“üäŸÉêW/ÿ¿Ã2ÿœ“ù#]Bˆ """ """ ""Î6žÅmŽ6îkK€šÁ>böØ¿}ÉõžúÕž’š¢H¤¨§†WÂsFç°8°ô‚wnE2(+_„6LCŽIW3žäº(O$;0nl™¬÷ç½õ[†’˜Æ#4ð–63nA`Ãk¶Ý ;ÁLˆ4ú“†qn-ÔêM†|û-ƒr浯kZöçYRPÅI$’1ÎsžÀhc|¬,3së¿rÚDD@DDD@DDD@DDD@DDÖ|Ê»w©yZõJÏ™O÷nõ/+Tzôݘû-õ’nÌ}–ú‚ˆæ·'.oÞ$ÈÔXZô¯÷Óø7¥¸¨ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýÄ´þ é_î ÍŸÁ½+ýŘ å–f¾æE¿CYó)þíÞ¥åkÕ+>e?ݻԼ­¯MÙ²ßPQ©&ìÇÙo¨(ÔD@DDD@DDD@DDD@DDD@DDD@E+‹X@Ù4òA¹'£Æ¾mÚ™åwµQ)6íLò»Ú›Fö¦y]íPFŠM£{S<®ö¦Ñ½©žW{PFŠM£{S<®ö¦Ñ½©žW{PFŠM£{S<®öªjjªøW&Ê©iiâ£2Ú²îvv KÚï¤|Qt‹KˆKõÆ%þŸÿRq ~¸Ä¿ÓÿêAº‹KˆKõÆ%þŸÿRq ~¸Ä¿ÓÿêAº‹KˆKõÆ%þŸÿRq ~¸Ä¿ÓÿêAº‹KˆKõÆ%þŸÿRq ~¸Ä¿ÓÿêAº‹ŸÅå«ÃgÄ8•dœb®8Þ&Z\F>û®®-adÓÉäžù´ojg•ÞÔ¢“hÞÔÏ+½©´ojg•ÞÕh¤Ú7µ3ÊïjmÚ™åwµh¤Ú7µ3ÊïjmÚ™åwµh¤Ú7µ3ÊïjІ¥òâÕÑ,‹+GIÍsêò*%¬ù”ÿvïRòµê•Ÿ2ŸîÝê^Vƒ×¦ìÇÙo¨(Ô“vcì·Ôj" """ """ """ """ """ ’nÌ}–ú‚|¨©’å|ѵÁ­¸sÀ;‚‹ÓwL>xT*æ}=,’Ç ¦{ÃÏë>@O@'E_Š’î W½Õ ¨/£•ÛV€ë°žM¹º7émNõaÆé»¦<-zŽ%5´¬©†K|Ù2æîÑÀƒ{›Üs”´ÎêdµíÐQ¿eJzaž,ï{ÚÓ¹œ§»@ÞWFT˜ž%W?,†š©†Lï–,À†ˆ`×é}¨ý³Ø÷ì&Ãèh(c’×G%<­!ð95޽$1‚ú j¦â˜âÜ_ØgϲÈ̹­kÛuí΃O ­{ñj¦|‹Y<í~Ð;;d<^#•‡Ký+àh¥·ËTɇ»5ßJs½¯v­å8ZÄ÷ÆVëÞ N7MÝ0ùáʆ›ü{Sÿãÿ$JãÓwL>x\ø®¥§áµDóTFÈ@Z]¡9ãÐtî>D2*î¯a=Ýæ^Â{º/Í•\¥á%E~wl)è¢ã ¾›2éI}¹ËKAñg°$…§KŠWSaTÑR¶VSá°O+œZ§Bç=¹;ʳ·îÓ]¹ë°é*ŸQ?,{CH‘n…Ìdó“©ç+(ªðÃMÕ4Õ.¥ý ’ÄËÇÑ–ÍZÃp‚+±ZÉ_%,.ŽÅPƉlì²^¢6ŒšòƒZKdr¹ÕÆ!<”Ûbvb_“‹ÛY¯ÌÞ‡ ÑkÞÔÝC‰àkšéiK\×´‚Íáæï¹Î§¥Hq¬ÈÙ \%í¡ÖÔk‹þÈY¢®êöÝÑ~iÕì'»¢üÐWð«ç87ùø¿«¡\¦?ˆQÖÕa’¡’–×EpÞn[WV ’nÌ}–ú‚|¨©’å|ѵÁ­¸sÀ;‚‹ÓwL>xTkã’>, ’7¹e4ŽkšlZC ˆ*¡Ã°ˆß%STH̬dL Úæµ·` ;”æ‹’-›x¹[Ün›ºaóÂÕ‚ ž9c‚*™3rÈÖ5 ûÏ•}.)ŠÕV6‡e·j%|¬Ý”DàCò7KkgïßöTØ~+Uˆ1µlâÐS‡B×Å-ó8ÈÆ?GÞÃô€”Üã6›”Ñá4–⬢‚×ýcwÚûºr·È:¬Â[4S5”BXY’'€Ë±»¬0Ô肪•ÕԴΫ¥lPÔÉM<&í ¼Zh÷èá®VÚÃNU‡T´XÌ&7ÈøÙDÇJðù C{¸'¤ƒ­úVǦî˜|ð‚e]Iúûûúœ¶øÝ7tÃç…¥BöIâ.cƒšY ‹MÇí ݬù”ÿvïRòµê•Ÿ2ŸîÝê^Vƒ×¦ìÇÙo¨(×3' iœû¶ŽkZÂî¢ùו?qËç„ÀéÑsyS÷¾xN¼©ûŽ_<&N‹˜ëÊŸ¸åóÂuåOÜrùá0:t\Ç^TýÇ/ž¯*~ã—Ï Ó¢æ:ò§î9|ðyS÷¾xL1ו?qËç„ëÊŸ¸åóÂ`t蹎¼©ûŽ_<'^TýÇ/ž§EÌuåOÜrùá:ò§î9|ð˜:.c¯*~ã—Ï ×•?qËç„ÀéÑsyS÷¾xN¼©ûŽ_<&N‹˜ëÊŸ¸åóÂuåOÜrùá0:t\Ç^TýÇ/ž¯*~ã—Ï zü6‚G¹ï¡¦sœn\èšI>Eó©XwÕô¾…¾ÅGו?qËç„ëÊŸ¸åó ΥaßWÒúû©XwÕô¾…¾ÅGו?qËç„ëÊŸ¸åó ΥaßWÒúû©XwÕô¾…¾ÅGו?qËç„ëÊŸ¸åó ΥaßWÒúû©XwÕô¾…¾ÅGו?qËç„ëÊŸ¸åó ΥaßWÒúûÁ°©-´Ã(mÙ iþŠ›¯*~ã—Ï ×•?qËç„ýBÁ¾¨ þžÄê õEðÌö*޼©ûŽ_<'^TýÇ/ž[õ ú¢ƒøf{¨X7ÕÃ3ت:ò§î9|ðyS÷¾xAoÔ,êŠá™ìN¡`ßTP Ïb¨ëÊŸ¸åóÂuåOÜrùá¿P°oª(?†g±:…ƒ}SAü3=Š£¯*~ã—Ï ×•?qËç„1àØTR6H°Ê&=Žk›NÀZFâ –òæ:ò§î9|ðyS÷¾xL ×á´=Ï} 3œãrçDÒIò/Jþ¯¥ô-ö*>¼©ûŽ_<'^TýÇ/ž^u+ú¾—зØJþ¯¥ô-ö*>¼©ûŽ_<'^TýÇ/ž^u+ú¾—зØJþ¯¥ô-ö*>¼©ûŽ_<'^TýÇ/ž^u+ú¾—зØJþ¯¥ô-ö*>¼©ûŽ_<'^TýÇ/ž^u+ú¾—зإ‚–š›7§ŠÛò06þEÏuåOÜrùá:ò§î9|ðƒ¡¬ù”ÿvïRòµ×ÍÂúy¡|\RQ¥·Ì4ºäÿÙanalog-ce-6.0.17/how-to/batch/task6.jpg000066400000000000000000000420441406366436600175050ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄQ !1"AQ’2STUa‘“±ÑÒð4Rdqrs”¡#5B¢²á36bÁct¤Óñ‚³$%CuƒÿÄÿÄ%Q!1"2A#RaqÿÚ ?ŸÂÎ×`˜œT´Òº7S²BdŽææþ_"¤íûðjB}ªóŸ‹ðÑ®âU•9ð½éšhnHÚ3 ó_Mÿƒ[„@ùk¥/«Å«"¤§– JÉé˜þS^Öë´XÛ@3ë}ëÕN˜r™œø”wðÛd1Í% #b–û7ºÀ>Úëe‡o˜·ƒPzíVTtTÕô<Ã+¨ZÁPkZFgµðâlÝyˆÕ÷(V ±ÐVÔ>Z7‚2ö²]IÌüÙ@±n=Ö£_©„ü»e 1¹!’fPÒ:(­´x§q ¾‚æú]}ƒ†xÝL͆ž†’Y¹Œ§s‰ÒûVÌÃhhé1JQLÖa†J*\çZ¡…í.q}òó[k]g`°PbÑÏÅ$†AŠÏ %ù…áØ¼‹_xÓê³6øñ>˵'o8¯ƒÐúí[Ã,jHd•”TŽŠ+m q ¾ë›éuò|/ ‹†Xèk*-›ŒÁžÖK©9Ÿ›(Ö#-À纈PÁA€ãÐÑÓd¤ ¥1TÝÎã “rrOð€5Wüsê Û´Ã|SÁè} ö¯£†Ø§ƒÐúíXà•µqpSÙÕN͆Ãe–B6wÞÝ粑GR¿’Y¢Ï'}S*!cò‡lÒüÙK´±nQõéu©ŠWÜ&m?×È8]ŒTJ"‚Ž–Y¹Œ€¸ŸÀn˜ŸƒÑz/î®pÜ2ŽÂg£‹dÙöT2FOq ½ÃŽR/¼€6rØÝ%='myéßfÕÜž0yÍ·6ÇL»Ç:•×kcÍ¢=¬G ñ.ñE迺ûÛ–%Þ(ý÷WMe&+“J$ÇÙ~Íœ˜Ý¯ú‹ÚÃ~ëê¢L;“ÓÄÉÝ>(c¯‘í‰ÌhâÐF¶¾ÿRÎiýªþ] Žâ]âÑu÷¶üG¼Qú/î¶ö2–LB¤Å‡½‘SÀÛBè¤2NK¬ddyÀÿå òîÙŒáxfIXöÒ½îm^Ê#µ# t!Ã럯Ar¯øóŒ&mÛ[8Sо'ÈÊJgG³¸@Hm÷\ó,{nÄ{Å¢þêuu4X63->Zl´Æ)îã·ÔnMާšÛ×$©J[øM­×AÛn!Þ)=÷_{kÄ;Í'¢þëŸ ·ª3Î΀pª¿¼Òz/î¾öÕ_Þi=÷TdU:9Ûµ÷mýæ“Ñ/£„õÝæ—Ñ* ² ªíÚ÷¶jîõKè—ÑÂZÞõKè•YÕNŽvíwÛ%oy¥ôKïlu½ê—Ñ*P² j§G;v¹"¬ïTÞ‰}!¬ïTÞS…MTèçnׄê›Ñ¯½Ÿ«ïTÞTMTèçnÖÝž«ïtþ}í_{§ôj¨,‚j§G;v´ìåW{§ôk.ÍÕwºFªÂÈ&ªts·k>ÍT÷¸=ûÙšž÷£ °,‚š«ÑÎݬ†1SÞàôaeÙjŽ÷£ ´,‚j¯G;v±ìµG{‡Ñ…÷²•2FxY5S£»Oìœÿ2FÞÉOó!ôaA šëÑÎݦöFo™£ ïd&ù‘z0¡MuèçnÓxüß6/FÞ=/̋х ,‚k¯G;v—Çeù‘z0²ã’üؽQBú×NŽví+Éócôa}ãR|ØúF šëÑÎÝ¥Ç,’ÂÐÒ¬éü<‹,Ïï”þû-Pÿƒ'Úo¨®3‰MÆ6œB¯µÞ1~#c›5ÿÄÙeͲͮÎÿêµ´^{â-ˆ‡jyŒºªªëšºf9…ñC™Îc-kƒkoÑyzôþôÅ¿éÙý/^~³oãUþ»>pn·Åb©¥–¬m;DŽp7ÔóÒ©;EÅ;ý]Þêôi»±ö[ê ZÕ~{Ö1 4‰yðà>)ßèúî÷V]¤bþ®ïuwèµö.k«€ Äûý]ÞêÈp+ïôw{«½E>ÅÍup}¥â}þ“®ïu} Ä»ý']ÞêîÑ_³s]\(àn#ßé:î÷VCØ~¤ë»Ý]Â'ع®® p?ïÔ½w{«ïj~¥ë»Ý]²'غk«ŠÄ;õ/YÞê˵,C¿Rõî®Íû5ÕÆŽ ×÷Ún³½ÕôpR¿¾Óuî®Åì\×WÚ­}¦ë;ÝY W÷Ún³½Õ×"}‹šªä»W®ï´Ýg{«ïk5ÝöŸ¬ïuuˆŸbë®®Ppf·¾Óõ­Ö÷Ú~³½‹ªDûMUrÕò³½‹èàíg|ƒ¬ïbê>ÅÍUs#ƒÕò³½‹èàý_|ƒ¬}‹¥Dû5UÍö¯¾Aç>Å—`jûä>sì]'عª®x`U]ò9ö/£ªïùϱt›îjª€`•=ò9ö,† SóáóŸb½DßsUT}†©ùñyϱ}=GÏ‹Î}Ší}ÍURö&£çÅç>Åôa5>/9ö+”M÷5UN0¹þ|~sì_{?ÎÎ}ŠÝßsUUC ŸçGç>Åôa³|èüçØ­7ÜÕU`ÃæùÑùϱ}âüæyϱY"o±ªªþ#/Îg}âRüæyÔôM÷5UQÉó™ç_E$,󩨛ìjª¥“¥¾uôS?¥ªZ&ûªŒ)ßÒÕô@þ¤"n±ª­t…–ÈùÔMÖ5U¦–YØʹ Ü숾»ƒåQû?+½#}Õf‹yŸ2ÔW ±‡ñHk&5Ìù"³)è ·Ò¼åz¥gȧû·z—•¤Û'=znì}–ú‚©áÒÓà“A#£‘‘ækÚlAº¶›»e¾ ©¸Qþ[®û¿÷Yj^fîc¼§óÿe­œ*Çà%?œ(R3¡·IÖ·0ÌN]xG¹ öJ8ö,»bÆíûÊ8UѶñßֳʷÅÏ)ý°ã|ØŒÞt탷ï)üêE÷'Jp2™Û7Þ3ù×ÎØ±¯ÏçQ6~EðÅõ~) Êwl8׌gó á5ãüêDÉäW”ã kÆ3ùÓ¶ oÆSùÔ Û¬¶iÂ)g„׌gó¯°c~1¨ó¨™gÏks§3/DàUUMn %EdÒK/s38ÿkHÌW@¹ÎŒ¼})ÿÑè×F%Ò= ã5o¡ÃQÆD‘³<Âì`ti'Q¸8ák‹† (§¬Ä)§lòE%4nÊócÉ9×<—sêtµ÷ÈÄ©_YI²ŠVÄñ$r5Îf` ../Üô­|R¦WÒÉWQ ßM9”l¡,72Ö.?:÷ýV¶ãT®ª–;»fÈ(“#µ.{™’ÖÑ÷m²ï$‘k‚·C‰ÑÍ4PÆù6²æ³Úæå±9Žé»í|ÂÛ‚þ±ñÔ1Ó5ͨ9œ×Å™·:f/¨»Ü9Å»•»ÁÛESít -d,‚œD˼ǨÿËç$›ïÁºœq°WÌŒŽ¬@÷¹Ù€È2ØjìÖm…ÏX)NÅèZÖ8Ìâ× ÄˆÜvbä]öA«[)è+aŸþÄU6k7Œ ‚ÂÝslŒD^û­”îÞNeàÔRLéêi!~s=+e-k¤{ù6iý¡ ƒa§1 J¼F–ŠH⨑ÂICŒldn{Ÿk_(“k:.wŽÄ)D³hâÙƒ]‚7Ý}ܰ2ëÌ/­ÇHY>›># ^{l¢’<¶ßœ°ÞþLŸª§o²q1·‚N/°ý¤´Ù¥<º1Ù¹ 97Xêçt °§Æ°úžÊY--²Âö ä’@°;šN„è.VêlB–®S8¸ ÍÍšßœÂEž5‹GHPaÀ¶PE¾Î*Hï³ß°y}÷óÞÞO*ËÁ"Âä¼b›+#Ù0ÅLØÞæé«ß©qäÖôÝ`•Q‰ÒRÉ+j$[&—:'†˜ÙÖ³®l :‚±½ ÏlÎpÖÆâçÞö,hx 8‚.i<ÅV×pkÏ+öð7iµý©¦Í7-ŽeŒ™µhÏ ¶æ´s]N«Âß6!Ç¡¨ls1±ìÃãÌÐZ%ââ÷žqbýȸ´nÂ}Nf3nøÀlOͤ¥ŒmšçM-¼­Ý“¦4ÛvíÜÜù [O#žÓkذ70Ó]G8é ømS0QK±ËSÆÛ9~Ï+A5BræÜ5Ò÷6XϾpé&ššiŸ!’FÍKžKXÐDy´ 0Xæ;ßÓ Nì­Ó/ŽÙ3í?þ;eÍÝ÷7Ëʵï—]Ú¬{/C³{Ý3šå{_šæ5–Ív‘q£šlu ‚z<"jQ\àØ©›fDÐóf囋ʂA'[ <¹i6òµÆžBë1…¬ ¸pcEÉhdnÞ{› 4Ø©±:8d|n|Ž‘ÈæEäuòµÝËA6³›®îP ËÐÚBÉ Œµ¿³ÏÎ\ÜÀ2×Éד{ J‹ê-œ˜}DqÍv,EíÙœ€ ¹¸lq¶÷ÖÄ‘stƒâ1”•6|2²H]+3hD6p_’ ÐHèÔ$Qbl› umAÈÁ4Œ‡a#˜Ñ”ë˜Øi¾æÖæX·ŽlB’šŸ6YDŽ~xžܼ’Òeóƒws[çŒÂÞ0®)%C].ÜÔm›Ÿkµ›3XZû¹ÂRao‡ãÓT6IžÙ6‘åi.ask‡9¹'v䦭‚ –A)‘®’ÖvÉÙ.M€/¶PIÒÄßQÒzÚh8ÆÚL¼Z!4¼’r°æ×ËÜ;wB¯­ÀøÞ"Ú½¤M¹¥§Ï+2œ¬}ÆVœ»¬us:ÙŠa2Wq‘ _tü^_Ùg6­mtîÍ÷ÜnÊuA!Ø¥_+]>±oäžQ½ˆnœ²@³nCˆÍ’NŽi¢†7ɵ—5˜èž×7-‰ÌäwMßkæÞZ¬Õ±5C]å® tBÅÍppÎ/g÷!ºe%ºâ <ÑÈÙ¡}4r69Z0Ž0çììrƒ}6b÷$›ïÁ²£5øœ¸ÄÓËI'cà s38DÙ<³§*ÖýU⯟ ÛRâ°m­Ù ܬ¿áÞ&ÇÓ¯s~mè2½ ÏlÎpÖÆâçÞö,hx 8‚.i<Å*±8`Û]t±™Ë4;0Í aÒ׸¹äÚ÷Þ£âx#1 £P÷BçZ<‘ÍÒ;³h9M¸¾’ž‹‘nìcFÊ&:8Ìol­1ÄƼ<pæÊáo ;Á6Öü÷AZÇ?‚w¶ œêˆXy'-ÌÍmòZá¾ÇV‘ml¢ÐÊøx'†K+a™òšg8¹šùwu*÷çv¾Et „BÈD1ì£Ë‘™E›–ÄXsZÂßR!² {(òäfQfå±Ö°·Ô‚¦†®¦ aõsHÙd1Àédp:1ŹœíyšI&üÄîÑG—®km „…½Ã£!ÍÏ$m‹BGðÈàA"îàÕñ‚ á0Dz“6vevk“qÏ{›ýhø!“i´†7mY’K´í×CÒ9GO)ABq¬Bþ5O ]MDÒ³@é6mŒÉ{ƒ?Äç.Ð¥ô°Âj«¦–xqã sMšÒA¸îCßnç}õ×MÈ))©ÛiéáˆFÒÖ07(&ä n¹¥-%5f:Jx`a9‹b`h'¦Á+kë*j¨¶§auX$GrŠSmö{Hh!÷±;Ú HZߎWí"Š=•VGÒO$V ±²ùD„»“(:äÝ»]/›ILƽ¬§…¡òm^)÷1é7ßȵ·  dï”4Í•ç3Þ"ng‡\›kÊýa,x†'LÎ1,Õok‹Ë#dÙré~ë}ô ¼éQ]UˆÒ²Q°†êéø€Ú9Î…÷l€Úܰ;“{^úéyQAGRÇ2¦’ šççp’6¸Z×מÚ_¡& £ž¡•3ÒA$ñÛ$¯®sln,wPTâÔÑâ¸d‡gMA²FödÓ2î:ØïÜ¥Pâ3TbUÍŽñíöÁ Þ<²õÓ3.íwÚãE2j 9êS=$O²JøÚç6ÆâÇxÕ(éHÉ?i$²JüòI%®ó`/ rZÑ PÒ¾¾\NЗ—Wµ¯•®vF صù[¬5mÿN»›ŽÔÍÄêiéóRɰdíÊ?dùrØg/A#Œ7éå¼Bٌ͆1+¯w†‹›Øø·ª:—a´–CL_kbq‰·Œ Àink ¯¡¬©‡‚øeD²6i¥Ísœ¡ïcI:êlíüç_"Ælbm½KißI³§¨,sœI䵑“{sËKõÉ¥Úu"àÁ …ð˜cÙI›;2‹;5ɸç½Íþµ¬PQ†1‚’ ±½¯`Ù¶Ís@h# €  £©Ç1(›WPÚHÅ4|a‘9ù@Í~·Ïw\°òr uäÜôQ‡ˆÚ%s\û ÎhÊ ç°¹·iu¦–gR@e™™%y·{wXžq Ñnllcžæ1­sÎg;£`.zt~2DEšÏ‘O÷nõ/+^©Yò)þíÞ¥åj^›»e¾ ª8Gû†¯ì¸Vówcì·ÔOqÕoîFï¬${Iôó†GÍmÿÝTbQÚ[ꯘÍ5 ÙVcqYÍu—ªñø¸V'Ì$æn[*³ nº«Áû[]^å×UiæÞ%£-ï¯×ñø%¹ü«yoMÓ/?­k µXs~ž¥ó/ãú-¹<é“MtL+Xn¼ßU–aº\è<¨÷›\_žëÉ{ŽçããÔÁ–ÀÞk©25½¼Šêe€Œì9zmç[é«"œ.‘³gm@eð·MU#(èe®j}¤dk¯‘k‰‰uœ{dÀÞZtã.þ†+ÅEÀØvÙš÷©{¿‘Šõx¾OÚ^Šza¡i¬ùÿvïRòµê•Ÿ"ŸîÝê^V¨õé»±ö[ê «„¹*¾Èõ…k7v>Ë}AUpƒ÷%Uþhõ„i>œw_—¥E­¥u[@ ±òýjcá¹{¢"aäþªèð£ ó9×= ÍŒóï[˜ÆãnvßãÿK Ë€›ããU¨ˆKÿ­9Eÿ²ù—MÊCEÇ9éý/øù“)Ô“¨Ôß_Ž•FŒ¢ãë_-f“Î¥6=l ­®ý~>7,%Œìwnè¿·Ç:(¬fcr¶å·5¹·,é,è÷sþ s£ÊÒáq¦„"`Œað¶FäpÞ¹êêy(*‘’|«§¦p“1’>?ÙWðŠ)ì/äY¼xX”Œ6n1LNþ•4Gϻ˯¯ãr«àÓI€Øç§È®òXÜïòïV¾cÊgƒƒ¬ ÂH~ÝÇùZ¬Õ~ܸV_ùÎþ–«áù?izièE_ŽTIM†:Xe’'maa|lÎà#ZlÛ›ÌV¶W6Ž’I%}aª”ÇÒÉ/”›eÊËAÔŽ{“mFZZ"¥< ‰’Ô¾XÜÚh`c‹ŽP[!‘ñ–]né¶¿s¡$ÚËu;KˆM TÌ‘î“i˜µÌp&[ÝÁÄíÍ÷ëk¢*:œ^¦WÊØò2Hß–ís³5äZÌv—¾›µ‘Y‹ÃGS,/†wlblò½ŒY.Äß›)ÐjyÖÔX"©¬á \ôÓæÏ n’Í{]fg 4;0䃼¦ýEò8å-Äÿ(ôì‘ñn'ùG¯:¬Â?À§£nz¨æm%Cw~ÙÚI¶üìÓOÙßø‚ÙØZwáQÍ!Hr>WMQir†ˆ ¶Kß4œÍçߢôh¯n['§ öHø·ü£Ó²GŸŸå¼òUºg@ 3žNĹÎwì¤ÚÆÇ7v¤s«lM‰!in0‚Y%$ÌÉbñ)¤h.6×VX’ ¶ÿcdôôžÉâ”zvHø·ü£×žG€¶X¸Ô\dUCO® %åà‚ s4‚Ïâ@wÜ^<-MUM]3Û,Tå×-ŽK84\¸8·(Ó[’ä]¢¿ìlžž—Ù#âÜOòNȻŸŸå¼ò¯,Äêi©ª¡È*ŸML$.Í3Á‘fØ™ “as¡¶«Ð?áÝ#¨ðÆù#{Ÿ0”†_’nÜ lFëVoñÅc1+[ÌÎ0ϲ.ñn'ù7§d]âÜOòo]J.8mËvEÞ-Äÿ&ô싼[‰þMë©DÀå»"ïâ“zvEÞ-Äÿ&õÔ¢`rÝ‘w‹q?ɽ;"ïâ“zêQ\j ÇO;"ìÎmšZw1£ë%JVówí7ÖB’¢"(4Ö|Š»w©yZõJÏ‘O÷nõ/+TzôÝØû-õSÂ-0*£þ‘ë Únì}–ú‚©áî*»üÑë Ò}8H]p5º’Ó¦ý|ŸZ¯…Ù ¿‡ããੱ¼;K¯meæ˜HšþKímhøÝð?OÅiaݸ-­q&ûùüçêø·Ôº#f[kŸ?±} Ðoú‡ÇÆ«Þ_9ºÊãwÇÇ÷ú•F@ æÖøøú—×´¸;q7ßÍúÿe©ÓE¾>? -aÒLNSf.ŸUŽª“«pº7s´\©Æ„Œ-ˆf'7YÔ¾’’ú·7ÔU+)$Æ*/[ Fößÿµ‹fÑÍ–S+ÛšÀ“ÄŽ›eün¬Qž’H]™õÕ3ºú™2j,t°hS{€ °¹°²”ˆ *ìB)%Äh["{²Î-3o±8 ÿé¹ýjÅd׹ËoÐU’g¸R 寍çsK_ž¦I6Okƒƒš l–ú‰é/1wP¾ŽÓÂðàDsLwº7w_½7õ]~Ú^úþ±M´½õýbºm³!ËE€pŠ*‰'mN šJ‡TÉ%³:HÞFí׉¿?„Znã”Ô&’:¼°¸›½Îv÷FíŶ:ÄÝç+³ÛKß_Ö)¶—¾¿¬Slœ!É3ƒ8ìu •“à­lo…ìi! 1I¹Ž„IÐÛ™¶×OÁ,f q—‘ì†H#•òËš6<:àZÀ÷n:ƒ¿ê]ŽÚ^úþ±M´½õýb›lp‡$83ŽíŒïŸ|ÛcQÌ’^9M³H$–´ØÜ\hÑtÜ¢¨Âðé!Ä'¤t¥í˰q-ÊØØÁ¿Ÿ·í¥ïëÛKßÖ*OÉ3•ŠÄ,öÑwÖu‚m¢ï¬ëY¶—¾¿¬Sm/}X¬e¥žÚ.úΰM´]õ`«6Ò÷×õŠm¥ï¯ëȳÛEßYÖ ¶‹¾³¬fÚ^úþ±M´½õýb™{h»ë:Á6ÑwÖu‚¬ÛKß_Ö)¶—¾¿¬S"ÆIcs@kÚNfè”*¥³m/}X­hˆ ÓYò)þíÞ¥åkÕ+>E?ݻԼ­QëÓwcì·ÔG ?pV_æ¸Vówcì·ÔGÿpÕé~Gû„cÎã:ëñññΤÇÍÌ£4ë{¯ããý·Fðð½0áhLa;ýkk]¦¾½¶Š#d!}tì`åz/ªíðæ›Ÿ-‰>mÞ¿¯£zÔù¿…¼úÕÐ\æäXb@0Ädwú‚sˆO2µŽƒ$§MäÞÿZ‡YŒ±ŽâÔ 2Îí.7ZÙ«ñ‰vm{¶_ÄAÐ+Ú*zòÆÒ\w¹Ú’S”ÛÒã´˜D’ÉÆqGmdÞ#¾åpY¸n¶ƒããêÓžû®G9é߯ÇB>Mœo{¿†ûÏÇÅ–¢"=$£âUdm†1y$›Ú·aÔ|N ;µ'ŸãØ«è«)ŸS%Lò‹ƒÉþ¿E"Lr’1ɱ6×/:f=¢ÌXhH˸ïøö--˜H÷å»ùþ>?‰¸E¡°ú‚׃U¾jÉLº—yÆW@Àð²tÿüþF«[ÁãÿêOß¿ÔÕd¼_'í/U=«x@÷³ &=¶gOm ò=ÀÊÀ@uÅ® Æõ¬Nü>š•”ôU.–®sЦ«;˜r8ܸ¹Úr9Žã¸Z["çû;3&ª•Ðf†(£fɤ’&3Iµ›rÒ[¿}€³nl¥PâóÕÕANêBç‰\÷<½¶ É«C˜ÒëíÔ7qßÎȹúšêñŠ˜ãnÑŒÄQ°I“04¥Ä;Nä}O“@RpíxdX|Ò½€™Û^ûYïa ÊÃ}cu³d¾ž[ò(5µu1VÁKIMÏ–9$&YŒa¡¥ƒ™®¿wú(}°Féi}=Kb»Àytn’ÙA³KtÒnðlw.HªN-P)g˜Ñ5†)2óY±ù„4–ØX›,æâÛ¸8ÆÕŠy`tNÛ¶':å ²3skŽîV2ÀóÞö²*ZLuõ0CR)ZÚwY!ÚòÚùC¹l@Ú6æãŸM5‹[ŒÖUp~¢Zjhâ”áüiîã&¼?!i å;’O5µ;Ðtˆ±ayoíÖ›o¥ôæÖþûÖJ‰YW,ÓÁOLê‰j ƒZ׆îçÓuÔµÿæ#íËÿÖåC>1â91¼™ñËùˆ½å6|u» µ\nÊðe³›Êg#Aû=ú>çŸ[ænÉ >:݆ڮ7ex2ÙÍå3‘ ýžýsÏ­ƒs7eQ >1â91¼™ñËùˆ½å6|u» µ\nÊðe³›Êg#Aû=ú>çŸ[ænÊå3Ÿñ¿˜‹ÞLøÇˆåüÄ^òé‘AÌçÆ1â91¼ºdAÌçÆ1â91¼ºdAÌçÆ1â91¼ºdAÌçÆ1â91¼ºdAÌçÆ1â91¼ºdTs°vMó±“áO‚78HéØàßÀ­êÞnà}¦ú¨RTDEšÏ‘O÷nõ/+^©Yò)þíÞ¥åj^›»e¾ ªxGû†¯ìXVÓwcì·ÔO@vTâÐ?P<ÔËÌÀJI¥Ç7”)N‰¬Ñ­Z‹E¯ òÛâÿUÚ²å-yËX\n@çøÿØUÒHù Ütær°¨Ë³sMÉw7ÇÆõ'Ô–™ŸCFQ¾Ëd¾y›7ž~…™j´ÃaØÆdpå¿ô V¹Ÿ%§±¦dt‘6(€9yùþµ°ß[ùA7Ýñý–¦œËkëîç¸ßøy×®=xrmhÜšÚ~Ÿ‚ƒŠºybS°›ï#u­ÿ¿:–ÇnÖû·|k̶ À›qð>?°Â‚<®Kfh`¿9R¢À?ŠI´è\ºÄiþÞÏ×ÏÁt~ž_ïŽ1”(°zXû ç.õ¹°AýœA†ËkŽ<ý#ëX;CõnÓ ªÔC©àÙ¾ïú‡K¢ªàÇîs÷îþ–+Uãù?iw¯¦šºXk)ÌÅ„‡r^æAAj×OŠÛg˜¤2°Ë;ä-qin÷ÌN›µR‘aPÎEg ³æÌCÜ %å÷ß¼8’ö’me•>KM+eŠ7m3¾G=Ç6[æ$’{†êyšå)Gu3ª…Aö¡á÷ f ,½·_+ˆ¿Eº´¿¡yÖK‹ÃdsCó8¸‡€ybîv†ã”zTäAS‹aU5õ°TCZØ1¹¹dæ “™’0ÿÓëò[spzC±t‘ÙñìÜ[ ßNs-c³ÚXZ÷Ñ s+TAEÌl.h$æÈàæZö p7`°Äs•±Øu£š3C&€S½­%£f/f€7wNÝÒ¥"‚+ðêY*¸Ë£v{‡´pcœ79̾RE…‰Ðt¦\š™”îŠFÄÈ„Žg³4`X5ÖpÌ7ï¾óÒU‚ ÅŒ¶Í."åܧo7çõs,‘ƒ¯Æ°Ù™.‘Ò8 å…£õ+z*-ö­èQÞÄÚ·¡ýG{B&E¾Õ½ê;Ø›Vô?¨ïb¨DÈ·Ú·¡ýG{jÞ‡õìU™ûVô?¨ïbm[Ðþ£½Š¡"ßjÞ‡õìM«zÔw±T"d[í[Ðþ£½‰µoCúŽö*„L‹}«zÔw±6­èQÞÅP‰‘oµoCúŽö&Õ½ê;ت2-dxp¡÷Ìßà=!U" ""ƒMgȧû·z—•¯T¬ùÿvïRòµG¯MݲßPU\ ýÉSõXV³wcì·ÔW?rU}‘ë82ÛܸØ(ÒH?€\ô¬Ý™æÖÓ˸-Œ.§Jé 4EF\sM èç+l”ôîÉo²}«h:è û”Ÿ"Ü39Ge4QœÍeÝÌJÁsåL ép¶µ·Ü4Z„Æ_[»E²ûù¾?ºúØî7ûÖE{to[äaˆ»IòþE˜½­}þ]ãããE±±îÓãã㣠Ät||t'$Ãå÷^ûÆÿ«ûüj¾ó Ü~?¨_7û_êöþ«<£~þ{Žu™±Å¤ýV?¦‹hÛ“ae¹Í;¯o.ÿŽ‹­fwå’5<÷èNMaÔð]ÁØ;ˆÝÆøòX­•gAZÓ¿úX¬×šþÝ#Њ¿× =Ì•1àîs]+éè+L­§Ã¥Š“ Žšžj© Cy ä=ÙÌ`ù o¥úN[(«d\鯫Ë+$ltÛ:,¤‡^BÉ%a äæÙ\|½æŽÊÊšY3D)5EUC[,‘æŽ5@˜_CäѬÚ‡T‹—¯‰“Êx±dbª`ÑÉ™ o›{®9VÒÇC},«§¬ì5%E´†Y\éb2w%€›óÿD¹öãµ3q:šz|Ô²l;rÙ>\¶ËÁÐHã úF¹v7¬};Èu&Ô½¥ ¼†MÚÐïÚŒ­¸-"ã7$å!xŠŒcs6{If½¯|‘ÝÌ–3–¥ÆwžU€ËùÂÆ›¯’TOQ69)àšƒËä܃›“c.âs¿]ù+Y__ˆpn¦ï¦a8P©˜ˆ\s þKy|›ï9¯}ÃrêûG5ÆçV‹i}9Ï5¿¶ä""€¡ÖOVÚºJZ&Bé*à6¤€,ÜÜßR˜¢?üÄ}¹úܨÙĸAó0ÏK'ºœK„3 ô²{ªL8Ed{ ø¤¯Ù¼9×ÚrÇ#’y{¹Üú‹—~Óh‡¬aŸ•û7‡:ûNXärO/w ÛŸQrïÚm*#q.|Ì3ÒÉî§áÌÃ=,žê“YÃ>)+öouöœ±Èäž^îA·>¢åß´Ú\ çx—>féd÷S‰pƒæaž–OutH çx—>féd÷S‰pƒæaž–OutHƒâ\ ù˜g¥“ÝN%™†zY=ÕÑ"w‰pƒæaž–Ou8—>féd÷WDˆ9Þ%™†zY=Ôâ\ ù˜g¥“Ý] çx—>féd÷S‰pƒæaž–OutHƒŸ†“³ŠØ˜ž÷:ÞK€Õo7p>Ó}aT$¨ˆŠ 5Ÿ"ŸîÝê^V½R³äSýÛ½KÊÕ½7v>Ë}AUãâø-HÖ¤ÝØû-õY€ì&pw¿Ô !Íϧ‘nØXr[ugMJÐÐâÁ2ÜiÃŽ¶·‘veJØ]n`³Ø,âVÜVjœ.õbž:ª@ym¹kãòß[Á|¢ÆpüA¬; >d–ß~”0ÔØÍô |P9Öý › #1x7èÜTØ cEÀW80ƒ-† _ÊíˆhS‹H€Qeßk}Bë2aL j?E¯g™Ýu¿f÷Ó¾êDúô¦fì‡Au“¢;•£)þh¿MÖ2@9žµ•ÂñôƒëQ&kÚòæ\-¨WGmãEhÁî·Î .83›°îÌìßþCõÿâÅj«°lð¢-¾wåj±XŸmB=u)¬¦ty!k´~F±Ù…¬ZCÚE¿‹¥¥¥–•áµòãDÖ\såc;†ûî ÉE%0ŒÆ)á tb"܂łömº5:yJJbZM<$´—@ЗÖý`¹i4”ÎkšêxK\×´‚Á¨y»Çâu=+MfG_S ÕG>ÅkY+æò‹I6#'õ*b 5õ ©ž’ 'ŽÙ%|ms›cqc¼jŽ £|2ÂêHÏÏ+ m³Ý¾äsªB Öø!“i´†7mY’K´í×CÒ9GO)Xº’™õLª}<.¨`ÊÉKvtÞ7Ÿ:܈"φÐTGsÐÓJÈ[–6¾&¸0t4¦áæR#nXØÖ´’ë4[RnOâI+$@DD§‹½øµH˳¦//»€:°´[η"¢ÓŒ³£ù›íN2ÎæoµU¢dZq–t3}©ÆYÑüÍöª´L‹N2Îæoµ8Ë:?™¾ÕV‰‘iÆYÑüÍö§gGó7ÚªÑ2-8Ë:?™¾Ôã,èþfûUZ&E§gGó7ÚœeÌßj«DÈ´ã,èþfûSŒ³£ù›íUh™œeÌßjq–t3}ª­"ÉóµÀ (—7§ëU¨ˆˆ ÓYò)þíÞ¥åkÕ+>E?ݻԼ­QëÓwcì·Ôv1~ÆËm÷mºÁXÍݲßPUø°¾ ?9ŸÔ=ŠXõow¥¹·-Í úÖ,c@¸aqö[^M€ ýWvXLÖÍâ’0XðZAçpÞì*vš9fxwÏ)nœÎ;ù 9£)Ìë“ÍuA´k˜#lö‚Ö7¤ÄO±Ãa¼"®ÃÝ‘Î/mõk—c„𒇯&Z/ ÌñѪ¬ÅèiÃÆèä‹vIXòèÛúh<š(lÀûÊi)ª\ÌBIŠ¡™cç×?1¬u¹Sõ]œRG£ÿµ9B=( ˆÌ­)é@4}v\Þ Â:9ÞÖIlÇpÜï>ãÍкú9¡¨fh$ˆúÁÔ)ea°°ÕG–dæ…¡íò, ‰ãÊÞ•[%³ë¿È­ë›ÉÔªÐÀçh‘m„ a¿ÿ«½MSŒ=¹hÿšïSVõ™QD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDDA¦³äSýÛ½KÊתV|Š»w©yZ£×¦îÇÙo¨(ŸÈöÙýaO›»e¾  âBôd^ܶkÿÌ$ ù¿et†Íì.£Šº}–ØÉv*‘1hßå*¦®†*‹Œ¹~:vZ«1ú(®Ö=ßé ®^Ùß³¦Ó›1_+°Y¢»£»ÙäT3Äâ5¿BÄÌ»,„UŽØÕ~ÆG µk¼Ÿû[ñL­³:§ –8éä±};‡"àoúû¯?7Ö·Ö¤vJ´ÀØS)…§’Ëè,+ªät•/sÚXwd¹9@æÕió)•rG9Ìàv¿:÷¿Ö¢‘¨Ô,ÈÛÎa¸$+¼3„utnh´w¨ï _A#"p=á5ak'{CˆÔ8å?‡1].Ñ“1Æ2l ·Yx%¦|ìŽ"s¹Öî]ƒ1÷à4ÑSÒÊùª;§í\\ÛôZû–¢3ÝSÜ/ú¨Ì…×¾åÎáÜ7’¢B+¢ˆ|Á”«û®¢’²Š±™à®ònSÑ.¹i?æ;ÔKë2ñvåÝœú‚ø±*""€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ4Ö|Š»w©yZõJÏ‘O÷nõ/+TzôÝØû-õ6¡qÿ[?¬)ówcì·Ô^<âÌ¡ã{@?¨Hö*j'u‰°°éøò­L,6Lã5íåó(ðNʨ¹V¹Þ>rúÌŒ$>'8î½ »+t]F®Âikc<Àî–P>LŸ´¶e»i¡³ôL=¬€Ç3™~äÚöÞ¡¹£q]Þ%…ÁYÜÆ6üÃr4²ÂòÉ#-7¶«”À®pºÀ‚‡0…¨ÍªÊµ¼j±,#v«iièX‹ýj‹äî/c^C pÐû}L¦J‡¸“½dÇ:7gcˆwH+SšG•\øÂ>²g³r± Åg¥x0ÈG=®ª¹·¯©JöN âOÅ034›ÙPè÷ßsYíW+”ÿ†¿åyëdþˆ×V³*""€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆ4Ö|Š»w©yZõJÏ‘O÷nõ/+TzôÝØû-õSÂ-0*£þ‘ë Únì}–ú‚©á¾VìŸî=;§ªtäþ+¡¦©‡4õi¿ããUËÌÑ ´7YÒb‚@[»¡vÎ}²ë€ÕÎß¿}—Ñ+AÝÇã£Ö ÃXɘøøýg›°¼Ú µkžíÀ¯UµøDxƒ-P7±UÔSåke}ÚýÚêôUlcl ãq¾ ËEšZ`f‹”.mñžfÙzÑ«Ú7-†»×;p}µ ÏOf?'s¾µ™¨àœÃε?>¦‘ôòº9AFszÀÓ¨Ü_º¬È<ú-g(çUX¹—×k7¾÷Þ?s.:Pz_ü4ÿ+K­ÿüÙ?¢5Ö.Sþ7/åM“ú#]Z’¢"(ˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆƒMgȧû·z—•¯T¬ùÿvïRòµG¯MݲßPTÜ(v^ ×;¢;þªænì}–ú‚¥áOùj¿î¿Ý“мç–VÐö†f ¾FåܳŽNMŠÓ)ôÕ¯Šk“ɺ»†vNÎcÒ.Òl¦ÑÕ\9Z&GO dfãºé:© ¨<Þu] @‘—iºúéÜÖ—duÛÍήEÌ:âïÑ\SL̶‘ÜÜë‘dò½­0¼rµÕ¶Vô² YmãŸU%R±œ2޲œº6ÙöЯ=¯¦ž–WFöeæºôúw=αi¸éܶÕa4¸„.eSXoºÚ޽¼ä›-e¼íÕuØß§ÃÎj6I<^ræ$ñ¾Î sˆÒ.4ܾÚÚïBÐ9[ï»Uôrt(=3þÿ–$ÿ¬“ú#]Jåÿá×ùf_úÉ?¢5Ô(ЈŠ" """ """ """ """ """ """ """ """ ÓYò)þíÞ¥åkÕ+>E?ݻԼ­QëÓwcì·Ôµ²nì}–ú‚Ôs[“—7ú‰ôAõŸèÞ•þâZ£zWûŠŒÑaiþé_î%§ú7¥¸ƒ4XZ£zWû‰iþé_î ÍŸèÞ•þâZ£zWûˆ3E…§ú7¥¸–ŸèÞ•þâ Ñaiþé_î%§ú7¥¸ƒ4XZ£zWû‰iþé_î ÍŸèÞ•þâZ£zWûˆ3E…§ú7¥¸–ŸèÞ•þâ Ñaiþé_î%§ú7¥¸ƒ4XZ£zWû‰iþé_î ÍŸèÞ•þâZ£zWûˆ3E…§ú7¥¸–ŸèÞ•þâ Ñaiþé_î%§ú7¥¸ƒ4XZ£zWû‰iþé_î ÍŸèÞ•þâZ£zWûˆ3E…§ú7¥¸–ŸèÞ•þâ Ñaiþé_î%§ú7¥¸ƒ4XZ£zWû‰iþé_î ÍŸèÞ•þâZ£zWûˆ3E…§ú7¥¸–ŸèÞ•þâ Ñaiþé_î%§ú7¥¸ƒ4XZ£zWû‰iþé_î ÍŸèÞ•þâZ£zWûˆ3E…§ú7¥¸–ŸèÞ•þâ Ñaiþé_î,Àpg,³5÷0’-ø€ƒMgȧû·z—•¯T¬ùÿvïRò´½7v>Ë}Ak[&îÇÙo¨-j" """ """ """ """ """ "ÚâÖ6M¯2£mgȧû·z—•¯T¬ùÿvïRò´½7v>Ë}Ak[&îÇÙo¨-j" """ """ """ """ """ Ù7v>Ë}Ak_**`d¹_4mpknðàµqºo ‡® ¹ŸOK$±ÂéžÁpÆóúϘÐ ÑW⤻‚UïuCj èåvÕ ºì'“nnú[S½Xqºo ‡®zŽ%5´¬©†K|Ù2æîÑÀƒ{›Üs”´ÎìdµíÐQ¿eJzaž,ï{ÚÓ¹œ§»@ÞWFT˜ž%W?,†š©†Lï–,À†ˆp×é}¨þ3Üùl7aô41É k£’žVøÈÇ^À’Á}µ[¸¦Ÿ·öóì²3.kZöÝ{s ‡…V½øµS?bÖO;_´ÎÙˆåaÒÿ:çx©mòŠdÃÝšï¥9Þ×»Vòœ-b|£+uò³ÓxL=pƒr¡¦ÿ>Ôÿýqÿì‰\qºo ‡®>+©iømQ<Õ²'P‡hNxô;™LŠ»³ØO‡Eú§g°Ÿ‹õA ®GÒ𒢿;¶ôQq†_M™t¤¾Ü奠ýYì !C¥Å+©°ªh©[+)ðØ'•Î-‚Ó¡sžÜÁåYÛ÷i¬¹ë°é*ŸQ?,{CH‘n…Ìdó“©ç+(ªðÃMÕ4Õ.¥ÿIbeãèËf€-a¸ ÁŠìV²WÉK £…ñT1¢[;,—¨£&¼ Ö’Ùœ£nuqˆO%6ÆX˜—äâöÖkó7¡ÂÄôZ÷°å6!Äð5Ít´¥®kÚAfðówÜçSÒ¶k26CW {AhuµÚâÿ€óh«»=„øt_ªv{ ðè¿Tü*ùN ÿ_õµt+”Çñ :Ú¬ RT2RÚè®ÍËjêÔ&îÇÙo¨-kåEL —+æ® mÞÜ®7Má0õ¢>9#âÀ± #{˜öSH湦Ť0Ø‚´Í„Fù(à‚š¢Fec"`nЗ5­»ܧ4\‘lÛÅÊÆé¼&¸Q`ƒ§ŽXàŠ‚&Lܲ5cCÇA~óçA_KŠbµU¡ÙAíÚ‰_+7e8ƼÒÚÙü·þ»Åj±6­œZ pèZø¥¾gÇèû؈MÈÞ3i2š<&’ÜU”PZÿá7}¯»§+|áÌ%³E3YD%…™"x »ºÀó Nˆ(û)]]KLêºVÅ L”ÓÂnÐ@ÛŦq~Žåm¬4åXuJ „Æù(˜é^!h`/p7ôu¿J‘Æé¼&¸A¹WR~þÄ~Ä>§)|n›Âaë… …ì“Ä\Ç4²›âA6³äSýÛ½KÊתV|Š»w©yZ^›»e¾ µ®fNÓ9÷mÖµ…Ü5Eó·*—®§EÌvåOàrõÂvåOàrõÂ`t蹎ܩü^¸NÜ©ü^¸L1Û•?Ë× Û•?Ë× Ó¢æ;r§ð9zá;r§ð9zá0:t\ÇnTþ/\'nTþ/\&N‹˜íÊŸÀåë„íÊŸÀåë„ÀéÑs¹Sø½p¹Sø½p˜:.c·*—®·*—®§EÌvåOàrõÂvåOàrõÂ`t蹎ܩü^¸NÜ©ü^¸L1Û•?Ë× Û•?Ë× zü6‚G¹ï¡¦sœn\èšI>eó±Xw‹é} }Š·*—®·*—®^v+ñ}/¡o±;‡x¾—зبûr§ð9zá;r§ð9záçb°ïÒúû±Xw‹é} }Š·*—®·*—®^v+ñ}/¡o±;‡x¾—зبûr§ð9zá;r§ð9záçb°ïÒúûÁ°©-´Ã(mÙ iÿeMÛ•?Ë× Û•?Ë×-ûƒx¢ƒòÌö'`°oP~YžÅQÛ•?Ë× Û•?Ë×-ûƒx¢ƒòÌö'`°oP~YžÅQÛ•?Ë× Û•?Ë×-ûƒx¢ƒòÌö'`°oP~YžÅQÛ•?Ë× Û•?Ë×-ûƒx¢ƒòÌö'`°oÐ~YžÅQÛ•?Ë× Û•?Ë×.cÁ°¨¤l‘a”L{×6€´Ä)˘íÊŸÀåë„íÊŸÀåë„À½~A#Ü÷ÐÓ9Î7.tM$Ÿ2ùج;Åô¾…¾ÅGÛ•?Ë× Û•?Ë×/;‡x¾—з؊ü_Kè[ìT}¹Sø½p¹Sø½p‚ó±Xw‹é} }‰Ø¬;Åô¾…¾ÅGÛ•?Ë× Û•?Ë×/;‡x¾—з؊ü_Kè[ìT}¹Sø½p¹Sø½p‚ó±Xw‹é} }‹l´ÔÙ¸µ36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ>¹"ÿÄÿÄQ !1"2AQa’ST‘“±ÑÒð#4BRUdqrs¡5b²Áá36‚”¤Óñ$ct%¢Cuƒ³ÿÄÿÄ$1Q!2A"#aqÿÚ ?ŸÙgd÷Ø&&Õ­£6ªmVèp—“&zz*“¿ì[Ŭ<ÉõÕæ0ÿköh•v•åÎ|/g6ˆÌó2HÚ#˜òN›ÿ#÷anß:Ww‹^5inë—Ž)O -|$­)!R‘4>³¾½Tч)™Ï©G_fØâmç,mÓ³³Z­ÔãCuŠÃ¿Ì[Ŭ<ÉõÕ••µýc¸eõŠP. êHÌ´­‚L'^BwT Œ+ geÖì/níˆ{¶Xl­(wRs/6PAdY­Fß ývɾÍ1·qäXÚ)¦£h±n¢: 3¤×Ö;3Æî^K6ö6ޏ­ÈEº”N“¸¶FcgiŠZ‹d£ .Xr¥*.V’¥Î^Sªb&³À°V,1fßíGpb¯²É^a,ìVDNñ¦ÿÖ³6øñ>ëµ'8¯‹Øù“ë­ˆìËq—E•¢šj6‹ („Né3¤×Çð¼1¬ —[±¼¸S¶!îÙaµ-(wRs/6PAdY©Ø…‹<ͶK@›RÕÌ©]±$dœ§Sò@Õÿ9â Û´Ù¾)âö>dúëèìÛñ{2}uŽ {v×b˜ÖÎéôl6,®³— Ç4òÅH³À­W8ëÍgs´t‹†P¼¡@˜I^l¥ZANQöé5©ŠW˜LÚ_컸t4Å«®+rÁQ?5~˜Ÿ‹Ùy¯ëW8nggŒá/Ùµ²K‹Z .âÉ™ 9Hä€+–Æí-í;U6mç·[Y“w$öÁå1¹0t˼rԮݭŒ6ˆåb;3ļ—šþµ÷¿,KÀYù¯ëWIE¦*Ú:ÇÐÙ^ÍÔΫu7îj#Àã­8ý»H}Oâ…¶Ò·–”€ÖŠ)kg¢³š~Õ®ÐGf8—€³ó_Ö¾÷߈ø ?5ýkos-\Ä.KXzÐÕ» †TÓ…ÇÉTÞp ?Å éݳÂðÌ2ÒñiµZÔ›½“GjF@¦B‡Ú?n‚M_óÎ0™·mhì§[Kq–Êm¸Î Á!3ºO%cßv#à,ü×õ©×ÖlÙ`ØËV¶ùm²ÛŸ•¾ “$ÁÔòFúä…j”¥¿ µ£õÐwÛˆx O5ýkï}x‡´ó_Ö¹ñY ÞÕ:g]ìªÿÀÚy¯ë_{ê¿ð6žkúÕ¬…6©Ñ®Ý¯»è¿ð6žj¾ŽÉï¼ ¯šª!Y mS£]»^÷Í}à­|Õ}’Þø+_5Tb²Ú§F»v»ï’÷ÀÚùªûßóUJ+!SjíÚävEyà­¼Õ}Þx+o7Tâ²Ú§F»v¸^x+o7_{¿wà­¼ÝT ÈSjíÚÛ»×~ßÍ×ÑŽÝø;7UB²Ú§F»v´îå׃·óu—v›ª±Y mS£]»Y÷jçÁ±æëïvn|lU`¬…Mªôk·k!Œ\ø6<ج»­qàØób«Ed)µ^vícÝkÏ›÷º—1Ÿ6*¼VB¦Õ:5Û´þé¿óób¾÷Iÿ˜Ï›VB›uè×nÓ{¢÷ÌgÍŠûݾc^lT!Y m×£]»Mí÷¾k^lWÞÞwæ5æÅC¦Ýz5Û´¾Ýwæ5æÅeÛŽüּب¢¾Š›tè×nÒ»mÏšß›÷¶œù­õF¦Ýz5Û´¶ÝqÀ£,¤$ª9ÿ.ŠË2ü%¿›þ•©Ÿì\ûÉôã;IîØÚv…ß{½±=£6iþÓe—6Ë6»9ýè+Ï|E±íOq—Uu}&îÙ A[LæRˆ‰ Æý+ËëÐûSÿ×Gð®¼þ³oÆ«úìû.ìn÷ÅZ¹µvÝ(MºCŠP3©äž©;ÅÅ<=Ÿ]^Íz3Üq÷S讵_žõŒBM"^|;Å<=Ÿ]^ÍeÞF)áìúêök¿¥kȹ·W; Äü=Ÿ]^Íd; Äü=§]^Íw´©ä\Û«ƒï/ðöu{5ôv‰x{Nº½šîéWɹ·W ; Ä|=§]^Íd;Ä|5§]^Íw§‘sn® vˆøk^º½šûÞ†#á­zêök¶¥<‹¦Ý\PìGðÖ½e{5—zX‡†µë+ٮΕ<‹›uq£±;ÿ mÖW³_Gb—þÛ¬¯f»Sȹ·WÞ­ÿ…¶ë+Ù¬‡b×þÛ¬¯fºêSȹµW%Þ½÷…¶ë+Ù¯½ìßx[~²½šë)O"ë·W(;½ð¶ýe{5÷½»ß oÖWªºªSȺmUËÇ/<#ez«èìvóÂ1ÖWªºŠSȹµW2;¼ðŒu•ꯣ±û¿ÇXú«¥¥<‹›Us}À»ðŒyOª²î ß„gÊ}UÑRžEͪ¹á]xF|§Õ_FuáòŸUt¦ýͪ¨ sáòŸUd0[ŸžÏ”úªö”ß¹µUq®~{^Sꯣ¸ùíyOª®éMû›UR÷&ãçµå>ªú0›ž×”úªæ”ß¹µU8ÂßùíùOª¾÷-ÿœß”úªÞ•7îmUT0×þs~Sꯣ {ç7å>ª´¥7îmUX0÷¾s~S꯽ ïÎG”úªÊ”ß±µUh»ó‘寽¤ïÎG–§Ò›ö6ª‚,ÜùÈò×Ñhç:<µ6”ß±µT1jç:|µô[/5.”ß±µTan¾t×ÐÂùÅH¥7¬mU 2®qYlEm¥7¬mUæÕ×Ћ·˜ÉÙ3}²MGîSÿJ_yÄû5gJÄÞgܵ¬aý¨ÍãÆá×–ãP¥:A:€ç¯9¯T¼ø“ÿ†¯Ey]&Ù4áëÏqÇÝO UOdo;o€^<ÊmÄ7™+I‚ Õ³Üq÷SèMÙG÷nûðÿe©yš»&Ç?i?åþ•­•cŠPÊ*ˆàT4èàûks ÄåÑ'²R­Buž„Ö´`ªnÙ¶Ù~ÞÝIwj®×µKi”e*¼•™@‚c¸K޾êÕwÀqÖʉ(q+ákÂr‚1šX–,ͶýÓ J–òZ J¡N6•’Q^JYâ̸۽°´¥Æß-”¥'qym7å)ÿQop.š[û%¾wÖ„l¤Ë¨p(“:Áp‘¦†wƒBÆ&sºV§QÊêÚ—[R@ARç‹&7(-¾¶fåî¹.#‚HL˜ŽäÉÐLIÐMA»Çm[¶.²ê@KJB…6§•-$ÀPS ‘¨ç©W6n=}op‹Œ‰kzrIŽPÈ’#ADÔVð‡ÓfÍš¯RmíË;¥˜9[ZT3™2a"¤ÁÒAŬ¶iXSÅJ$lÒÃ…Á2€3 éÔ”9Åi½ÆXh4›UmÖãÌ£2RÛ ZÒ5Xàƒ•R$òŽq:op]^9tM³‹[…A6ÛT$6“Á‘Âø!¬ò‘µ‘Á\FV­î›E±u—œB˜•ÞHÊRRm:eçè7]âÌ¢ÚÑËe¥jº-)¼ÉW µ8ÚIèÑÁ¿ž¶'±RV ò‚R3[PÚ Q#‡©ƒ3˜sŠ‚œÉ´ ¿–­†™FÊ8 qµ‰3ª¾ ݨ„ˆ3·cM[5³iVÍ–Ò€ÊÛµ Yʤ­%ÅL¯T Œ³¯D„c9¬qkÀÊŠ,J²!hSJP %z… ¨ònŠÊ×aÛÛ‹wW¥Ô%°[P!*m çŠJ”@˜’ kY5…­vxƒ× pß“´S-ìò‚ÚQ %\‰§rÖ¶ßÜ$­ë–nTRÜ og ;ö|úO,j-± [·Kl8¢ 3'3jHZ~r ±¨ÔHÔsŠ‹oŒ´¦Ý[áÀEí!¶˜ZÕVR`T'Y`7qÁðF°·%±m• ìZ¶KkRtÕkÔ¨ðFèôÝ' y’‡mn›Kè[æ]d­9]s9B@<úk iou¥­“h²‡ Šø,Äo’ñ¯:fw^Çfµ©å$!µº´­µ%HJ#4¤‰)&¤EW£±¤4¤ìn”iNÈ)!Œ¹µ­¸Ó˜îßR •Ü"æåä¸þßléB R¨„&5i¥o:¤ò Ýq‹Ù[\©ݶÒZ”¸ƒ¡–àæÜ¦~öñ²8µ–Í+ x©DšXp¸"&Pa½:‘ò‡8¨(ìq¦Ë%§ò†—1–e!Æ”¿‘ ¥Ë¿|ÊúÎîÖýwÖqçÝZŽ¡IBJZI)Äe AŸMÆ‚s¸›)FëIS­_¸…%*Ð)`ÄOÉ艓º²V'f…º‡ãjkx[KI^¹x8z83ª‡8­6¸jÛÃp¶VâCÖ½R3$‚…sr)QÓ¢¡³Øéeõ¸—­¤°¶sv Îì”™yE_ 9aZ Ì­ÔÅ™rým§d[h· Vu-Jq%$oÓ&¢4…Ní,°âe!@IO %;Œrúyj­¬m¿Û]¸¥]¥„4‡J'.R²AÖTƒ˜&x ÎhP´@XOÂ)*2uH'NSÉÓuT¥*)J 7ŸðÕè¯+¯T¼ø“ÿ†¯Ey]QëÏqÇÝO U?dúö;z?ñÿ1WqÇÝO U?d¿ÝëßÃþb‘Èò¥"Q­U¬»ž¯%;§ô÷÷üéîÑ•ó]¯œ«ÊÎÛV†ºÖܼÿ©¬,%Lô‘ïé©a#’}ýÅtŽËFR9 ÆîZËgÚnæß[€Ÿéïï­fO/¿¼ûÍTÊ8l“>þüô‘1ÍR2}¾þþó_rPÊ>ÏI“É©Ý_ 'Õ§¾¿Ö¤”ò?_¿éMŸ¼PÊ.HNí#Ÿß£ú×Ò‚ çŽj•³×”ÏßÜÖ A æåÓOÊ™jÈ :~¾þç’›=wݦó[’Ùæ oÿUf„Î?.J†§gØHË€,}e|¿¸Š¿ªNÃÆ\ Cë+þUÝyoö—zðR”¬©JRƒ£´R2($Bôƒ¿N}#õ5•r¶Ø%óLYµnÚmE­ºà%[Ú+$§>_ñæä©Îá×}ϳ6ªrÝÖv{;u,[Ke³ Ž\ùµ&r@‰ª/+JnP«×m@Vv›C„òBŠ€þúW;s\åZqví-¶’Óa²\a ”˜.¤pümäVµ`Ϥ8Žç8ë«´ Û\8¦Š­WÒ ˆËÑÄ"À ë)U8ý£·2ßk©ûpJ––ÐÊ–òHðb3O.èÒj¾Ã¼E°¸¹eJÄ6öªÚ)À¥„2 Γ•`ò¨](: «”Z´p(¥N!¾:Ö?U Ý\š0¬@߇{YÄ­ ¹#b†–°ûK”åá\ ¯Xé&K±vÖÈ8û Ú¥–R›ç\q´‹åm$Ìð³¸>'iy€ë)T8 Çw ¶fÝ.¾Ulƒ—g;$ ø2Aœ§Ÿ– ÙàÖл7Û°¡jmÝŠ;7‚ŽV s6 êF†@ ë+M­Ê.š.6—ß )?ªMs8Žˆ.È´‹g¦vݦYØËD¸¼’¥ê„åÙeÉAݶ[Y¸¬QËT©²¥»¶~%„·r§›'U‡4 uÝAÓ)E*@R‚Œ#ƒ¡2}sÖU͵†]…#-–Ì&áKWýÆR©eÔÉRu<%´€²#0”É´Á-×mc³U¿k€³•cœ¥$¡'œ'Bu€I,)JT R” R” R” R” R” R” R” R”o>$ÿá«Ñ^W^©yñ'ÿ ^Šòº£×žãºŸ@ªŽÈÿ`ÝýÏæ*Ýî8û©ô ©ì‡öÖþ(ÝöŠG)<<á òFÿëU“pìëWÈFšÌb«1¶¡ITWªñü¸V§Ì$æNY5fÝ5Wƒ+ábj÷.ºÕ§¸Kz–Œ³:ý¾ÿ•#—¦·”óÍ2òúkXeª'é诙?Ò¶äòÓ&šéL+XN¼ŸdVa:IÐtÑj 1"yf±—&G>óïïè`Ë`O$²™ÌtT5ܺÁÐróÇ–·Û^4ø(M#fÎ5y+áNšþµ#(æJÖõ¾Ñ²5×¢µ¤ÄºÎÖ—05”;e_Àмª.ÃYØ`KFi›•«ÿ¢*ö¼_'Ú^ŠpR”¬4R” R” R” R” R” R” R” R” R” R” R” R” R” R” R” R” R” Óyñ'ÿ ^ŠòºõKω?øjôW•Õ¼÷}ÔúUvAûëîH«W¸ãî§Ð*«²Ø—SóG¤R9IáÁ§tïé稷¶ª»H0z~Ú˜ŠÜ7Wº"&OÕ]žY^e*O5Y¡]õ¹HÜc•3ïÿD€“ßßZÔDG ÿ­9DÿJù—MÕ!"G)çý'óòS)Ô“¨ÔξþüõFŒ¢GÛ_"O-JKzÀ1ï×ßßu`ëgc»w0Ýý=ùhL¢¡ŒšÛ–9#“ugi hÁƒ;¹*ܦò¤¨HÓB¿E0F0ˆ¶Râr(o®zúÝË €ãd„žšéí”ÌAàåUý‘2¸T è¬Þ=,JF÷l[¿ž¦†ùwtëé÷ÝU}$– ¼óôUÞH2wôï«_qí3‡AØêp’Ÿ£ÿÕ5gUø ráYó+øSVáù>ÒôÓ‚•}ËVZ¹B¡¶ÝNÙ1¡lðI''6ry‘QnqBãwlZ©)¸¦Ù¥$…šp'—)ÚHÿÄ­Ðc--©TéÇmÛSè-ݺÎã®dL6€ã‰$‘ ‡N1¡3Þã[+›uÞnÍ/º—® RP †Ü*N}›òzu ªUovXC©jí—­\'T¼QÀNU«9PQL|ùgMÑ­b1Ëu6 l>µ”6vp ¥©I$¨¨)H֤ť*+ø…½º-Üx©¸$,dÉRåS¢MTâ˜ûcZ­Tû7®§QÀG[7ˆJÁ˜)-*G8žƒ ¥U³ˆ©¬-Ë«„¸ú…ÛŒ¥-„‚¯‡- j@æßZî{"´µ@ ¸ÛùÔ…2ã ¤€’xJXAÑh:(žA€¸¥R«OZ¢Á·”Ó—-¶§BR3%Mx2y²Ì‰‚c]Û0K«rCÁ*·#þá*ZRžš¸Ž6S¯A€¶¥T«aB»[”¡µ9+„FFÕ•Åñ§*Lid@:Æ8ö#sd‡¶N¦Æåí –ÔØNS©ÝÂæ:Ç$Ð\RªÕŒ2_mµ¢í•çÞÈ´8 Ju0vjÓEÊ@ N¹=‰žàÝb,2¤)–êRìa”’•¦ Ÿ,ÐYR«_Æ­­¯m­nR¦œ¸J )Æå%F) ÌuÒ@#¦ˆïãhÏfâC̲«¢ÚÊÛ¢vn@LIœè.‹AH˜!uJÖÓŠ\feÆø\" ™N„ê9y5КÙP)JP)JP)JP)JP)JP)JP)JP)JPi¼ø“ÿ†¯Ey]z¥çÄŸü5z+Êê^{Ž>ê}ª{"Óº?º="­žãºŸ@ªžÈ¿a]ÏÍ‘Hå'‡ʤ f¤¤é¿^¶«ÙVC'ßßÜÔÖ֤׶²óL$É=ÿ5µ G¾ïqú~u¥vá[R¢LïåòŸ³Þ>Êè™d“åõWÐÿ°{ûëXæéò™¬¤n÷÷þ¿eTdÞb=ýþÊú´‚•n" ïäý¥jSÁ#Qþÿ”V°§')„Ž=ÍUŠºs»P©µr¤H¹Æƒˆ)hf''–¬îWihÉ]Ú“è5J‹G1‹‰i­…¢Nøßÿ5‹f=Aßi‰%†C6À¿r­Ûýÿâ¢bÍÞ6Øí·D®!šº;+{‚@ÍʸÔÕRÇt±pý›FdÒbf=œJ~m°ÃÀ^òÑŸÖ¬rë1¡?Ëí¬SÁBR4èÍ1Ì5JÜz ÌÒ#j¨ºšP038a?ù•ü)©õàù>òõÓë \m¶¦ÝBV…‚•%BBÞ¨vøUµ»¶î#2–ÃeJ‚VOËQWªõýõóš•pûvÖÎÜ>¬­4‚µª&MCkgµ¬Ü|lWrïk”æ6è ”¤ðS#yˆßXiˆÁmƒW­í‹ÖÖÛš–âŒiÎ꼂±{·}d:ûê¶+q}­)É.%afc>¹ÔxÜ¿eeˆb‹´qðݺ\nÕqp¥9”„ÜA1à+BG&ºé!û‹‚”÷=–n * RÞÈ„Á‚$žHä2F’Õƒ0êUÛo=râÊ%ÇB3¤ž2ÁÒHY“¸E»ˆ¹[•æQ@N‚ §)™Q‚•¨ïÖ£³ŽvÂpÍ·ý™[-­k\8èAL&#á'0åÐÀ™Þ^wEËK;VÙ´‡§n |b° ùŸ­ëœ>ÞæÑ»g‚”†ÊHÌs„™™•s‚G-EºÀlîƒÁeÄm–¥#3jAMÜ5«ï(žSXØvAgxÍãÇ3H´m/0$†ÖØp(Çø„ âôÔË;Ô\aL_»•”:Â^Veh€S&OG={¼0¯ 6–¯)µ*é/çTJ~8¨ÐŽx‘Í4: ów—(º%Ew#&uÈH ‚œ»É^“3»¶¸Kj·¸eÐâJP°¬À$Fø$ Å7öjy¦SvÁuägiÄÊÓ¾@åh4·…Û¶ò]JÞ*Káñ™y¸[-–¤êx:êfykJ0;t†’§ßZÈJŠa”¥hXH$J8R`oßS¿³y°ã7vî å…%Ä‘ªŠG•@Ò"£â—–×V­[Z°òn³ rà …eR·!;ùÎê \ÁmœiÆÊÞ‡¸lÁž^eòr§ó­Ø†ÍúHuN ©§%IBÄ(j0?h’ ‚û)Í/62-(WpTbé9“§H¬X»¶¸qÖíîulœ®% (<Ä Û’‚=Æos|.Ü[Áa)L!yw%ÄïV ò ɬ9”X½fêœ}»ŒûR²^müPž€5“¼“K¬RÎÙYŸmnÚ´§e Ip$ âÏÙå°^2‹]ܾÃM%Eͨ-‰Ê1#]-W0„¸èY¼¹ .6ë¨!Õ£,)\DÈL 7Q8-¶p§\uá´ÎRé 57”éÂਉ2£ISݱl¸.(KaҬ⠧›C¯A¬Uf—eWlYFwP\L¡;äŽA¨Öƒ+v Ë·yÔ•!žX“¡I|™s Í—4}¹uŽmj ”¨é¿³SÍ2›¶ ¯#;H&Vò(ÐëZ_Å-…ö»¬Ü-·ÛeÄ!ÀJ ÜÖ7D:('R±Cˆq9›ZTJe&uüˆ"£ÞbÖm¾§\I[ *áM%C9@ÞBJ T¨é¿³SÍ2›¶ ¯#;H&Vò(ÐëQÓŒY½q°¶¸aÅdmÀ­ªr­*p£‚DÉDs'Z Tt_Ù¸‡‹¶–á$„$‰ó5žjÊÖîÚñ²å¥Ã/ ¥M,(Í"ƒu)J)J)J)J 7ŸðÕè¯+¯T¼ø“ÿ†¯Ey]QëÏqÇÝO UGdŸ°/'æ1VïqÇÝO UGd°nôžóŽG¶u×ßßß–¤·ÉÉQ’u™o¿¿òÜÚÀÅzaÂИ‚wúkjU¦¾¦•.q_Tú8G^iÖ»E½9¦çËŸ&ïOÛ;µ-ï’ž] @Uós8è¬0à Z.+÷…5Ä'¹Z¶Ì‚ã§MäÌýµóBÚÖ.¾­$nZ—¯ñ‡viZ¶_(ƒ «Û+{ò¶’Tw©Z’iªmÂ㶘C޹Û8¢¶®o Îê¸ (Ü7FƒßßìÓžwI§Ÿ~¾üÔ[›6Öµ|™Þ}ýâµÂJ>%p¤6–[ジäõÖì:Ï´ØÈs«Ry}ýU_eyl»—._tH<OëïÑRÇ-&5ËËLÇ(³4$Ó¸ï÷õV”¼ZÆòü¾þÿCÝ‘hCh>Zðkµ½xéwR£#JθÊáèœ,?·_/Bj«{?üIüuúVUâù>ÒõS„U=€¬èÅ ~¢<ԻȀMœÒG'H©Ji(Ñ)­E"'AÓóïÓ]«.Rל¥FHy}ÿäUsŽ-Ã*:rº¬.2ìÔ“$«“ßß}CÉöRÓ3èˆhÊ7Åla•¾ò[FóËÍY”Õ¦ÎŲ⇠ ©Zæ}–œBÆÙ Ú4–šåååûk`3:ÏH&w{ÿJÔ“š¶ îܲ7þ^ZõÇœ›R7¦§vŸ§åPqU>ëA‹t;ÈÝÿ>Z–…nÖwn÷×’¶ À˜&G¸÷þƒ ðk·#2Bòš”Öòœ{N`*àÐAVŸËÕúùqFœß§O¿õƘƒÚX=«|`¥õ¹,0Ðø6‚ VÕ9ùyÇÛX+CönÓ˜Õj!Ôö6g Wþ¿…iU]Œ~Ç?ޝáEZ×äûK½x*;VV̺—[n¤ÇÿȰµùT©¬+J­mÖãÎ8ÒT^l4æmB&¾R¼µ¥œ2Í—âPâœBó¥nº·9Tž2‰1 V›¸DÔÊPC8e±¼UÐÛ¥Õ¬-Y.JT@¨:$ Ü•Šp‹¥i ¨¥C(Řax€x1G0©Ô ŠŒ:ÕûÚŠ6‰t•¸¥)KI(™1”o;€ªU)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)A¦óâOþ½åuê—ŸðÕè¯+ª=yî8û©ô ªìƒö%ÏØ="­^㺟@ª®È?b]}ÑéLÉQQœp|'ž³Ve˜:w ؆òêwó×Ha¡«2£™í7)­®[Û¨FHû§×[A×@kîRz+pÌåÍ6s%®BjBžšeIµ)ÃJÔ&2úÚVÉßÉïýkê[‘¿Õ[PÔÇ6úÞ£ D¨óž“¿¢³;úw}+b[ݧ¿¿¿6*7c›ßßšš““ºgxßö_}kï ™Ÿ¿¿ê›ùOÙëýk<£~þYµ™±¥¤ý}ÿM+h™&Vå$î˜éßïËï5¡Hμ pF§–y©©¬:žÅÔƒ¨Ý°¿Ï‚жªÎÇAD>¿áEYךüºG)JÊ”¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(4Þ|IÿÃW¢¼®½RóâOþ½åuG¯=Çu>Uxøœäaéh÷}ÔúVc`+ |Ç/ñ @áC9¹tè­ÛÍYÛZ¤$( O’·p£¬GEveJ–U‚³Ø!DÖÜUëœ.nÅ»wV€ðÓ%+o¦u‘ùWË,gă°sæ9瞆’Ùoi…*?CS[´f+y·šÓH*ç[µ¨Ò+vÄ$Tâ’à*+»â ¾Á5™0ŠæP j?J׳̮o-oÙ­G˜sïšÅ¾¼ôÌÂa è&²SGuZ"ßæ‰çšÅÆ(¶²¸S­¾p}5ä­+*IÕB5pãq¼iQ^l6ãLàÂ㱜ÝÇVefÿ¸^¿áEZÕvžDo}GÿªjƱ<µ+m¡™Å¥t¨Åkí»og®* Ž8†›SŽ­(BR”£ o$Ö•_Ù£6k¶YÍ.'HÍ>L‹êžcKÑžÝ3‚ëJfÓ:LñUöÌtÈã »›ÂÞvíÛŽŒF3²¤ !¹iNp ¡H“§NµE¢¯ìÑ›5Û,æ—¤fŸ&EõO1¢¯ìÑ›5Û,æ—¤fŸ&EõO1ªôöEj,ÓupÃö͸Ðy­®O…I)¢«G8Ý vEku³M«Ü:æƒk"à£$‚ ¬›–“9£’gJ _Ù£6k¶YÍ.'HÍ>L‹êžcE_Ù£6k¶YÍ.'HÍ>L‹êžcZßÄ­ÚÂÆ"“žÝHJÒs%ed¿”Š­¾ì`×7co:âm–îtd!ž0É…p®.n/1Ê¿³Fl×l ³š\N‘š|™Õ<ÆŠ¿³Fl×l ³š\N‘š|™Õ<Ƶ·‰2ãÈe)sj§VÑD FI%J¢Oï£çT;&²¸ ¶óŽ©ÀØi¥!Ó%+PÕ )‘C~›Ì h,•fŒÙ®Øg4¸#4ù2/ªyfŒÙ®Øg4¸#4ù2/ªyEN0Ó„mn])Ng’„¤–8JI‘<.!¸ºo¤öK†&ñëu»—e´•æIÕ•Œ •ˆÊ­J@1¡ÔHX*þͳ]°2Îiq:Fiòd_Tó*þͳ]°2Îiq:Fiòd_Tó‹c{qsŠÝ4õ»Öèm†T–ÝÈL•9&RNü£—’´£²•jÓê²»FÝ[VÎ^J”„‚!p5Z8Äoûh,fŒÙ®Øg4¸#4ù2/ªyfŒÙ®Øg4¸#4ù2/ªyC¸Ç-íÐë®0þÁ½ K &SaEi4ÈȽàýDãqÛZ6£xÃÖΤ¤]Si'6h9³dEïPâô‰ Ê¿³Fl×l ³š\N‘š|™Õ<ÆŠ¿³Fl×l ³š\N‘š|™Õ<ƪÜ쉷mØ{>~Dð#†öÌ Ú«‚¸<]&cyîÉpû#³¸uÂBÜÎ\Si(Hqh˜$ J $H“¨Z*þͳ]°2Îiq:Fiòd_Tó*þͳ]°2Îiq:Fiòd_TóÆÞùo0–ž"Sœ§‚¢"G8Þ7 È‘­AµÅPp.Ù÷ÞUÃém¦òƒmy3HÓtÉ™&n _Ù£6k¶YÍ.'HÍ>L‹êžcE_Ù£6k¶YÍ.'HÍ>L‹êžcZðüEœDºm’ái¼ê€y LñT7¾ªlq÷””Ü^0èmV \¸• K™ÖL%Q¸LÐ]*þͳ]°2Îiq:Fiòd_Tó*þͳ]°2Îiq:Fiòd_TóŠÆ*ÒžC E˪[Ž‚²„ðr¸QɼfÒ@02•DÍdî"¦q¶VÔ±oh‹Œà¥:’°A$¹:rhd($*þͳ]°2Îiq:Fiòd_Tó*þͳ]°2Îiq:Fiòd_Tó‚Çd— !ÖuÒ§ e-å^RcªTB¸$I$ëÁ˜F nöÍ(©Å´ûèZÀQ¨!§,~ZâBR¯ìÑ›5Û,æ—¤fŸ&EõO1¢¯ìÑ›5Û,æ—¤fŸ&EõO1­*Åm“vm•˜,?°39©ß»†„ÏÎP¢ áøênykmón·Z ¸Ph8Ûe <ä©gtÄë(-fŒÙ®Øg4¸#4ù2/ªyfŒÙ®Øg4¸#4ù2/ªyU³ÙVðYl¸ 2”ìò¸¥¤­(œ©%CU§B×@H"¤^b+8%pÂ\·¹µiÉC%M¬#0ÜH:çÚ(&*þͳ]°2Îiq:Fiòd_Tó*þͳ]°2Îiq:Fiòd_Tó^]¦Ñ üޏêò6Ûq+0Lj@¨êFê«wK8‘7K}‹t´…”ĤÅÁ^mæ!¯“2@‰P´Uýš3f»`eœÒâtŒÓäȾ©æ5¹!ÄæmiRA)”™Ô#ò Š©»ÅÔ˶eæ_³J®28—P•¤¶á%%@’¤™8BgYI]ÊÔÒš+p(¥@OöhÞ@ƒÍ «wªR•›Ï‰?øjôW•ת^|IÿÃW¢¼®¨õç¸ãî§Ð*»žæ»å1Öb÷}ÔúWâÂp÷ùÈþ!HäR·ªxúG&êÜŸ¶±B„˰%dÀ?­weƒÉKÍ-§ $Pk€Æð5aO¤Ùºò¾{yJtäPÑ[úEz’2œÊ’y&£86‰R`ƒ¬- ƒöô˜‰äpØodWØz²)EiRªìpžÉ,qR²Yu"t‚½ùµªÌ^ÆÑh=·fã[²:…•6ŸÓAÑ¥CFÜô[9mr¤b8¦ËWÊß.¹ùÝY511ÿUÙ´ão¶§BÒ“”ðµìÞ+¤¨è˜å®"ïÄð„/¼eÆ.LN™dïhgŸ  ¢á¸õÅ©…-KOï(ÈûüÔÕôF˜*#5Z[Ú€4Hûb¹¼²;7Ö”9Žá¹^]Ç“šºû7™¸Ff ÛˆûAÔT²°Ø@Ö£ºÍY)"´-=PûySÏU®F}wôU½òx:š­ V‚¬‹l FÿõW¡52´aéË`þUz[ë2ªü]q6M¸”­ ½d)* ·¼î.ô]—ùtzªŒ´òš/%JÙ8HIŽÝS{q_¿åªšs6—7Â2c,îRu^9ÆñQaܳ)cnå»XØ[íšPjx Œ£1ÑYD“Æå1VØÂ´˜D€ëZFmËN¼SÍ;´çNñG†¹}mؾâ®RT,ÐØC%%(RÐ’JŒðUõëL»|6Õ¼FõźËM²ÚÊÊ¥dà‰á¡šwÊfsVm[Ý2û×o;q i*yiáæÊH4 ‰ß&©YÄq&í0§»Ú®ù¦]_Á¥! ÂHr¥ÕLκŒ»¨..on,ÛMþgñ@Ðø9eÙ æ1ò xÙWxsíØYZáÉI6€Ý[ùˆN@GÁ¨IP29|šZÀ ˜zÙ~éö¸BÑrZZµ ZÕ–ÇÏW#, „Ý‹e!×R·šqÄ+vb”¸´%D|f*u7pËGž¹qÖóvË[á—qˆÔ ;žjÒÖ”_"ñëË›‡RAs Ü— ¯Ò¬©AZ0fµ)‹«–KŠV×f¤¢JÔ¸&$AZ঻ô‘ÂYVÙµ¼ú­žÚM¶p+œæ@ 3™Z@‚,)AÎÀÛ\½påÛ÷.º„ ©Ð%D•)ùÆ Ø`;+6ïnžyÛfÚJuHKy…˜HTÚwÉÉ­]R‚ŸÀÓqitÓ/9ðˆx²ÒÈÙ¶ã‰P*3k[É#AŽ…(¼ååÊîIEÉÉ'.å¯zO E•(+Îʃ…o>·C`¸¥‚ ¤-KJÆ‘9•1ÅÐ+ƒ4…©L]\²\R¶»5$mV¥Á1" ×0uß «*PEbÅ Þ;tyJpe R¤$LÇ9Ô˜’bH ¤á-¤$Ûܾé[ª£!0âó©0 DfŽIÐk¾l)PE°°·ÃÐãvÁIBÊNRg.T%É}GN l›Wí‚Þ ¿j-"G±žÓ,‰3¸L™&Ê”éÂYK­-/? º·²gT¥©\Ò ­CHaR4­—Xs7.­Õ)Ä-hBIIмèV£zU$rÔ*e(*ûˆÙB×·n)×C®(©¯D€0@ h¡R-ðæm²§¼î)FG -j^S¦ )DŽQÏ©™”ª ÜaV×Ü8¼É[í„&A-&4^ˆ×÷Ì)Ü«`Û£2·Ú* –òeFƒàÓ§ÛS©AZÞ ÒC&êåL´¦ö-'+IBÒ ‘^(©1Ë©ÏaÌ»o~Ê”àMüíH"D¶¦œÉúÔÊPG¼´MÚøGq¥çmÆâP`‰Ôx*PÔõ Ü Õõ…ܸûÄ£"ó¯Ž2º“<Ó¶^èH€"­)PW÷%· åË÷e *ølFE£)HD-\’t’@¶aÌv¹¹o3‹]æò2&8YFhÝ$¨é©Êlœ¯Ýœ±™Ðg,O|ªûy)JTo>$ÿá«Ñ^W^©yñ'ÿ ^Šòº£×žãºŸ@¨ŸÄ•÷Ñüb§½Çu>Pq!6dLpѯøÅ W½ðM•8a#| ¨âîße¶.JGMHx¤ßÒj¦îÅ«‰rûóWvZ¯1û&¥(*Z¿tU[½“¾ÛNLƾ_`¯5*nVŽŠ¡} •¬óV&fÙ`ýY^+cuð.+ä«T«£þk~)€]¥å\áN¶Ý»Wn¡À7ý‡ùן™">Ú‘Ý+ÒÂX]Ë¥”ž 'AH°®»qN\­KIAÝ’IÊ&µ¤ÉS.Ümó™@í~tÌýµ¤F¢³#ko)A"®ðÎÈîìÔ+H<ª2>üW;_A#–‘8¿‚öcmxR‡Ö¢5 9OåÈk¥Ú!ä(¶L¢¼ÍO-ô6Ñ9Ô¨î®Áúðf­í][×eíTT™æ‰ÝZˆÌdwwHpŸÖ£!•Lî®wìݡ¾i óP>Ïë]E¥å•â3°úUѺ¦?D»tå´Hÿȯ@¬«ê2öºrîÎ}¾V%JR•›¶MŹm+JW)R¤€ B„ƒ¿QÐyˆ:Ö*Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý" Eç -Ã~YaF8ÑòúQÕ;¤DŠPGR/8YnòË 1Æ—ÒŽ©Ý"2·d´§–¥¥Jy³•1 tè‘©ýº” R”o>$ÿá«Ñ^W^©yñ'ÿ ^Šòº£×žãºŸ@¨¡‹ßGñŠž÷}ÔúUãÊ(Á®7¤úŠG"¦áõA0 sûôÖ¤/†æqšc§ÉQØ}Mp¢Nñó«ê2 ¶”£¸óWvVæš}„ÚÞ¶xµÆ¬˜[™>3Ví¦†¥2<öñ‚ÛÊDñLLo¨jHÜk»Ä°¶/Z€ߘr×!sjë+(q²“1­r˜ÊXEHR­DMk*Ö@Vñ­bPFíkiIæ¬DýµEc¹úŠÐ•‚4>ª¯¹t¹pµwÖHR›Vt(…sƒZ”’:jçÖõ-ªÆÃ~Õ`²á±5Uɾ¾Ò'+Ù;Ä—Š`eç7¢áMïÉG®®k”ÿ¦¿Ýw÷\þ뫬ʢâW+µ´Ú4V§i9µ +X@$rÆi&7Šƒ{}}†¶Ù¼~СkP/¥•€„†œY”f$Á@åÔ o6ÖÝ·lZ È ´8…D€¤((Hå‘#M9EWßáX©jòý¼Ü06VùR¦œFâ¢gá' jh6b8Ëö—……æ}†R3¶­šÖ„’R¸‘”Èt<Ƭ}·ó았6²‚cIÀ<±»NPFðjµì&áË[»$Þ¥·èNÆVæbs*u¬A®ùikÚ¹ÛmöúlÚì¹À?7tMFè œ'vòÅ«·q<9aaœí2ÊŠš[ŠH W ó”îëÈELo°¹i µ»NU©¼ŠSJʰ¥¥<Óª‚LqIÍY' ˃Ùáûo‹l8yxÛ5$î'/å5àRÆ×lüE”5;>>U´¹ß§öQþ.C+ŒvÕ ¶-:’ÛìÖJ%%µ©%åf($HV I©X›,aɾl)ÖˈD$+0ÌàAÒ&Dž LˆßZXÂ\möœrï8jà¼Ê ¡h<¼cžTDF‰’v3ÿ]®Û„np…åÐ+j]H"uÀ:‰Ô‘ˆZ¹uÚÉqYó‚[PB”7¤.2’ Èt<Ʋzõ†.Påĩȅl•’I€ ã($éΣœTVpµ·tÚÂM»/¹pÚ6p°µç™TÁ¨95Ó]7¸mâ)»Ú1£Í»™Û|î£!IÊ…ÈÊ“—tT£ËA‘Ç-ÍúB•Úå‡.V3¦Âr…ÎsÅ™Ò7êF3šÇ¼ ¨¢Ä«"…4¥ÒW¨P‘ª&è­#z-ÛUëe«FƒvÀ0B„-µ¤¬æád™€™“º¥5…­vxƒ× pß“´S-ìò‚ÚQ %\‰ Æ×aÛÛ‹wW¥Ô%°[P!*m çŠJ”@˜’ k[¬ñ;[€Âp—u´¨)-©)Q)Íwád&c]ÚÖ¾å­m¾¸I[×,ܨ¥¸ÞÎ@wìùôžX×? rÉËoû¼ÈbÝ Ê¥åH™âïPH$ ”ÐnF&ÞÖù ià,ÜJ mµ¹Ÿ2R©)׸LDõ’qK%-¤¥ý]ÝÁ<0´à D* P#xŠy„vÁ¸‡[)yÔ¼[y­£eARdfL4… “ºµÙ`®Z T¢é´†µÓ)eE(ׂ“ sJbš XEúq %;e0ÛŽ„•*ZAç0G8­mc6êiJu%i}ÖBin)YRTL‘»Q &&k,' î]»6ì½,¡ …#,°Î5àΤd로Úû–ó.‡¬î›C‰[ÅVJÆWV @P“˜hy´ƒ¾‚qº·‹rJ…ʲ´S à•hG¨íbö/) ÛÊR^)^ÍY` B•’d@$G8¨÷V7e‡ØØ‡’«b€ÝÌ£àR‘”“;ÉAX$òo¢pPÒƒ6ï%»-£N–Š –Ø@H Á¢d¿]t bö-[²úžQEÃaÖ²¶¥¤” Þ´i¿ZØnVœTZ¬'#¬#|¥@.zèñtUjp&Ð*þZ´Be(à%ÆÖ$Ϊø('v¢ ͆'‡·‰[%—L®g ‚•Í Rg’gx_ÅÒ«kWØRZmûeÝ©o «#I@;’u2´i̬ÅHF1‡­Å \¤lÊÒµ(¥*DæIQ" ‰˜ánÖ´¯lÛbm!̆ý @VYÙ…߯ n+“€¬n04\Y&Õ×Ô·}Õ¦ ‡Aš6»ú7PÇUå—’Óm´Plâ\ZÔ\Feh‰Ðsói)8¥’„‡¼ŒŠV²„ƒ¦‡0 àb¡œ&ñËÃzíõ¹ºNM‘M±Cƒ„3’d:­ÄnÛ)`Ü+j‡É‚µ,¬Èƒ W@è½I)‚`Å,‹©l?*RÊ8Š„²ˆ&!2¤&$&¶=}lÍÊ-Ýr\G™03É“ ˜“ š†Îã+´RnõfTê¶p\R‰RÈ3 Y2Rdh#)Ô‹›7¾·¸EÆDµ½9$Ç( äI ˆ"h"Ýã¶­ÛYu %Æ¥N¡HB›S‰J–’`(©HÔsÔƒ‹YlÒ°§Š”HÙ¥‡ ‚"efÓ©(sŠŽÞúlÙ³UêM½¹gb”³+kJ†s&L"$@Ô˜:F»ÜWŽ]lâÖáPEÍ¶Õ  ¤ðdp¾k<¤G-ëÜe†ƒIµVÝn<Ê3!µ-°•­#UŽ9U"O(ç•Þ,Ê-­¶ZV«¢Ò›Ì•p›S¤žùëIÁ\FV­î›E±u—œB˜•ÞHÊRRm:eçèZp&Ð*þZ´Be(à%ÆÖ$Ϊø('v¢ ÈY[b·n–ØqE@fNfÔ´üä!cQ¨‘¨ç*©ð¼ 8b·íDä@i E JÔ‰S*T â’JN€\P)JTo>$ÿá«Ñ^W^©yñ'ÿ ^Šòº£×žãºŸ@ªžÈ´À®îH«g¸ãî§Ð*§²18 Ø;²1HäyݽҘ_ó®†Úä\6’Ù¦ÿ}k—y!•hf³´ÄÀ§w5vÎyeÖª•¿~ø¯¡Ôƒº?~oMAfñ (ïïúVå™AX;µ µJ–­À·ZÚ¼!¼Ap󫬞-º”º¹J÷k¨«æ®Ð„ÅAÆã}‹»e™Û`^kH®mmžDÅzÑ»Ú', w×;v>›_·„/r¾ÚÌÔpJAå­dΧÜÚ.ÝÕ6è!@Ôe'˜VFàE|:ëYyt­g(媬T‰×–µ™ß3¼~tR$sÐz_ý4þë;¬ÿÞ¹ü ×Y\§ý6N^ÅÝ]sø®®¤©JR R” R” R” R” R” R” R” R” R” R” R” R” R” R” R” R” R” Óyñ'ÿ ^ŠòºõKω?øjôW•Õ¼÷}ÔúSvP¬½ß+™¹ýjåî8û©ô ¥ì§ûµø_΃ÉÅÞsÃ5´-!…W¸œ»«6ÜàÁ­2Ÿmz¶ž’x3Wl¾‡ÑÈyÅrái&*mÑeC…¥2:vJ28ÜçZ›ƒÉåªænˆ”™¯ª}IIVEJy9jä\°ò¤Jô«‹g‘–W'-r(}Õ¥%•Žº¦*ÞÕÀê#xåÖ¤ªV3†YÞ[•6˜\hkÏoퟵuM­y&½>ÝKR ¤ÈçÝ[n°›\A•"é(3º45Ž­<¤˜­e<©Öºìo±'ðóšÍ>×”\íµÂ€H„QD7WØwФùÝ­} ¦ÓŸîßûŽuÔ×/ÿN¿».ÿî9ü ×QQ¢”¥@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)@¥)A¦óâOþ½åuê—ŸðÕè¯+ª=yî8û©ô ×[㺟@­G4præýâ@ý¨>Ò°‡þ­çWìRú·_±TgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±HêÞu~Åt¬!ÿ«yÕû‡þ­çWìPgJÂú·_±Y€ ŽFiÜ‚HÌ 7ŸðÕè¯+¯T¼ø“ÿ†¯Ey]¯=Çu>ZëcÜq÷Sè® R” R” R” R” R” R” R” R” R” R” R” R¶¨¥ ’O$ó}µóhŸ*½uFºVÍ¢|<ªõÓhŸ*½uºVÍ¢|<ªõÓhŸ*½té[6‰ðHò«×M¢|<ªõÐk¥lÚ'Á#ʯ]P»suwÙ[˜z.µ·jÌ» %¥g@Ô­*ùÇÈ*‹ªT.ÐwéŒKý?ûTí~˜Ä¿ÓÿµA6• ´úcÿOþÕ;Aߦ1/ôÿíPM¥Bí~˜Ä¿ÓÿµNÐwéŒKý?ûTiP»Aߦ1/ôÿíS´úcÿOþÕÚW?‹»w†¿‡q+Ç;bí¶Ö RT6.ù®‚JÚ¢”6I<d“Íö×Í¢|<ªõÐk¥lÚ'Á#ʯ]6‰ðHò«×Pk¥lÚ'Á#ʯ]6‰ðHò«×A®•³hŸ*½tÚ'Á#ʯ]ºVÍ¢|<ªõÔnVî-xÁ ²†²¤sœÒ}J£mçÄŸü5z+ÊëÕ/>$ÿá«Ñ^WAëÏqÇÝO VºØ÷}Ôúk¨¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(¥(6=Çu>ZëåÅËw*Þm* L…,¸V®Û¶ñ–zâ¨]¼»{Wm•<´ O/¤ù<À*¿%]‰_­W ¸+³u[T€©A<äæß¤jwÕ‡mÛxË=qQî;Ië7mQrË(vsdÈw™VŠ“29Mm²»˜íúE³kÙ3’ÞØgk:Ö´¤îG FÝ O ›+LO»´J¶ºAs:Ýk0!!£ÄJô¨ùg‹ÓvcabÛŒ¦ù·-ÝI aHa(TÀ$„ N‚5­Ý©ö·kv¾°ÏŸe‘sDLn˜å ‡…^­xµÒ>(}ô¯h.×håAÒ~tàh¥7Õ¹‡«4®ÔçZV­SÂPˆ'¤eN½¶vÝ·Œ³×ª†ÛûûsÿëÿèÕ\vÝ·Œ³×Ï‹ë[~Í®zá´4«¢­ ÎÞƒŸqòPtÔªîïa><×ëNïa><×ëA£²vêÃíf.³]Ÿ‚|Âð.oà«íÝQÖûÖ8“~ean§ÒU•&˜>£Ddî™U`ëR»¶T¤È$qL#›BGçX«ÀÔðyWÅÔÄ,§Q±ûÊòžzHÅ®\yðÛvɸBRڜٕ)y\}*! ôh¨ ª3k{rÝÍíÒ;YVî^0•„(¯9q¶S)V‚ƒ0s~îú’»þÇ\mÆÜUšïö‰S`…ðеÓ^‰ûI5°âسMűΰµpxÊé¼eN½‚Ö•]Ýì'ÇšýiÝì'Çšýh+û*øÎ ÿ¾×ñ¦ºå1üBÎöë—t¦ù© äᦺºƒcÜq÷S设\\°‡r­æÒ ”ÈRÀ;…jí»og®*ˆøã‹kÄmjBÑlâ’¤˜)!5¥æpì!µ¹fÃ×#*Òv„©)L ÂRD’#6ñ&§vÝ·Œ³×†0kvÝm†¬CÉÊâP”$,s7ï>Z û\Sº¼MŽÉ†NÔ:·Q»(i@„%dnv#?LüšÝ‡â·X‚vŽÖbÜ)”­§g2‹ˆBô\ÀþÐ2™#xͤËfð›HíTY1ýBwÄîçÊŸ æ¢Q„¥æžJ,ƒ¬£#K„î€y§J >ê__ZÛ*îÕ-3rå³ì™H mÚÓE¨¯E r¦ iÂÕT# mn-´Y!N¬-€V dÎAÖyêGmÛxË=qAº«­?ob?qŸBª_mÛxË=qP¬V‡1¼EHPRJ‚“#åPM¼ø“ÿ†¯Ey]z¥çÄŸü5z+Êè=yî8û©ô ×\ËšÛ)r›7¢ J† i_;ò·ñ7zâ˜=+˜ïÊßÄÝëŠwåoânõÅ0:zW1ß•¿‰»×ïÊßÄÝëŠ`tô®c¿+w®)ß•¿‰»×Àéé\Ç~Vþ&ï\S¿+w®)ÓÒ¹Žü­üMÞ¸§~Vþ&ï\S§¥sù[ø›½qNü­üMÞ¸¦OJæ;ò·ñ7zâù[ø›½qLž•ÌwåoânõÅ;ò·ñ7zâ˜=+˜ïÊßÄÝëŠwåoânõÅ0:zW1ß•¿‰»×ïÊßÄÝëŠ`tô®c¿+w®)ß•¿‰»×À½^`âÔµØÛ)J2T¦’I>Jùܬ;èû_2ŸUQ÷åoânõÅ;ò·ñ7zâ‚ó¹XwÑö¾e>ªw+ú>×̧ÕT}ù[ø›½qNü­üMÞ¸ ¼îVô}¯™OªÊþµó)õU~Vþ&ï\S¿+w®(/;•‡}kæSê§r°ï£í|Ê}UGß•¿‰»×ïÊßÄÝëŠ ÎåaßGÚù”ú«àØS‘´Ã,•³0“üª›¿+w®)ß•¿‰»×ýÂÁ¾ˆ°ÿ,U;…ƒ}aþYª¨ïÊßÄÝëŠwåoânõÅ¿p°o¢,?Ë#ÕNá`ßDX–Gªª;ò·ñ7zâù[ø›½qAoÜ,è‹òÈõS¸X7Ñå‘ꪎü­üMÞ¸§~Vþ&ï\P[÷ ú"Ãü²=Tî ôM‡ùdzª£¿+w®)ß•¿‰»×-àØSN%ưË$- J“n€RFâ Têæ;ò·ñ7zâù[ø›½qL Õá¶-K]²”£%Ji$“ä¯Êþµó)õU~Vþ&ï\S¿+w®(/;•‡}kæSê§r°ï£í|Ê}UGß•¿‰»×ïÊßÄÝëŠ ÎåaßGÚù”ú©Ü¬;èû_2ŸUQ÷åoânõÅ;ò·ñ7zâ‚ó¹XwÑö¾e>ªw+ú>×̧ÕT}ù[ø›½qNü­üMÞ¸ ¼îVô}¯™Oª¶±kmm›µ­Úg6üˆ Ÿ%sÝù[ø›½qNü­üMÞ¸ èo>$ÿá«Ñ^W]{Ý—Û¼ÊÚíGFt”Îa¤×!DÿÙanalog-ce-6.0.17/how-to/batch/task8.jpg000066400000000000000000000575611406366436600175210ustar00rootroot00000000000000ÿØÿàJFIFÿÛC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀðœ"ÿÄÿÄT  !1T’"AQSU“ÑÒð2Ra‘”¡#qr±â35Bb$46cst²³Á¢C‚Âá%&DÓƒ•ñÿÄÿÄ!Q!1A2ÿÚ ?¾á'Ua.Q¶ä“2f ¨Iû kz Îð¦Ö³ØËÎðqL·[·”âi]È‘o€xWÁÐFj¨ÿÒˆ‘ÂkY»/.„®ÍJ“-•m§Ð’V®9ÔV’A¸šŸÂ1,ÖÕ¬F©‰œýPÔEuR;Tø!ÿQÕHíG‚8ÿâSm·7g[C`¡Ú„&ƒZ#¤ÍŸgÛLØSrÍʇ%Úr\È%.0BÊRª7±8óãÏêðÏÉH¼×bÞÑ8Ëïþ¡«ª‘Ú'ÁÿÔ%uR;QàŽC|­oÊ0ÌÍÉi ¦Ü+}$¸¤Œ(wQç×FlÖåÝŸ~eäJ‰9y”¡J¡It‘B°…V—N¤rTŽž¾.™Í»Jÿ¨*ê´vƒÁÿÔuZ;Aàˆöe•eKÎKÚ2Ó/Î1¥Z––#êé€]UT’hp¦«Ë„‰®ÉÎð†O*ëéÒSs¹[ª\šÕK¸{1­aq…Í»?꺭 ðG¿OÕÕhí‚>§ì¹IÉYÙçÔÛRvL¦E5+R†$%G“Õ:ù"5™eYlN1hËL?6Æ•j^\«¦uUSSC…0ÕíÂDx±œ&mÚGÓåuZ;Aà‡ÓÕub;AàŠ´«ÿ¿mM´â´KkK%`¤»¤ >ÑŒt˜‘jnÙµ˜m¦dd-’Ý«„$qQ<¼Ÿizxãökv±úz®¬Gh<ïÓÅub;AàŽC‚Ò)´'ä‘4§æ˜pde‹ÉeKAEü J‚'&ªšTGÕ½g²»JÒyN/%gK´†š"©Q­¼0G'´á„Lx³Œ.léôí]ZŽÐx!ôé]ZôøbªÚ±å$ìæ',÷³¦XA˜KÉ}5WW#|xc$#Øh§FË5¿MUÕèß÷颺½éðÆJ>„MèÙf¯éšº½ãÃý2WW£xxc(#ê)ѲÍWÓlÞ}0VÀáጰD4S£ešŸ¦ Ø¼Ÿ {ô½{7“ጰ¡ èÙf£ér¶o'Ã¥«ØQ¼Ÿ f}h§FË4ßK°£y>},VÄz|1šì4S£eš_¥jØ‘¼Ÿ {ô©[7“áŒÜz!¢,Ò})VÄz|0úR­ôøc:#Øh§FË4_J±£Þ<1ïÒulh÷ gDz"h§FË4?I•±£Þ<1ïÒUlh÷ gãèCM:6Yô‘["=ãäjÙïO†(Dz!¦,¾úF­•/ {ô‰[">]ÑD#Ñ 4èÙeïÒl¨ÿ·Ã¤ ÙQòðÅ¡ 4é6Yw§Õ²£åátú¶d|¼1Iˆi§K²Ë­<½™öøcÝ:­™ö÷E0DM4é6Ys§³#åᆛ^Îû|1Qˆi§FË-ôÚ¶tÛᆚVÎpðÅL{ 4èÙe¶™VÎr{£Ý0­.èªD4Ó¥Ùe®—W@pW@pîŠÁÃM:6Yg¥•Уܞè÷J«¡G¹=ÑX#Ñ 4èÙe–•WBpît¢º{“ÝÂ=4Ó¤ÙeŽ“_Br{¡¤•Ñ#Üžè€#Ñ 4èÙdý"®‰£º=Ò è‘ºžè€#êiѲɹúº$n§º=ÏÕÑ£twD(ôCM:6Y7>WFÑÝçªèѺžè†#Ñ TèÙd¼ñ}7SÝçŠõºžè‹ÃU:6Y+;W¨ÑÝ é^¢7SÝÄz"j§FË%!×\¥ Ðk¨HüãîóÞ£>ôGbçÞOäb#µ™2òY–´eu^Šy*'—P1ç¾+lD;S3Êj_Rßq”†K©b©âÞ­1ÿÒc¥ç½F}èŒå©ýO„ÿäÑþÛ±Øà…-bÏL1!uÖ¥ÜZ–Y¡ $J3í5‰í«LÑTÒ¥’.¡!JH ÀÓ\†;^{ÔgÞˆªþÑÚà·þ•Å=¹7>Ūêl'Ÿ}òÐ3Œ„eRÂyHÊVˆ–²9M™ˆÇĈŸ¿Zw¦‹ iä‚QJºI4'“Ø#Ã%ÛʽtÑ´SJ}”‹æÕ.±aªNeɦ rëÎ8V¥ñ I'ד“U¨ áïÕýÄþPù0}…ß %í&ìÙ‹0¥/K…²ât”¢”¼qŠL熛xíeã~²S<’’AÇö·—ÝÎ&.¹pq0?ó5˜ûX•ÇRüÆÐᦶÕh8Ûå B*û)¥i]DsMHpŽq°ÜäàÁ.Ï!`zûcõ ³½"÷Œ|92¦›S޾P„$©JRè²Lt¯›Ö1X„šgö_š»)Âg«–›uÊ  ßŸIâšTzzG²…·ÓÙd®#ö~§¥èû5GégzEïeé¼br'¨5Ãó™™np§;x¿r·r“ˆUÚë¥U‹?ѳñ ø£ôì³½"÷Œy–w¤^ñ‹é´~Aª™‹ÔgâñGÖ†žõø†üQú^YÞ‘{ÆgzEïr¬š¡ù¦†žõø†üQô,yßQŸˆoŤeé¼a–w¤^ñ‡*ƨ~q¡ç}F~!¿4Dï¨ÏÄ7âÒ2Îô‹Þ0Ë;Ò/xÓcT?8Ñž«=»~(÷DÎz¬öíø£ôl³½"÷Œ2Îô‹Þ0äØÕÎôTçªÏn{¢¦ýV{tx£ô<³½"÷Œ|.eM¦ó”¤¨&ª]1&€~$MPüÿEÍó3Û£ÅBË›æg·GŠ?AË;Ò/xÃ,ïH½ãMPüûFMs3Û£ÅZ2k™žÝñ¿Ë;Ò/xÃ,ïH½ãMPÀhÙžf{twǢ͙æg·G|nÛ™S­¥ÆŸ+BÒ•%u Q>²Îô‹Þ0äØÕ &Ž™þç·G|{£æ?¹íÑß¼³½"÷Œ2Îô‹Þ0äØÕ .˜þç·G|z$&?¹íÑßa2¢ê›’â@R“ hiøq¼³½"÷Œ965C˜?ýÏnŽø÷1ûžÙñ·Ë;Ò/xÃ,ïH½ã“cT1"Eþv{dwÇ¢Iîv{dwÆÉ3*Z–”>T¤*êÀ_¢h 6Æ>òÎô‹Þ0äØÕ ^f÷;=²;ãÑ&ï;=²;ãg–w¤^ñ†YÞ‘{Æ‹¡Žó³Û#¾=®úÌöÈïŽYÞ•{ÆgzUïr,j†?5sÖg¶G|{š¹ë3Û#¾5ùgzUïeéW¼aȱª,¿YžÙñè—_¬ÏlŽøÖåéW¼a–w¥^ñ‡"ƨdóuúìöÈïr õ™í‘ß¼³½*÷Œ2Îô«Þ0äXÕ ¨a^»=²{ã܉õÙí“ßœ³½*÷Œ2Îô«Þ0äXÕ ¾DúìöÉïrG×gµO|iòÎô«Þ0Ë;Ò¯xÑcT39?ïíSßäÿ¼gµO|irÎô‹Þ0Ë;Ò/xÑcT3w?¼gµO|{ptŒö©ïYÞ‘{ÆgzEïr,j†vèéíSßÝ#=ª{ãC–w¤^ñ†YÞ‘{Æ‹¡Ÿ¢zV{T÷Ç¢ïJÏjžø¿Ë;Ò¯xÃ,ïJ½ãEP¡ât¬ö©ïAGJÏhžø½Ë;Ò¯xÃ,ïJ½ã‘cT(ÁGJÏhžøô)¾•žÑ=ñw–w¤^ñ†YÞ•{Æìj…-æúf{D÷Ç·Ûé™íß9gzUïeéW¼a¾Æ¨Såé™íåé™íùgzUïeéW¼a¾Æ¨T‡Zé™íYVzv{DŦYÞ•{ÆgzEïo±ª™fzv{Dǹf:v{DÅ–YÞ‘{ÆgzEïo±ªÁö:v{DÇ¢aŽžÑ1a–w¤^ñ†YÞ‘{Æìj…TÃî)°‰Iùfjj¢ M5¦¸ªbÌnYä½-5d²ê}·&ÚHäÖ¬³½"÷Œ|8ûÕjޏ*ó`ÑGUñ›æs0ÔWˆ– ùÎoZ²K΂RíæRB€ ¥êSŒb&„”é,ok¾?;úGouÝ¥ñkۜ"tݱiªœÓNwÃÚ:X¬Ïõú„²]aÙ™ƒiÊ®aä¥eÒ£UìpTy~{®¥{ø£ó”Z\! £öõ Ù­.çN)^àcævÖ·¥R… zÐZWŠH›r„TŽdM‘?0“_Yý~Û/==,äŧ.ùiFℤ’AO­íŒß ÿ~¯î'òŠžÛV´ß ìÖ&­I×Ù[ÂónÌ-I4ÇO8‹nþý_ÜOåg?!b÷?®òÇón9볿ãÿíL}>´77yj H–ĨÐkn#74Éqç~]%×/ÝK¡TÀ xsFqáövÓÿ(ïú PÛr&Ͳ\»9!àêNm$Õ,ñÇŒ¯x§/Ñå[³å\+jqj$SëgVà÷)D~0òSóï[ªiÙ†®!RÙJ­®®àESZ$ÞRÈ7°ô’‚8çrÛK;âܶÒÎø€‹Âìí§þQßô©aé)Y`$§¬¦’ãá33R !°Ê.(¤ª¥@UB•>µ8Åó“Ž6¤*e°7]º GÚ"<«v|«…mN-DŠ}lêÜå(Æ/*èSí/?É˵0\3 7P “‚ñQMÚAª•V¬n#Žw-´³¾!Ëm,ïˆÑ•´Ûy¤Z2÷’’nfuµ(%U.!WoK|RŸÀšÿ6“;–ÚYß!gg|ñë÷ïÓ?rík_Fý)ì¥ *W?l=98Ô´Ãÿ¯CrÙ@VŠd×råSRo-e&÷ó&JÚ³3òÁ"’ÓKTÃg‹‹ OÛéd—Ïõ´þÙܶÒÎø†w-´³¾ ;E?³¶ŸùGÐbVw-´³¾!Ëm,ïˆ W¥×bÈ:[2Ê}iHzZ]2¨n•5qJ¾)È8ºÔ-G9kJÑ~I•!ÖÖ©ËòÍ:ÙJ‚CŠJÐ_ª^ >®€ àEÄÒ¤¦š »5u ×ê¦KgÞ’á UIJ´[jjòI¯ÖÌ—½DŸÂŽ~Öœe©µ³9ý)ÈT­Ô‚‡ »K·[ÅDƒV"–UÃ"f{"–r.;6–ÛFNòfFµku *ºõÔÔè³¹m¥ñ î[ig|@gÓiÚZBe9Ü“eáyßÙ¥!W¤„^@7PJŠÈ!XkH–ʦ¤–µ¾óå.åV[RU€Å @H¯-­kJPLÎå¶–wÄ3¹m¥ñÚ*xE)-3&ʦ%ÙuIša)+@Už@Pç°Îå¶–wÄGš3w2³jMÊÓ%6¦µóÜP¯ã^ìÛ’ö—eô´Z}¦eäR”ë$"òÂi{‹yx¤„‹š°5‚gß™jU+šË©Å˹4ÕýÜ»4oTúK]OØcDòr쥤M$¥:‹•åLtÎå¶–wÄoç]›Î2Ó9ÂÓvòÚZ. ® © + *ˆÃ]jn#Žw-´³¾!Ëm,ïˆ< qY‹r­²ãêœy,–ÐR ‘ŠœQª±¯YlUÊÏ-–Z‘™}Ë%‰eºÑqjj©»p²Ýãy?³_ÚJ8è³¹m¥ñ î[ig|@PØÏΦJË’B¸¯Ë°ò¢~­¤¡9DÓ—‘]]‡¡M³8ìÑe™Ô¥/©$8ÚÞ–«í"éMÁpÑÂUüF¼ uܶÒÎøŽo»'0Êš\ÒBU¬¶ùAÞI@S¹<ûSnIÍÚŠ––eÅ£1ys¹m¥ñ î[ig|@A¶’ò¦,±,ãm»›ªq`}K¼€Î)_›´%'&ÚTì³!sJ.Ì t^ ±u ­.P¥a¬Ý­EÒ¤¦š »5u ×ê¦KgÞ’á2¢FRþJmJ¿JåfÔî®kê4ü 3ìϸ‹IÄNÚ‰³ƒÅN:´„ )À̶*’G¤¬ T슦0_g*Ú„«(0 ‘¯ùGº:grÛK;â´#Žw-´³¾!Ëm,ïˆÐŽ9ܶÒÎø†w-´³¾ ;B8çrÛK;âܶÒÎø€íãËm,ïˆgrÛK;â´#Žw-´³¾!Ëm,ïˆÐŽ9ܶÒÎø†w-´³¾ ;B8çrÛK;âܶÒÎø€íãËm,ïˆgrÛK;â´#Žw-´³¾!Ëm,ïˆÐŽ9ܶÒÎø†w-´³¾ ;B8çrÛK;âܶÒÎø€íãËm,ïˆgrÛK;â´#Žw-´³¾!Ëm,ïˆÐŽ9ܶÒÎø†w-´³¾ ;B8çrÛK;âܶÒÎø€íãËm,ïˆgrÛK;â´#Žw-´³¾!Ëm,ïˆÐŽ9ܶÒÎø†w-´³¾ ;GÚÙÿ¿õˆøÎå¶–wÄxf[Œ¥¶¥›  úbðX¾à¹¤Ù¥Ò¯á 8?dUèÛCa™ì•Ý“´Ø]æäæÿ ]Ñqú™˜û <Ó·-U6ëìJ#:Bñ]â§M0dg­‡J””…¤-Ê-4\ub)µÜÿðæ=Ö¯Û†1ÁrV›!r“J ­*Ò°ùFf‘í˜\Í¿ëõaÀí•—þ8üŒi¸_ûõq?”Pð2JmžYŽ;(ûhŠ©M_p¿÷êþâ(Ò?@Y)žII æÇö·û¹ÄÃaÅÑ·.1æþcÇ?®òÇón9볿ãÿíLAß,ïH½ãÜ$€ò‰6¨á3–Í×›Ó+N-bšI6²™^lx™Czù@7è+écÍhrÎô‹Þ0Ë;Ò/xÄ¡ÄÈ2'ÞP­Bº)#ë9i…)Hð-)kˆâÚœU6‚S€Á@bu Ö„ÀNSî%%Jy@ I*Õåé¼bµ×BäSÏQkf©i$ ‚Ø5Ƥ⣫š&ß*uÐæ…’¤ò')Î=¿–¨¹gzEïeé¼b<Æ\2L¸Apj Ôc JZºqŠ}2Îô‹Þ1æ]ËÅ9eTcKÑy3Ê-‰rß©H榸¯CVª­FÒi—¹ZÕ%!þ*ry怿Ë;Ò/xÃ,ïH½ã  Q 5ÀóÇL™ šôª‰«ìãX 9gzEïà©ð‹™GœBV@J””¨œp5äç‰ÏêOÿ†¯Ê8Ú‹D…µ.•ËÙ-È­µW*Tª]©­Ü®—eÃ,ïH½ã÷ƒ­#(º,xÇ‘$ÿÄRÍ¿*í§df¨bé™Y iVŒ¹Ê[ëÿyí®²Ÿq)%O(‰%Z¢ Í®¶¤¸me ñí t}´öÒ:Îe•ÑPTiZ&¢¸rá\"²]©WíEÉ̺i(ʶ–—w.kKÕ­hÜ9=´g'j"t¸–žp8Ñ£¨ÑIæü=£ 1‰YgzEïÇðzñá] ™w‹Ò¬6[.WÒ©MÊúÔ£‰¯%>?(y©$<«!Ë:q̘ e) i9D^p^© ©wˆˆIIÙeé¼a–w¤^ñŒš­I±g .Ña%Nªäà˜BZR@Réjê•U `ƒRkõ'jZ6kóîL% —MÔ6(Ò\C*qu5ôBÔEpÖ¢” 8™QuM‡Éq )I¿ˆ´4ü¸ÇÞYÞ‘{Æ2n¼´;hZV«“ZÏC¡c$¤¾R·DêœZÆ5K˜u#öŽHk$Ð|| ™ µ¡Æ'Riè` AMG-?å4µ¶Ðq¶úâ“AHR€X&• |ãè­YWŸu×äV‡CjVé¡¡:êF Ôyà:·2§[K>V…€¤©+¨P:ˆ1÷–w¥^ñŠ™'’™•±›Yy-Ê’St€‹‰ÄÖ·½š½±KdÊ9gpzZ}¤È6\—a*u™;Ž¡ (¾µ,¨ƒDÕD‘JŠœ 5¦eAÔ¶_!Ť¦þ$ TÓññÌ©jZPùR««~‰ 4<ØÉ9>þz‡šË´Úm¹Ê$Õ¢¹kîT †íåãJ ˜Ö†8‰÷šzdIÚ¬ª]É¥)SξÛaJ 2oäÔŽUav¼Mx†Û,ïH½ã ³½"÷ŒfQ;i*N~aééf E¦Àq9&ÐTÛJY¼¤’=#v£q-¬—ÌÍšÓÅOªõh§Â/¨TãÄâ‘ÌFPÀXeé¼c‹Ó®4‡ ë $­wu$\N¯Ã\}G>n]2*YSlÍ% )+Å"µªêõêZcC®>&íq$ëMM¸¶VëÉe)RêJ( ®±^a¯X¬Ü³½"÷Œ~uÂ)9†­ ñÙ‘1h·EÊ ”£w&“[æõ* I'xÜÚˆœT§ ”Ìĺï¡l)_Ñ›­|‡°Àk2Îô‹Þ0Ë;Ò/xÆU‹AôO2É™J[\Ë© Kê9ªA¢ƒ'é]c3›YVl³ÖÂ¥š óÊ-$°êRØ ¤ÐkY¡¸ºð0ì³½"÷Œ2Îô‹Þ1›™¶'%fæ î>ÎH¢T6ÆÉ4âÐJ±$¤WUâMp¥¥–û“RÊ›ZªÓë¾Âiè·@_ÇzœVûÀ¢Ž/Œâj£¨¨ùƒ³¥"âÔ¥)iHd ’üÇ75³þ;ëòù)B”-wB® Tš,¹û¨™ >èJ”IK¤ƒZሒ=n|­Ì™yIsÔ.~Dû¢ŸˆÑLôðy¹Ì㊛˜$$$â“CËÎ"m6Ûó/d@+SuZËW Ð@§¤yýš %Íλ-*·¯-Wi…â9i%í9—TŒ»/°‡(ZŠˆY:€Â>çXTÌ¢ÙAJTªb­ZÄBIzjA²Úi›„RR¤&§TÒ,[Ÿ¾æL¼¤¹ê?"}ÑÕs+m ZXJEI©ÕemN¸P–ƒËM´,.©šÆ b5ÉÍ Í©Ûᬔ*êÒI&•¡Á¡ñʸãmÌ)jhÑtQ7O1öû=£ž3󈘘ŸX±*Ú›nëÎ%A(P8„ Œ0½{R¨»{3 ,ö„«+e±Q“Zh¤ª¦·¹ÍkSuÔÖ°²Îô«Þ1ðäÒšM\˜(ª¥Ò"ZN¶Ä’œzg6l)O^à*¸á)¹{ZÑy–íD¨°‘„£—úHUä›ÉHVB”Ä›ÐL­Ä…!õ)'QJê#ÀûÙk™EÓ&¥zGX)ûŒRÉ$±nqÇS.)Ò£x’€‚£ÏûD‚q!•]¬[ë_ÿ ÿÖˆ™ËLI„—X ­8àss‘Ï~‘KôËíâ-u8‰9•2·±,º)™„0¡ÇGñ¯ý¼Ú±‰’ØÍÞ$ ] s7´Â©ÆJ˃‹ÉV‘ìY‚>dm”OL<Ë;y”!j7b 5å?(–w¤^ñŒìªžvryVkÒªxɱ“Y™\ÛDåÖᢕÍìöÒ,¬£hªE µ„ºf•‰CÝ@æ©&§Û«ó%Xeé¼a–w¤^ñŽpˆ:eé¼a–w¤^ñŽp€é–w¤^ñ†YÞ‘{Æ9¦YÞ‘{ÆgzEïç™gzEïeé¼cœ :eé¼a–w¤^ñŽp€é–w¤^ñ†YÞ‘{Æ9¦YÞ‘{ÆgzEïç™gzEïeé¼cœ :eé¼a–w¥^ñŽp€é–w¥^ñ†YÞ•{Æ9ÂëŽ+$âˆË·?Î#Âÿß«û‰ü£vç¤Ïøíÿ¬F…ÿ¿W÷ùE½}hnnòÔ‘-‰Q ÖÜFni’ãÎ:üºK®_º—B©€ð手%3É)$Øâ>Öà_w8˜l8º6åÁÆ<ÀÿÌ;–ÚYßr PL21¯¦xw•–w¤^ñ„Ì©jZPùR««~‰ 4<Ø+€œ–¢e G÷‚>³öJ‚³Æï\ ¬uneN´—|­ HRT•Ô(DûË;Ò/xÀGÏÙÇúc|mX1 ì¹­fšÄÔý`‰9gzEïªÉ«Ry/ZsÌ!”µ“Cx¨+ Aõ8“1™ó¹m¥ñ î[ig|G4J7Z=mÚÌs&[¡ü@1%«!/¦ó6ý¦âA¡)˜AÝŒÖõ·äŽYܶÒÎø€œ–©0ȽJñÆ4ÕùÄç]Úݲ|0Ð.uÝ­Û'ÃÀËm,ïˆgrÛK;â$è:îÖí“á†s®ínÙ>`C}éW˜q¬í´eSy+MSQ¬W†ëjv¹NMëÆ_ÿ×}wkvÉðÃ@¯®ínÙ>¨¡bΓn}™Çm‡¦ÊŠ’—\jíJHäH:”bÌÌËZ^rÍIarRRr“æqV£“äÔØÊ¸Ý$è¤z¢,ó¹m¥ñt úîÖí“á†_]Úݲ|0ÀËm,ïˆgrÛK;â$è:îÖí“á†s®ínÙ>aQ³¹m¥ñ î[ig|Dç]Úݲ|0Ð.uÝ­Û'à ÙܶÒÎøŠ»BQ™•8¹kI–K‚êÒº-奒+Ízî³v¦±{ W×v·lŸ 4 úîÖí“ᆛ²d™šLÌí ÌÓ­š  % <†…J$ŒŠš*+yܶÒÎø‰:}wkvÉðÃ@¯®ínÙ>`FÎå¶–wÄ3¹m¥ñt wkvÉðÃ@¹×v·lŸ 0¨SHÌË;.ûì©§PP´åªH¡ã¦w-´³¾"Ns®ínÙ>h:îÖí“á†EÌË‚&Y⸅¬j þ#ë;–ÚYß'@¹×v·lŸ 4 wkvÉðöa«:dÕé³é—P$Íü¢=”E™&µ­‰Ž2ÑwŽòH¥AæÑc W×v·lŸ 4 úîÖí“ኈÙܶÒÎøŽo;&òBW4€1ôH8‚ºòt wkvÉðÃ@¹×v·lŸ L*ºQdšÖ¶&å¢ïä‘JƒÌ9£²æeB©†JT(FPj‰z}wkvÉðÃ@¯®ínÙ>¨¯“2Rl”72Ú”¥¸âÜn(ëR)ÿü虉D¸µ¦e‘~•“¯Ÿí¥à"f_]Úݲ|0Ð+ë»[¶O†&lî[ig|C;–ÚYß'@¹×v·lŸ 4 wkvÉðà €ÆŒ—q×%óF–ñ¼â‘u%gœ‘¯Y÷ÇA5-—¿œ³Lš“éd¤ÿí1/@¯®ínÙ>hõÝ­Û'à "¦ÒfNÑB[rÐ ¢…*BrJJÅAÄ-*ƒŸ–LÎO8á ù%‡Êf긱©B­àG<]èõÝ­Û'à ¾»µ»døbйD˱4ôËÖª¦žyASËo’¢º¬b^w-´³¾"N_]Úݲ|0Ð+ë»[¶O†&lî[ig|C;–ÚYß'@¹×v·lŸ 4 wkvÉðà Ëm,ïˆgrÛK;â$è:îÖí“á†s®ínÙ>`FÎå¶–wÄ3¹m¥ñt wkvÉðÃ@¹×v·lŸ 0#grÛK;âܶÒÎø‰:λµ»døa \ë»[¶O†³¹m¥ñ î[ig|Dç]Úݲ|0Ð.uÝ­Û'à ÙܶÒÎø†w-´³¾"Ns®ínÙ>h:îÖí“á†lî[ig|C;–ÚYß'@¹×v·lŸ 4 wkvÉðÃ6w-´³¾!Ëm,ïˆõû!Æ•ûîÖ¥þbNºÿ/²8èõõ対žè¹Ü¶ÒÎø†w-´³¾#•Žóù9ôªjaì”ÖI*uu7Bkök&'åé¼`"çrÛK;âܶÒÎøŽ“3®°uKqÅÒ\K5‚¦œ±ë†aëO-HVÈ Œ â8q–w-´³¾!Ëm,–w¤^ñ†YÞ‘{Æ!˜aÇJmJ/7@ ôÄb8_ûõq?”oqÅd‚œQvð'ùÄ`x_ûõq?” oÜþº?Ë͸‹92‰1iÍ:¤0¥8 diæ]m©Ä—\J— TÕ¸ŽÜÓ%Çœuùt—\¿u.…S5áÍ›“~rËC¬»*ô£“-¶ûÎ(¶¡”Ê%3à£L’*.‹§ V¿R“¨DÜÐÓw$ܘZŒýæ¸ë 0‹Å75àxžÃ'Ý“˜eM.i!*Ö[| ï$‚#œ¨‘”¿’›R¯Ò¹Yµ;«šú? ý—9h7ÁÅ<ÌÂnK·,Ëh) ¥M2Vµ*‡PRiA‰!B€tU©8‰6–í¢ÊÐ\XJ¥]mO?@šï !ÌT B@ä’:Lî[ig|C;–ÚYß¶tã¯[3L;3–¹~‰ah[M U…ô¹ì$ƒÆ¦ª 2pŽhÿ3?í»s¹m¥ñ˜fIÙ©õÎ>Ñf`4rd!` *¦ ‚tÀóòF/_jàyiOÏ·jäeœ¦rк™b[¸Kw…ì)Bá&ø ¦'Yj½Â{LÖ¿Ñe¿ÔôGÑÜÚ&?þÕÏÿdI³ÓcY®ºä«´[Á)ZœÊ’Z:Í=#ïŒÓÅë1=,ÏÄ;EçìI—­ Ô»2YL)Τ(†ÖàB™ôSxT’©RiÖa«_OÈ'>’Î3Y“”Ì×råæ0»•­kË{ð剌.Ä–›rj]™¦®QÔd’µÔÔÕ@ÔÔã EØ’TÌ™—¥êd‹H×Jê<·SîÑÙ•dŸí÷˜}‰¢Hª])Ô6¯L­&£* i¯ÅŽm9õOØö£Š–)œ•¦’Òi¿*’«ÆñzèœF®HºJìD>ËéfA.°Œ›. •æÑB.¤×Bpñò”Ø y÷S-g%É„©/,ªèW¤kˆ<µ×Uj[,p…Õ´Ê\rY.J°”ŒU”T ©§NMhF¸™)jZóO¢AH–•œúÕ-Ç[ ¨ `[C¦é9a­gÖœaI,¦Àa¥4ĵœÓjJ’¤ 4 ª^¨Ýç æ‚Ó`.M¹%ËYÊ•mWÁ $ãˆMh'Þ`+Ô‚ðɇRëí9/e%æÖËËl…%œ1IÄw¶-‹‚ÝšÓ“)“`ÌÌ¡Ò]Pl•Wà"·Wˆ "šµcžYy®iY\ÞæO%}»—)K´­)L)§WbZ3öd&²u¹—É.íuÒ§ B¦Ù´gKŽKÍ3p¦i‡%åRÏÔ&i ¿pÖ£ŠBH¼+†&f–ÊI-ÂÃR))[éan¤¸§ r>Sj&ò“JœBºd¶»¥º¶ÙBÞZ\uIɵƒx(ã‰óÇ·ìLÿ?ÈÈg›GÕe5SÒ­uaö@[Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à&Â!iY-¡žÙðÒ²[C=²;à>-$•4´%jmJ¦•O¥ˆ­G¾2Ö,Ÿ›´]±j%éfÕu¤!¤'+‡¤h*)ÍÏì×qjO¾ã‰Ù¥º Åù qÔyâqjt¶7Åÿñ]¬oBÔÿ<Ð"[Îd™[”­Ä•Sž‘ Ì"R^hÍÍIå˜Êѧ€iÿ%SRŠIJ¦ àAXÆ©ùËPK®nËÉ©¤=SIf®ÌÑÌšÔUz‰ÆñÖ5µÉÍKYÓ—©©‡\Æ@š%I „TTq?„ÖcVj]C6‚œiÅßKnº•ùîòãËRjqÖI3s¹m¥ñ›jÐ’jaæ,ágHËe–’Z‚»x”ÝJ¯!#úxbD_Y/¹1g¡ÇU|ßZRº~Ñd!xaŠBMF¸a³¹m¥ñ î[ig|@}¹é3þ;ë„áïÕýÄþQ·3 8ã)Cí©EæèÁ>˜ŒG ÿ~¯î'ò„ Å¡>ü¤Ì»2Ì-ç_ KŠ+¬áª±Ë?¶:µßŒkÅ ÿß¶_Øçû&#Z–‹ÒVŒš–̪ÐâæA¼„‚„‚1 ®¤IÁsûc«]øÆ¼PÏ펭wãñD8@Äœ²]Ÿº”©÷Û¼•¡7RÛ…5¢” °Ñû5è«y„e åfR†ÔåWDRãjºâý*ÝI¦©¨ 8Ð%çöÇV»ñx¡ŸÛZïÆ5âˆÌ[ò/Ú¦ÏBþ¶ú›ò8ÊMj.ƒ|RéĤ 5â+iDÏ펭sãñC?¶:µÏŒkÅe”fýÙ¢?šž—Ÿa¨™ý±Õ®üc^(göÇV»ñx¢\ "göÇV»ñx¡ŸÛZïÆ5â‰p€‰ŸÛZïÆ5â†luk¿׊%Â&luk¿׊ý±Õ®üc^(—™ý±Õ®üc^(göÇV»ñx¢\ "göÇV»ñx¡ŸÛZïÆ5â‰p€‰ŸÛZïÆ5â†luk¿׊%Â&luk¿׊>µmI†ƒ¬ÙΩJYÛxÐyyÁ‰ÑÃýË-ö»þêà>óûc«]øÆ¼PÏ펭wãñD {Yô•®}IB¨”ËBï©IHJV¥]rŠPMàxÀÔÛ1?0f$æQ,ܳn¸>¬ä8Î)TV8$&ºµVŸŸÛZïÆ5â†luk¿׊!Ù‰œz]nÝÈå*»É8 ±t±KªÄ¤L"©{YÕ[J•™–~].!¤´Û— !åU*8Ý5ë¹`&çöÇV»ñx¡ŸÛZïÆ5âŠÇ8BļäÊŸRƒ m¶ÔPЏ}*ã(€?e\T5sšE´„ã6„›sRê«k¯(8ƒB*08ƒˆ¨æ&ã?¶:µßŒkÅ þØê×~1¯K„?¶:µßŒkÅ þØê×~1¯K„LþØê×~1¯3ûc«]øÆ¼Q.3ûc«]øÆ¼PÏ펭wãñD¸@DÏ펭wãñC?¶:µßŒkÅá?¶:µßŒkÅ þØê×~1¯K„LþØê×~1¯3ûc«]øÆ¼Q.3ûc«]øÆ¼PÏ펭wãñD¸@DÏ펭wãñC?¶:µßŒkÅá?¶:µßŒkÅ þØê×~1¯K„LþØê×~1¯3ûc«]øÆ¼Q.3ûc«]øÆ¼PÏ펭wãñD¸@DÏ펭wãñC?¶:µßŒkÅá?¶:µßŒkÅ þØê×~1¯K„LþØê×~1¯3ûc«]øÆ¼Q.SjÚ‹}ÆSg:VÐJ–3¶øµ­1¯°ÇÞluk¿׊>$¿{ZŸc’â¾nÚ™–z×J›fä³j2¦éã- %•ãËz D¯šÏ?¶:µßŒkÅ þØê×~1¯DO$œ´W"ÕçIZ”­qh© ½xj8¨†¼ESÉ –2R¯L!×òJ¢BJ¾­j!7Êq"õub5‚KÏ펭wãñC?¶:µßŒkÅ-{Ers²¬ Ù)6ÞmÅ—f“PJJŽŸXû£¢mt&I׿eÞilI¢mÖ©ŠB‚Üiˆ¸­tä€ïŸÛZïÆ5â†luk¿׊9KÚÍ¿22Ï´…¼ã-º»—\Z ªHôqWÙ/½>›q‰fÞ–î¶·h¦V ¯ÓçaMF¾luk¿׊ý±Õ®üc^()ÂL2ÕÙ9—V´ %HJZ›]¯)®&˜Ri_¡Â[1SŒË¡ÛÙly#€P.’ky8„+‰ÀЉ¹ý±Õ®üc^(ø]©j6ëM.ÎvûÊ)Bs¶Íh <¼ÀÄèƒ3ûêËû^ÿiPWÞluk¿׊ý±Õ®üc^(õÉ•¦Õ—•7a×yj•6úÏÊ"Ì[Ò2¶ƒ²“+É©´•_B°¾x¡EcŠ Å aí 9ý±Õ®üc^(göÇV»ñx¢#v³îÎɶ܃Ù)–Ö¿Iµn‹¨Y8çUNªãjÚïIÚ.°Ûò‰ÉË¡æØq$»2¢V. Þñ@ÔqV®H"Ç?¶:µßŒkÅ þØê×~1¯x»E–òõK‡#0ܺ°©w(F:¾±?8çgZÈŸÉF˜c.ÖYœ­Ï¬F"ê)y:é¯í‚ºçöÇV»ñx¡ŸÛZïÆ5âˆSÓò³V†QùlÞRW9¢e”WC” ý¥ .jû5ÇE[Ì#(W+2”6§*º"—U×éVêM0¥MEÆ„KÏ펭wãñC?¶:µßŒkŘ·ä_µMžÚþ¶ú›ú8ÊMj.ƒ|RéĤ 5â+iÆ^nÔva¶Ý’q”)T+3HUßÁ&¦0ü/ýú¿¸ŸÊ?BcöíýáùÇç¼/ýú¿¸ŸÊ­}¬èf׳(utq[AZÔ@cu§æóÖ]¦»­-’…I¨¥IYI5ÇÐ8Ÿ1ý¤±þÕÿ²b‡…V”ûãí³19q%-Ë• Dà¡Ê¯·“š,DÏä$ÎÎi2*”m®$:Ú›}ÌÚòÞIR•Æ*AåZñ8ã\"C’Òî4ãj¶B\na³IUjyW—ÉÈFóöu¯>ý¡*“7h·vn\)­i¼•8¢£Qˆ/Zü&X´^f~o7“rëª.P¢ò”$ëQþJ :WÅiù?›Ä5Œ+!2\nVÛÉ_S‰c6UÄ©D•SRThIêÀRf‘WVÚ¸üý®p†e™§k>-å/Ó«¸SÚçÈz¢pƒ„9’&•k?qçlº@ýŸµÃì¨ñíù–vÃô&íU´jËŸ@®ÈO”|éum§ð‹Œå³ÂyfïÌÚ«IQ)(LÊ ÒMê‚€o&—•¬ P .Šss„!Ì‘6«Yû8ã`Ђ'ìý®`õD8óÜ!ú‘WVÚ¸ium§ðkÎU›yW«jÌñ«Z*šïxËÕìç8C™"iV³÷qÆÀ ¡OÙû\>Áêˆq¬m‡èE][iü"á¤UÕ¶ŸÂ.??s„!Ì‘4«Yû8ã`Ђ'ìý®`õD%xAÂéÖeµŸJæ\ ¤•ТG&¯LêÕ‡ª(ã[Êí‡èE][iü"á¤UÕ¶ŸÂ.0rvÏ í:™kUw’ ”2†°¢É"ñQÃUª‰¤w¸M¸ãkµŸ¨%&ã€â­ÃøöSÑq§8Ìaú&‘WVÚ¸ium§ð‹ÏÚáfYšq6³á,·”X¿L ®áOkŸ!êˆKpžÛrm¤»j?qnº®‚„šò¦ž‘åÃtQ?æ²l‡èE][iüá¤UÕ¶ŸÁ®50>m"®­´þ pÒ*êÛOàטC-¤UÕ¶ŸÁ®E][iüãS¸m"®­´þ qΚrRÍa‡,ûD­7Ê®Ê/ ¸¢99ˆŒ" "™Ê’©¦mɇ£k\¥Ò×*ªn ÆB ú<Õ¯Ò›KŒÍ"bZÛySRù»Ž*R†ïD^9ääŽæF´Ò²Í®NÚT³ÙBe³eUu¾jQ­å`I¸ 9æä¼©‡o¹3ĸò¤ÓVîߊjqcuÆöäÚhßD½¸&+x=šq’«Î(ª—.ã–XÕJÊ+RóŠe”·˜Úî­nJ¬•‰:¾C¨#[ ¶‘WVÚ¸ium§ðkL"`e´Šº¶Óø5ÃH««m?ƒ\ja ¶‘WVÚ¸ium§ðkL!–Ò*êÛOà× "®­´þ q©„02ÚE][iüá¤UÕ¶ŸÁ®50†[H««m?ƒ\4Šº¶Óø5ƦÀËium§ðk†‘WVÚ¸ÔÂm"®­´þ pÒ*êÛOàטC-¤UÕ¶ŸÁ®E][iüãS`e´Šº¶Óø5ÃH««m?ƒ\ja ¶‘WVÚ¸ium§ðkL!–Ò*êÛOà× "®­´þ q©„02ÚE][iüá¤UÕ¶ŸÁ®50†[H««m?ƒ\4Šº¶Óø5ƦÀËium§ðk†‘WVÚ¸ÔÂ.:ZeÆçg¦gÚ7^É Ñuâ…דÚ=ñzY‰éi¶¶R&Ü)h•PR Ä Ý4©M±Gž7p€Ä"­ºµ4ŸÚV´´™Su UIPâÔâ¢h¢EN¬>TÓa,ÉÛlÜXq²™e(¶º• ÀÔ¨(Öµ©%ZÉ's sî´üÂ^zË´×u¥²P©5©+)&¢˜úç楓2ÊÚÉ[͇Y,:¤ÊÞ.7Æ¢IRN«ÄWY®$œc{ R2Mä)gÚÿS0䢫.ýAÃWÖ”vTÈTëSFεo´ÚÛHÍJ(¤žOä8×ÂI9iy4°–¤-’q.&ôª±!œˆ®®?oºŒ"L4‰ykq !(¼Ð–4qHHHQ7k©)¨MXšîá–Ò*êÛOàךqËJIñgÚ)CRªÊ/•µÉÏHÙB ÅN-s3,Ì6ŵ,ëHZš“­BŠIòª#Š™Â\m›q´!źÛI”â¡k B¨'øÔhI:©„náa%ØjYԼ̲™Œ¢œqÑ'Bíë·‚…Û¸ÜEhâë©5ê™y÷v̵T^m ¨f«¸TREAª«ZáAJFÎG:Y·Kºê¦­h¥q*=Ô&ƒ QÚ['+™äìû\æ’æ]ºÊ«›˜œ5ñÎ6°€ÅLäæ³Ì¥ŸkŒî\K¹IU`‘†¾9ùG%˜q§2ÈKÌ6i*­O.òù9Ãþcw S ÈL—•¶òWÔâXÍ•q*Q%GÔÔ•F:°™¤UÕ¶ŸÁ®50†vJt½8ÓfF}ª¨qÝ—RR>ÒcÂÿß«û‰ü£õW½÷“ùˆü«…ÿ¿W÷ùDyí%ö¯ý“~¸§-É„$^QB’êʾ‰¨7kísÆ¢cûIcý«ÿdŧÂf³»³–6tâPŸ¬DЊÐ(¯ÛÔ¼ÚÜyWReß@4®*iIÞDZYsòlX®Ë90ØKŒ½”iÒñ*t¤„%?WOCb'GéJà—Õz¶[jÖ•ï{˜ü½QB¸%Áõ^­–ǵ¥F»Þßæ?/TSvóVßÄÃó÷í©4åTëÉšQ`¤0Úœ2éúÖˆKiq5FQ¡'XâÅT²Û‚iO<•å”JTjA©ª…?]xܱúÄ׸4ÃyI‹9”%kKu^’ÔR±ržÌ5]îž ØHp8‹5¤,ÁH%%'E‘ÕªƒÕ‘æ­cä’º„s ¼¦‚Ò\JB”Šâ­ 9¸ÇHó:„ „ „ ˆÆvP*a&i€©T…>2‚­* ½QA\c«®!†–ë«Km¡%JZ@Ä’yHGi–&åÒü£í¼ÊëuÆ–•PÓ=±ÉŒƒ™ÎNvYY¥s‹®¤äiZßÇ‹¨ëæ0áÛ”vLε4ÊåBJ‹épPk7µPPû£“VµšóHu«FQÆÜt2•¥ô§¤\Uì×6ʆ}Ö}µ¼ÍÜ«iX*EEEG%Dv€B€B9ºâinº´¶ÚT¥¨Ð$ I'G +JBÐ+Ì'¥¦²t¿u+»]U¡ÃQ€—BމÆœ\¢¥:Újº!E)ÕU(B ÚÖ„R$@!@!@!⩆‘4ܪ—GœBœJhqJJA>õ§ßÚŽkq ­´­iJœUÔAÎh ü HB8¹2ÃY\«í£"Œ£—–ÄcÆ<ÊqöЄ ŽaÄ”ÐZK‰HR‘\@5¡§1¡÷å/9-4Ô»¬<•&e¬³@àVŒ1¡ÆœdûĘDyyÙI§^jZi‡œaW]CnÎ8( G¯˜Ç&-[>arÈjq‚äÓAæ+ [ˆ" „œi@y9 ØDDZ2g99Ùef•Î.º“‘¥k.£¯˜ÇÓS²K"i™¦aj C©p(“tu{· 0„ „GTì£s¨’\Ó)šq7Ép¨cˆN²0>ã"nvRA ìôÓÍ©WBÞp ÍSËU;(Üê$—4ÊfœMä2\j⬌¸ÀH„F›”h;=4ijjUзœóTòàcÕNÊ7:‰%Í2™§y —Z†8„ë#î0!&- i¶åf'¥š˜v™6–êRµÔÐPSS„hÈ!‡ŸTô²Yay7œ.¦ëk¨Tk©x p„ „ Ž.L0Óí0ãí¡ç¯d›RÀRè*h9h#é§êJ›ZV¥$”š€A¡h ¤!!!!ozï'óùW ÿ~¯î'òÕ^ôÞOæ#ò®þý_ÜOåmæ?´–?Ú¿öLPYíM½fHÎ59h¯+,_yöf.5*º¦à¸¥)ÞR°ô±¿™þÒXÿjÿÙ1$ð^Å*4’¸Ú”YC«K$Škl‡P¨¦<°j&!SnZ­Z?øvûÎ>Æs1"—Ú0QH$ZóÄɆgó«Aô»:ihÊ¡–Ò¥ªÁp¤ `ñë¬ +UUYÿG,¤³~Ñi• ŠgÔ·™k‰ý sm©Ä†ª+”‚\æ¾o]»üYHá0-©yé‡o)öå”™²JèðÉ¥ m ©ÇŠò®WÒSF¸˜ÒÂ+-m±iʵ7=2§YÈ!7yÄ8€„e ]ðÞ*Êúi+åÜß‚M:ËR 4‹A¶Û ›DÐx¼2wBš‡í} 5WøcU M´å°g''ž¶ëˆ˜l²Ó3 !—2jK—‹u*Kd$(Rµ½YÓìÍÉ®nN[=2KC Ë)o¾¦”K·Èº¬¢½“u*ÂõuVºˆ@aä…¤§Ó©´ ±Km¾ãl¼Û‹i.M„P¬­K$âUCU 0´ÜœfÇœvyv£hD£ª[EàRBݺ\(Ä™ÚûkøÜDy‰)I§YvfU‡œaWš[…ΤG«š¯„¥õ4ÃMåÛiJ*[ì¡÷ T5&ë*Jèj£ZÐ]ÄTˆ¬³›µW(-£h üâM7T§‹ŠCߪôiÆv¦îºˆÃ_ ?ÿT~ÐJTÜÝÇ]içØ,>RÂÓ2ɺµ¨\Å»©!$Ò”¤ë¶ƒ’3I6ƒènE9£o4Û©ÿ¬” Ž2Õp!I ¥eíT5QͦÐÒJ[BP’¥(„ŠI©?i$ŸÆ£häIZm VrLÍ陂ï`”å2ˆ$dÉU*ž*T?†5rÁ!/–iL¹’MöÔép ÐU%ÄG?,I„„„„r6ãÒ.:«5 å«+4Û(»yÄ—ÕqrB§ ØST_Î6‡x8”È·6¤%ÖÖ2ÁÕ<€—B”°ã•&…@k@(¡¼„zÊCÐêô‚ÒôùZSy5<3{·žEu ¤¤qSŠ[45©ƒ:Ó“3M;)'6”KW™rX J„>Šà)mdÝ+ôIZø@f¦ZzfÁá3­K¾Dê\TºÒ’µÿGB=/y$PŒ~Â#âÒ°ß›“ry쳯>·eY-†P†_¸±Rª(-Ì]wh+¯Q BbNלve7ž~U…¼èêݾñPJްRq YdË[n´èrvdNdBÜKŒ¼Ûba*J€+ZÈ)$(ŠBJIÕÄŒ 2‚-GÚ–™qù¹yy¥8ó¥—ÜSDÜ "ãJJÒnbS|«1Þ^ZÒÌí9‰Éù–¦É©¥L/$È)e¥¨¨&¢éZHU ^ "ª'QÝm´¶B\mi)R*Ê !ÙÂåU55•K“k/œ¨È €›§Ñ7@*±TV3œÉÊJ¼¦æRÓV¤Ó¥¶Ô¥ԷP*RòB±£„Í30¼ ˜´B”ê¥júÔV_v•h 2Tq)Ì/F‚Ü®u+œg¹…Ç2™žVþV¨¹\——rŸËª¸Ò.ažàÄœÛnNMÚi}3®) åVBsvon|(^ŠÄ6%m9›fa¹‰éÖ²«} 2êB7ƒe.ä&EÄß®¿ã1­„Jq6ÜÄ™}ÇeÊÞK/¡†ÞPKm¥`­(BƒœgN&¥ Âôu³$gæžu¹ÙÛI- $¥¥‹Ìñ”·…à Q¼”zDŸD¬^šˆ@TX.MÎ4äüâÓWR†Ð†‰ÉŠÕăȥyQ“å¬TÊ3oäó®ñ–̳†òê2 J”áö9uñ{ø‚™ÕUF¥¦ÐÃHi¤%¶Ð”¡" `‚:@a¥›·Ä‹äÍÍ™•4Œé&Uଢ/”•9Æ!9ZA䡹X•µU1,¦Ü›}”µ0/)§Z›*b¨JœZ–•B² ¡躱´„I)æ§Kᔺœ‚Ò…eRjP…ê8Œ5€kXÊ"^aä²äâ-'Ø—šKM Ì´ãµiÔ’–Oº)h'Å!\€“M¡¤”¶„¡%JQ “R~ÒI?Œt€ÄÛN[rqRyën¸‰†Ë-30 s&¤¹x·R¤¶@BBU+[Õ“kH¿*ý ëJ´œ˜]–Q*ëkqEn€ò•zç:nÔSDR”Ø@dž—µÙ•TÍžgŒûóSˆ£Ž­H £å®"ÍÄ‹Éj†ƒ“ã6Áq“lÚ J®Ð,&]…NêTíHcBua„h"4¤”¤ƒE©V%›R¯2Ø@'žƒ—”\§fiNM%Ǧdi¹–ØSJzajqã_ *ò’9 E.„ÅÂÙb_…r‰5!)‘u›íË*âEæÊVÐ(•ÐWÄVáÖÐêB\BV¤¨ €A¨?h Â:@bT&š±¥šm¹–&dì…ÈÔÝÙ—2(m(Q*«Iã$05ƒÎ*WJ&ÎÌŸ—•eÖ”2N\}Ä„”éMÔ¡G-jš%ò1•p¿÷êþâ(ýUï@}äþb?*áïÕýÄþQÖmA<"±Êµ^_'÷F4Tó/q]ÑžþÐØß|ÿ·œ!µç,ùû.VZ]A¹¹–Ûr`€RáTi×É«D6N˲ëM:²•¼¢–ÒPj¢O'0޹Tó/q]Ñš˜ýýcÿŒ¿ô ªß*žeî+ºTó/q]ÑQd[åS̽ÅwC*žeî+º*! ‹|ªy—¸®èeS̽ÅwED!‘o•O2÷Ý ªy—¸®è¨„2-ò©æ^⻡•O2÷݆E¾U<ËÜWt2©æ^⻢¢ȷʧ™{Šî†U<ËÜWtTBùTó/q]Ðʧ™{ŠîŠˆC"ß*žeî+ºTó/q]ÑQd[åS̽ÅwC*žeî+º*! ‹|ªy—¸®èeS̽ÅwED!‘o•O2÷Ý ªy—¸®è¨„2-ò©æ^⻡•O2÷݆E¾U<ËÜWt2©æ^⻢¢ȷʧ™{Šî†U<ËÜWtTBùTó/q]Ðʧ™{ŠîŠˆC"ß*žeî+ºTó/q]ÑQd[åS̽ÅwC*žeî+º*! ‹|ªy—¸®èeS̽ÅwED!‘o•O2÷Ý ªy—¸®è¨„2-ò©æ^⻡•O2÷݆E¾U<ËÜWt2©æ^⻢¢ȷʧ™{Šî†U<ËÜWtTBùTó/q]Ðʧ™{ŠîŠˆC"ß*žeî+ºTó/q]ÑQdY"v]s0—*ëA%iºEÐkJûŒuË7_KåçÈ<Ѳÿ~Ú‡ùü—çÍEƯ>y¾\”âÔJË7_KåçÈ<ÐË7_KåçÈ<ÑWŸ<ß.JqZ¼ùæùrS‹¬³uô¾^|ƒÍ ³uô¾^|ƒÍuyóÍòä§«Ïžo—%8¡+,Ý}/—Ÿ óC,Ý}/—Ÿ óD]^|ó|¹)Åjóç›åÉN(JË7_KåçÈ<ÐË7_KåçÈ<ÑWŸ<ß.JqZ¼ùæùrSвÍ×Òùyò42Í×Òùyò4EÕçÏ7Ë’œV¯>y¾\”ℬ³uô¾^|ƒÍ ³uô¾^|ƒÍuyóÍòä§«Ïžo—%8¡+,Ý}/—Ÿ óC,Ý}/—Ÿ óD]^|ó|¹)Åjóç›åÉN(JË7_KåçÈ<ÐË7_KåçÈ<ÑWŸ<ß.JqZ¼ùæùrSвÍ×Òùyò42Í×Òùyò4EÕçÏ7Ë’œV¯>y¾\”ℬ³uô¾^|ƒÍ ³uô¾^|ƒÍuyóÍòä§«Ïžo—%8¡+,Ý}/—Ÿ óC,Ý}/—Ÿ óD]^|ó|¹)Åjóç›åÉN(JË7_KåçÈ<ÐË7_KåçÈ<ÑWŸ<ß.JqZ¼ùæùrSŠrÍòŸ‘r©æ^⻢.¥£ïÏϻنRÞµç,ËfÈbV]S(›Sˆq”xÒå“ÉJxRµ¦°鉶ã ­e.>°–ÒRAQŸÌx_ûõq?”l&?Xÿã/ý1ü/ýú¿¸ŸÊ*¶v›sZNÏ™•”rg7ªÔ”5¢ƒ†³–å¦ân¹`<¤…QN â A×È@16nú¦Úm.©°Z¼nyǶ96‚ëiq©×…€¤©7P:ˆ7bN YËBJhسJ­J)Ê#T‘Ïó‹[¨¦;TwÇG~©ÆPäãÁO.ãbêxÆéU=d˜ú(!Ô¶g\ P* âTJš]öx€ãœZÝE1Ú£¾Å­ÔSª;âFEÍ©ïr<1ÅÇܺŸTû…´’’R®5itQ8šáAp×óœZÝE1Ú£¾Å­ÔSª;ã¤ÇôfTóÓ%´úJºš$sž.œê2.mO{‘လZÝE1Ú£¾Å­ÔSª;âFEÍ©ïr<1Î_úL³S N<¦@Zu"©" ú0ó‹[¨¦;TwÃ8µºŠcµG|vR „®uÄ©fê¹Æ4&ƒ‹ŽŸÂ>².mO{‘လZÝE1Ú£¾Å­ÔSª;ã¢xÓ —e[BV¤ÝND€}å>èé‘sj{Ü |âÖê)ŽÕðÎ-n¢˜íQß2.mO{‘á†EÍ©ïr<0ó‹[¨¦;TwÃ8µºŠcµG|Hȹµ=îG†6§½ÈðÀGÎ-n¢˜íQß âÖê)ŽÕñ#"æÔ÷¹d\Úž÷#Ã8µºŠcµG|3‹[¨¦;TwÄŒ‹›SÞäxa‘sj{Ü |âÖê)ŽÕðÎ-n¢˜íQß2.mO{‘á†EÍ©ïr<0ó‹[¨¦;TwÃ8µºŠcµG|Hȹµ=îG†6§½ÈðÀGÎ-n¢˜íQß âÖê)ŽÕñ#"æÔ÷¹d\Úž÷#Ã8µºŠcµG|3‹[¨¦;TwÄŒ‹›SÞäxa‘sj{Ü |âÖê)ŽÕðÎ-n¢˜íQß2.mO{‘á†EÍ©ïr<0ó‹[¨¦;TwÃ8µºŠcµG|Hȹµ=îG†6§½ÈðÀGÎ-n¢˜íQß âÖê)ŽÕñ#"æÔ÷¹d\Úž÷#Ã8µºŠcµG|3‹[¨¦;TwÄŒ‹›SÞäxa‘sj{Ü |âÖê)ŽÕðÎ-n¢˜íQß2.mO{‘á†EÍ©ïr<0ó‹[¨¦;TwÃ8µºŠcµG|Hȹµ=îG†6§½ÈðÀGÎ-n¢˜íQß âÖê)ŽÕñ#"æÔ÷¹d\Úž÷#Ã8µºŠcµG|3‹[¨¦;TwÄŒ‹›SÞäxa‘sj{Ü |âÖê)ŽÕðÎ-n¢˜íQß2.mO{‘á†EÍ©ïr<0ó‹[¨¦;TwÃ8µºŠcµG|Hȹµ=îG†6§½ÈðÀGÎ-n¢˜íQß âÖê)ŽÕñ#"æÔ÷¹d\Úž÷#Ã8µºŠcµG|3‹[¨¦;TwÄŒ‹›SÞäxa‘sj{Ü ;™ÑhNÍMI;.Ka)$(›·««íqøú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ãg¨½ÓçÈüú‹Ý>|³"æÔ÷¹d\Úž÷#Ã>an²Éq™g_ZH!´‹¥Xóš:µL\´Ë©pØ B²ÔJŠ×Ø=Â%d\Úž÷#à ‹›SÞäx`"´Õ¥3lYî½f=.Ó(©JZT(RG!Œ ÿ~¯î'òÛ,(¼‹Ó©7…A ¥9†0œ/ýú¿¸ŸÊohdËà>ÞQ¬ÙWÑrýäÑy~È®³ó¤ð9„J¶ãs­È„6—qIp"€Q_Ì9pü"K¶Ýœ…ªu (EÎ*°ä¯'òǺ~ÅÚÓ¿ú`(æ2Â’‹UVjB‰"c*•äÞ "¿X-Œ8¸ý°™Ò!,%—¦PãŒ=‚ŠÔr)˜né(¨UðÒ2ýµ‹Í?bíißý1ò-»8§Ãaj%W± V‚´öŸy€©a3i¡:õ¢ì…\¢šiô.÷îJvŸµô? ‘ôÓYÖé|i©o…•–ÈZɃÅW&o“!##&jik„`a^a_bbbbbdd`…ll! -OK€&"0<5’y"&&&!lm¦aabbbbebbdd¬xhi!%O[M'+<7 Ôfy! "&lll¦¸ddbbdadded¦pqmi3[J2$/9; ¹ #nsqsª½dddedadde·Qqnqni#@E1.7; W}  mmquu¥·½··d·¸dd¼½¬xqplnj)B>97;D%  jsqsyto¦»¼»¼¸¸¼¼»ÇÁ¥t‘urqm‰ƒ07576 muuˆuuov‰«ÇÁ»¼½½½½ÁÉÀ•uvvvˆ™¤ž|*776syvv’”œ²æëÂÂÂÄÂÇÇÈÉâŽy“’y‘•›ÌÛ w*;4%q—““”˜ÐãðìëÈÉÉÊÊìÉÊÊîà•”˜•”“’’˜¨Ûžw(74{|¢¡˜˜–ÍëìÈÈÈÉÉÉËìîîòùùØ›™š˜™š˜•ÚÝœ-D©'££ž¨ÍáìÈÊÉËÊìðõéàÙôôäШ   žž  ›ÑßÝ‹0«×ܤÏ×ãëìÊÊËËËËîùèÝÏÑÞÓÐÌÐÐϤ¨¨¨Ì ÑÞßåÓ‚ ¾fäßרéêìÊËðîìñðóùäÞÝßÞÝÝÞÝÞÑÑÑÚÐÑßßßßåô $~ÕýêðïìììËððîñóóúùäßåßåäßßß×ßÓÝÞÓßôßßßôö߉³âúðïíððñïïïóóóóúùôåôôèôåååßßßßÞåôå×ßßåüä×¾ûòïóïïóóóóóóúúúûöøåôôôôååååßßßôôäßåô÷þ²°òûúúóóóóóúúúúúúûýùöô÷ôôôôôåååôôååô÷÷þô±çÃûûúúóúúúúúúúúûûûþüöô÷ô÷ôöõöõ÷ôôô÷ôùöÖè¾êþûúûúúúúúúúûûûûÿýýüùøõûûûûþöôôôøüýéÔê¾úûûûûûúúúúúúûûûûûýýûýûþÿûþõõôô÷÷ÿöÔéÆ¿ûûûûûûúúûúûûûûþüùùýûÿûùùöþüüööþýØØ¾Ãûûûûûûûûúúúûûûþý÷öüùýøéøþýöüÿýÖÔ¾Äûÿûûûûûûûûûûûþþþüøöôøôø÷øþþýÙÔ¾Äûþþûûûûÿûûûþûþÿýýýþý÷÷÷ýÿöØÔÄÆóûûÿûûûûÿûûþÿûûûþûÿþýþþøÔØç¿ÈóûÿÿûûûÿûûûÿûÿûþûÿþöÙÔäúÄÂÈòûÿÿÿûÿÿûÿûÿûÿÿøÙÝßôò¿ÁÊÊîûûÿÿÿÿûûòçæáÕôúìÇÈÈÈÄÃÈÅÈÊÊÈÊúÿûðÊÈÊÊîûûÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿü?ÿÿðÿÿàÿÿÀÿÿ€ÿÿÿþü?øøðððàààÀÀÀÀÀÀÀÀÀÀàààðððøøü?þÿÿÿ€ÿÿÀÿÿàÿÿðÿÿü?ÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿ( @ ),, 348wEqA+vL8JV Z.$Zl%h!y&$j%#v:3qT:OH1VB4yS:{^@UmLP[FbZFxsSk|Zw€MƒN#…T(‘Z(‡V0‘]9™c-©h,ºt;¿y>WSœk_ iD³tDŽ_h‘ccm{ªucÊ~@½E¼ƒS¼€[›‚m„p½Œg®‡{¦}«~»Žy´”|³™|LJLÉTΔ^Ù“ZÂdÌ”gΚkÓ”fÓœlÕ¡nÕ£rؤsÖ¨uÛ¨vÔ£yÙ§{Öª{Û«}á®~•'€)&‡2-Ž00($’.)“)&™))š3-›32ž-+¨0+£65©.*µ1.»64´I=G=œC8½>Cœ_LˆOC•LA˜QCžiUŠu]ŒhkePH³qg¢zz¨93ÄA>ÊFDÉULÎVRÇYXÕmeËslÈwrËmfÒuwØqsì„iЦ~€…|¯‚{Ƅ׀¿­ˆ†¤Œ¬“‡½•…¼ ‚‚ƒ¦„±Á”€À¥ŠÍ¤ŠÛ­Û°ƒÕ´ŽÝ³‹Þ¹ˆÎ¯•Ý·”ݹ‘ظ›ãµ‰á¹“㽚ò£Ê½®Ò¾©Ú»¨È¿³Ù½±ãÀÎÀ©Î´ÔijÛųÕÈ´ßË´ÕʺØË¼ä¤êɤ寍äȪêɬáDZäÊ´é̲åÍ»ïϸìÓµæÐ¹ëÒ»ñ׸ž—ÌŠ†Û‘ŒÖš—Þ©œÊ¯®Ì·®Í²±É§¡Û²¬Õ´³Ó»ºÓ³°ÝŒ‡à™—棜㦥䳯鵴궷ðÀ¾ØÀ½ê¾ÁíÜÉÁÙÓÁÜÔÈÈÃÚßÖ×åÕÇìÕÂìÛÄáÔËë×ÉãØÏíÛÊñÝÅñÝËåÛÑëÚÑòâÌëã×òãÓùãÕôåØôéÜøêÝÇÆëÑÌïÛØéËËñÓÍðÙ×óâÛçàÝôÛàñëåäïéåíçéîêìôíäøíåöîêøïèõðæöòìúòëéçôñíôíñýõóóøôñ÷ùóúøóóóùÿÿÿÖ¥Ÿ˜˜˜˜™¥Ú£<™Öíüüüöᯔ<£ÔŠŽªÜÞáñöíâàØ±žK†ÎÌA¨«´ÓÜÞâáàÞ׳§¨•6¥º.Œ–§®³ÒÙ×Ü×Ó³®§–J2šÀZƒOŒ–§®¯³³³³«©§–IE@&¢dXf7NŒ•––©©ª©ª§––MC?=0*XRVg:NŒ““–ž––—““NHB>1'%;]TRXZ‰IILŒ••“LNK|}D=+,*!ˆ^RUjLEEHHNHHHJ‚YS|3-a!9Tp RRe:ECEFHFFKiWQ/$ P` RWjLEFFHFJ…ZR /)#  \\|“IHLHNO7\]S+("oY]_h‹“ŒŒŒŒ•‘h[\Y# 8kR`]`^`…–––—©m_`]tw 4k]cpqv¹Ì°«ªª«®Òqrcqt·x 4‡auss·Ô°¯®°ÒÕ×ÚéwuutusyÃw„{z€¹Ì¯³´ÒÛå¾Áʽ€€zzzzyÃÆnRµÄ½ÏѳÓרÜìÁÃÅĽ¸¸·Â·ÅÈËÅ~éÖ××ÓÙÙÞÞáîÊËÊËÈÅÇÅÅÄæÇÅãèœÞÞÞÜÞßáÞñíöèççäææÊÈÇææÇãçê¼Íûáââáññññöøêêèèæäããæãäê÷É ìööñíññíöõöþêëëîõøøèæèêê¼£öøööñöñöööõøöøûõøêëè÷þ¼Ô£ööööööñöö÷÷÷ï÷éëù÷êþÀÏͤüöööööööûþ÷êêêèê÷þÉÉѤíüöüöüöûûüûþþùø÷ÀÏݤÓðüüüüüüüüûý÷æÁåÓ›ØÞöüýýýûÝлãáר°¯¯ÒÙÛíÿÿÿÿÿàÿÿ€ÿþü?øððààÀÀÀÀ€€€€ÀÀÀÀààððøü?þÿ€ÿÿàÿÿÿÿÿ( ) 00wJ4DV""j)%r&!x'&{A?{]A[xQFQ@s‚P%„R%–hB“bU¥jFmf¾‹a±ˆzƒKГ[ÓoÈ“pÊœ}É¡|×£rÖ¥uؤqاyÙª|$!†)'€*&Š=5‹3.“0-œ73’33§52©;4²F8…@8®TF”^L’ZM™xc‹GG¬\_¬qj¾JDÆLGÈRNÎieÒ ~‡Ú¢€…ÆœƒÂžŠÛ­‚Ҭݱ†Ý±ˆÛ´ŠÞ´ŠÖ¸™Ú¸Ÿà¶á¹‘⻕ʲ¢ÕÀ¦ØÅ²ÕÁ¿ÛʹçÅ¥äÆªçÈ®ê˯é̲êйèÒ¿‰€Ì‡†Üˆ…Ûš•Ý¢¢Î³¥Ë·­Ð¸´Ú‹Šá®¬ä®®é¸²á³±è½¾ïŽÄÀ¾ëÞÑÃßÕËÅÄÜÉÇßßÙÒäÖÇïØÀíÙÅàÕÊðÞËðÞÌíÞÑêãÛîãÚêäÚñâÑóå×ñãÙðäÚÁÀëÈÇíÊÊîÑÏâÒÏíÞÙäÚØïÏÐñ×ÕñßÝñàÝíèçïöíáóëåöîæøëáúïçöïéöðéöòíùðèùóíøôíãáñåäóæäöìêðïìòêéõóðñõðñôò÷øóñúùöÿÿÿsfmsMJsnDK=HQlttlPH39>HORRNHY$&;!@FF@<I2 %/,"#. '  *+?BBE-)0 (5ULRSSZ7684 ][Slp`_XV:W_1cpntt…zyba_dx\i†‡†‡“~‚€{e‹ˆ…“•ƒ‘gj‹˜—“‘”hpp‹™™…~|†vv‹ü?ðàÀ€€€€€€€€Ààðü?(0` €%áÑ¿âÒÁâÓÂâÓÃãÕÅ äÖÆ ãÕÅ ãÕÄ ãÔÃãÓÁãÒÀâѾß˹ÞÊ· éäÛ&ñïèWêæÜ†Ñʾ®Äº­Ðǹ¬éɼªù˽«ùÇ·§éÊ»­ÐÖË¿®èãÚ†îïèWéæÜ&ßʵ àʵÚÅ´ìáÙïåàSÛÍÀ˜¹ª’Ö½¬ŠùÈ·’þ¼©‹þ¼§”þ¿ª þÇ´¡þdz£þÀ¯žþ¶¦•þ·¦”þÀ®œþ¾«•ù¼ª–ÖÝ͘ñçÞSìàÒÝÆ®Ñ·§ãÙÒëçãWÑ»§©¬“u걜€ÿ¾«•þÐÀ±ÿâ×Ïÿíèäÿùù÷þùþûÿüüõÿüüöþüüõÿýöíÿõçÚþçÔÄÿÓ»§ÿĦŽþ¿›}ÿ­“zêÆº©©çæÝWèÛÌÙºœƬ¡ ØÆ½=ÓĹ“» ‰á°lþº €ÿà˵ÿøêÝþûôîÿùñïÿ÷óîÿ÷øîþó÷éÿðòïÿïïìþòïéÿöîæÿúíßþüìØÿûæÎÿøÜ¿þçÆÿ½›tÿ®‡fþ¼™€áϯ“×DZ=Ô³‘ ·  í¨Ç®¥W¿¤‘½°ŽkôÍ¥|ÿäÅŸþéѱÿòܾÿòáÇþîàÌÿíáÑÿöçÜÿüêáþÿëäÿûðçÿ÷íãþöìàÿöéÜÿôåÓþðßÉÿìÙ¾ÿèÒ¶þéήÿìÉ£ÿ᳈þÅ”jÿª‰eô³£‹½É³˜WÕ¶–Ò¬ˆ§’žÌÀÃÕÈÁk¹uÒº‹_þÔ­{þëÈþíάþëË­þîαþîÕ¸þîÜÁþïáÉþóåÒþöãØþûçßþùëÞþöëÝþöêÜþôçØþóåÔþðáÏþïÝÇþëÕ¿þ寰þã¿ þêÉŸþíÊšþÙª~þµ…aþ®qÒÏǶkÛǯΦ’ŸÁ·ÄÁ»Çp˜z{Ö½„^ÿݨxþã¼ÿâÀ—ÿâ¿þèêÿî˶ÿíлþìÖÁÿëÙÄÿïßËÿðáÌþóäÎÿíåÕÿíåÖþîãÕÿìßÒÿëÜÍþìÙÊÿìÕÅÿìѾþê˳ÿäçÿãÁžþæ¿—ÿ껎ÿÞ©zþ¶„Sÿ¤…aÖÏ®pÝèÊžw—‹ª½½Ðf_]¢ÕqYþΜxÿß­„þݬ‹ÿÞ³ÿຕþäÀŸÿéǪÿè˰þêиÿêÒ¾ÿìÖÃÿîÙÇþðÜÈÿìÝÊÿíÞËþîÝËÿìÚÇÿëÖÂþêÒ¼ÿèͶÿèɰþèŦÿæÃ¢ÿณþÚ°…ÿ׬|ÿÛ©vþÙ›gÿº|Iþ²„^ÕÖÁ¯fɤ…qf™ Š…«O`f£Ì(,›þ}g”þá¯yþܪ€þÞ¨…þÛ«‡þÞ´Œþ彘þçÀžþæÂ¢þçÉ®þæÌ¶þçιþéÑ»þêÓÀþîÕÀþïÖ¾þïÕ½þíÒ¹þìÏ´þêÌ®þæÈ¨þåãþè¾›þâ¹þÚ³†þÕ­}þÔ¥sþÖkþÚ™hþÚTþ¹p6þ«{W̼˜~O¸Œm d\™“´4mq¬°$-™ü+,žÿp]šþÉ™ÿÛ¨xþÙª{ÿج€ÿÛ°…þ㸒ÿä»—ÿä¾›þãÂ¥ÿâŬÿãȱÿè̱þéÌ´ÿéͶÿèͱþëβÿêÌ®ÿéÉ©þ鯥ÿåÁŸÿá½›þฒÿßµ„ÿÚ¯|þÔ§wÿÓŸoÿÔ˜eþÍ‘]ÿÑQþÎ:ÿªb+üª†i°¾¤Ž4°…ie^œ޽04’ì #˜þ,*™þ>6—þhT‹þ®‡|þݬzþÚ¬}þÖ«~þܱˆþàµþṓþ὘þãÁŸþá¤þãäþçÆ§þåÇ©þâÄ¥þæÆ§þæÆ¥þäÁ þ㾜þ໘þÞ¸”þÚ²ŒþÛ®þتxþÒ¢qþ͘hþÍ”_þÅSþňHþ̓Dþ¹m4þŽ\,쳞‰¬„lRN–~z³FHJ¦Ó&(Ÿþ& Žÿ,&Œÿ/)“þ.*—ÿeS“þ¼‘}ÿܪxÿتyþÙ«~ÿܯ†ÿݲ‰þÞ¶Žÿẓÿà»–ÿἘþæÁÿâÀÿ⾜þ㿜ÿâ½™ÿẕþณÿÝ´ÿÛ²Šþݲ‡ÿà¯}ÿÛ§tþÑnÿË“eÿÊXþ‰NÿÀ‚BþÂ|?ÿ¾x<ÿ›]!þ“fCÒ·–‚F¤yaQM“zz¶’&+£ú44«þ*!{ÿ("€ÿ.*þ-+™ÿ3/™þ^N’ÿ¶ÿß«xþبxÿרzÿÛ¬þܯ‚ÿݱ†ÿß´Šÿá·Žþá¸ÿá·‘ÿ㺓þà·ÿÝ´‹ÿÞ³ŠþݲˆÿÛ¯…ÿÛ®‚þÕ¦}ÿÌœ{ÿØ¡sþ×nÿБaÿÍŠQþƒHÿ»{Bþ²rFÿ¯qCÿ­k0þˆIú¬t’¡w_DC‹~}ª>˜nX>>ƒ twŸ~‰ú52¼ÿ))ˆþ!$_ÿ%#pÿ&$zþ&$…ÿ)&þ'%’ÿ40—ÿžzƒþâ­zÿÜ©tÿΜnþÒpÿØ£qÿÙ¤rÿÙ¦tþÚ©vÿÞªzÿÝ«zþÚ§wÿÙ§vÿئuþئuÿÜ«zÿÉþqZ”ÿ,' ÿ4,’þ`NŽÿ™uŠÿ¼‚aþ»yFÿŠ`iþRB‘ÿOA“ÿŠ_Yþ›d*ÿq=úœyn~“hS 23xDJ…ºÿ85Éÿ$#€þ"Uÿ!!eÿ&#pþ&!yÿ&þ)$‰ÿ,)ÿWIþ ~…ÿÊšsÿÒkþÏ™nÿÏ™oÿÒœmÿÖ lþ×£nÿÛ¤rÿÛ¦sþÙ£qÿÖ¡oÿÕ nþÙ¦sÿÙ§tÿ¬†{þ@; ÿ-)žÿ("Œþ*#‚ÿbOÿªznþ¯vTÿoQþ:4‚ÿ87{ÿ}Yaþ£m2ÿ{Bÿ„T=¹Œ`K33wzy¨>tð#¯þA:Íþ$#{þOþ!"[þ'eþ$lþ" sþ)'|þ.*…þ,)Œþ<1‹þrZ‰þÄ“wþ×pþΘnþÒlþÒžiþÕ¡lþÛ£mþÛ£pþÔ£oþÑ£lþÔ¢oþÓ¤wþÊŸþz`†þ($•þ*$–þ) †þ%kþI:rþžpiþ¯xYþnR‚þ-(rþ##`þnO^þœh8þ…RþwAð³|?Š`N10syx¤n xÿ80ÇÿD=¾ÿ"_þ@ÿVÿ\þaÿ#&jþ&*rÿ%$zÿ%"ƒþ% ÿ4/›ÿ”r…þÖžwÿÔŸoÿÒ mÿÕ mþÚ¢nÿÖ mÿÚ¢sþÒ¢pÿÓ¤mÿÚ¥sþܬ~ÿ·’…ÿ?; þ'%’ÿ'#Šÿ{þ`ÿ=0aÿŸnhþÁ€Sÿ„_sþ;1yÿ\ÿ[=Tþ–c>ÿ‹[%ÿl6 þ¬‰un†^P,,o ^^—Žÿ=;¸ÿ# wÿ5þ:ÿKÿXþ[ÿWþ"aÿ$'{ÿ+'’þ-(ÿ.-žÿ›w}þܪÿÙ¨xÿÖ¦sÿؤpþÙ¡oÿÕ£uÿÖ vþÕ£tÿÜ©uÿà¦uþÚ¨}ÿšyÿ-+¦þ30ÿ11•ÿ*-…þeÿ&Wÿ|WfþÅ‚TÿªoQþgJmÿ@0oÿcDXþ‡V9ÿŒ^.ÿm8 þ—u[—[Q +*oIFšºpÿ^ÿ 1ÿ0þCÿEÿJþCÿ Hþ) kÿ3/’ÿ3.§þ0,¨ÿ65 ÿ§ˆ‰þ⸔ÿØ­€ÿשrÿÙ§sþÚ§zÿÓ¨{ÿÖ¢yþÙ¨yÿÛ¨vÿã¬}þÞ¯„ÿ›z{ÿ0'£þ6- ÿ1/£ÿ10•þ0,‡ÿ#jÿ/"GþyP@ÿ±p<þ˜cBÿrQQÿ}T@þ…S-ÿŽ`2ÿq=þ‚^=º~YS*)n/-Ö>þ)þ'þ5þ@þ6þ0þEþ'nþ3'‘þ3+žþ2/§þ2/·þ0.°þ€fþÕ«Œþ㹌þÙ°€þÛ®€þÚªþÔ®~þÙª~þݯ€þÙ¬}þ߯‡þຒþºœþN? þ/'§þ+(«þ,*žþ0.þ2/þ&!]þ@-Qþ‰ZKþ¢d5þ‰X1þƒU'þ‚T(þŒ].þxDþnH"ÖzWU--o#(bì +ÿ.ÿ 2ÿ .þ,ÿ %ÿHþ-.ƒÿ45¤þ42¥ÿ97©ÿ;9´þ2.Ãÿ& ¿ÿ$ªþ˜sÿฒÿØ·”ÿÚ¶‘þᵊÿÚµ‡ÿß²‡þßµˆÿÝ·ŒÿÛµ”þߣÿÞ¿¥ÿ†i‹þ)'µÿ31·ÿ13®þ.0§ÿ..›ÿ2/“þPL°ÿdQ›þqIYÿ‚T9ÿ‡Y(þ„U"ÿ…V-ÿƒM þjEìzZ]43q (Qú1ÿ2ÿ 6ÿ#þÿGÿ2/“þ52·ÿ14¹þ9<µÿ77²ÿ-+´þ(#°ÿ<5¹ÿTKµþ¸‘ˆÿèŸÿàÀŸÿÙ¹•þÞº’ÿß¼”ÿè¼—þâ»”ÿÝ»•ÿåÁ¨þîϺÿʰ¶ÿOJÀþ/1Àÿ52¹ÿ76¸þ58´ÿCD»ÿb]Ñþ}xåÿsoÓþOI™ÿN:^ÿsN5þ†V)ÿŒX.ÿJþkCú|^d<;u Mù 0þ 0þ 'þ þAþ54¤þD<¼þ;2¸þ82¿þ41Èþ2.ÅþLFÈþsÈþ±ž½þÜÄÄþêÍ¿þèŨþìÇŸþêÇŸþáÆ§þéȪþëÁ¥þìȨþêɪþðͺþÕ¿Çþtn¿þ><¿þBAÏþA<Éþ>3½þ85¹þJJÆþkaÊþ‰€Îþ”–âþrvÒþ>6“þJ3[þ{M:þW/þKþnGú€ckFDz!&dì+ÿ,ÿÿ ?þ8)«ÿLCÛÿM?ÂþG?ÂÿAAÍþYVÍÿ–ÑÿͽÒþéÕÍÿë×ÄÿçÔ¿þäÌ´ÿí˰ÿð̰ÿêηþåѼÿñϾÿìϹþæÔ¼ÿãÓÃÿîÜÒþÀ¯ÉÿVQÀÿOFÎþWPÏÿOHÊÿMBÅþI>Èÿ=:Îÿ77ÈþRNËÿˆ}Þþ™‘åÿtqÓÿC;šþY8HÿŠY/ÿ}Kþk?ì…itRO}46oÖ 1ÿÿ/ÿFDšþcdèÿ[^àÿWQÓþWTÔÿ[\Èþ˜‘ÍÿÜÎÖÿîÙÃþëѶÿæÎ´ÿçϵþêÑ·ÿîѺÿïѽÿñÙÆþêØÆÿëÛÓÿèÝÔþæßÕÿëåÞÿîçéþ¶¬ÛÿkbÈÿb[ÓþgkÙÿ`a×ÿ\YÐþ_\Ïÿ^bÖÿW[ÔþRPÊÿoiÕþ˜–îÿ¡ìÿxpÂþOLIšð¶®ÑþñéêþãÖÑþìÚÏþïÛÏþëÚÉþéÚÆþéØÄþîÜÈþïÞÊþîßËþìàÐþïáÑþõäÕþôçÚþõëâþèâëþÃÀçþ¶¶òþ»»íþ»½èþ¿Âéþº¼ëþ´´ïþ°¯îþ«­éþ«¬åþ¨¥âþ¤ ÞþŸžäþš›æþœœßþ»¹ìþÉÉðþ°µâþª«ãþ¸¸ñþÉÌëþâÚîþ°¤ïþNK­ðš—¿>ž¬†¢’„’ºÓÅÃÿóíæÿçÜÍþðÞÐÿðÞÍÿñÜÊþóÞÊÿöàÎþöàÐÿñÝÎÿðâÑþñåÓÿóåÖÿóæÙþóéÞÿöîãÿîèíÿÑÎêþÅÈíÿÉÉñÿÊÉìþÉÇéÿÊÊðÿÀÃñþ¾Âôÿ¼½ñÿ¸¸ìþ³²èÿ¯¬æÿ«¬êþ©­æÿ¼¼èÿÔÐôþÃÀêÿª¬âþªªáÿ·³åÿÌÈçþîåõÿüçÿ¸¹“¹œ”© °¤~Å»¥úóòéÿôèÛþ÷äÒÿðäÔÿóãÒþõâÓÿöãÔþùåÖÿùäØÿ÷æÚþöéÚÿøêÝÿ÷êàþöìåÿùðçÿöïðÿãáòþÕÙíÿÐÌðÿ×ÑóþÒÌîÿÑÍðÿÌÌñþÊÊñÿÇÄíÿÅÀêþ¾½ïÿ¼¹ñÿ¶µíþº»êÿÒÐóÿÓÍðþ½¶æÿ½¸ìþÉÇóÿÏÎñÿÜÛõþïëùÿ©¦Áú«~¤œ¿ ¨ ´¼®«>´¬ŽØêäÖþýòïþ÷íÝþòëÙþõéÙþ÷èÜþòèÛþòêÞþôêÞþøéßþùìäþ÷ìäþøíåþøîèþùðêþúóïþðíóþããðþÛÚóþÙØòþÙÙõþ××öþÓÒóþÐÎðþÍÊìþËÇéþÉÇïþÄÃïþÁ¿èþÉÆëþÑÐõþÆÇïþÅÃèþÓÍîþÛÙôþßäöþêîûþÚ×êþ“¯Ø¢œÁ>«¤Éº°¹¾±›’Í®úöñîþõòñÿùðåÿúìäþúìßÿöëßþôíãÿõïáÿ÷íâþ÷îçÿ÷ïçÿ÷ïæþ÷ðçÿ÷ñéÿøóëÿöóðþõóõÿåâøÿÜÙñþÚØñÿÚÙóÿ×Õïþ×ÖïÿÝÛðÿãßëþáÝêÿÝÚëÿÝÝïþÝÜõÿÎÎðÿÅÈîþÏÓóÿÖÚ÷þ××ðÿãàéÿéçðþ±®Ïú™¿’®©ÏǼÃÉ»±F¸§‘ÒâÚÐþ÷õùÿøñíÿøíèþúîæÿøîäþøïåÿöïäÿöîãþ÷îåÿöîæÿõîåþöðçÿøòêÿöòéÿ÷óìþýùòÿöòõÿîéñþêæîÿåáëÿÞÜéþäâîÿòïóÿúöïþ÷öìÿøóïÿñëóþçãöÿÕÔðÿÌÎðþÑÒóÿÜâøþæèöÿóëóÿÖÎßþ“¹Ò¬ªÏF·³ØÑÅÂñ¡É·£ìõêáþøôðþöðéþùñíþúñêþúñæþùîçþøíãþùîäþøîåþ÷îæþøïçþûóêþùòéþøñêþ÷òñþöòðþñìêþôïëþøóïþôðïþôòòþùöòþøöñþ÷õñþòðõþåßïþÝ×êþÚÙîþÖÖñþÚÕòþêé÷þõöûþãßòþ¨¡Æì À¹¶ÙÝÑÊÙʼ4ì‘°Ó¾¦üóïäÿ÷õìþôñêÿùóîþýóîÿüïèÿûîåþüïæÿüïçÿûïçþúïçÿûðèÿûñéÿûñëþõðõÿëéóÿåâëþèåíÿñïôÿúöóþüøóÿøõðÿîìëþáàçÿäæôÿééøþèæóÿæäõÿààòþæäòÿöòøþíëóÿ®­ÒüŒ¾°¸¶Ö4ÃÁáãÖÉ Ô¯O¼§ŽÌÓÆ²þõïãþ÷÷îþöóïþùòñþüóêþþôêþýòêþüðèþüðèþúïçþøïæþùðçþúòëþöòôþîî÷þììøþæçöþââñþæåïþêèñþèåïþßÜêþÕÖëþÝäöþêïüþêë÷þååôþæèõþñóøþîëõþ¹µÏþºÌª¨ÒOÃÁâ èÜÒÝÌ¿fĬÕÕɵþôòêÿùù÷þ÷ôòÿøôîÿú÷ëþüöëÿûóêÿúòéþûóêÿøòéÿøòéÿøóìþõòòÿöô÷ÿ÷öüþïðüÿãäõÿßÞóþÞÜóÿÝÙòÿÜÖðþØÖöÿÚÚûÿÞÜ÷þäâõÿêêøÿóôüþïîõÿ½»Øþ“޽ջ¶ÙfÍÊæêßÔíåÛØÍ¼pÅ­ÖàÇ­ÿúïäþø÷úÿöòöÿøðéþùðæÿùóëÿøôîþ÷ôðÿøóðÿúóðÿøõðþõôñÿúóõÿøòôþ÷ôøÿòðøÿîìõþììöÿíîøÿêìøþááûÿáÞøÿçâôþïîöÿøøüÿéæõþ´¯Õÿ˜•¹Ö»¹Öo×ÔíÑÎéêáÖìäÛâÑÃkй Ò×Ä®þìáÕþ÷õìþóùðþ÷õòþùóóþøõñþö÷ïþõøïþ÷øðþûöïþûòïþ÷òôþ÷ôôþø÷ôþ÷÷óþöõóþóòòþôõõþ÷úûþðïöþïîöþøôùþôñ÷þØÙëþ¬­Ñþ˜•ÇÒ¿¼ÜkÙØëÓÑéìáÖìàÖàÕÇWÒ¿­½Ô¸ôäÏ´ÿôìÖþúúðÿüü÷ÿýúõþü÷ðÿúõíÿüøïÿþúñþþøðÿýùòÿýøðþü÷ïÿúöîÿúøðþõóíÿõóñÿüûûþüûùÿöôüÿàÛöþºµáÿž›Ìô¨¨Ð½ÃÂßWÕÒéÖÔêìàÕ íáÙ=ëÖÈ’áÀ§áâºþßȵÿìâØÿûøóþþýûÿûùûÿúùüÿöúüþñúúÿõøùÿóö÷þùúûÿûüûÿüüûþûûùÿûûøÿøùûþßàóÿ·´àÿ ›Þþ£žäáÁ¼ë’ÖÒë=×Ôè îãØõíçöîäWåÓ¾©Ø´ŸêཀྵþçϹþãÓ¿þêÞÎþùîâþüøïþüýøþüýýþüýýþýýýþýöôþöëåþìßÕþãÕÆþÙÌÄþÅ´Àþ´§Äêľæ©äàúWèäóÛØéðæÛòíæõêÝS÷ã̘îжÖä§ùëË®ÿïÒµÿåɯþÞÄ­ÿßÅ®ÿàÇ·þÞŸÿäȳÿíÒ¹þêϵÿàÈ«ùãεÖñãÓ˜òìéSéçðàÜêðæÛñçÛ ôñí&÷óòWûôñ†öêâ®í×ÊÏê;ééÍ´ùìÑ·ùçйéê×ÇÐøìß®üóë†÷òíWôðï&æáç äßéñèßóéàóéáòéàòèá òéâ òéâ ðèã ïçäîææíæçêäèÿÿÀÿÿÿþÿÿøÿÿàÿÿÀÿÿÿþü?ü?øððààÀÀÀ€€€€€€€€€€€€€€ÀÀÀààððøü?ü?þÿÿÿÀÿÿàÿÿøÿÿþÿÿÿÀÿÿ( @ €âÓÃçÜÏßÔÆ8Ù̽LÚͽWÜͽWÛ̼LâÔÅ8çÜÍâÓÂãÓÅçÚÏFÌ¿­”ΧÍȹŸã¿­žóų£ûÆ´¤û¾­òĵ¥ãÌ¿¯ÍÏ¿¯”éÛÍFäÒ¿ѹ« áÙÓEȱ¼¯—yöн©ÿã×Îÿïéåÿøûõÿ÷úôÿ÷øóÿúõíÿöçÙÿåϼÿظ›ÿ´•wöÁ¯›¼äÚÌEÙ½Ÿ Á¨¡ɱ£Š¹š{âÕ´ŽþáɪÿôâÊþñåÖÿôèÞþûîåÿùïèþõíäÿõëßþôæÓÿðÝÅþìÓµÿâÁœþÑ¢zÿ´”sâÀ±šŠÒ±ÌÀ ¨™žÂcüÞ¹ˆÿêɧÿìÉ®ÿïÓ¹ÿíÜÄÿñãÎÿöå×ÿöéÛÿôêÛÿòæØÿðâÒÿïÜÊÿëÓ¾ÿãÁ¥ÿéÊ¡ÿå·‹ÿ½Œfý¸§žÚÇ® ®¥º†„²§kyúÞ«€þݰŒÿẖþå¤ÿê̲þêÒ¼ÿë×ÃþïÜÉÿíÞËþíßÎÿìÜËþëÖÃÿéлþèɰÿæÅ¥þ๓ÿÛ¯þܨuÿ»PúÀž~§Óµšlc™ ®†.2œø¤Œÿß­ÿÜ©ƒÿܲ‰ÿæ½™ÿæÁŸÿåɰÿåÌ·ÿéÑ»ÿëÒ¾ÿïÔ¼ÿíÒ¸ÿìαÿçǨÿæÁ ÿãºÿÙ±‚ÿÖ¦uÿ×›iÿÙ“Zÿ¹q6øµs†¶Šk Œ¹V/4•ì))šþOC•ÿ¯‡{þÜ­|ÿÖ«~þß³Œÿâ¹”þ⿜ÿâæþ寍ÿçÈ«þ䯍ÿçǨþå¡ÿâ½›þÝ·”ÿÛ°ƒþתyÿΚjþΔ^ÿÉLþÊ~@ÿ™a1츠ŒVkf¥QR©»('œÿ*#ˆÿ.)“ÿLA˜ÿº|ÿÛ«yÿÙ«ÿܰ‡ÿÞ¶ÿ๓ÿ㽘ÿã¿›ÿâ¾›ÿá¼—ÿṓÿÝ´ŽÿÛ±ˆÿà¯ÿÚ¥sÿÌ”gÿÉTÿ½Eÿ¿y>ÿ©h,ÿšnM»°‹u@?‹ccœ`/1¦ñ1/ÿ%!vþ*(‹ÿ('˜þ30žÿÁ”€þÙ¦uÿ×¥uþÛª{ÿܬþÞ±„ÿÞ±…þ᳈ÿÛ®‚þÚ¬€ÿÛ¬þÕ¥}ÿˆi‰þ¦~€ÿÓ”fþÌ…LÿµvGþŽ_hÿ gHþ‹P òž{g`•kU99€ JN±/-´þ%&vÿ$#jÿ&$zÿ($Šÿ($ÿt]ŒÿÙ§{ÿÑžnÿÒoÿØ¢qÿÙ¥sÿÜ©wÿÜ©wÿÙ¦uÿØ¥tÿÚ©wÿ­ˆ†ÿ7/Ÿÿ3+ÿeÿ¼€[ÿ‘ccÿI=ÿtUlÿ’\&þ†[F±dO SRŽ""!…í71Æþlÿ Zþ'jÿ#tþ+'ÿ/,Žþ_Lˆÿ¼ŽwþÒšoÿÏšmþÔŸkÿÙ¢mþÚ£pÿÓ¢mþÔ¢pÿÑ£yþiUŠÿ+&™þ'€ÿ@3vþ«xcÿ|Zwþ,(nÿ[Fbþ™c-ÿ{Fítb"^]“V•ÿ<6´ÿJÿOÿ\ÿ #dÿ%'pÿ%#…ÿ)$•ÿv^ŒÿØ¢wÿÒ¡oÿ×¢nÿסoÿסsÿÔ¤pÿݨwÿ¾•‚ÿ41žÿ*'ÿ"!yÿ.$Zÿ©sdÿœk_ÿ<0qÿH1Vÿ‘_7ÿuBÿœxeVDBŽ ÿQþ4ÿDþOÿIþ'$nÿ1-Ÿþ0-¤ÿ€jŒþß³‹ÿÖ¨uþÙ¦sÿÖ¦yþ×£xÿÛ¨wþã­~ÿ­‡|þ1*¢ÿ31 þ01Žÿ#gþT:Oÿ²rAþWSÿmLPþ‡V0ÿzHþ…aI++uŸ 4ÿ*ÿ6ÿ 3ÿ<ÿ(#wÿ4+™ÿ51©ÿ1.»ÿQCžÿͤŠÿݶ‰ÿÛ¯…ÿدÿÜ®‚ÿÛ°‚ÿßµÿί•ÿO?Ÿÿ-*¯ÿ.-¢ÿ1/—ÿ*%jÿsRkÿ‘[<ÿƒV+ÿ…V(ÿN!ÿqL0Ÿ&+^±/ÿ4þ $ÿ 3þ,*†ÿ24²þ89¯ÿ32³þ-'·ÿ?8¶þ½–‰ÿâÀžþÛ¸“ÿÞ¹þ乑ÿÞº’þäÁ§ÿÙ½±þPH³ÿ31¹þ56µÿ89¯þVRÀÿslÎþZFxÿsM7þ‡V(ÿ…O%þpK-±'*_± /ÿ %ÿ ,ÿ52¦ÿE:¼ÿ;6ÂÿA>ÊÿmeËÿ«›ÈÿÚÄÁÿéË·ÿìÈ¥ÿèÉ©ÿéʯÿìȬÿè̱ÿìÐÄÿ„{ÁÿEBÈÿFAËÿB7¾ÿA@Åÿ]UÈÿŽ‹ÝÿtsÎÿD5|ÿyK9ÿ†P"ÿsN2±89qŸ,ÿ%þ@;™ÿWVÞþULÎÿQQËþ“ŒÐÿáÐËþêÒ¼ÿæÐ¸þé϶ÿïϸþíÖÂÿë×ÉþèÙÌÿçÞÓþãØàÿzqÉþ_ZÓÿ\\ÔþWQËÿUUÒþLOÎÿleÓþ˜•ëÿtmÃþ^@Uÿ€Mþ{S?ŸZY–/ÿ86qÿqsìÿpuØÿ„×ÿ§ÌÿÜÊÃÿæÑºÿìÓ¹ÿñ׸ÿî×ÁÿëÚÑÿÙÐâÿ²ªÔÿ³°ÝÿÁ½èÿ¨¡Ýÿ…€Öÿ|}ÚÿwyÜÿts×ÿwyÒÿtuÚÿohÑÿ•–áÿ³¯éÿqg¢ÿqA+ÿ˜saus®V'(€ÿž—Ìþ¦Ÿçÿ§¡ÙþÍÄ×ÿæÕÇþïÖ¾ÿî×ÄþîÛÉÿóÝÆþðßÏÿìäåþ¶´äÿžšèþ¢£èÿ  áþ ™àÿœ™ßþ˜–ÞÿŠÛþŒ‡àÿ‹ˆßþ’ŽÙÿ¬¨êþ±°ïÿ½Áïþ­©äÿS:{þž‡VЇ¬"|s©íæÝâÿæØÏÿïÛÎÿíÛÈÿìÚÆÿðÝËÿîßËÿíáÑÿóäÕÿôéÝÿíçéÿÂÀêÿ½¾ïÿÀÂéÿ¿Âìÿ¶·ðÿ°²íÿ­®çÿ§¤àÿ¢¢çÿ ¡áÿÈÆóÿ³·âÿªªâÿÅÄìÿÛÑðÿwrÈ휔¸"–ަ °¤’±èåÚþóäÕÿðâÒþóâÐÿöâÒþùãÕÿöäØþöèÙÿ÷éÝþöíäÿöîìþÛÚïÿÎÎïþÓÍðÿÏËîþÉÊñÿÆÄîþÀ¾ìÿº·îþ²²ëÿÈÈïþÐÊïÿ¶²èþÃÁïÿÔÑðþàÜíþ‘²±£š½ § ´´©Ÿ`ØÑ¾òüóîÿôìÜÿøêÜÿõéÜÿòëßÿøëßÿøíæÿøîåÿøïéÿúóíÿïìóÿßÞóÿÙØòÿÙÙöÿÔÓóÿÏÍíÿÎÊìÿÇÇîÿÅÄéÿÏÎòÿÄÅíÿÒÏïÿÙÙòÿèë÷ÿ¾Øòš”º`¬¥Éȼ¾½­™»ëæäÿùòîþúíçÿøíãþ÷ïåÿõîâþöîæÿõîæþöðçÿöòéþùõïÿöòõþèäñÿâÞìþÜÚêÿëèñþöôìÿõðíþñëõÿØ×óþÌÏñÿØÜöþåäóÿäÜçþš—¿»µ±Õ̼°VÒÀ«íøòìÿõðêÿûòíÿüñèÿùìåÿùîåÿøîæÿúðèÿûóêÿøñíÿôðñÿïëêÿ÷òïÿ÷ôòÿøõòÿöôïÿñïôÿâÜíÿÝÚîÿØ×òÿéæöÿòñøÿ®©Ïì­ªËVâÕÈ Ç±™†ÔDzø÷ôéÿöôíþûóðÿýóèþýñéÿüðèþùïçÿùïçþùòîÿïîöþçèõÿääóþîëñÿîêïþÞÛçÿÛàñþíñýÿèçöþæçóÿôñ÷þº·Ñø—–ņÂÀá ëß×Í· §ØÌ¸úùöòÿöóòÿúõìÿüõêÿúòêÿúóëÿøòêÿøôîÿöóõÿöõûÿéé÷ÿâàôÿàÝóÿÝÙóÿÛÙúÿáÝöÿìëøÿòñúÿÀ½×ú œÇ§ÓÏêêäÚ Õ½¦žßË´üòëæÿööïþøóîÿøõñþööðÿøöñþúõðÿøòóþøôôÿøöõþõôóÿôõöþóõúÿëêöþõò÷ÿèéóþµ´×ü¤ ÊžØÖê ëßÔÚ̽ŠÚÀ§âíÛÂÿôðåÿüùôÿüøòÿû÷ñÿüúôÿûøóÿûøòÿûøñÿúøòÿöõòÿúúúÿêèöÿÉÅîÿ¦¢Õ⹸ڊÓÑèïäÙ õèàEå̵¼Ù¹¥öìØÈþíãÖÿöïèþùúöÿøüûþùûýÿüúùþöïëÿíäÚþßÖ×ÿµ«Ëõ¸³æ¼ÞÙôEÜØê ñéßôèÚFòÝÉ”ëÒ¿ÍñÙÃãå˶óáǰûâÉ·üä˹óñÚÆãéÖÁÍêÛË”îçæFäáìñéáôíèõëä8ñâÙLïàÔWðâÔWíâÙLòêç8ðêëêåêÿàÿÿ€ÿþü?øðààÀ€€€€€€€€€€€€€€Àààðøü?þÿ€ÿÿàÿ(0 ` ÝʶáÒ çÞÑ9Ö˼cÕȸ}×È·}Ú˼cçÝÐ9áÒÀ Þȳϵ£àÑÆÖŵ€Á¯šÛο§ý×Ì¿þßÖÌþà×ËÿØÊ¼þκ§ýÇ®™ÛÔŵ€âÒ¿׸™½¤žɱ¥WæŠÙαþïÜÆÿôéÞþøïæþ÷ñéþôîæÿöêÝþôâËþìѰÿΧþ¾žÙÉ´™WÒ®Š¤’¦¿°±sÃ’kóá¼ÿéǨÿîзÿíÛÄÿòâÑÿõçØÿòçÙÿðâÓÿîÛÉÿéθÿåáÿå»ÿ¾hóǵsÏ©„j_—²e]R”ôÛ©}ÿÝ­‰þâ»–þçŧÿèηþëÔÀþíØÄþîÚÄÿìÔ¾þéͲþèÄ¥ÿຓþ׫|þÙŸlÿÀ€LôÁž‚d¸‰e{uª38=œæA:šÿ®‡€ÿÚ¬|ÿܱ‡ÿ㺕ÿâÁ¢ÿäǪÿçÊ®ÿçɬÿçǧÿäÀžÿÞ¸”ÿÛ¯~ÿÒ pÿÍ’]ÿ̇Fÿ§l=泓{3JG’ZZ¬©*'•ÿ,'Œþ=6—ÿ«…‚þÚªyþÛ®‚ÿÞ´Šþฑþâ¼–þâ¼—ÿß·‘þݳŒþÚ®„ÿØ¥xþÑ—hþljPÿ¼{Cþ­l4ÿ uT©r\]]–3-.¡ô)({ÿ&$zþ('ÿ:4–þÇ™}þÕ£rÿפuþÛ©yþݬ}þÝ­~ÿÚ©zþÚªzþ®‡†ÿRB”þ¡x}þ€Nÿ‚[oþ€Xgÿ‡R$ôwg3DE†,(¸ÿ hÿ$!fÿ%vÿ+'†ÿXH‹ÿµ‰xÿКoÿÓžlÿØ£nÿÙ¤qÿÔ¢nÿÔ¤wÿdRŽÿ*$‘ÿ>2|ÿªvaÿQ@~ÿRAgÿZ%ÿ`H,,oA@’Á72­þDÿUþ_ÿ$&rþ($þeQÿפxþÕ¢oþסpþÖ¢sÿÚ¦rþ˜€þ2/ÿ('ˆþ("_þ¨r]ÿtRjþF1^ÿ\2þ‡[9ÁYK))l%"rã8þ:ÿ=þOÿ0(‹þ2.«þcTšÿܲ‹þÙ«yþש|þÚ©|ÿÞ¬~þÅ ‡þ9/£ÿ.- þ-*‡þD0Mÿd@þU:ÿˆY-þvJ!ã|WR00p Dù2þ &ÿQþ23¦ÿ77­þ1-·þ7/¶ÿÆ ŽþÛ¹–þÞ¸Žþ⸎ÿÞº—þÝÀ®þKC°ÿ43µþ56¬þXT¾ÿfT˜þsM=ÿ‡V*þvHù{\_ B@v Cù 'ÿQÿD=¿ÿ?9ÂÿUPËÿ “ÌÿØÄÁÿéʳÿìÊ©ÿè˳ÿë˱ÿëÑ¿ÿ˜ŒÄÿIEËÿG>ÅÿB>Åÿ_ZËÿІÞÿPE—ÿ|M8ÿvGùƒgo VR}%)Yã9þacÕÿcc×þqmÎÿɼÊþêÓ¹þêÒµÿíÓ½þí×ÍþÚÌÐþ×ÐÚÿÜÕæþ…ÓþmnØÿgh×þhjÑþaaÔÿ~{Ûþ˜ßÿhMgþ~N'ãŽujf‰@A”Áxs«þ™”åÿ®¨ØþÞÏÍÿíÔ¾þîØÅþòÜÄÿðßÐþÖÒçþœ™äþŸ æÿšÞþ˜“Ýþ’Þÿ‰„Üþˆ…ÝþŒÚÿ¦¤èþ¹¼îÿ’‹Ïþ{[eÁ˜„•y£ÛÒÙÿêÛÏÿïÜÌÿïÜÈÿñÞÌÿïáÐÿóäÖÿõêßÿÚÖêÿÀÁïÿÄÄêÿ¾¿ïÿµ·ïÿ¯¯çÿ§¥äÿ§¨åÿÇÅïÿ«®âÿÁÀêÿÑÈîÿ}·¬¢¦3ÕϽôøëßÿóçÖþõåØÿöçÚþøéÞþøëáÿøïçþñìñþØØðþ×ÔòÿÒÐòþËÉîþÆÃìÿ¾¼íþÉÈïþÇÃëÿÍÉðþÝßöÿÁ½Ôô š½3¼³¾õ£©ñìêÿùïçþùíâÿöîãþ÷îäþöîæÿ÷ðèþ÷óìþóðõþãàðÿÝÛíþâàðþíêìÿéåïþÚØóþÌÏñÿÜßõþåàëÿ£ Å©³®ÓÓĺ3ÕïæöòëÿøòìÿûðéÿúîåÿùïçÿúðèÿúñêÿóïòÿíéìÿöòñÿøõòÿðîíÿéèôÿáßðÿÞÜòÿñï÷ÿ²®Òæµ³Ô3ä×ÊÕÄ´dØÊ¶ô÷õïÿùóîþüõêþûñéÿùñèþùòêþôñõþîîúÿãâòþãàñþÚØïÿàâùþççöþïïøÿ¾ºÖô±®ÓdÇÅãêáÖÛÌ»sá͸óôðìÿ÷ôìÿùôïÿööïÿùöðÿøóòÿøôõÿôòõÿððõÿíîùÿìé÷ÿíìõÿ¸¶Ùó»¸ÖsÓÐêìàÕãÖÈWáǰÙìÚÆþøôîÿûøõþúùöþøøõþùøôÿûùõþø÷óþóôùÿËÇìþ¯«ßÙÆÄáWÕÓéíáÕóêàé×È€ëйÛçϸýòàÍþíáÔþîáÚÿñßÑþæÓ¿ýÝÌÃÛÕÎá€âßðÙÖèðåÙñéà õîé9òåÛcîÛÍ}íÝÍ}ðäÜcòìê9êäé âÝçþøðàÀÀ€€€€€€ÀÀàðøþ(  @ÜȵÝν8×˷ξ¯¤Ï¿®¤ÖɹÞͼ8Þǰȯ£)ζž¸ÕÀ¥üîãÚÿùôîÿ÷ñéÿðÞËÿÖ¸˜üʰ•¸Ð´•)¥š±7¼“}åâ»”ÿê˯ÿíÚÄÿòâÑÿðãÓÿíÙÆÿçÈ®ÿâºÿ×nåÍ­Ž7ibŸADžÚ ~‡ÿÛ­‚ÿã»–ÿäÆªÿè̳ÿêͱÿçÅ¥ÿ๒ÿÕ§vÿГ[ÿ´xGÚ°ˆlSS¤‰*&Šÿ3.“ÿ¢€…ÿÙª|ÿݱ†ÿá·ÿà¶ÿݱˆÿÆœƒÿÈ“pÿƒKÿ¥jFÿqR‰<< 43£æ""jÿ&!xÿ=5‹ÿ±ˆzÿÓoÿؤpÿØ¥rÿÖ¥uÿ^L’ÿF8…ÿmfÿQ@sÿ‹X.ædP =<~5$!†ÿDÿVÿ)'€ÿTF”ÿاyÿ×£rÿפtÿÊœ}ÿ0-œÿ)%rÿ“bUÿ]A[ÿ‚P%ÿ‡bQ5+,lT0ÿ 0ÿ'&{ÿ52©ÿ;4²ÿÒ¬ÿÛ´ŠÿÞ´ŠÿÚ¸Ÿÿ@8®ÿ33§ÿZM™ÿxQFÿ„R%ÿvSFT;;pT)ÿ73’ÿJDÆÿ‰€ÌÿÕÁ¿ÿë̳ÿêйÿéÓ¿ÿ³¥ËÿRNÎÿLGÈÿieÒÿqj¾ÿwJ4ÿ^WTec’5A?{ÿ‹Šáÿ·­ÐÿèÒ¿ÿïØÀÿíÝÒÿ¸²áÿ®¬äÿš•Ýÿ‡†ÜÿÚÿˆ…Ûÿ®®êÿxc‹ÿ˜~„5‰ƒ  ¿¶¾æîßÑÿðÞÌÿóáÑÿóå×ÿóëåÿÊÊîÿÈÇíÿ½¾ïÿ³±èÿ¯¯èÿÀ¾ëÿÁÀëÿ±¬Ö柔´ Ĺ­‰õîçÿøëáÿöíáÿ÷îåÿøñéÿïìòÿßÝñÿÚØïÿàÝíÿ×ÕñÿÏÐñÿãáñÿ«§Ê‰ØËÂÙʹÚ÷òëÿûñéÿúïçÿúðèÿõðñÿìêðÿóðñÿèçïÿåäóÿçåõÿ¼º×Ú¼ºÛãÖÉ7áÒÁåöòíÿùóíÿøôíÿøóñÿôò÷ÿëêôÿåä÷ÿêéöÿÃÁÜåÆÃà7èÜÏ)èÔ¿¸íÞÑüöðéÿúúöÿûùöÿõðêÿÞÙäüÁ½ç¸ÏÍå)ïåÚòå×8ñáÓêÕŤéÖǤïáÖéáà8àÜéðàÀ€€€€Ààðanalog-ce-6.0.17/how-to/iis/000077500000000000000000000000001406366436600154525ustar00rootroot00000000000000analog-ce-6.0.17/how-to/iis/CGLLogo_sm.gif000066400000000000000000000077161406366436600201010ustar00rootroot00000000000000GIF89aL÷ZtÚÿÿÿJ`Ø&1Ó,9Ô2AÕêÑSkÙXpÙUlÚe|ÝczÜšªèïïŸ___oooVoÙZsÚZsÙ˜§è¿¿¿ÏÏÏßß߯¯¯///???¬¹ìOOOSjØVnÚJ^Ùyáq†ßŸå7GÖ>P×-:Õ¡°é‚–â·Âï3BÕ ÑÒ//Ùßßùè¿¿óïïüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,LÿœH `` 2x¡… $LP‚âÁ‡&À±£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cʜɒ≊ æ$¨q Bq6d¨sàCh*]Ê´©Ó§P£JÊ‘àD‰VMD¤øsgÃH @ˆÐ¦CªhÓª]˶­Û– %V4 6ቇuïŠ=xó'Á‚x“¾L¸°áÈAâh×jŠú½YW"Ù¯–kÞ̹³g•ƒ}Œõ` ÊXGœX—5Áϰc˞ݶ Uƒ"K4¸°â\‰O—-\íãÈ“+¯ gÆ­€[ ü]–1É‚—kßζÁߤ'âÿ\u sÊÎJìξ½{Ã6âå}8㊩W·>M1ûûÿØ^Î1pÚXŒwZP}•ÓWÒQ$à„V¸’zÖ±VZiŽÍE]p[!eáˆ$–A %8ENwCB(™^A™hãïé'ßd ¤6×c>]tÔ_…ã‘H*'–euõXu=>&C;-ÖX%©å–ž°¡d[1T~w}… •®ùÇåšl¾…8IÄ$V®æähFõ(\Cmöé§Z Ugf”i%}»™‡eýéè£NY•ÛN@™÷_U$ÀXåE©—š†*êJÕ=·WxWòDŸd9µêܨ°Æÿz’œbVeY·5\•5v¬ÀëY²ö¦t:±è˜x”Y$ì³²–Y¨EcÉØk]ZUú⣠í·~’ÅXV>t k㦬ee–nUª®–m˜ hEYŠ a¹)¼·YéD¨µF˜ý¥_”Ô6ðÃZòT“ù¦‡憗•Tz ñÇ#^g&à§_n(j¦}wf òË$úfíŠ^^hsÔ6ÆéDÀì³…R‚%œŽô>džu½ñU±ˆ?7`y‹]ù¢zQBFUß–ÇNw½œ_~•¶“t»òõÕu šçõÚݵv”X™QA1`÷Ýxç­÷Þ|ÛÿÍö߆ö£N¼*-}'®8߀7þÁûihÛ\,n¹åŽg¾­øJ¤ÕØùÊpùè}kn:Uâ1ŒU` aU7é°ã}úìPÇ[F/ ¤è±÷NûïLAÖÔ;mjâ½Çüò3ÏZYÇš%òÉ“Îüõ/a8&¹5ÛåÐ ÔW9ö䯮R¶Bá‹¿xùðŸdѧZ_5ãÁîÿþ#­XdusbMûòW:þÐ#v‘ѶpoŒ`Þ¦²Ô )!&pàó&Á~ÏdbÑR¬Ä;ñ€28!bB¦5¸.À ÐP@5°€™díH< (€ûÿ`[1¤u`iˆ¦zÆDàˆ@0ƒŽ8QØ`â p 1€²¨Á\Šˆb2À’| °! ð°%Y´cT¸Ç€œ¨¦UwÑW48:è,E|écc˜–d1‹èâ#¿ˆÉbG‚Ùô:”ÜÖüâs-Qi‚„áèù#Kía$„:» øÜƒÆx\`rÒa–.c<·Yåš,zjðHWê{•vn)̉á†bÍÔìö­ºsT§$ÖLzH.æ“n«¸þÈ\KÒt•¢Æ°-H$)ô¦‹&˜2œUŠäSö‘‚ö±ÉĤöÃÌÕÛ"§««óØ̆œÞ\ŸpÓE`Ç©zdÉiwKýȤ[’ÜíÝÌXÄšB ˜?,ùÇ«àÞ"Œsÿ4cqØZÄ3ÿøÉá»®Ú%çÒ–¢ÆÀĽ[.X±…¹X-Kª=­ºíÚÇÜ#m¦Gߤr™‡e.gcA`*‡f€Esç§o¨eY2Ç|á6s!‘xJyþ—E n°h›§Ž¤n÷&¦$Sž åoÓäÐzñVQ Ñl‰ólB’‘¦´Z FzäwlnJV‚|nÚô]dg æ¸`&|x¦i‘|IXrMXaIÔ7h†i fÏK$!I¨UY µT”¥xŸD€”†G–EbVoà•E1!&d1ìr aƒ}C`õ Ó#µ¤`FJ°ˆq·e›ÿÆG+÷coi`eóT„?‰ÅwpÊ”†‹ Æw!I)ÕfVcx”R“”K¥`G0_7Äk°÷PöDOÔEÅÄxZ¤I±`¥eM_Øp²D4},±~Òa›â)‘QɳQ€ô\ޱr³ày¤uCZ§E¸M¬ÈwôfJ3à÷Us…ZÀrúçt‹–ˆt8w«4o÷ULÿUg(Ñ[ýxIbÆ’Ô݇N'~£DXˆoÑ—]Ýät±¥u…%z16ˆ|ÃKáå‘uQ*6äÆÖЖ’3 IU”’.12Vvÿ§5É΃}8zûa('`×xB1 BFyB3d`ló€DhÂ+(ƒ/:Á‘âã8—¶“SY8A/~$XZY=ŽCo^ù•5’¬$«³AŠÃ•Ô“_ù5?`ñg¶$@A”rÉA€3ŽŠw—$î@¾D0žã%Ab(&p‚Ä?6T™6Ä’†É—/:%CaC2E’2'!™yš1%y©@V17{A `ÒQÁD/ @ €¸I‘Iù›¸©›‘É&@(Pœ( › œÅ‰›'pœ(À4pÀ œ¿I’I»yœÒ¹œÚ(Ç)&³°Ñ œÅÙGÇùœ·™›»Ù›¿yžÂÙȉœÊÉœßùœ&PžÔÙœÅyÓÙœÒɾ©›Î™›ú2žÏ)ÅyžªžÁÙžÔùž:œóiœõyœ÷ Ò¹ŸÚٟʼnjœã9 ÷i âIž œè™¶ù  ¡ :¡òiœˆv!ªÑCŠ©; ©£'Gƒ2ÿ9¤DZ¤Fz¤Hš¤Jê7.±¤W&ºÓ-4W3.j‡š¨;analog-ce-6.0.17/how-to/iis/IISConfig.gif000066400000000000000000000216451406366436600177230ustar00rootroot00000000000000GIF89a"õ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,"õÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“Iøw ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£Jõ©’åÔ«X³jÝʵ«×¯`ÊK¶lÔª- ¨]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇw[¢=°vÀjIi&¹³çÏ C‹Mº´éÓ¨S«^ýWòÊ´ì› @%}r³ÞÍ»·ïßÀƒ Nœ÷Õ18®ÖµUµ—eï0=·~ųkßν»÷ïàÃÛÿµjsryåäkªl~`²ZêÔgW°YsñâóëßÏ¿¿ÿÿt¥GÓdh ®©%àLëàl±ßtòRƒÁ%Pa¶•á[bˆxĉ¦¨âŠ,¶Ú‚2xà .çR/áØžrR–Ù„Ó‘BfÊ-÷O\(–¤‘HyØ’%:éâ”TVi啌Á2Pcz:ê¸#{îý8£….Ù¶V‡&É&~LÙ¦›N~¸f™§œtÊ9¢žø½)(ŠIqâ9èPbéè£Fzš–0q“—cÚ˜#‚iò¸ãsjYw?üÔ§Rƒˆ¾‰hª~n¨ê«R²ÿ¥j¢ âI'«µzèç¸ÎZ+ ¹f몽Æ*é±È&«lb”^øš„]~y)¦’ùìZüƒÛ¨BD$¯Å2¨”° kl®á¦‹+«ãò:,±}ö¹«¸ÁÆjÐ­Ëæ«ï¾ü"‰“¥0aŠaÀœÖØ#[€¥:[䬮’kìŸõê ¢­´ª ñ¼»k«¯j/°$ g¿(§¬²£Ívjµ9J{#¦b6x0¶ÛbfjmcÜ1ºàª ´¬>sü±ÄèþüsÆJŸ[1Ñ?=4Ô+WmõÕþ‘7#ÌÇœ©Ö0ëhó§†*Éa»ìþºôÆ€ŽÜôª†&]tÜìMôÉ&Šÿ îžã6Šõà„îØ4ºÜÒÖœ|ÓØeÂ…¦d¨nùå˜g>eË=ž§à¿žFÞVhæÓ^åš§®úê¬÷©°o¶Rì±£G;ì¡_×ä™¶îûïÀãÄOü{ÆÏh-¨q)/üóÐG/½w7OoýõØg\çfuïý÷à‡/þøä—oþùÞOvûúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€Làú¬¢>”8ðŒ 'HÁ Zð‚Ì 7ÈA©GDßQB(BÜs%L SȺð…0$J߬°† qhÃòð‡@ ¢ÿ·2Ãg…P ¼bš¬‚ıÜ(b‰0Å*RñŠäy¢“X”#¾N…>Ÿ•HÆ2’±ˆ db{̸˰„‹]cOÐdÅ:bÑmLŠñl’<1ÅH'3*á83Æ ò…rd£"ÙB4Jf‹<âÅ"Ç@–çŽvÌdùHöt !~¼ÔB`¶¥œ çû¸Œz 9Rvj•ˆ ##gIËî9²=¬d£$ ID-Q•¨te¥ð¨I+^ñ‘7q¥§>y•sqêVAž)œ¬D>³Q%ƒry)±eG°¼døYËrš“,·Üe$¹Ijî„—‚QCE*ÚåŽÈ¬‰—\éÿIQ$[ÿHœ?D4wš´™5ÕÙJÊøƒT¤ç€8§™9Ò΄hªèãdyÎŽzô, 4";ÛùLj¹Ó'&…VG:-—ŸÜ0eJS`r ãÁc>7… }¤Ÿ+HnRÒQª§•J(¤³P–.Ž2¨J©b4v;ÔÌÉ Ózõ«½¡S[­¥¤t„c]œ?Nš“ÍòR5½æLƒ™C)ÞJ&šâNo$Ÿútq@ÍÑ@DЀ¶2šÍ<*3z ¥Òf¢x䥗U~Ht›sëUa—Õju£` ­h¡’δÞè©‹ÃQOSK³‚ò´­¥jÙÚÕ7ÿêÓk5dUoGUÁÊÔ@sým¯xטh*‹ r¦„ »O–¯ÿèPRÔ:­E \,Q¥£Íõ™S…lyê³YSuv«åèh×ËÞpÒðŠ/U©lOûÔ”žu'ý+´æK[†v ·ðZÇ»>ñì· îMíÊØ#Ñ—2øìª` DÝåÒ9Òæa rJÃ2è°æå®A¿{»g–¼ÿ¢ÝyO—ÞöºøÅT i#kÍÙzm¿°}ðkeH¿ªô­¶m¥€|ÒöiI‹rNMã:\–WLÇÝ$t§ÙWk ¤°W®23ÓPêj¹”ÚˆˆÀj!͇H[UXïÖÙ)Æj­Y|ë\ÛÆ»†o2½Æ)Õ²µÆ®ñlÅt_2¿4”6ìVoo´dFO§®öl°ƒNiäšÓ|¬¨*fgvûÜŸ4¯kMmg‚oá1ÿRxyëÓf®rõÞ0ïh¾‘}FÓ<(*7°o>mG×ÚÆU£¶-ìqà^ÜéžV·© êì^¼¯¨|¸ K> e»Þ:IHÖ™Øâ˜{]´3§ºÒKÝCÅ¿PéºÉûñV9ظ~b‡9lå&=ÓP·ÏŸÐl™¥°³Ìe`ç]œ¨+/ÿºâöøâí_IüãpZ¡[šµ'Çû™ñKÔ!5óS‡ãÖdz³Wêðe‘üâW?ÄÆ¯“×aQýQ‹‰É¸£^ŸlÇïȇ FØãá…w¡ìYOüÇË8ŸšÕ%­ –á¸ö´¯´óÍâxžÌù+eñ·ÿz:O?†ß/_ÿõ—íâðsÿüè«÷o¯ý!^¤üìO¿üçï”t*ðþøÏ¿þ÷Ïÿþûÿÿ€8€X€òs|TÔA ¸€ Ø€ø€8ØAÜC˜¸ºô,ø ‚"x>æ‘€1‚¤e€*¸‚,Ø‚.ø‚0ƒùƒ€•†ñ‡‚ç1O:¸ƒ<؃>øƒ@„B8„DX„Fx„H˜„J¸„LØ„Nø„?xL“qƒ ¢l8HsWZXY]¸…ô…`˜bèexY(…ÏB…1b…Wh}ø†P‡ãS‚/f‡å„‡J¡‡S‡Ȇ[â†rØVt8ˆpˆRÁ‡ë¥ˆŒÄˆgÿWˆWá‡=’\d÷N‚hˆçˆ"èˆÔ‰ìʼn¨‰m(Š–¸ ØPB^˜(Cž¸Š™H‚­¨—HD±ˆRc> 8¹È’Hg¾¤g³{—åŠ8G‡•ˆ_ep_‡‡xÖN´( ¿¦OÝÄgûfM—ˆÆ¨ZÂ|¤4‹q”Àw‹„H‰þ†Š©Xˆ§˜Œa¢gƦŠÄ8‡ÐHCáqf‡ÝèŒZa7†û(ˆÊFpYÁŒ§LÂtâgŒò¸¯¨ÔDÎbŠ“hŽ&…gdçŽïˆ…ñH_Á&þæWýVŽŽwˆ<õo‘YŠâ8pÙ\Ñ(_“(l8“±u’…ÿ¤‹…XlÙ’±åc'Ù’&™$i“€&’¹’&’?v“ ùé8M©”x‘Ř‘ÄögaÃcì¨_^io̸ŽÝt_)9ŽkWŽ5ys˜‡–÷h_°Õ–j™_Yy•ÓxüÕ•89•/ùŒ+ù•b :䨖s™–ƒŽ©Žö••R–ĨoÙSç–Y)™ÊX~­h͸–¤U”iÙ\Ô˜g–”™û%ši“r9šÂ¨’âHvw9™…¤3ãöØoxi– µ•lù–¶ •‡)•¸™“Ui•6Ä™›Ñè—xyp¦ˆŠÙ™‘HœSymÊäk}©—Tégȉ˜\‚¹–Ùéœd•—Dÿ‰•€éŒdižY˜鋼Ș®è˜~vs˜™œöÙ#I)͹Ÿ›IžÍI˜ôi®I“™\‰Ÿ&´“ø š÷ižZÉòYžÊYuú©žšI Q©B𹊳éGLùoöµ‘Fé õŽë”­5”õA9” Êo2ù“Ké›4Úš©©š9YR2Š’˜9“/ ¡œY£±ÉžkW¤‰ã£Aú”.±¡Ha‘™ ¤ˆ Ü·‹”T‹¡e¥J¤¥Ã9¥»Ù¤½É¡QŠ‘e§\yX VgDkzˆßØžSøžc:G£&ƒvŠuƒyz§û·§|ê?~@ª@{ª†–'¦sj‰P¸¨ŒÿÚ¨Žú¨©’:©”Z©–Z„†ªS{Ø¡˜Xcø© ª¢:ª¤*A™ZƒOZªªú~᪮úª°«²ª…§ê¥‰zˆ Ä8³º«¼Ú«¾ú«qª·{Y˜`¬Èš¬Êº¬¤*¬ÃЦT–wû€Tt†Ìz­Øš­Úú@§ú§Þú­Íæ2^¶0Ú¢¤âiÛº®ìÚ®îºÝz©ò:¯ôÊvYjɃ]vÖº¯Ô¯áL¥ °ïúý*°T¬+kX–,·°¿*} 6Jêj¬ÍtþÊtFgnÀ5MF·±gƱÛ‹æf°‹²]V¬§T²K° t&°2ÿûi5»ªñ*AR Û‚e+« uåZ´äz´˜±¯/;³É!²Në¯KëeÇÊ'+µ&›w&1w7Û´A›µÆaK›³VAZûµµfÛ¬ ÑAóqòÒµª:´D{´F[®+¶»·_¶åFnS µ€ëe|«µcû·ˆk¬û±åµ\²ø¹’˱$+·$a³ÑZ±b u‹k¶…«´ë¹¢›¶˜kŽ«¶ T J&æÅ€ik¹A·×u·v»OXÛ²„›±~벌ë¸e«¹V»¹‰;¼‚ë·œk¼hØ·Æ‹¼º›¼¹+» Ñ…' ³9{ºÏ›»%»½Ç{¸OÄÿ;ªñú !¬[!‰³‹¾»¾d轣ĸ\+t Q†v´¶¡½k½!›¼ ¸{¬ÛÀÔ+¸Ð›½EÇmÊë@Ü{ÀÜûqð+½—›wÖKnhÛ±L·»¼¿Ì†;·kû:@R`!²¸ÑJ³î›ÂìK[ †´‹v’û@ ÓQµÙ‹µÎ[ºƒ;¸ÖÊÃ_XÀÀÛ½¬Ã< ŒÀD¼Àìµ)K¼<¼/ ÄKlÄŒÂâ¶q ¼“¿™û¹Å›À”‹¸R«¸}˼E×`}uÆyËÆ¬¾º‹¼`LÆD»ïD’˼¬ÁKÌÃð‹½¼ÛÁá»Á¼Ã‚ AIÅ…ÿ|ÄM¬²» Å}ÜÃTlÈ€lº+œÅ©]ÖQ;ã©€kÈœ[µŠœ¹|¶Õ½£œÄk,ÊjÜ»>ü½dÇðµA)$5+¿{‹³“‹¯=ÌĺLÁ‘;µ»Ê«<¹Ä\ÌыĿÌ‹ÌÇÜÌœµ,²Š[Æ¡{Ì»lÍS»4kÆ/ì€ã›-ÛB*“s¤ìÀ)kÄ,Ì¥ÜÎJ‹Ì”Á \ÁÂK²§AtÛo&M®ºµo¬±ôÏÑ|­ßl¹ã] s6 Ó)ÿ Ê ³OËÊCŒ¶‹\Ñß Ñ×[ÄÔ[Ð'x¯¡•üüª7+ÐT«€$=ÐÀ*¿(­u!]9S!¤æÉeìÎJÿlÑŸLÓ \ÏJìÐTæ¼êüÊŒì@tk*Ò+}ÔHÔ±ÜÒšŒ6Dr*2ý·ŒÍÊ»ÌêëÓ¹¼Ç {Æ[mÅÎ\¼@ Æ*MAC­Ôf}Öh½Ô™|2è›&QÖ XÖIp]×v}×qПV:§ÃÑx]r= cäl‚}؈Öz]]ì׉Íúà„QôؘÙѼØËÍšMÖ]ªFÙé:¹a؟ڪݮœí-á=²+ד}•]*`ô¾Û«ÝÛ°<Í ‹Å¬ÍÔh‚Ý=±ÚáúPÛ¤bÚWÐ|É ч,Ü•kÝ»ÀàëÛ%ÿmÝž³½|¶*üÈ.<º ¼ÖÌöp$Ó°mÐÊ-ªVÛjÛà%^Í£ä´CŒÝ¬•ìÝëÙá ɼ.LÓ¢ÚÚaÔ}M ÙkN‘Üâ:ÍU‚gª¤¿‰ËÆ?ËUíÆúÆt,Ò3Ê"Þ²ËìÙ™íÇïœÃ×»âcÜ¿‹Þ_ÇÁÓ¡ºØl–¶L#Dá8æNjŽTIJÞª×åÜÖQz ˜ÑEÜÎÚ¹}¸¹Üß°JÑ=ÉAýØüÎŒ½,ådžÌÕ¿M«ÄmÔ¯£¶LÙ%üàǽ¤) Šäð-®ö[°Ýgã&1Þ¿ðlÞü¼ëÿ|ÑÌÝ«º¸eŽã„,àì ãÀ½Õ÷¼Æ>Ïü¾‘¾àk~lîÚ`¤nÂî=äçÆF™ hR©–Iþ)Ròžj ü¬å¿žì›>ÍXnâZ=ìþ«à’Žëâé’ìîöîØ¯à0üéÝ&$þÞæ®ˆjÖ2Ø®¢>vðÉgÝî©×…*³¸¬ÇΜÎÜ|º…¼ÕË̱ª·„nîÚŒïvÑoÅ5NÕÍ|ÁÛ òc\âÏ®ÞÏØnN<ÿrJîœp ”â™ðn”ç­ªÏï¤ò@°vÍã îãæÉ5ÿ< q©¡<ïísmhCOAc]õˆÌâJmôÑêÞìZûúÊ;­yeüG-×ÌíÜüÝÒÝì%íß ý ÿÈè½…ûå9~à9Œéüá×"ÞۜޘϲH{®éšæ¹ºýÄý•®²-ùØAö}ëñOà@‚ páB… >„QâDŠ ¼XQãFŽ3>ü80dG’œD˜1áG–%]†<9R¢Ê4]ÞÄ9ðÀ¿H%ìù³$)¢E‹Œ™T)?5-Æl(SáJ¤IkZµú%Uˆ*¡J-yìÆ=}†Ôg€ßZ~Ü`§Sº\ÅÖŨ#ʽ+ùf…zկȿ‚eF¼ulΜ6iFl˜0_ÆyñÞuŠæ_Ê_9î{urÞ¬z‡¦<‘*LË\-“|:ôÿi±ž;ßN½zãc‘•}s,{–§p’¤·²)ë×ÉgÒ%x¸wsé]›CgŒgpâ¼PËVÀø¸r[“>¯Ù9t×ì{óÆ=ótúîÕÿþíøý~ôð±gO/ÀøèóÏ=ôÔ®¿ú°ƒ/AÕº«%þþk¯%ÿ\Ã)’"»? N¨ ƒ9èLìí€}TdqÅ}Xn½º@“·Øþ{ͦëüª9 i„ ·Étt‰;¡þa € ðŽ€ @÷Ó­Êù|TJ´'´«µ¯ ¬¯Á? +¶ íCsÌ›¬dóÊõ²ìŒÀ45û’HùspC©3+¯¸´«Ã”LCÿ (â:21#St±EÛ»³@@)5LG;#ÓT¾ÑÀÌðÌN·®;¦ÌˆU7Û´ÒSEëTÌùÜQÖ.g=t·-¼ÕM`IäÖWƒýõ)Pç6X™åU#¥t 3Möþ uÂd×,´WoîHF3ýÇ8sËmR®H#•ëY·ŠîK\eÕõÆä0,mÖ ›}LÐmK2ò¢ty:2¦GG]ö¼m÷u6¾lõ»A5½¥â†mìÖ7„7NÖB9m}xºAÆÉc ù­–ÊK3~‰eŠ?wÄ¡è{ɵ¦mñ'w)üXeå©a†îíe]í(`Ò½èNÔÿgÓ2H…{¤vÀÄî#öå¨<}:d/S«ŒãŽ ›ÍL¬Ó¾ºN‘?å0Ïbå£0‘mc[2ÇpëZ5!½>4æE9jt š 8• §؇”±Ü²VŸé…úk†O¦»è‹»í"¥ëi$W'½tÓK>=uÕW¯˜u×=\\Â3hàr±&;_ûZ»6ÊÿÒKªï¾-í­½B^î¤K•]'œ_‡>zÀ핾zëñ£þzí=WÑæ52*üÚ¿kÚàh·—6ýß­Ëésô߇?~ùç§¿þÒcï|ÓBGªfû#Êß³X÷ýÏ€D`¸ÀÕá/'þSˆÓÌâ42P´`5¸AÿvÜâNRAÖƒ%Da U¸B’ „7!!¢x2ÃÚï„5Äau¸Ã¾ðeHËZH1¢ï†EDb•¸Äëùpf¢?ÂC€!2±zG´bµ¸E.2Ɖ‡Ò‡>¤¸ `ȼ5ÎÑ‘„$ ëHÿUÐAdK[ÆC4‚‰–ÓðxU º1’§De*-8ɉ.UyÄ$SÈUuRB[ËÛ•r´ãýŒGÃûŸ)U9LbÓˆÝCfqh–G>¶å-q±eæ€%MaÿmWBƒ[Ô‚ÉHcvӛ߼"2e¦Ì,Ë\éjæxPžh¾çiz›\æì¶©8k&ä&8õ¹O~RŒ•qe¹ ’¤%5éIQš’Œê¦¹¬És@¢¬f#›˜Ï~VÔ¢˜8·‘€îTDT«öJ­- cC“œš²f'|šå{…iLeª¾”’´+ÈÀˆc¾ªä¦0Áƒ§–Ž7{Ù­jd³!EgºT¦VôŸ¹ãQrJ>:¾³©æUµºÕ9>µ1ûsR:ÉUƒd•¬gE«½Úʉˆ0&cM+•WºÖµˆkµ«×ÌšW¾öux…jEÊBþîÕ¯‡EìüK@LV±°ÿsMld%K¿Å>$†Šã›WÃNÖ³ŸM]eoÆ12ÅŒ€ëê$ºÁ΂ֵ¯í•h U¢äÑ{d‹yY= ¤ê[¤KW [â÷&²%H%rÉfjJ©å–o?™ÃÖ׺×%KM‡+Ð×T0Œ|ô-Gç0òÞ‡¨È«.iƒÞÌdO½žq]u±;_ú‚H»O<33é–?BÓ9ƒRz6’94WES^![_78"È5¹Ì‰®ï¤“<#u¨±z-øOc[©B?|¾.ØÁ'F1Me6Îquw 7+¨w*¥¦XóXmª²¼+±ñ ÁÓ«‰Srüh|Ò'yÊòQ‹\å/Ï(½mêi—ÃÜæ19hk~sž?˜å4GyÏ…®`™owÈ;zÒ÷óN#]éJÏùgþô¡GݳS§zÏ­¾å gÝë^d:¦±þu˜o]²c'»ÊÍY´§äkOlÛÝîq¸#VîsÇxÝëÜu¼÷ÝçE·õÝý¾p½ûUðƒ/xáMqÄ7ž"ŠçëáŸoÈs–ï“w|å}yÌ#^óu•|çÙýy>s^ô}'}\Cúr§>­«gý·]¿hÓÇ>í³?tímÿÿuÜ“ö»Ÿvï¹ú{à7[ø[%~ñ}|­&_ùÁfþUÿü]G¿©Ó§þ¯Ã~iìg¿â€×>¤½ŸùíKºûãyù#}~ôü×Ö}ûmn}¦²_þܯéõ¿þ÷ßÿÿÀÀ$À4ÀDÀ@æQÀtÀ„À”À ¤À ´À ÄÀ ÔÀ äÀô@³Ð(aÁûksü±ÄèþüsÆJŸ[1Ñ?=4Ô+WmõÕþ‘7#ÌÇœ©Ö0ëhó§†*Éa»ìþºôÆ€ŽÜôª†&]tÜìMôÉ&Šÿ îžã6Šõà„îØ4ºÜÒÖœ|ÓØeÂ…¦d¨nùå˜g>eË=ž§à¿žFÞVhæÓ^åš§®úê¬÷©°o¶Rì±£G;ì¡_×ä™¶îûïÀãÄOü{ÆÏh-¨q)/üóÐG/½w7OoýõØg\çfuïý÷à‡/þøä—oþùÞOvûúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€Làú¬¢>”8ðŒ 'HÁ Zð‚Ì 7ÈA©GDßQB(BÜs%L SȺð…0$J߬°† qhÃòð‡@ ¢ÿ·2Ãg…P ¼bš¬‚ıÜ(b‰0Å*RñŠäy¢µ(”#¾N…>•HÆ2*±ˆ db{̸˰$‰^#OÐdÅ:bÑmLŠñl’<1Åh‡3*á¸)Æ ò…rd£"ÉB4Jf‹<âÅ2Æ@–çŽvÌdùHöt !~¼ÔB`¶%"çû¸Œz 9Rvj•ˆ ##gIËî9²=¬d£$ É.R•¨te¥ð¨I+^ñ‘7q¥§>y•sqêVAž‰L>¢R>©¤æ.iâ%·ì–— _"kIÎr:‘FÌ¥·™Lþ F} e©h—;V“›Ð‚‰'EIÿlý#qüTѨ‰KkÒfBÚTgÀ(ãR‘ê›âœfzr;¢i¢“¥97Êѳ 3xäå´Zy#¤PËK£B»”Òœ`œæ>dJS®áqj©aäò3ÍÖäò?üIT6µÂÂdòÎZ«fBCWaúØ) ³û¸Í¤Å#~3ŒãLçZÓ™´'&)õ¬ßÓ²õR»žmŸikêK ¸'q5¥˜×­Ê,)®˜ªÌ×åwFê@„ºé0v ÎÄv¨µ«X—–VBìkêŠ_ ëú¼Ø³f¶µ¼iŒë3gØkœJíjåË_×Þ·`Ãt‘¹ùk³[Ísr£§óh÷Á”¶ç„=Œé o[TàÖ6¸| lOº#&õ[í=­âõvKÝÿÒ,Ve ï“Ïûå`­w±Ïxî…%å'ŸëŸ=ÜhKÙ¸j¬v¸9~m-_|š­t6¸‘3n4[øšI®y¥~ÍÕƒë$!WgbŒaÎõÐÊ|àI·$Tm”´>eë‹gÃ[%iãJü‰E-w2ƒŠôœ€Ùã¿ò4gÓ]Ïv–¹ ìFnõb¥«]O¼"¿n[ š=ކßÒMëô¼OÚäsWHÁ—›q„#U·D&äÖfz²³Ú…ˆW¼êiB©;Þõ‡ü0‹‰É·ËžàÉïÈ/tû‘ϼälM½{¿úâ7ÒÆ&¯.èVÈ…޵פ„…ÿ=ê¿“r¯q,ÏýH"ßú8ÿÿù²Oâ“QüÝO¿ú»RoZ¢¿|‘ñû×Oÿú?E¬ Ì¿þ÷Ïÿþûÿÿ€8€X€x€òƒ|´€ Ø€ø€8X È=ö—¸¨KÏÒ ‚"8‚ã÷Tô$8Z¸‚,Ø‚.ø‚0ƒ2˜?È'aHa~)8 ñ´ƒ<؃>øƒ@„B8„DX„Fx„H˜„J¸„LØ„Nø„P„Ç48^9ÈUaZè@q']¸…ô…`¨bøeˆ]8…ÏR…Sw…KanE&8>p8cuHNw¨y8w¨€X¸yqèRsˆs4ˆâdˆìµ‡³¤ˆ#„ˆRÿч=’\E€HˆçÁ†#Ȉ¶äˆ¢¥‰‹Ç‰eŠ÷7ˆ~^rh‰¡ˆ‰"è‰eÁŠSQ‰D$Š~¦gt(‹7g‹¸ ¥l6iªf…¨(Cs8‰>!L§zwH#Ô‹Ï7Œ´¨k´ˆ¿&&ÌØEØZ»‡]«V±( ÄhŠ—|«öŒ6DŠ‘±Õ‹ã8UÁx‹ÞècFÁôæŒäWQ‡;ÆG¼Øo9FVöxƒÈo㨤$Yÿhs óŽõÈ”¨‹ç^'¥ŒßÈŽíùoÔÈZBöWù¦o¾xyó–‘¿ø‘°e‚ȶ‘Í•+9‘0y’ê¸g2é‹,鎼ÿxŒ™8ʨc7’ZA’5)dÚ^*¹oHi“ÙRH66Èkö¸X(Œ$)hC6òÕcêØk¶–Œé¸PÃ6•áøy½æ’;¥ZýV– ’Yù…(—"I—xl™y—SÆ~×ø•pé—”r™ 9™TgŽN©%pÚh‘‹ù )h›h‘©–[)o–™˜’ɇœ —¹ ™Û蚃©L¦•Y™Š9v˜©œã›âÿyœ)!pžµI˜À–Î9‘¶†‰VšIˆB9—®9™Ö‰Ÿi‡Ž(í9ZÑéœÆÉ_àY 93ú¹ûiB¹Ÿ;–œÿIzùŒpžž›y›ÿÉž 9uÙ›8œq™vXY“Jé˜YšöYkøœû[I9ŠG9”)*¡ÀÉ‘C¹8Ú–&:¢…žÈù¢BZ¢I¹{Ðy”Ezœï‰Tºš;j¤ Ÿ©‡óˆ®øU*¸HI[ÊQWz~]ZŽª¨Y¼I…!*¢ÄiVø¥aÁ¦å¦B§¦òù¡fú†Yê†U1ƒ|ʳçڧÿ¨‚ @„:@‡ª‡ª†•ÿ§Byz…¶…’:©”Z©–z©˜š©šº©œÚ©EȨ9E¥húcXª¦zª¨šªª*A ú”#´ª°Î«´Z«¶z«¸ª…­:¦£— Ä8¹¬Â:¬ÄZ¬Ѫ½êD]Øqf¬Îú¬Ð­©Š¬ÉÚ¦qwwû€Tt†ÒÚ­Þú­à A­Z¨äZ®®æ2·0Ú¢¤²Ü®ò:¯ôZ¯Çú}žš¯úº¯}4}L—<ØñOQa£”Añºδªk¯ q° ÛAËʰ¯†¯$vH¤lK¬þútš¯–` t;M'n ;T ö°û±×f†{%ë² ³»¬`ÿöiCu ›8«²q²#»ªã Ò$²-6³¶º±»®N«®P‹#{wÍÚ>û²9û²8[µš‡µAËL‡†Ó$³J[@»t·µ^û@×J°?»q‘«C´1×!/e+·YfOÛ·ì¶p ²‚ jiËqY;¶Z{¸O7¸× ·K÷¯¹û¸TKm ¹,+¹,K¹yk¹5‹¸a«¶5{²¤ j-Kt¨»¹™›³W+•;­ø ع1b è¶ L»^µ}{a_«²­û¹‹ûµ™Kµ¯+¸A[¹ŸF¸‰{³…[¼‰ ³Î»¼Ö ½Òk¼¹K¶YºŠ+¼cÿ+ºà‹½Ä«½;Ë³Š » ´ !ò¡3ÎB²_x¾è+¿XF†Ž›gËô{ALëP‡µ¶µá–²({ºŸ±UˬX&¼ ¬½åK¾ã³ÓË…Ö›½lÀk»½f˱>Û³›²%Á×KÁ¬³ˆ+´«³K `!²ÃµéKó²ø;ý †»‹E…Zû@ Ó¸Ù[Áãk¾÷{¬{Á2ŒÁÑÁÆ‹¼a¨ÄE<ÄJÌÁ&álœÄLü±h;Åå[Á7<ç:´¯³5¼3À Ë¸ª›° ¬ÆÝëÆÊ[Àqk¸†‹¹©›¿kìÄv\º9 »ûH¹Õ+ÄàËÄ­[þRÿ,Æ…¬ÇMÜÈ}ŒÂPLÂ$lÅ4[¸â{½ù ”üÈ`{ĪJÆ¢âP;“…ÝëÉ‹KȚܬ•<ºìµ^ÜÈyœÊϼMŒAL6iBÒ¼n«¼œ‹ºÿÊÈxÌÃLÇoL°¦«¹m¬ÌÀ|Å¥»ÆŒ;ÂÔÉ–ìºI|¹ª,ÌËìÁ<µÎŒ»:ˬûkª¢¬-¹A*“àûÈ&|³&|Ê[ìÄS»ºœÈŒÀÄûÁ%kÍ(¸·,ÛWC%M´Ú¿û¶tÐ×ü­þ¬´d¼i s6 Ó) ÜÊDüÄ÷Ûʅ콆ŒÊ¦ÐûlËŠÕÐÁ´œ]«ô ÒV»€,½ÐÎZÎ0mÿ-9S!õÁ3¬ìѼÊí<ÏÝÑB}Â^\ËŽ+ºdÒ'} )=ÓNýÔP=A½iÓÔB>ÏÏÈ ãÉ›á±ìÓèìÂûí-Ñß„šÿýÂ#n¿2äò%+)^¶ÿK*P° p6nÒ³ñüÎjÎäHþÕ¾¼î «m¼æ˜ìá>ä|~ÁýŒ¶tNåéÂvþ䃎D…®½lÀÃ~(|B/nb]zRâÅÎ7_λ¹»ÃºÜØ.L»8²ÉmÔ ÜÀ!}¸bXç®êÝÉNþêÇëí¶¬Ñ#ìÈTLáõíêæ å¼žl¾þO,få¶&nñèúŽïu"PÅ.+Í®“îÐmíìŸÂq=çôìÈÝ^ã¹Þê « ßç}NîÔmî lç÷]ëìNÃî^ªsÝË'$$OÛ„^l†Jr±ïþ.,Äþò„ðºÿüì<¯ê@ûÌ©KÁâ̼ˬÍÞ¬ºržÌ/ë2]áoÌiãÀ,ê]}ôø}Ö‚î”vÝ߆ÈŒc!µòüÞõŸå\>"2?ð3Ë´ùVnAažöÏ×!ßëüÍ ¯òHâõ/¯ìøÎåa/ók_«—™ Îöõ‚O½}®o/ïü}ÕŒoïE"yï*¾åýÎ7"%dŸ±—]øœßù±òR^SÕ‘ÍE¾‡ÿù§íù¬ßúï×­œÇè«‘ù»ù®Ÿûº ®yÉc§¯©¯ß³ºûÆü ØûûÛÌÜÍÿüÎOóèŠüÔ_ýþ ûqõ¿ªtlÿûÖÿýàØØo¶å<ü–ìýáŸþêÊÿÚïðÙªWæoÅè¿þöÿ€=þ"1W뺩ý®ñÀ?‚ 4` B„ >„QâA‡-JXñ¢Äÿ|$¥qãH’%MžD™RåJ–-]¾„SæLš5mÞ<ØäÀ*Iý ´¡B¢Eò# "Qˆ"›*]ÊÔ¨@¦Q3BÅX°(Ö— ¢ÔÙçX²eÍžE›VíZ¶mÝrôx dܹ)I1¼KcR¿~exUoC­… ÎÊUqK¯/ÃÊüVòdÊ•-_ÆœY3ɰsŢ̋5táûJŸ6½_ÄP«¾VHЯÿÒª²®Ø—ª×Ø Ëî ;xmâÄ]>®»YùræÍ?‡®¼3OÈ>&uiÁ¿»w÷=;)4‡°û‡Z0µ´Gñ(ÉBo{ï¶ qû°GÄä[©ÄŸ„2J)§lîEû@»!ªè…ö!E5=ñà œO¯"¹²Ì•„¾–œ¤²N;ïÄ3ÏãäÓ.¼´T ºp´*¡öÿÈã-6Þ|#ì¼B]K´Ñ ©"QK+½ÔÄèÔ³SO?µN+“‹1¨ % 7/JMr¢W]¬ÔPoÅ5W]—uÖ”ˆú(HŸô•Ç‹|ˆÓ]—e¶YgÇêÕ¥aòò£`§}V-e³å¶[o¿e(Z´Veܶ¶57]u×õT\–°¥Ö#yÙ= ]zïÅ7ßþÜ5ë} °‘”Žô½É^‚F8áÊøµî"ý)–É`Š/Æ8cšÆI} ¶‘€`à’zKì×P-Ö¸e—_&‘OM2õÔ‡>> b~HÀhœ´Q‹Æ“s>ÀBL“?–afºé¦9&iXlÿýù×F«G€“=DSÖ ‘ºµX÷­Y§ÏF;_¨G’± l=Ö9AŸ X°µHwÃôG ËÄ{7ciÎìË–N»pÃï]{£¶…¨ê«èy€ºa¥­C5$²ò${­hÁ.ûpÑGW[æ+cô{  L0Uù!YÉ'÷.u6'T²MÍ#ûª 1ÄpÒ‡'^×Ä/Zü@„¬ Z/ kV {<71?R°13gRéЋ?üe0˃¶LÕdRèžžv°ßÜÜ÷‡øÖ=™™#D)VÑŠ'ùáie-$jÑ‹_ ×?Fƒ,‘Œg$bј*®ÑNTãåÅÅ1ÊÑŽû‹ãÍxG>âQŒ}tX9È æÑ{$d" gÈ5"R‘t#ÑèHHVÒe’<#%-¹É‹a’Œšäd(æI0‚R”§DÜEiJT¶2]¤ü"+]9ËnÁÒ‹²¤e.›eK-âR—¿Ì/¯èK`óS´"1¹L''ëyO~RfžIÜg?z®|¢“›Eh9«ÅJ4¡%Ë?‹èPˆV´&MãA-ºÑÍ`tˆåhHYâQ ‚T¤'ÅbA-iR”¶tS*m¨F]:ÓqÁ’,¥iNBÒâT§?ãBϹR™Õ¨1á)}zÔ™&u‡KejK*C¨Fõ¤SaU­R¬ÂP«[ÝhWMøU°VT¬%$kYzV¦U­ek!‹úVºB$®tk]ùy× æU¯öäkÿüúWx–ƒ%¬: ëG:&Ö±ÿYlûXʲќ]¼é\+«ÖȆ±›•fgE¨YÐnU´Åûli—yZâ¥VµÅdíð\ûÚ_Æ–t³¥m.m;:Üæv–»]o}ÛJàN¸Ã=eqIZäæT¹…;nsõiÓGFWºD½l3ÉÜëJ•ºŠ´nw«ûÝD†W¼å%/!Í{ÞA>7mëeoÝ‹6øÆ÷Žó=[}í+GüF’»û5kzÛû_¯UÀ€Ôo'y`ùXÁ•µ$ñ;¼Û¿2Ä)¾qŽwħ6È«¬q—Üä'ïÌÁENe’£Üå/OøÊ£-s)·æ7Çù¼i®ì;ÙÙ=>*&tI8Ê9GzÒ•¾t(S‡éO‡zÔ¥®á ÚêWÇzÖµ¾u®wÝë_{ØÅ>v²—ý'8B{ÚÕ¾v¶·Ýío‡{Üå>wº×ÝîwÇ{Þõ¾w¾÷Ýï|à?xÂÞð‡Güá;analog-ce-6.0.17/how-to/iis/IISConfig2.gif000066400000000000000000000232311406366436600177760ustar00rootroot00000000000000GIF89aÌÀ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,ÌÀÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜÈQ"‚: pàŸÉ“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒê$EòŸÈ£H“*]Ê´©Ó§P£Š$Zò«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊE{€ªÑ¹xóêÝË·¯ß¿€ Ž[·¨ÕÁˆ+^̸±ãÇXg¸*ùjáª3kÞ̹³çÀF¥Üp4Ëw#ÿ;kò³ë×°cË–z €Û$š®­Ð4êë[¯þÚšòp²Å¹&7¾5¥ÞäËgKŸNý/ïÛ#s& öí§íÿ&€2,ôãmOfU¯µxt¸ï«ËŸOßíõÜßÁßï.зxÊä·^y 7¨`ÇE÷ž{Á È qìM¨`„ Z¨a}v(o¶i§_A¸‰èŸa6w`„ª-˜à‹,¶‡Þ‚)^¨„.Æh`†62Ÿ‡@éˆä×ßdäd$x¿™·";ÞÈ"ŒË98#ƒO2×£å×¢J )昹än$âFЉ˜…£—V‚ ¡—5Ö©eŽxZÙ¢WH柀"FäAh†È“ÿ¹ù$œ}fYeƒ3>)¤|VZ'£]ý覜Æe¦ˆ#Zdnl¦Fœ£:‡'—ž§§úÿéÜ£:vYa§¸æjŸ’ ºP©ãmª©®Ä»Ø ùÚ’Mv:¬±ÐFÛ×?¤Tkíµ×"I-¶ÜVËl¢Ò†+î¸o•hî¹H¢«î·(’ëî»ð2Öl¼ôÖkï\¿I¥ï¾üöëï¿•xlðÁ'¬ðÂÌðÃG,ñÄSäpÅg¬ñÆKuqÇ ‡,òÈ$ôqÉ(§¬òÊŸÌòË0Ç,sF.ÏlóÍ8ã\sIBõìóÏ8å,ôÐÕŒ,Ñû‚ŠôÒLëf˜AG7 Q@WÍ“ÔX¯ùtAQgÍU9+í5Ñ.w=vR`ë,öÙjW5Bk‹wÜÑ}šÙ-šÞ*§ÿÍöÐeÃ-¸E ®Í7C‡“hÛÀ‰—ì÷ß9~÷àN9á5ÞÑã£jÞ¹yî4ädoM²øÊÞØ‘”ë"¦þÝì´w®zvø¹ŽûH·/ÎkîE.ž»vx÷®µâ¼sd·èqNúÌ’+¹zðÔ¼õÂ#?;õÄsŸ¼å² Ÿºw¯g_½îݧŸüñÞ%µ<ãÏ ½öæƒ>¾õ%Vÿ}ýü{ß¹îØã]÷&÷?Ѐ¸Û¡,÷»î ví£ídG¼ñ±®wgb^ü:6¿ªOþ  ï|÷ÁîÏ„! ‘w@ŠMlœ+ž h¾•¯… öÒ§Cipƒëà ÿix¾FL¢‰ØÂÆnˆ",¢C8ºÁÙ¯~ùc`š¾—E(±ˆ*tY&Äý™ñ‚`”¡kˆÆ%þˆht¡‘â˜Æ×Ùq ¹ßú¨Åõ‘ÏŒ#| i²Žce<¤F'H&‚1Š*ì!½÷ÅI‘2K$&/Ã9*Ðt,àwWG.ÞïzUÜ$M7³©2"b„Y,_2MÒR"³\å-ûÆJ¸r—{“Ÿ!™0[³4ÃÔX.Y1c2sYV‹¦4§IÍjZ³&0ì¥ÛžÉÍnÌyÎô¦8Çypjó—äL§:-–ÍmžnðŒ'ÍÚ9(tÊóžø¼L²Î™ÿÏ~úûtg+ÿIКS ¾,¨BñyÐz.ô¡ðlèAì ÑŠnR¢o³¨F¹‰Q®mô£Çìè;AJRZŠt %M)&OšÐ‹ô# SžJgÊN<:Ô¥,TÈážSšú´aôœ(L+ø9‡ð§?MªCXŠÐº•”·› ¨ž(Õ7’²u|¼£RÊÔ_v+{Hlâ娯Iΰ’Éë–Z×ÊÖ¶ºõ­p«\çJ׺Úõ®xÍ«Z)Ú² fT4*ëùâ8¼Öå•ì"%ó§¿k:ö±l4IÁ×oúÕ£¥AÝ(ÇJEJoŽô_XU¸Õ›Q6c]]ªfEË¿Sz–~LD+%ûWÚÈÿU`©Íìå[;Sú1’6L`pA+ÃdÖV™·ýWnË0ã—lÉõ×rݦ8÷¹ò«.¿¦ÛíbW£§EäeGÊÜïš·.ÞÕwÞób·½[/BàëÞÚÒWbò%TzCÇØöÑíº™{È JàBd´¿õ×_ŠÛýÂ/ 7-¯ÀþkàÎ>ŸÓÛQLÚ.EÃîpÁî±ü&ËÁ¡ðoõ sx!°ˆ|ׯ#1ÄLl2÷ôwè‹]‡kÃëÁÎŽÀ3¬íDµC ×°Uµªp;{ÁÂ9yÉÆ»êðž¼å)?9ËP¶ €‹æc§ðxMe&œiÈÀí pÿ¬®â-‰¿Æv¶ Õý«g6Ô´ߟmç>G‡ÒMóׯ‹R Liêk³øŠG\³*–‚¡abÕÔCÅÑÂEb  ií‘šÓ ü"!߬D«WÑK9³n¢¶®Z¯KÆ,Dl!¹êACrÎ4k O¸bÓ9ÒŸåc°‹ýZP?2ÏŸ+Ò*2ŸEæC‚ùaífQ©ŸÎé Ë‰¡ÒÙ¡ú¡R ‚£* B :&Û U2z¡r³fù¢´£ùâŸ]©˜û ‚S ¢UÊž7Ú%$*¥×ù,õ¢öœ3*7*ÙmC¡Í4œ¡˜›@Ú¦[ú£m §î ¢š£ Ê)CÊ^Ý©¥ægJê|*¦FÄ¥!Ú'ª£Êá¡[ÿª¨>š¨b¦Ë²¢|Z¦àI™hª“噜¯˜¡Hb£ï¢Šª´"ªZ!·"¤¤Ç”ê>÷×x0¨Eê¤4Z¨ Š’ª§­Êœ³š¦› €žš«ƒ‘§óµ§HÑ Vø«šÚŸÊø¤èy™®9­¬Y­Ôz­Öš­Øº­Ÿ)€o…¬¾º¤´Ú¤Ïz«kÚ˜èŠ®ïø ™”©S™öv^ìJ„îŠ_jê/隯ú*cj3„É“Íz˜ƒ:Šd™Ûò–‹°õZb÷Z°™˜±ɬïÚ°+Nãk{±7·Ÿ@¬€Ê±T籸´±"ËL;¡ K~'‹±$ K&Û²À”²²ê¬ÿ ­2R/+ž1›³&µ³’Ù³>û†@»TR™°H›´J»´LÛ´Nû´xU´È´² ±¯V{µX›µZˤõ9´ª¨r^ûµ;¶ž¶dkˆf{¶n˜¶j‹ŽcÛ¶aȶpk‚r»&m%µs;‰o»@·†·y;Fuë4Žù) ¡ø9‘7¶[1–¢zŸNù·—d³æ Tƒ«’Û6¬6:eaaj,¹á)¹œŠL•Û~×x¸œõbEõ¹[`¬ º˜JµìTºaZhKfX–ºUöpí–UXUg–ûzó˜d9޳»Â)»½±VšX„ûT‚æ§zV¸À‹fšU4i(ˆÖ»ÕûlPû½àÿ¾tå·“*º·TÃÕ§E©dMFioæihU¼–ľâ†C×ûlZ»¿ük4{{ ›¾+±¾–Ê}†Co,‘õ¼¶}ó6„ÿË|Êk®GB»&IqIúi'ÉpìÖÀ9µÀÀ&mL¾¼j¾!«5Ü}u„U Ôp'¿SÖH™¹Ì[ÌpÔë~,~¼ˆ„²$L2 Q;|=L¨­ˆ“pôXÄ8(´È›vA Pk«><Å€[ÅeÂ,«ÅÏÅ~(Å`Ü4bœˆGL°eÆ\ì^Ì’kLÅ\ ®ÇcsÆÈøÆÿiÇXƒÇÛHÆ|œ]sÜ«uÈRãÇœȆÿlZmÌ>W\®Y¼Èr<®²‰È’¬tœJŠÅHÌ^&ãÉf6_Eʺ±&‹t€ÉòɽÑ0¨ÜÊ©üÊÍc·ÖR×ÒµLÊh£ÊÆ8Èó _|4(ž 3(”xo¼…k ¨ÆÉ¼&ÀW!X˜Ì,ÍS”…%qÍÍx«—Á¼9Ô<º¸”É‘ûÈ7[ÈӼǜÅüx§5•÷_÷‡ÑÜ¥ÜϜΰdÍDÒ^”8g–ïŒr–œ¼zŒ³Ì<€ÕBËö¼Ð¥ìдÜÍ -ÑöѶ¼rݬ³lË Ñ×ÌÍÑ ‹­Ñ]Ñ€Ñí­%ÍÐ+ Ñ­oþÿáuÓ}˲ÜÐýѾ̎úÐÇÜÑíÑ/Ó0­Ñè•ÓM3ä¬y› ÉëL¨!H-ϼ‹ÖL W]Ï,‚þÛŒKÝÕ ¸€ùý’»}Ú"½€ÇÌÕ–íÒÕ¢€¸-ËUíÖÒ¬ÍülÖ'a2ÿáÜ}ÛÝÌϸ}Í<ùÏæÝÛã½O ¯JÓ`ƒÇlÓµÍͶ-ßåÚ …p ßù-ß½íÛèMߘ½Ú… × (Ö-ߨ¬Ü·-àǬàÌ àôËmÍ|½àþÓ?Ðù}Ø'áÚ=öáç-Þô½Ü‹ÔÞR,Ï«íÖ,îß¼íÛø,€Wýை@]Ï:NÝ2ÙšÍãêMàA-ãk^ÿ ä®ãìxá,~äÞMãôíÚ¾]Ý„äBÞ̃ýÃнÚR®Õ¼f$^ÓDƒ"ÎÞ¡=°ïý+µ|ãØ½ÙÊ Û8~Ü]ãumÝ.hÜîÓr>ÛÓ½åÔœÜþŒç|>Ò ]Ú….ÛpÿN_ÄÝØ²=Ôšm-±ÍÒžÜX¾Ýóõ㨠éÞéš.ç’}ܳéÕ|æœ<Ú…Í«©N^ª®…-U°îêªþ Î3Zë¾ÔÝÛ4ë¶>ë¸~:ºîN¨î6¨®ë­ØIÌëÀ~ëõëɞ뮾ì«JìÁÞªQ#ë¯íÑþì»îQ¸ÞêNMêRmê— 8*žÆi^îLSÐüiΓ‹Îên[â~Αïeyî ï_cï#†ïî.Îá<0O¼ìþ±ù^ïjÞÓ9=ÑEÍÔ<=ÓIÍïfæïQMïS,†]Ù‡­Ù ®ÒnýÖ€-ñXIñ‚Zê鎅 ämà;>èÌ-ò±Fòµÿ:î'¿ˆ 1åŽÑ*âÛlß0?ñóþîò1Îäñ½ó´ÌåE?ðg[ð%‹î-pÑtnÚšNË=>ç¥ýó1ôßÌ ìÆþêÚÄÄí¯Îõh#óäjñänæjßwl_É(Çô†ìô0 õ÷™4÷t<ô|ÿ2xϳzð¿x^/¬‡O„~OÈ€¿ø)3øA[ø`ù(#ùFKù˜oùSÑø½løœO2›Lñ\%¾¨¿´c9ú¬ZúoOS/(±²?û´~_{ž/Ú5¯Tÿ D«Ÿûhõö5Ä0óû‰ÂÃÏMÆOÉoú¦üü¿¢t¼ý; ñ÷,5ĬËÚÚÌÿïøÎÏájg{Ÿ Ç6 ýXÑÏ4Ä<ßßÐ9·â O²cÈú¶IýêÿÒ Ÿ5í/ü üq@à@‚ D˜P!BR6<ðï Ä…IQ¬Hê¢Å4’²äG =©±dÁ”(U®4“cÌ‘M¢Ä¹rfÈŠ=}þ„˜“àÍ›Û(¸÷´3¬¿ÙjN>צ2QEæ&̨+è;ê!wÌŠÁÈ|‹Ä{*Çm$-¢ñˆÔ"[Ãï>×[Q6”H¬*3ùâû®'­Ò»’P s3#"ÐÀ—r“êL7{òñ¤Ü¼*¸«ÞÔªB‹.,¨ÉŸ°Â@ªŠSÒɰÿÂ’(ÑC•(PDe4Rú…´QEÓ²ÔP<½BÂM?í!G\ÔÒAõ¬Ó=#%ÈÏÊØD5Ö õ”µV¤$”®H[ÃãÕ´ w6Ø$…%6!\£ÓµXZ¿Z2£c‹…V@Z£öÙÐ’%vY>[ý•ZoÝœö[[­ [aµeµÑnÅeWÁÛ­•ÜWåÝ]_™„7_ïä·_ÿ8`&¸`ƒ\zñ´·Ù…ÌÕ7b‰'þb`Æ_Š7æ¸c-Þã>×õ¸d“O^ d[EæVc”_†9f4~“eu]–9gOV¹V›K}˜æ‡&Úg¡Ïü9Ý™‹fºiv{–5iWÿ¦ºê‹6Rj’­æºëš±þXUðîuÖk³ÏÞêXµÆm·ß.ì´Åf6ãŒØÄ;o½÷æ»o¿ÿxã¯wx²‘g¾ù¬•wØyé§ŸÎwê¯Çž)ë³ç¾{Ñ ·[+Æ[ÀN»B¿ ôÉ?_}ïßGü‘·B²ü¥ìwŸ ôhŸÿ„ú‡_Ý%¿–‰O:øÓŸÆ'õ dþCÈù‡@Vp2Ûó‰ØÈÇÀÿ>} tà9Ø@*pôàÿLXÂõIЂ/¤K÷0¼…0þ;!qÂýíP;Ì¡C„8BU qˆîS`T·D&6щO„¢7+Í<ü²áADvq‚lŸADÚOŒ&ì  A·F6¶Ño„c¿Ô†* ^)‚I"·èEŽ1‡eôãÿ©Ã#ê†D›#¨ê¸%<þ0|¤{XÈAþñ±¤ yÈ%²bU,žWóÁVò‹+ó\Ó›Þ‘fü¶9¿²}Óœ×Êf4©YÎs¶3eé”Ö:ƒæNzæ žßYd|ê¹OåÜœòì&?ZMhå3œ…æAÃ6ÎÎSV¯¬%ãËþµ²ŒM25ù¶N¡scè Šªúõ¤£ ±¨ µhє’~L‘¨I›÷QÈT—$UÊIUJÑ^´„±ld1aºI™2¦T ©o * ¦ÐƒGü`[¨>#¢‘ª?õ)zÕô½rƒZM`)E˜À®®Ô•-Ô)ÜŽªMN˜.\FƒŠÃ²úЮP…% YR1²¯ä] ØAÚµ‘”Ô£`ƒ·Vu&5”ÿÝå>è#ÙÀPöû×Po¸W¿jªä)ùêòâõŽÝ")‹˘FÕgí`ëÏêÙt,e©ìdukœ´br®œ­«`[Jؘš2°— jp‹[ѱd`oÑÆØx:ö­r±lv';é®R¸|t®VCËJÏšõ¸Æõ-X#IZó6¼Ñe­lG]|Ú¶,¸½ìnó‹žî²Ðªá½èSïêÂ=žõ†è=+‰ûÕ/b5‹_-"7™D±VTqÄpåIßZ×™kÑnn+{›Ì©¿x¢ðÆh›­ ¯Yö%~C¼ß†°ïÄâc0»\xãX¹8X%†ì· Ê ÀÈ"Îÿ/Q ¯Ÿ¢ó0A5CY#€€¬ä%‡¦É!k1”Ûº¼‘>Ų8–°æ,ë–ËYáñi]ʼ/¯,̽ƒqŸ’[- €ü0²°_‰Äy«B}³‚ M-ÚÚø°Ì|2ž£ÌN3FË1?®|åA'yÑŸ>ôŽ­F£tÎlý°²ò,ÔTöÒfÉr¦ùË&š£]*XÉšZ®Ž•„»®pÑß§þºd¥V©­ki!¯ÚŽ‘µô¥I!ÃQt¡m¥TªWö>ÀÊývs=†lª¦QÁ½“¤ÇœËÛŠÒÕ¤à?ÖL ÔÛÞ÷Æ÷½IGu½% ÷ÿ\>ºefð#G]#f{kÈe9s¼±Lï|çûƒÆ82ëªÁÍÊ—¸Ÿ0x¿[à>Û|¿u/RÓÝìI;´Õù•µ¼)^q}ÛØÚd 8±óªól—7±ŸýøÂ{|òŽÝ©fqËË|¥ìÚ›ïZȾ-‰Â×çºfaÖÏëUÓB8Ô#··^Ý•;ÜÙŒÜ3¡÷1¾ôLÙº¾žp w;î@fµÙ•¾T¦ë³iÉG>m-ÿ#ÞPÜ¥xxÕÙgwfùº¹Éw¹ ™²mÏÇ>ÿø£ðüðâ ÝåÉÔÙæ·,;µm˧'¯¼‘ €ø{'žô‹q|Ô ¯ÿwÉ“ÓåiqÛÉ{fø£¿½Vr¿¶Ý«þìú¬tëÓb°·'ßXMÃû³#ÏÒ)µÝ/þô V}ë³;gÙG»ó÷þý諽íÿèG?è3€&ð›'ùûEþ/±ùÑZ=–´è‡}¿€}¨¿È<ücÆx¾9z¿ñ{À¬¥Ì“´¨35!DÌ#Ì© ì7%4&|±õ»/)¬'*LŽÄÂvÒÂkqÂ.t§/,—0Ãs"ÃW1Ãÿ3ü¦4¤ .dÃkrà ZÃ8´¦9L™:´ÃgÂC´ÂÛC9$Â#ùC= ÄdêÃ",ļ;Ä_JDB„Aï»ÂFDÄAÔžì¿LÔÄMäÄNôÄOÜDK\Š|ʰR4ÅSDÅTTÅU1ã>·¢ÄX§H|,Y´Å-|¾[ÔEE¤EQÜE,̧_FåÈÅa4Ƈ)ÆcTƶêÅetÆTYÄg”F ‰Æi”Æ`´FeÄÆl4ÆmäFaôÆoÜÅpÇ[$Çr”ÅsDGJTÇu<ÄvtÇ=„ÇxŒÃy¤Ç3´Ç{ìÂ|ÔG)äÇ~ÂHÈ,¿‚4ÈäCÈ„$½…dÈ%sȇ¨ˆ”Hÿ~¢ÈŠÌÂdÄHÔÈ ÈŽôH‚É<È‘$I…4É“lÈ”TIˆdÉ–œÈ—„I‹”É™ÌÈj´É’ÄÉœDÉäÉ•ôÉŸtÉ ʘ$Ê¢¤É£DÊ›lÆ¥T‹tÊ ‚ʨ  ©¤Ê÷±Ê«ìž¬ÔÊìáÊ®¼ž¯Ëé˱tž²4K£ªÉ´´ ´dË)\Ë·¬Ê¸”K¬¤ËºÜÊ»ÄK¯&PôË¿ÌÀÌÁ$ÌÂÔP‚ÂÄTÌÅdÌÆtÌÇ„ÌÈ”ÌɤÌÊ´ÌËÄÌÌ¥½ÔI_äÌì¾Ï´¾ºM‘¬ÅÒ4JÏDÍã!MãÑÌ×<½>aEÍQ•Ù¤Mê°MÌÙÌÝé´Ü¤ÿSÍQ¬M}Ñ“à„FZäAƒ—›¼í‹Aç”D|Eã¤ålæô=W|NÞó@u›Næ±NÑÎ|)NâÏåÜMÝ O<;ÏëlOíŒNLÏÛYÏbJ¸S;’÷L »álÎQTŽ2üÏœò®}Ãù´úœ(óŠ3ììNŽ2Ðþ<ÎE\Q¨òœ €›+ENÞ|€»üЈ’« ÝN i‘ßóÃ섳Í? @ÐÚQЗb¥EsÐ%Q"hdŠL6IXnäÝ‹1Êx ŽHž¢–9N‡’‡\þ$`ˆJÚXdzh𤡓pÆI”°Ø"”0JYàŒXb_ƒIúèå‚b6x• lâ§#K’™`Ÿ‹‚)礔žEçASFùßx‚ Yè{d" £‚z¨Ÿ&Wj‚¢!©‘>ÿZ鬴þf™²È§”Yb’¾2Çà©? ⯠†ݧò}˜h˜%Nh¬¢µVK+¸x©A¼–f­[&~+î¸hm[P¦ºíy%¹j…Ëî»ðþFʼôÖ[¯¶öæK¯ºÆëï¿×ãÀXðÁüöð 7ÌŸG,ñÄxñæÔÅg¬ñÆwì±Sä},òÈ$—lòÉ(SrÊ,·ìòË0Ç\ÑÊ2×lóÍ8ç|1Í:÷ìóÏ@Í­`BmôÑH›ÌsÒL7íôÓ- õÔTWmµÅWg­õÖAKÍõ×`‡­4Ñ ùdöÙ4„öÚl«ÍöÛ6¹ ÷Üp/äµ@æŠ=ÞzÛÿ–7Ó~ëÍP•ç’mÐß‚…xÕŠkݸàvN`T-.öã—`ùјCŽTŸ^Ðæ`w^ºæŽ£îyB c*ºÚå¹7Rµa$yD¦/£²^íí.Ñíå®;ðCù~”ñ !¿‘òÕúДD:xÄë>öÑϬºCÂÏüøâ×I~ì1PøÍoÏ”ú+–ß}BÙƒLüÝןþðÕyþå#ûÌ@þu~·Šˆÿâ·¾¨(õ[`ï÷ºp;äò€§Áp€ßÁž÷¦”ƒq þ@H@º°…-ÜàzçÁ:I@ï4ÕAVI€>üÿ!¢Bù ц1<¢®h¾fP„(ä £äé®z‡Û_?HÂ.&Ñ?/´!÷2èÅ&’‘‹)ü^C¦¿BïwR £ Ë8G4VQƒc¢÷È=0ÂPvhìãïH:1êÐŽuÜcÇXÇ>‚ñ‘_„$ #Ǻ òí!ákdž~èÂF†qv¾ãä=9Éÿiñz,eÅØÃDú°vc$"µ÷ÀA"2mÄåU™®B‚r“^ e-©E`ÚÒ•Iäe%—i®JR”  æ'm)Giúñ†qf.Y¸Jh"šÊ ];Í/RS€ÇDe}IMsNœ²#9·(ÈyÞ‘™eÓb=ëÉÿG:z“œûô$e©M#rÓ¥£;ýHÈSj’‹ %% ¯)Ípî‚U§; :J…B’Ÿ¤ ±8ºØ9Ï•3œ¡hȺt@¦)1¹ÂT}2låJ©ØP“¦ôƒŒ¡<•Q¡N±§˜Ô•Qÿ¸TVR¨"ï¢j'J†Ž¤°6m'‘"NÍ«FëéðY9‘U‚[íÎ,¹&V¡µ•­#m&Ýâ&²·2Í®?ÃkÖ¬¨'¬^’ei5Š^9·V¨ Öj|ܥ؉1ÅÍu&r{¬O"+YœP¶²s»,fcBÉž,±ZýkÎw3ÒN´/ËžÔ»³À6å°ƒ­ÆdÛ2Úÿ¾6®Ö£ŸnSI¥XÊ’e¶ÝXpíÇZ™ W) ÅZVÈÜ\ÚÓ¢ÔKÙq[ØÏV×­×EYrWÛ¾ç:——[- 3Ƽ7®¯cå}i{×ÛºVOÛ:¨O:Áø:¯®¸Íân“ÙÒñ–2ˆ-]¦M/ò^µÆ÷»2%îyù«QEN3‘I/K Ý«¬°¾MÊ·[Á¼Å2£Þà-<Ì w×{žp‚o›bÉ!³Œ6±8-,ã×XÅ"MñŠ=²áü–´}s!,'üLÿ^qÀ¬|©¥Zó˜ÆS…i”‘K!?Q½÷…ï‚]Ì`¿³‰S®áÐtC'¦œœrÃR-7×ÿÊ;3€ûËdžöõªž²"ÿÉÀ6§ëÍ ÝeEûÉËò²·£ m'€¿9a 8¨q\$AÜÎ'¯ˆ¨}1B ½ç[>õ¢Pt§)êHDKŽÃ~EœoAz¾gâ8±™$¡1“Lé;z‘15u1O(h§Î¸¹éüo‰Í8U^+óÖµN3}£Yl/'{šÈu •mlMG×u©Î£uÚÛrfùÈ%®u99 a ’¹šž$£{í¿[ﺩ_ŸŸíD;¸¦œF÷>¡aòñsÚì†ñíPçÚryÜëÞ·®]wn{+\’£V(÷ ã{Ç»‹ÏVe½ÞåCŠ;¤(ýµ?¼Ð˜²úÓwÿÆvÁ{;@ºÜ¨‡Ž´“³Ic%wR¨Oµš¿mé‘7ÕË75ÌÞoâ|×í•7–UJçÚN9P®e^Ì«â9·.K.oë›×ì²¼¸%3·ÍŽuƒÓ´µ`ÇoÚ…ëõÔª¶í%#»~Í.]¸|í³µ»Î¦‹¹ÿ˜îÚÕ{ÝñN^ÁãŒïËóñr¿¾ÙÆ;þñ¼äévê¯îò˜ÏüŸ©·rÍ{þó‰«|¶AOúÒÃUåe7½êWï´Är—õ°}Ñ\oyÙÛþö‡}çqÏûÞŸŒö£÷½ð‡[ݧ^ûE°ˆµà>׸ÀÄþQ?w o¼«LþŽ7 >é{ŸåÔÿ»ÿû¼Käšo}òö÷×_üð/žÂæ6G—lô%/:Èš„3¯¥8söûÿ€ÆW}Ÿ“/‡”N!¦RQe€²ÖQÇI (UÝ¡/8Xx˜¸Øø ‚"øÛ|»Ç-&¡t(5d2UdËæH,ØO'i8F“wƒ8˜ƒ:è¤P‚(~Ÿc.AÆ`DÈl-(m‰6ƒI(qÿׄ3ãƒîgAžáaÙgmŒ4b ¸K¥…KÈ…Nø…]…œw|˜B…ÛVl·Âtjvsög„×tf.H~`8‡¬#†Wt‚çBxt¸‡_ÓƒVw‡dˆ‚|8ˆ±ç‡Ø6†X†„¸ˆªgˆ×ÿÖWx(%zȈ”Ø4ŽnˆyX‰œ˜y—˜r™˜ˆ‚؉¤9Ÿ89ˆ„ŠXЬ6§¨VQˆZ«ØŠ´è8vŠª8е¸‹Œs‹Š¥‰’È‹ÂøU¾‹‘x“hX#¸ŒÌØŒÎøŒÐ˜É¨4Ũ\Rh7ÓØz³ÜØÞøàŽâ8ŽäXŽæŽ~5{Õøzº‘–¨9;ò¸6éèVëX{íØˆšC)ð8þ8õØ5÷|u¨Ô‚"ýøþ@óŠ“‘Šï7‹ÇÓݧ}ç'îrÅq(ZÔr,Ô’ ) ™WyŒÝa9¦Їvñ‘Ï/ “ÉQ“69“ÿ"9’;X’>ã&ŒÈX‘Ûg}Y·C“õ“9Ù”LÙJÉ‘W±“<™ƒ>Ù3@ùƒ©‹´Ä†ñ´fr¶Ca£8Lù,Bbé*NÉ&Ñò&4¹–ÃB•UyƒW¹w')”)I”éq~ùM U–H •8‰!é–†I˜…Ù–‹Ù,kÙ–tY—’w—9“•±X’‰d˜¦o]Øic–I9&Ï’˜/IšIšÌ—„™˜%™’ y”yxy)Š›¸Fþæ|·¹o¬ö™ƒ “˜ˆù”¥9œNɘ6ÉšUᚯéx±y3– ‘ט¶iO[È€ÖÄ„‚‰š4‰œ9É!ÂÙ˜À—nÿIœl¢œË¹YÍ9v³™‹µ98÷%C6–Ás7&=Hy,Ò–Êb˜j¹ª¹ŸÎ’Myæyž••ž5óœ€H›Áx1-™üh 8ˆ Æµž[Ùž¶cd×3f9)*¡sE¡j¡ÑY¦çX š¢ñ(¢0£ ¸x¡ Zz(ª¢4j—î82.ú‹ :”'ú¡5ú£™u£uE¢²È• G è1B[DŠ™Kz4@¥“×zMŠ8™™¤Xú“U:…YÚ¥êø‡/Z¢Aè¥dj’`ª£ì£¤lÚ¦nú¦pj/¹¡¢U’£Æ¨—qñ¤auŽ|Ú§~ú§€¨‚ÊFsú“uº¥ØhRº¨;ÿAS…Š•‡z¦wº£{Ù£Œz©–Õ4£§}©‡¸ iÊ£2꣘Zª%™†Ã©‰‡¡ ˆ¦0*ªkÚ²Jš“¶Š¤zµjª=ªX¤ª‚å©èªb*‘Úf^GØ|Œw«#±«ÍJ«¹Ê«*á«j‘Eiá%¬˜H¬Eʪ´4Q5÷ …'³z®Ðú¬Ž'­ÔªÖúªØgÛ ®°ߪ¦ÇÚF@tÆÅ®æú誮ÿ °+«´Ñ¬;°0B°k® [° ;­íz”S0®J…A¸Ã­­:©¡Z© BåÆAUvDGohG°*«²Î:° ë¯ÏÊ®2»²µ:³ÿÿ:«+;±5Q=o´©zFƒ¿”fK'd󊯨ªðš§ûc^WȅϘl§°êÚ²9 ³ÒZ.K³Z{® ‹³«³$E÷å³öq4B'‡cŸ ²Ýê±I{¥LtSWr‘VŸ‰÷²X˰é*µ7+°ÌÚ²€›³Z+¸`ËYx‘B8·{ƒÎ¦sK¯‰´Åj¤áJ?‡ö—€V|} ­Tû·1û¹z«·º¤ ³…+ï:¹pDU}yo|–F””ª´g×rgëQµy·¹Ÿ+’ ë²W± ˲Xëµû»_{º©û­X€µnž »F[¯’{¯°š¯À††´¶tñD®áXÉÿk6_¾`»¼é(J.<Œk²9•kkK»Ã궪;½š‡¢ä‹«y+÷«³æ ¬EaEvjÖ˶y:§{Àý›Tšw±«•ó{½Ÿ7£<±qq©j¨ |™Vê¿]7Á…Ž¿ŠÁô+» ¿kZ¦Kq­•ɱG¦l çÁ2ìI{”l¯NŠÂµøq §,L½.œÃ:ÜŠƒZÄ <ÂüÂp;ÄLL2ÌŽ&ÚÄR,]ˆ*2ÚÃÈÁc‡Å¨Å SÅQ«FŒŽ^ܯcü,úY`<¦–Úxiü4Z§eü>kl¬¼¿q3Ç-꽡ÇÈUÇ”ëy,Yo¬ãÇIñÄøÿÆGj°ŽÜ6ˆ xÉËÈë‰V;¸gSÈïxÈT*©,ÄîÙ¾«Û^|¼»[+°fÃÉ4/RâÊÝ1€ôÂqœ”,X–L¿¡FB}átÊÿ›É8»É·Ü HÇÌÜ’#‘ÌŸó[SÌÒ“ËlcèäËÙÌö‰°™Œ6¬5²!ŽHΗ∙¹Ä-Œ1ÔüÖÜÌØŒd›F²T6x©œµ“EÍŸ¸Ïçü½¬´³\Á Í›§¤Ÿü¾ò«Ä¥¾ïy¹~ö{¬Êù¬4°ÐüŠörÌHŠÌyÊÃ"á«Ó|ÐñÊìP*lˆ¶¬ K¸<ÎÁÑÄÌ0ìÌÿÙƒ½Üƒ~¨Î@ÌÎ"ݶ$Í¥g÷Ir;L=6Þ|ÔôØÎ×›Óýœ‡€8mÎÒkЖøÎ3Ï·MƒfÏè©ÏCyÑRm¤6 Õ}Õ ÜJ}@V­Óg¨»,EuÜLËx¼³íL/ÇlÑwm/Fk×e~íq iMËk=ØéÆJ 1=Îa;¹Š=Î MÕwUØkÄF[3ÈåÒÈ¥×êÉU ÊPÌÆ£Êœ†Ý~!ýÙýÓ‰ÚÆ]-Èý¥ŠL¢«¤íÚž=Ù ½Èµ}¤ÛèõÛ=ݱªmŤ7™š‡ÜºÚ¡mÇSüÜLºÛ´íÜÐ]ݳEÙÖÝe‰ÝÚÝÝ;ÿÃÝÞÞ,Ý(iÖâ}ÞjMÞxÊÖèÝÞa¨Þ³ËÞî=ß¡Þô}ßOß%ÌÅüÝßþýßà>àhÕ3|àžàÕÊܼßþ>I¬Ù>áÄÀMáLLÂ5Œá^<~á^¦þÀ•M‘\âd:â/ŒÕýƒâ:¬â"úÚÙêâ­ãÅåbh+´ìëAcùS4N‰6î(Ô fN{WFh¾äLÞäNþämZاJäGþD1HO# ¾å\΃öÍQU½+ùãë7Ûåí“¶a^˜kæÿ‡æë-„Q÷¼;PT%ãpî9rß ¾çqþ倎ß}¾ß>ègÿ.èˆ>ß…þ¶‡¾èÒ×è$nÞ~Þ’®Ð•îà—.Ê™Î芮Ýé"þ阵QÑ¢ž¥›^Òwd«kuPûš­zžêË=ÒÍÈâtª—ëÓic´.£¤_ Øò]èÇ|¿ìúí脱ðˆU±†¶†”ãw>ëÉVÁŽCÎþÑÅþK“†K W„×^¿Ùn`ÃÎ횉qàUÕ6îÊÎàÓë §ë™+H&'Oâîî—·ê@xóØõ®î¤ÖºÖ®ïf ïiN:Ó–ËtĶîP%i/Èå>:Š=ñµÈï«Ý?‹ñs¨ñÆíñS òŒ,òMLò½ÁPîŒþñzgóhÿÜò`ˆòÔÉLCó_hóòŽyµ¬3:ï„<É>_ð“¼çC¯Ë¬êˆeô¸Sê]ÑLôM˜ô×¼ô0‚ê_åôU¤õí×ýõЬÅÍ‹VÏ¡ãê»>lʺ^<×ÙJÃ-·!öt¿â´<éœxö”~Qô~Òæw~ ÷ç2÷aöv/Î]ª÷:ÙBÑíAm‘\OÜŸ)÷±\øs/‹¡ÐH Ë›õž­ù ú‹¨ø–ÃøÐ~¶%¤ã¤ø•_û±ŒZålˆQmÎÂÿŸ§ršýÜßÛЇï}ÉŸcËü„6„¾öü­ý¿7û›oý_%—¨ý}Õ))üÏœLÿAêß ’"˜PáB† >„QâDŠ-Z4Ø2ü1ãÄÿLž<R!Ç•X¾tSfB–3i¶$XóâÅ;}þD˜0()¢B‹ðwùõíß÷óÏÔÛÒÇ/Àýì @D0·òŒŽ7õ„²Ã2pB /K¿óú[ˆ¾ò0ï-G$±DOD1E‹±E)ZpÃé:|ðEoÄ1Çc”ÎÁÿt2H!‡dz84­F"—d²I'w2²,$“SòI+¯ÄrÉ(ù›1ɳ3L1[Ü’³.©ürL5×dS¾2L/Í6礳ÎËÞ4ïLµä´s¬Âþ4PA%´PCÿ-´Â>íÄ=ÿDRtQóÚ£´RK/Å4SM7]-RIÛltÊ=!ýt,VD5UUWEÉÓRÕ UOYE{•¤SYÅ5W]g­µÏX}$µW¿t%¶Øy–Î_ã v"öt‹µgmì$c¯UQµ“´5‰Ûàš‹6Ù—}ô¡iÃ)°p!Z÷§h­Å6^oýçTzíݶ4W}jWÜûÈ¥‘χúõŠàÙ.{—^yî6ß{ëÍ÷[æ ö÷=€½l6"îjà &Ø^» ¶Õ^ù5ÔZ’íãÚ@Î馑;b8fˆ~øa‰W 9gšJV™cŠ+Öîb43f÷à¹<öØe¥Y;ºet—Nºå¼ÿ¦Vf†Ù›b›ÏŒši¼\îúkj®OèQÍ5°3ª¥;å§ÅöÚhÖv›m»‚×ꫳƷá›oŠ­nÀãæëg²3ÙƒÒ6nÇåú+ì™ÔFÙi¸&¼j½÷®9bYéóÇùûp‹5ì‘Y´)Úkr××Î.ùð„BDbaDD3ñ…J„bi%ªîˆRÄ¢k8Ŷê†Y£™§r]±-˜BÀøF-1ON´¡­L”F¹‘ÌgwüúÀB»®´‡uOýµÅçÈ€§¢# mB¹êá„xuüÊÏ"§1AŠ‹ù‘£ˆ¼—Èt-’|$ºHç®L²h•Ö%'Ç{m2-­ õ`I>Ú`/}³¡Záz¦H©™oZv,_(QÉ?7:*`„™÷¸ÅÉ`摑鋜)e7ˤÿÏ5·¤å$s¹´Ò ³Nª¬ÊZì…5“0S–<§C.çGv‚Íus“Çä¦Çg岞±ôæ¢Ày.΄OazšåìÐéÈXJs/¿Ôõ Ú8ç±Í ù|Õ> i³V}R¡žTçó¸ù8…~tk (ú¬)¼nB”MÍ$‰ÚÉg––ÐÙÊ ·òí¬–ò´\Êp Ó<š”QÅùy@DóiR¿‚R‰¨hbû“ˆ0•jR¦NÕª¾êûxU®Ž©ª]«W³ G.†Õ¬YúêYÕºÀ±Zñ‰k…k“ÒWºêh®uÅë‹îšW¾^h¯}l‚ö‰(ÂÖ°‡Elb»XÆ6Ö±ÿ…ld%;YÊV¶­e 5»YÎvÖ³Ÿ-Ãð&#²Ö´$­[O»Z!1èªemlK˜ZÌÅ‹²Å­‚h{Ì¥bjƒ¹®©RW[b°¢7íi º\‹H5¸$t­11ÖÛy¯¤'cîEŸkÖèUýóÞJ/"Mìnw­ÝÕªHÛ·z…÷•¸ôåN{ª6ìÙÑ£&Ãæs*»_þö׿ÿp€){YÞž0E%Q&ø ÓŽ:o”)~9jšÐVØÂÆðÂþÚÏöw º|™C™7Ó»ÙΚæà†=ãOì¼$½oyEºÑi¢8Åž®ÍEÑúñ²¡™{ð‹cšÚØ~*6ÿ‰ŒÓxvlz2YLsf_šŽØÈ¦CrI!ò*÷Ê ÄñÐ~Hš!ÊO•r´¬üe²!™ÍoÞ*zK‹I8×Ja>›Ží¼ç8ï6Çoås Çl¦*·‚F4 ÝWè+:щvó£ÙiI_™Ò•¶ñ¥1m^Moú¹ö4pAjÜŽšÔ±5õ<3ZŠ9÷ÔXípGýr¼Í ‹«_mW< U¸Ë®­•ë]³×ù#öAÕÇQ(3¿Ž)Ëli2]ÛE©¦ ´ :ë ¹r%&èð,'JkßïØ,¥FÃm½Ã8ÜðtÍ=Ë}Òsou¼]÷5É nuÃxó¦w¬ÿýgZlßð~§'Ot¢¿êyx~.X™;º¸œ‚zÔ¥>uªWÝêWÇzÖµTCché ºqm>v²ÇŒÕ L:x¾>®¦¼+,{ÜåN¬”˜ë³&Î'p÷Íy•Ô{à+¡ÞàÐTyôž™°Þñ/³‡ /fE:çk'Pã³6¢[y‹œßó±Ä1¿­ªÃì×ç!¿+É£ÝË×öm_­¶—(7{Q¯ÿ°Ñ—U½ß<ðs_ÝácKø6/¼ëWÝËóE¹¦ÔfwöàC¦Úð|#½ÃŠ¿ýߣˆ÷¸2nïßýÇO§RMœÈhRÎmo×®¡Ã<ûø^DØZß+ð¢(Q¯IÎÓ¬óà'Ðû¿VŸÍc1ú¾·è›Ð3Àöú?l/Ð Ÿò ‰”#£ˆP¿ƒ)y£›é™>Ñ<ìó=Ì=Ïëì#AÞÑšì{ ä=nÁ#'ÞÁ=Ü¿Àë(“®ëx=†“Ž£–Ÿ‰?üÁ¼Á,‘ð«ÁÓÓ>ÿÓä¿ >þ§ÐkÁ&\BlÀ¹ãšãÁåë7ws?ú@¯«>:»¿ï‹Áÿê=%ô›+”ÂýƒBlÂ)¤Ã#´A,|C„¼äCºœœ4{>Ú¥xÛ1ê›?ô뺿KÃ(´C$ÁþCBäÃ8¤ÃK„ÄÔ¾9$½ÜCÅSL5Ê_{7~ë-PRQõÁjãÒaÔökÔUs©;“ Td×ÇPEVý¤mšÒ2¤? ÂÒ=Š%½½^Õžb¶i[ÕmÕ1¨@ ©ÈWW…!;í£ã™3ûT -P ͹RP{åÇä”hXäPÖLµVÆÀø8\ Õ%××.”‡d q•Õ‰…Ñ|Ò Z×ÝØ MY£‘3I W…—’U “õ+„5ÑŒ½Æ•,š ›UQœÕ+ž;¢Yh5Y}eNBÚk3ÚÌ{ZñYûÏ鉥=úÄZCÑÚ­eZ¤­ÙªN½[è$Û²MȳEÛ­[ö´ªït[òtϸ5Éò¤[õ4Ø»"¸Õ[ٜ۾ #¾\¥ê ¯5ÜÃEÜÄU\æ\ÛÆuÜÇ…ÜÈ•ÜÉ¥\Õ;analog-ce-6.0.17/how-to/iis/IISConfig3.gif000066400000000000000000000233001406366436600177740ustar00rootroot00000000000000GIF89aÍÅ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,ÍÅÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱcFþ‰I²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳçMR ÿyJ´¨Ñ£H“*]Ê´éP !˜JµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û²  }K·®Ý»xóêÝË·¯_·qƒJýK¸°áÈ+^|ö%€©£2žL¹²å˘3Ê(d¹ƒ5‹u$[‘¤S«>ÝÐ3Ès7ÿ›ŠZ¶íÛ¨këž]µdÙÚ`ÓæÝUøWßu/Nܬòæ^—S5.}µu¿œ9p»@×°ïÿŽ›wnóè{Cßkzøú¬Õ·Ž§?ú{±ÏO o½ÿßìÚqçÝw½yå%hÛ|û­Gy³·Û„Ð=ø lÏG!„êA¡{èñwanF"qº"‡ÓhÚ† šX^~úg#_8 Ÿ ÖbŒ?ž¤Œêµ'á‹é ùãm´•Ȥ‡5&˜¢”HB dŒJ^™eG6h¥–2 ¹%‚KÞhæ]9Xx‚˜"J-št•or6xd‘üm† …&ÎW☒y'–U Ú'’Ô¥w%—D*f˜‡FIæ™”º•ãv;Ö£d*bg§ž†ZZ£“ºødu¹!e¶Êä c²ÿ è” ’ºg£±ž4#ŠÞW鯿4àŽlú¸d¢“*Ÿ­È~ùdosªÚ\–ÍJúj’ØZ%«­­Öú,•CF{k”Õk®sÝq'ЀÅr:.£Ú*Š'¯…– #rMÆë¦“Ò™ª¾qžHï–…ú[­©O¸«¢]𹓕æAíÆ1iõ]¬ñÆôµV`x‹–qÈ$—<Ö?¤¤¬òÊ+ܦÉ0Ç,ó™˜ÖlsÍ›Z<óÎ<÷L)È>-ôТ…çÔÑH'­ôÒL7í´S =-õÔTWmõÕXSuÖ\wíõ×`‡]ÑÖb—möÙh§}4Ùj·íöÛpÇmÛr×m÷ÝxKMwÞ|÷ÿí÷ßí øà„n¸à†'®øâo#ÎøãG޵ã!ùd¹K]®ùæ&eÎùç6yúè*‰NúK 9>ñÙÜ­þxëŠÃî·ìU«K±`¹n6Pº3Îûâ¿ÿ¼ÕP!„xïb/ù@ÊÞ|ÞÏëmûš¸„|ØÑGž½ð\ßx÷“OOÐñ ÕÜõöéf*þP˜b´¾ÇÈÛ. ù:KwÂJô¾Dè§¿¿û÷óHÿÖ•)‡üÏc !ßBÔu@4pnà[ þ&ò@ƒ0ð#ü‹ Bä—¿‚pp‚ëê D*Ø &䃤`RxA¦ïvQÉ]ùD˜2Ï„AáUÈ(~4Ÿÿ‡¨¿Àáð >ôa‘¤½‚1´Þ AØ> íÛQAb?ÂoŠKäâüØEyñŠ –‡…E.ª ib…Ä:Z1}þ»£šö˜º#ZðaœŸ³8=!Šq‚,!-ØÅ Ž}L`õ ²È0bñ’!D£3yEM*ŒÚÉäCéÈQnŽz ¥(WIÊU¢Òx~ô Íh8Êúr–ªÌ%+7ÙJU6PŽ"<¥/1‰ÊûyÒ•µ„åõª˜Kaв”É„",£HIP‘—¦&)ÍM]Æ1–v<%7=˜Ícr–…$¦6 Î9ÒR—ûû .ÇÉÉ,¦ñ›•¤b6›¹ÿÎwš“—`Ñ©Î[2sšÓt]>¯éMhv’œ¬ô¦2­‰LZ2ÔœMg0‡‰Ñ‰JÐ&H5ÚË’ÖòÀÔ§%ù‰Q:jÓ¤(mç9C*L’–P’Ô,H%[XRqö³›ÎdçNչ˗”¤%fMÓõÅž"}*K1ÙÓ~öq¡¾\êT_*ÑZŸ`Lª>É„&$~5c*½ÔAN0‘W-ßAJÆnñž©T«^ÙjՀʞþ|'H÷ºÅÂ^3¦Ëd&_ùøÈ¯Úr¥j%cS¨>6ªT±„¡Ye7Ö)~õÞÝ<ë6Ò®m üžh‹’Y֒дuƒmÚdëBÔÿNR§§ãÜ—G½ÕÆö¯®m›Óø6k ¡-÷Ž7åîN¸H{"õŠK]´ñ.·—3v±«Ýí‚®»Þ oI"91æ†Ïm´ë[zï¶ÞÅýoo潚tÏæÜçÆ{ÐõÛ|oHÝÕÆ‰'Ô¢K›ß¶Õl–Û~ ÔßæÀìEœ¼«-Á^ÃppqZÞˆðô} ~ð„IÀ§‘—)¬Ú‰!9Gú”¯JtÈŠñJÁ¹*Âðõ°J#›V:ÚO‰©DuÜ‘GõÈL›1O%Ñ!cÓˆ¢ÕaE–ìààø¶ñí‡ËyOÅ5"A¶ã”]) yjJ𒟼¾'gÄÿÈC."AùfâvXÇn¬ëbãüÐÇB$Ì#Ål" ‹H/>Îek¢ÅxH·®±®.³Hš?›¶òdžn­$£LL?ZÈl, ýJœnV§EÌs—çÜç3¸!ò¤ª›ÙËRoú!ó$ªC!ËÉ¢R¬d±]],K6Òº­2.s®+Jé‘~y×ÌN6‡¥(g&7{ŸÇsc]Ï=Ó“¬‘æt±+ÖcÒÓ¤~ž,¿ÜÕ3«ú±¿Žk°ßªëtKXœöh½xêÌñ°¡?6¤]ó*mXë»Éå¦jœ=jpwCÙ”î&’o=ïÛá•æ*“ÕíÔg[2Äô~¥F¡í×iWsà ÿøV¡]ë‰OÒ4ý*Ä·ZÕx3|ŠGwCÉ™íŽ;åçè`Yq.šß0¼ó÷p-hH7ó®‘eê¡a^ì‡[ÖÜùΪӓ-î¨g㺶,9žbS^=/þ:a‡ÍЩ›Õ(§ˆ«ŸbáÙÖ½lÆš ¯Üà¸ÿ;Éw§oàñ{_®iÚÔI§öÒ žðú½|å_ÞwÕŠ÷ó ½èGOz™¬/ǼM½êW_çÄŸœõ°½ì:]¥Ïþö¸Wý~QŸûÞûÞw§ÇruOüâ6ø7¾ò—ß\äÛžùоã]wé[ÿú\Û½ðãû_¨2Òæg^8ÿ„Ý\vì›ÁÎW|µ½ÏêÁŠX°Þ·áÜÏOÿáRŸòrßqø£z@—v\þõ€–~¯÷opá×h=–GQ×Ho´VØ€ó'€hÚ—|ÆÃ2¤°cbpDwp5×jB—LZµMK¤(˜‚*¸‚,Ø‚.ø‚0ƒ28ƒ4Xƒ6xƒ8˜ƒ1¸:ø|Ó9—DWÞ&bø¦>åtnZ5kùVtKTzNø„P…9A 87lØeXu+µ€V”h!·NÖjb7yˆ‡TÿH{œ×‡kRxX‰³÷ˆšU{êg<”h‰ž¸z˜(MšX€œø‰¦(}¡8]|¸‰?xŠ®¸|©Èy«HŠ­øŠ¶ø{±È_³x…¥x‹¾ˆ{¹øj£È‹µø‹Æ{Á»ˆXxŒÎŠ{8ŒÌØ‹ÏXÚ‘ÈŠ~hÜø8ÉØƒÚ8‰Ä§ƒäXŽæxŽè˜Ž;¨_ØÈ_’8>x873ôXöxø˜ú¸üØþø¹Ã×\íÈ`ïÈ<ñè<Ý#… Ù–3UFCŒÛˆ‹ 陑5‘#‘¼×Œ©‘"9’˜“YóV8ÅHY‡‡kåw’I’29“"Á‘¥å‘Ûÿ·†Ljy1I“@©‘6i`8‰+Y~<¹0”L)”&99Eyßá=(„Yc„fˆbwc?Ù”^ù„CyaQŽðXqAÇ„hÉR¶]]ù•n)za9[cI‹IQ~¶…vÈ„â××õ–~ —O)_sI‘ât¶&ryIsIYgÙ˜ —Ö5˜*Y—NµetX‚˜ÉONÓ—ŽÙ™¹™ô%™j˜:TÙckt•ݦTÈ•žÙš§š»#šY¦“G³˜Ã嚸ù9°‰w²É‘ÉXciÕ“ö•›ÄùI<½‰<¿{œYœÎ‰»™<ÉI›¾×œÏy3Ø3¤9Žm‰àÙÚÿ‰`ÜGÇ©_Ýè4çI5(™†³Ù¿žòIì‰îH–™žúé<å ’ûùŸ}ÓžË8šæ   =ýI½§Ž Ú ú Ê2ò•Ó# ÒH þ¹ ¹¡Ú¡ú¡ ¢úHMëÉ—š G Œ¶y 34¡’W–™˜tY˜Õ¹¢ÿÙdS¢µE£ªx¡ïY É¢¡œ“¤£K!]*£„ £5Êꛫõˆž Tè©*ã§Éʪªêªbú¦\ùªOzªÐꨴ ¥SšªÔ«ÙŠ­ÒZ«¶š259‘y¬Ù±2(3­ÌÊ­¶Úª³:¬'š§äŠ¡ ª“·z®Q‘ª"q¬•c®éº¯Wš®˜®ãÙzlZªjʨßz°*S­Þš°Ù «ÓJ|Æ*®çZ¤ ”¯Sº¯(ذ¬*°ý°"˱¾Ê©Â¨©ôš¢ú§#£Äê±;•ÄŠ®lÿê§¹­ Û°ë°¦ú³>»­?k§û¨³—#ª©®ƒ‰1‹§Šª¬âš´æj\Ê´ðú«º¬Ê9¬~ʃ6kµ`Ûµ$á³›Iª Ú­kš¶‡:´Ýš°¥ú¶{­½—&H‹±˜¬‚ê´3;°¶ðHV{²”z©¸º©ƒk¯ƒZ9 +³~Ë´û¸eÛ¶ØJ´< ´cªª­úª [´ÌÚ¬r›{‘º² ¨y[ºkº3+¨Ž»º2+¸˜J¸zú¥‡Û©ƒj¬P[³Që±!‹¹ÊFk¢ÐšdZC±7%§”‰»®©‹»ùº»èJ«¿‹¤(J™ Á«“#Öû²Š+Ù¡½•c\Öÿ xm 5• fXZ¼›Š½Yæ½ú²Ý»¾Ý;®ÛCáÛ¥IZ¸¢‹µ Ô¹À'¤º9G·*=ú«ŒZKê¿æ‚vë@¹(kÀ*ÀÔ«¢ f+¹!<¤*6²$먵Kº»\pJsÉ|ɼЩ©˜º’\¬:ª‹Œ°E¡ÌþÙµjŒÒ,ˈ—4Ø|¤Ì̵‡ÛÍÑ µÏʪ¿,¾”|¶CÎG‹Ü|®èŒ¹ê|§HÏ+4ÎFÏk2¦ç Ð|‹¨˽çÕÎë|ú<7©Ü¹Ü,Ð#û§I›¥®Ì7YÌÉ[ÛÏå<^9¶»Ðß´¶ÖL [kªËóìÑŒ«ÍÈ Îš ¬ÜÉ2æÏ&ÿŒ´+-Éݬ‹l%M½MëÓ7ÝÌ€†=]©üܧ”JÐõúѼüÈh–Ÿ‰ÊÒ¿ÊÔ-Ï/µ1ÑHí®ûiÒ°ËëÎìùÇQÔ:­»§ËÊ8Ý®aÐCÍÈW²†,ÓŒ[ãªPÖs×jhÖr}4|í½Š ¾€]^z=›Ìq-Ás­Õ©£ÞHÖuwj]oÍÓ‰}Â[¼Ö\щÌÙxsѱ̲~ìÔØ¯lÆ¡]Á] ÙÕ»Ú¤ýÙG]MÃ×ì9Û—Ç<DZ7z*z·MÄŒÍÄ­7±=ÜÆdÅ}Üʽ6ɽÜέ “ðùÜԽϰ,Ý@ZÝÚMÙͽÝÞÿýfÝýÝâ­5á=Þæ½Õ…¬Å2ÊUÜÞîýÞðßò=ßômÅ×m””ÄÂú½ßü-ž¨Ýçà;: ¹-à^d¸Æ¾à!Mà Îà¾É©á®5 ^x%æ@΢˜½ÞÿÇ>î¿^àG¬â8âÚÙfÆjÂwuš(þŠ*®œŽMŽäâuˆL9^Qõýã@äB>ä :ÎÝnv¸MY÷qn¨KýýäP®9ÑßìzÉf¥˜d8ãç7åR©ÙO%‡n8‡c~‡\}^¾§`^ˆ¨YTk§šØvâg.9iîÁk>çÞ]ç<|çx®ÝzžÙÍÜçÇýçè‚>Ü„ÿNâ†~èLœètÍèÛíèÁ é~^Þ”®Ü’ŽÀ26Ê— ™>Ýž\3üÛéûùéÙ]B1¹cfMìGêÀhé½5^«Ô@rë &ë74ª^“iÂê{ér¹®ëyß_Ϋ×U3À½viŠöìMgì Êë?ôÌnР–i—ÆäXìÔN”È®æÊ~‘¿®íá„?¥uCî]lí×>¶µNoÏ´îˆiæîîð~³Ú;ï*÷nõíù~‰ûþ½à`VI‰8ðP\ððKÛÏ[¦>ÍA_‰ïÍÁ/Ú/âOçD~Žÿ‹¯Ú~<Æ,Æ'ï‹)ŸÆÈÿî~=ã1È3Ï7/‹7¯Û9Ÿ7;o‹=ßÇ<ê„SÙPC1½ô'móŸ2¢žÐvƒôGjô¥Ü³UÚÈRòûîÅ$¡êÂÙ}Ö”áÐMó‡67q ´.cnŒCÏç³.ï¹n¯nöXýÔfêËjÇ‹ÎóðnÍ®”'´nvß×&†özoÍ_ÍôÛøíúø÷¬Ójê¬4þ÷ßY\éDHÒÞðî¶•t'_ˆõ{o¦ Ñ]Í»O[²·Ü·¦ï»»õøö厘ÏsÞntH¾OGAõ.úB«ø4º¼´¬ºµlÃËÚ½1¶Ú¥AÿÛ>é›vµÿu_ˆ×6t+TøáûÿM¯„zÓÄO³%ñýá_þŽ+ô]ߕԕù·¿s8þ†»¯ý©Ã¨ªÌøÞï±¨ë·æoºy;µæO°AêÀ@‚ D˜PáB† >„ñ!© I@xñ@ŃR„(pã?’=Ĉò@J–+]¾t™&A™0kJŒ¨çNžEò<9ÔІ üÒhRŽ }ZQ S¢L…JEÚSëV®]½Z êó¦PŒa‹2Tú°$Áµ¼}s`Ë–+ãÎ…ëÖ`Þ™_ êô¸«Y’ ›d{öìa“m+rdl¸±`Ê•-sMkðß²Íjþ¼°pèË¥%n6Ú³jÖ­]¿n˜™sÿÆÎc“ W÷XØ=Q÷.øpâÅC~þm´¶Aá²?w˜ºWáÓ­_wíœ,mÅ›WÇnügxêäÍŸW­]9w·ѓ_þ|úõíßÇŸ¿í{þý·ªON£öÐÏ?D0A}BŽ7W#pA '¤°Âðtp9ïܳ°C?Q0 Ùƒð£CD1E-ñ m‹pEg¤‘Â5Ó0±kä±G/lDMü±H#|íÆÙ$IžŽ‚2J)§¤²J+¯ÄòÊär)‹2ìNÇ&»Ìi73ÏD3M5×d³Í¼¶$óH%Å ±ãŒýöä³O?ƒÏçÜŽI…ÿÔÔE=ÿd´QGëLOB×3¬Hc[ÔQM7ÅÒK»œôEæ8tH·ÒxSh·¹ÒË”SW°XIšõ1ÕPýÔ¼Ps´sL†jÂU«`­,Ø‹^E¶¾Lõ\öŸfmMmØ\¯ÛÒï’–«lÚ'c[M6\ge—ÖrËõT°n§/HE­%•X·îˆ^»hºË.–êÅ‹.Þ€Õ÷Þ~ñ­+&~7ás™%÷Ù:óå+à &x_vÏ«¶ÒŒÀK¦zý]Õc›^:˜â¾f:˜.šFù[…Öma™¡]Y®WnYå›O¾ºŒK<”c½v¶Ùà¼nÒ¹èŽUªëã£q†úPpÿ_N–asËcS‘ŽZéU{&ïç!ƒÆvh¯[Þ+í³kV)ꤿ^[jª¶z\¬*n¸Kæ›m°­{Ô;m¢û6q¿õNùp–ñâY¬¹‘m¶rriþZqÇ ·yÝ¿ÓsGx'¾t‰§1ð IçÉL—o>ûç¡¿Þx:5v1P.±Ïžùí¹WQz1ÉV~êò©>}Õï•ýÏÉîøå‘þóÍÕxP$>þIÈ×"^þÞWÀ0^ „`[ã@êIЂô }…AÿvP+´ŸE8‰x¯PÈÛ U¸Âä½ë]à e(C¶ð#Zša§UÃb*MûÓa}ÄÃðå©>k›ª„—º|í­+…ë‰Â5 ñbDŒ!¦æ£'$úmi^L¢W&,o©-UVdÿRü9‹‹Yk[ëPÇ¢m¥od”ψƚR(,¢—u».ºÎŒsÄ×¼Tׯ¥¡-x¦Ó#Î)<Ø©Îs|¢E5½ ~Én\Ôäx2`™ %zÔ"g÷¸•Rv}Qê0ù)52Ȉ»”ÙT Fn¡lk[“äÈ:G2S~1ŽL|œª‚7ËDÕò*Fåh ¹KCâÿ͉t&#uÖ8]’²k±4ã%™=Mòêl|V.9F:âê‘ßÌ&×îÈJv²-•ü’å8åL/i‘>Ó¬g5u™:‚1›øôâ++V0dÓw¦Ôgœø @Ÿ0„€¦gD5HІktH~¢e½)nÔ¤¾)çè:yR–Ê)¥µeKeФ‰^t¦75àK™Eœö”œ_’àVêS¢~¨¦EEêüt:6&Õ©6ZªPCøTª*è¨UÅj‚®šU®ög¢YkXÅ:V²–Õ¬gEkZÕºV¶¶Õ­o…k\£ÊI…(ЮwÅk^õºW¾& ¨/ÜiWë¡™Ó¦ƒE¬®ÀÓÄ6Aÿ…UépèXÊZ²Œ ‰š€XYÎf6¨tý ûJ’5ˆÊkq‡ÜIF;kÁËö4î{c7K…ZÚ®¶§­eªo¦FH8æ±¶§µ-Nq+U‹€µn±šfÈ&éÐßÉ’ôzÚÇ*梸V׺×Ånvµ»]¸Îu}`Áϱn7+Q¾RžP[&,áéȤ¥¯ï…o|å+®­Ê —£•í#Ÿv³Q¢’•rÉgpåW_OFSØü/8­yÌÇ-ris¹ŸV–Žä¥=|OØ»õkê„ÿIÚÓÕì—¬‹˜6zºèš8ž߇ϋš'’{„±òdŒ@Ñtꔣ¼‹›¨HÕæØI6ÿr’O³ã*ÙÉ%ü«G]ûÌ'WÊÜln9je.‡x;Y&n»!¡S ä-Ò¥>õpä>OˆÊ‡Óôâ¹<²Û.ÕÅ>öFýïça^hn2HñÔGd‡{Ü;Õœ³£9Ãë^»ÜÎsÑgQµŠÙhî»)ÑRø\}Âeݶx¹kÊìñ M@«G®Ogï’;||Ž{øV¾ï‡•à[ûxÞO¦7úã—ÞË`¦:v£N™B=ëŸË“…Âél˜²BÿøÝž÷òñ<êA÷³œ Ý ‰{úÂu{{Ã_M÷š¿ÚßsǬAnwŒÏ¼AÙyìk\»õ~4¿Ÿ~¸+f”Xì/¬l•8æl7Mí•C}ßo_Y€·>™ñ?Ë @Îþì¼YaÜ <ü;ß³¹ëŽƒ?€“¿Z¶’A0Lѻ裲¨Ë=ÅË=¿[¼¾K¼´›˜aÀŒÀþ+¿ñ#?Ñ À,”À ‹ D;çr¢å›µh›½{ó:Ì¢(h²>,@à+ÁdÁÍ;?Ã{B”Á$Á)´tÂäÀÕ[°c‚®×ëÁK6©éÀ!L·"ô'þû<ÿÅ‹A¼BÌB)¬>4@ÑÛ¼9A,@-D‹ºÃ8Mëç{ýÃÜ?ðƒA4Aÿ[Dïë¾TÀõÛÌ»ÂI ?TÄÄÄö£;Ès6 û-V)C,“2 S·ék¼F¾TLºNäB«Â¿Ò ÄUdEݱÄZT Õ )¦‹Å˘E\F±3Š,ñC{¬^´,<Å'¡Å`tÆ»¢9O4 d¬ BÔ¸¬ ©“{+j¤"È‚´¢ƒDÈ RÈ…Ì¡†tHòFm¤ÈÿŠ´È‹ÄÈŒÔÈî2CSÇÉÉŽ\Lj´ÅJ7“¤¬á²;•<ÉÏúC—ì,–ŒI™¬,š4F›ä,œÜ,Ì*žÔ:Ÿ.”4E¡ì* 4Ê—<³šLJÁBʦ¼I¢,I¨üI©lIªäª§ÄÊÄÒÊ­¬®ôÊ£´J¦ K§˲γDKªR˵4˱ÌI·Lª¶”Ë¢¢Ëºô©»ÄË¡„ɸÜËÛ‚ËžüKÒËÁ¤ÇÀ JÃ|HÄTL¤*ÌÆÔGƄ̼”ÌÉäË¥ôKˌ̾LÍLÈÊôÌÃäÌÄ MÊDÍÔTÍÕdÍÖ¼ÈÀ4ÇØ”ÍÙ¤ÍÚ´ÍÛÄÍÜÔÍÝäÍÀ,Íÿ·ìÌß¼ÇbN¾$Íâ"DNÀ ÎåÔ'å, Þ´ÍŽHE÷ªNêl<ß„ fŒ¯!kNŸq/^,JŒÑNâ"X ÏiOÅZϰ)Ïè@œ»ð¾™ýJÿ=½¹Éñ%ѧWÿù<ûç諺gí¾ugÜô×ǧϿ|ûùõ™—ŸyþÁ7_v&ÖvÞuWœb©iöýX…÷]ø†ðQ¸_†ñmb…û}Hàˆ(bzº©H¢‚0Æè™A>^c²W"JöÈã†Ðu(¢†Dúxa뵸âŠç)É$‹úÉ(¥” W£qæ8àŽ¹¤rG–èå‹ )&mN¦¨¥“/‚iÝ”p޶]wb)^ŽfŠ9æˆAž)d‘dª˜'yòYø%Ÿ\ö™Ü›q6:pßygc„wÚwd’M^ ¦Qâà¦ejÚi—äý§Ÿ¥nr%£Ž¶úƒÙÿ‰ã”hv©«®ÙêꮼºÖ¬«Åøé›’…k¯ÈÒJʲÌ6Û,„Ç%+í´Ôêe嵨^{c°Õvëí·yE î¸ä–{ÖqM¥«îºì¶ëî»ð^æW¼ôÖkï½øæ»®fúöëᅵ/¿lðÁ'Á 7ìðÃßËpÄWlñÅMŒñÆwì±Æ‡,òȃ,O(§ìÉ,·Œ”ɰº\P¤2×lóÂóóÍ}©ìóÏ)ñ,4È;ßü”ÐÑŒ4ËD/MÐÑN?­tÔçLPÑ×)¶CM­ÔT3öÈM´uב×òŽý Û"—M#Rj Ä6DwM3×åÿ½uÖ å-5Ü!Ë=sÒtJj7ÂYiwÚ3Þ¸ã‹O.éäßÕ8ØÜ-$øÜ!A>\ßqNøÅ†‹Ny抋ĺҮ§ x㣿^ûãÛÞyAœû-‘ï£Ñç¼z© ¿;ׯg¹ãu¯{îÎãîúì±î úõ•?îàìßSŽ»÷˜Wþ¼åÄ•¿xñÇsœüøËî½üÓï®úíóߟ»Ùõ.>í´#_þö7À¿­n|±+`üHÀH™®}{Ÿý§@ÝÕvœ ˜À¤wfã`õ*8Bû™Ðzø£ôPÈ7¥=‚“`ƒ&HÁåÕ°„'¤!æÎ—Aõ)Ž}¢›ÿåÇÀfPy(¬ ýÄ·ÁÐb2Ô—ñ(Â%°ˆLaô’ˆE *Ñ„/|¢Â¢˜¯)NÄ\`m(¹áˆ/‡ Š1‚VHÑlÆ€™"}¼£ÁÈ(³@þë1¤ FH—)²f\¤¿Ù²H:‘’´%™ yò“  ¥(G™“©m2“¨L%Îú—Ç“©ò•°¼ÈOËZÆr–­„Š-wÉKVú2f{ì¥0S‰K]êl˜È´e1™Ìf¾r™ ¦3§y:hDšÔÌfجyLmz³}ܼÚ7ÇI¸pꑜèܦ)s‰Ítº3në4¦8‡×ć`²…¿\B€÷ÿN1šÓ•ÃcÝï,‚Iå4‡ý<Þ?åI‘ïMä 5!DêÏx2“žWLãá>ÍIt†%"×çC}Rœ¦Cœµ,üeTõœ]ª@7®1ÌiqXÊÓžúô§@ ªP‡JÔ¢õ¨HMªR—JŠvŠ}½ J¤ÇÆôío‹2]þhRØP§%¥XÇJֲꤩ‰Lé5Wº³çÁïª ¢NEŠS&Öó„ÔâIæÔ…¶­ü[Ÿ‹Ä¬Ò¦}k»ˆÄ½2­¯jí¦T“&W‡¾µ…éV­§¹©i´{æs,$!ûK•þÊ©t-Eû«ÈÎs²í2©jÝÉÚ¶ÿ}l­nÕUÛÓ¸öœ§Ý­pBÚÛ2 °®r‹Ò[½•v­Á]®tAÒÜ„ø5·ÓÍ.Fª›½çJö4¨Õ®xyW\¨š6¹ãM/v[ëÝׂW½ð.{Õ÷Æ÷¾±*ïàêûµð~YøM(w}IßóÚW–@±RKœÎ·ÀÐE/ƒc V±žc°?õ»9ÜÊ·"@™j̶Ȉj¸’~­ëßâ©ä¸$Îð‰!è`;î×Àý•e'ƒ«ºÝôr œñØj<87Ç 1i„Ï/ÖUÈCN1ºŽÌb¿¸Çúc¬¡¼M)S’Èòñ…ƒ ÖÍr™j`v¢y#|`Ÿ¬ÿ$ÈmâKÑÇÙ3w9­í®„)B’«µµ²n}²‰íŒ:/{xÏ1‰RM芥ù©7f3’™’-zŽÑ¦Ø£¯ûáLKwÓ¿ó¤=ýiC÷Ôýk1©ikêçwÕÓužE]eX/WÖFvï¨m½[\¯™Ê¯Î€yÝK_GØ©ÎȲ®µ`b×ÒØ>õ_U-µ“ÄÂL¶t ½4h«ǵN²µá<âÆŠ”ÛCk5¸ƒ bkS¸ÏX6·¼Ñ]HuK:ܾ¶•à­UÎo£ôF1žs­ç6ŸqÇ×â÷a;€œdÞž²®ñ}ð’¼[(ñFà Ÿüp¯4Ô¨þ µ;,æ~ÏyËÿìÀ=qv»y$p>ubmg¹”{|¾,/ø®ù¼>‡°³ǰÍ?fod‹|#ŠÜÐonÛœÓÚå‹®tH0½tF½åÉ®ú;#þå‘kýÙW×9Å¿þM®Úàd÷¦Ù¥½Þ´—=ìOϺÛß¾òccýès§ûÇgròn¤Yy§1Üûþ4¯ï”Ù¤|5?íí^üؾë¼cªxä1¾íù> Œ÷ÙíU¾d—ït鯭èŒ'VÆ“ÿüÀBh@’žÜZyH+tÕ×kí®–{æK.Wª*Ñ‹¶ïî×­ûŠ/yn ·iúœw6‡ÿö¬GûèyÏp,RøÏÇ×ðï õ3¾ÙçX3¨ÿ^‡øÃìK,ú;ŸˆÏߺËÎûæ?Ý£{¼g$éé¢zü3†þ±Ó­Òo„7ú·ÊÖÝG€Ïd€Å‡€ 8߯} ȀĤ€ö' ¸wwhè€'vÈ‹´}FçwÂÖl"¨rèt„·9†ç (˜‚…C&(nãy”‡7çFƒ¼eƒ…çxÔWXp胉„.heÇ';nT„—…„íB‚wwƒ»§y=æV Å=@–8Î'…Ì¥„ÅáuJ6„p5gyÕ:(†/#†nA†¯§p‘ƒre–E_ȆÔå†f]¯'sI”U'w‡xÈØuÛõ}–Qn0åd.u„ƒÿ„+hw ±~0GY€vDu舸„‘HÄ·ù׉mXˆg—~G€¥m¦HˆŸø€%‰¯¸x¨Èv¢W‹w‹¨V¨‹Qv‹õ÷‹Àˆfzø‚Ÿ1T8‰¢˜ŒÝvŒÎŒ¼hˆ'˜xÑØ0Ëè‹´˜d13x“-8†Ž—ƒ4f^cD=ˆ‰·c<œ˜vâØxLXzèÈŽíwqŽžˆs’¨ûx…ô¸pýÆy¨—úø†ÂŠÄˆ3WfrtUË÷ÿóFVåCO¨B)ñˆyÓׄ⧆É?7W,DX"9ñŽô¶‘¹èz ¹p4G{;D’'É7Â#P6ÿ©‘Ð8°çv(“Q?yu7ä‡P:™ØŒ ƒˆO§619D#i’Cù‘!yDÈ’­–h‰BdYgX’#ZT•‘ ¹:®X)}<Ç•iuH9‹ÿuÙÒ–ð’–ªH—*È ˜” ‰—yÙtý8Žé—|´“„YooY…Ûx˜é[|'ŒÉtŽ™‚¹‡§1l‘©/vé¥Óߘ™ñ²™!èzæ˜qÈWUYb‹|¢I‰.‰…9‡%y„ÖšJ™V/Ù{\1V›¬i˜Ù“¼)’sT~]ZNˆ‘Ê)Xyœ³§†)‡›}©›i•5V5•BÉD4Ù8)Y}ÿ¹X¶™^Ô¹˜i†_ÙC%ä”éyƒ•“3Zðy=k4tç—Æ§I’êxz܉‰/X{óÿ¹m©çlùI޲Ĕ! ãG•ÖW’>–e®ž€HSø)œ‰Ös{¡œ5 `€eÙF™(–?6CÎis :˜÷s ©}*29©-j™1Š3š£Ê¸£¥ê¤ù2¬¸¥\Ú¥^ú¥]*˜Ÿw£Vʇ“Khi¤ÔUžCá&c~dêl Áô¦Ù§J6Ö¸S{j/uЦpª¦'˜¹§}J/ r¨vú|xÿšzº9z/Û™½¸ª¥O©n/ £‹º”™ ƒŸyf—zº9”J/B¨g4©BÑT$q¨vVªFqª¼s/`*¦¿b¨hX8ª^´Ê\Ô? c¥ËbÇ:˜¿jž‚š1ÃZšj0¬Z:ÿxÖúªV¦Â¬Da«¢š/n:­ S­äÚ«%!«¤Ú¬Ê6§Hç˜Æúª#a®Kz›êêx 3©(ø©€ôªüª¬ÚÚkõªc÷J^¦¡¯IèJ½š­žÆ­CaIõ+“*®ZÙM¤H¯XÊ‘Â:°Îõ¯ǰkŠ{ã…ô»œ¤>8i¢½¹|y¾²ù‡R¹XxW‚VÀL¡e„2™†F)¿ ü”jWºå½Ry´oç“:T#u(;V5–,ÔU=dErT¡r”5¥|ìžÿŸU•š³…Á$‡-Ĺ»0|švuAfö»\t pua›Ã-üÂÜŽ2ìÀÊeâoãF¼ ¡ê?œÄ=lÄùXÄC<¡H ¢ŒJ¼­þ›=›å Âq”Æ6åÂÚ“Àä«qLì¾õIŸ ¢õ;ÂUu¢t,g5DÆ«ÛZÛ·n£½öä¼eL¬ ÿ1½ïB¢#[ŠçÄ0×®‹ÈŒ6£›É¡»ÉšÜÉœüÉžʘkÉt›ºŠ{ɦ\I‰œÊUƒÊ¬L6«üÊÊ˲Œ:´\ËŽv˸ŒG®¼Ë³ÜË9›@Ì?†,µ’LºÇ …¾éËÆ‚NuOÆ»ŽÉ̶—pÙXÏù7 äQÕÿf¹…uU̺xÌu Æ^“_|ÂA–¸äLDßùo&lÄ̳DWü¸íÜ{æ<Ìè ŸA¼ˆŒ{Ï7™Äï,Ï,Sâ\Œä >÷KÂqlÇkü?[Ðì¬ËÖ[F©,És™m8¬|ÌÔ¼·ÀüѼ\Ê"1]ÒáHÑ(³*½ÒŒÔÒ. µ0ÓÂÿGÑh{Ó8Ó:½Óh Lq+Æ#ÉݦD]ÔF}ÔHÔJ½ÔLÝÔN­Ô\‹J®‰>ÅÝÝÌ€iÍáýÄ>à^âk›á+,Ç ¿Å]{EöÝ•úW$Ôtmâ6·(®™±˜2~ã>.à.u¡¹ã .¤_ýãHÜ9>0DÞF.ÞI噽äÚ×ä1>ÛRžå‹Måcå_6ãZæVÍåšäåJ+8 L<íµfŽâbþæ|ýsO=ç_šÜ4ÍÕ²}ç14ÓzÞå ÞçsÒ€^æ>è5]è†ÿÎ䈞è~^ߌþÒ‹þ說ÒÍ;ÌÀ) ïG?+4ÀëÂÏM½Ì¾lª͜®.žÞh¡Îƒ£Nê+Ž 2ìÎ.ž«~›”žm.ü„}9s”¾*jF3ÇÃïMÌ~ •›=å“Yb¢»_­nXw,QŒìµÎŽúо7Þ†Ü}’à~ÎH|_Ñ®W$,ŸiœÀ5zÈ4”^Œ ó)ßîí_ôQÒ_å~ÄJëÀgéì¾»DxÄV¹Î+êAÖÁï|ïÀšëø,¡­e¿½Ý©ï~|Xý®…_ïÍgîÐNé ýìà€û;Â"$ˆÁœÇÇ]X›N•-¾Å#ŠÇv–)ÿÞñ‘î궤¼°Nî|Ž8g)IuÔéŽ<^‚.éS¸óDÏ[FôM1ôJŸ.LßôLñôPŸ§I?õ˜êèVÛ5ŸõQ_õ\ß­x»æb?öd_öföhÿ,|Gçlßönÿöp÷r?÷t_÷aJ™_ÏÒºš÷~NÈ|ö{ÿ÷“ø‚_—"[øZï÷¤n÷pM‹­4— ùÏw æWíQŠoª?Ò!è Wù™ö›1¦ú»Ùp÷ sŽ“`|©÷¨?I£¿ç”¿ú¦¿¦³ßú¹»·µŸ0¬Ïû½/Õ¯ŸÒÅéªüÚªO§WŽÇ¿OA_Ñ®÷üÕ«ÌÎJýÉ„XTCƒÿ"^t¨"C†zܘñ"Á‰GžL2äG)[žŒX² E˜dÉñ£ÈšeJLH³çP¢Eq 5j0ãÂINä‰t(Ï›!9¾ôxuèÏR‹fÕêëUª=¹ ôjt§Õ±`8+°dÚ·u“ {÷¦N»@£êUÊ2«ÈµZÍþ} v0N¾†‹ÆÍ;uoa±ŽÆ…´ïf§x9fú’3T“j•2^¼—1QÈu ‡…-¶lÿÍÖv—ŠF½ú-湟}÷ôÌâBã¶Kz&à±Í?¯|¸4sç•eϦØõäÜnòÖü[<ÆÈjs‚Þ¬œ`yŒçwÂî¨yö馫æ|O6¹öĪñÇÇN:ŸÂ¯@¥Ø3p·¦ºJ0ÁÚ>#ì¡az°Áùêï-tmC·Z­ū𫵢³,ĤJlpBêmÄñ‚“±/õ¬q4þrÄpG¿£*Æ7£qÈËTôÐHˆXTòÅåš\1H¡¼+I*åBòÊÇ|Ôr$&»ŒIJ ÁüêRÎD3M5×d³M7ß„SÍ,ɤK:a´óN ðSO˜N4PA%´ÐBš+Š3QEeͨ…4ÒH•´RKÝÓJ: å´SO? ìSQG5TROEUPSSe•U>5õ3VYg¥µÖÌú´5W]wåõJ!{6Xa‡MoJbE6Yeo…uYgŸ…vÈ_£¥¶ZkœöZm·åö³l»7\q½LèRsÏE7]u×e·]wß…7Þs[¥·^{ïÅ7_}÷å·_ÿm( ;analog-ce-6.0.17/how-to/iis/IISConfig5.gif000066400000000000000000000232601406366436600200030ustar00rootroot00000000000000GIF89a”÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,”ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jܘÀ CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sÖ$åñÇŸ@ƒ J´¨Ñ£Hòüx€€Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³`,õ‰¶­Û·pãÊK·®Ý¹j{6½Ë·¯ß¿€ ¾Û€Ó¼L+^̸±ãÇn}2äyxí^º ±f†Ì¹³çÏ%/¤L1[#©nþººjëÖaagM wµlиs ÀãÀÞI›Þ{jñÙÿ4'zóòæb¡ëžN}®èÀ±ûÎ[Y¯Ó×Ï“‹ÿü’|yó›Ç£_N>ªzÔêSg¦ ÿ|{øøÃ§_|}ñú±÷^uÈÕuÚeœa¥Y¶~ù „óM¸…ìAx_…í]Èa„÷mà‡$Øay¶™¢,¶¨™A .Ø]b¢"Iæˆã…Ìeè¡…@ê8aç¥xâ‰ã‰$Šö¹è¤“ö£pÖøß y¤qC†¨åŠþè%lJ–h¥’+r)Ý“l~v]v Ré]bzùå‡=Žéc`šX'xîI¸%žXæYÜšm&úoÛi'cƒsÊ7d‘INÚ¥M񮧴aZši–àígŸ¤jbÈ$¢Š¦º‚ÉIã“dfÿiªªÉªê­¸ªÖ«§µ¸éš‚Ek®ÄÂJʱÈ&›,ƒÃëì³ÐÚ%å´ÔN;c¯Ñf«í¶u5Ëí·à†;ÖpI•kî¹è¦«îºìN¦W»ðÆ+ï¼ôÖ{®eöæ«ï¾üö[/¾þ,ðÀÀ'¬ð ϋpÃG,ñÄ=LñÅg¬±ÅwìñÇs 2D:•l²L#§ì.S*KÄjË 5 3Ì"tòÍ8Ï|°Ì:\3Ë=¿Üs«<íqÍB«œ´Ñ-Å´Ïï´ôÈBS«QÑ5j5GX'äôÓ#ÍtÕ uÙØe­6Fh{Ý6Ø‹ £”@i=íOo D¶By¯ÿ}¶ßi³MÑ×poµA¬j7à}óí2B<ûæœp:*ÐÝ þF÷ojS.ùæ™; ÜçÛÅ8á…c,7àu3ÞÑãaøä—s^yé§»æ›Knûïµû®;ð<£ž:Å«sûí¥S~yåÊOúó ö>9í¡[n3äËמàèÀë~÷îÞ¯ûùã{}ïDo8ЈÃH}ù×þý[ ?¼ýüû~~ùðcÝóÔWÿñ/zŠ+ ýr‡=åù/v1žû"–<’|Ò£[ó0@p}ôæx¶7óÍ.| L!¨?ðý3ˆ'ذ æî„~k ÷×AòP‡8bÿ«6B²O}ÖÛ`sè¹ .pz”aãh06ï‰(ô¡#‡Åq…ú  Á¦(‘RQa6ÌœW:%Þ‹óûïº:ÓMÍ_dÜÙ'–F{åÑ!wdš÷X°>Öë ¤ÑIÈ® ŠìX${ÆÈFVñ‘™dÆ49³JZ²_Ù(svFžŒò”¨LeÉŠÊOºò•é’`+aIËZE–˜£-wÉËÁ±2—œì¥0…‰K]s˜È¬e1_vÌd:ó“Ë”Ú3§9Íhƚئ5!™Ínòr›™ô¦8i Îíóœ–,§Þ6²5Á9.z™¢ìþ†ÎtþÒ˜ì,›DжÿÄ£ôS€õÜ£:uO}F„ŸÊ?áPB´™òS øâX?êAQŽ ÍÞ58Q‹º£!džæJÉ{2ó`Ê"ïv‡=ôyÑ€o”èÁh9³…'téþ|“Òžúô§@ ªP‡JÔ¢õ¨HMªR“ɇŒ$­©E]h»ôYP¦TµLû‰SÎô†ª «XÇJV“¢©&•&DÎʽ¹í°‹<\ C·JSºÞ”Ž4•+Iã†Öó©m5aW³h×Òõ…i^³ºÓ½òõ!N]+(¼#Î.‰+ÍÚFÝ(G›Î£ m)ô.ëØÇ:$²…h¼dö¶¶!²´|ì«ñ)Ù„ÿmÖlŸ ,l))Û‚Ì2µ» î¿zÛ´¿ÖV¸È…[O›Ök7¹ÐU×rwÕ\n7ºØ-×tW6Û“^7»à-ÊvGSÝp~7¼èÊx‚ÚÓª6½ð qOgÜçÆ÷¾Y¯ÛüJ[ûâ÷¿Ñoûº«VÿøÀî…lyÍi`;Økó]Püà CXÁüõnƒO»Ô{øÃ ±ˆGLâ›X©Á0 ì\ —±Z0ޱŒgLãÛøÆ8αŽwÌãûøÇ@r :š“˺¦®Kö&;¹ÉP~²”£Lå)[¹ÊX¾2“ËÊå.{Ù&ÉådŒü[ïÌ% ÒÍ>¾Ìæ6»Ùÿ$QÉÏ.ÌÜ ØÌkÀ’©£ç7ûùÏ]&2}MgêڹŻ:¦)AT0(X±Q kœ²f@[úÒ¨$ô‘ÏËÞ¯“ÓÌ ÉYÍ ’}|‡9®ÑŠ­N-•U‡}Æ´¬gMϹUd®/ž,ê’èyÔ~õT\ížT·Z3¨4­—Íl˜ØZÌEÆ0‹‘¼ëP3š$½ùǨMa×GD«–Õ¥À}ìX7ûÜè†s”¦ êûV׉öe¯c-%m;šÕøFõsP}loƒªÛø©•î‚~ “pŠs=áx8ÖgÍv½íýnûˆHþù­þÍê$=èÕæ6¸È™ ´vn:É+ÿ~wÃÇ,ïkS«×ÿ6¿pb <àïö¾%Mð‘û\Ö,ƒñ .m•k¸ÚJ¾v̳ s‹óç5º·ñóŒÓä?Ï:Ðïxkù½¸+öÃaó‘ÛFjÚy“¦Žöø˜çØ=׺ÜÛülM{½Îìf0ÒÝEv’lû-6ŸtÈçNø@sÚìeøÑþbQõÞ€GËrâ^øÊ‹µîDÇ»ÑïÌø3·„Ûº¼åGŸi¢"¾ÐÜÝ<¢Y>öÂh9˰½ìcŸeÒÛ^•9¶» ÏyÖ7þöÀ~ɬ{ßò~õbÿ½ð—Ïü˜Ä9%]ßýׇÞûä{¾ùØÏ>J0àãS»óyvüÿOGòò²ÏDô¢OIúµÏ~–p¿ŒÞ7/ÊÉÛw³û'!_ÿJôßþþ—äý€¥y`·x¾w}£F~‡€7‘4Áþ÷€ €í–rX}‰×r Ùv€"anzVoL·té—(‚K§!¨¸‚'!ó§ry÷i/è6󆂿v*Øg:h~<Ø X‚æ„=8„,X„.¸w³ƒÅŠq'8q¨‚9èhTX~ (…@¸ƒVH…EØ…xxKx:ñ§wàÇk.7-õÇ…UÈ…Bh Xv;‡'á€^˜}GX†û¥„š¤bô§t§tW(‡Aȃè÷ƒƒ(ˆCH‡uØ|wX€äÿuhßçˆf˜€!…j(ˆqø‡¸†™èh)x‰‹ø€h}¨‡¨|–˜†:¡ˆ,ÁŠ¡|£xH}È'‹¨øx¢äŠ(¡‹¯x{±ˆz¥¨z‘HŠ“Ø‹ÆØl¿ˆkÓ§pŒÅxŒÐ¸u+“y†fŠ؇ј—–ŒwWÂ(HØiÚ8Ž€ÆÒ7‹ÌX‹ÎhmäØŽlfŽÆ·Œ''ƒáHƒž¨‰ ¨~ˆ†«èŽ£M3†ôˆ‡IG„›¸ú(… (¼èèb(eF|·©üç>h éȆԘz¨ŽÊØzD¨…:ÈtHo÷‡üx‰+y÷È’)ù„2é‰ÿipÉ„ o’ÈŽ/©…j“ˆ(„F¹-9”„¸”Ho‡˜“ç¶“j!aȇâh‘*9“Gé”/ç” ‰…SX…hØ”üØ‘PùeRi•`g3H4_‰‚lx…[)—¹‘\–`‰ˆuy–$wx’Á8’Ãh‹×7xBÉ”x9—0‰mJy—k8ˆŽi–|IVÏö—ÝדaG˜á§•q„YɆ-‚/y’68“¥‰˜&ˆ““Ù—îb™ð‡™HŒìØl’¹š:é—€Ùiމ´i›ÌW™¹™‡ßH†?YÀ™œ4!œ—‰ŽóX•M¨œÒ9ÌùšÎ9‘ÇY‘%‘ŠÓÙÕyŠ"I‹ƒÿ¹ŽÈÙæ™ßy0Xœ™¾içŸéÙ–Æ–õè–3Ñhä—” ™’øh‘‰˜t¨µóyŸõɞЉ~'g'…ÉŠo¨‘  ˆÞ‰›Íé‚É›îy•2‘Š7¸—Šƒy Šmø–Z¢/±¢Æx ½¹žjœ²Yž"Á7Šm#ú–˜˜•*I¡Š—"èŸDé’,é†:Ê€£É¢g £º– º‡Ñ™Ÿ„¸Y‚\y˜X¸¤^阘–Yh¢J™˜:™NZ£(žŠ¦ï™£gõ¦q+Ùgʘs*qBú”ŒÙ™Eé™IÉ£*ºŸ}J¢Ày¦š©›ö£ö¢Cÿê„„Š¥t9¡sX–d‡8‚z”„j›†JžišŽãY’Ê× Ðw“€¸˜ú˜z©§$ª˜_ú˜aº§ ¡:*ªá ªkz¨³ X‰Iz˜ª§–º‰Djš4 —ª)«§™ƒÿ颽x«Ý˜«Ï)¥ Ÿ(£8:z®¸~ÐúŠÒzŽª¦4Ê«6êúÉ|Ф:J­ØÉ¦ JªñižiI•Öj’õº¯"q¯°ÙŒ¸º™ÛɯíúˆÃén3Úžòº¨˯þz>¹°ø9° «œ;®ºZ®žÚ¦èŠ‹_ÙŸ›šèö­v’ï˜äª°æªôú .»—ýé•Zp$ˈ&ÿk[­à)°1!¢؃1 ¨çgp5œ7»³ˆ¥HÛ«9Zª‚Z§³š¬'¦§ ‚Rˬ¦ú‰]*µx*š?J”©²Çx±ð±+˱-q¥ µéª°j§q)³­Jµ³ ™`Z¬¯ª©B;¶G«žPš° ª¯ö§p:oszª@µ hˆ4«wZˆ —]jƒxº”Czˆ[¦/Ú·ô‰‰ú¤Û³ZAʪo8µ‘©ªì ¨§;¹vY©q;‡îH¶(›±*»±óŠ­/«‰l‹¹¨µ»X©‹i“}j©Š©¥§;Ž´›´€›¯£ê«oi‰£éµx¤cÙ¶ŸÈ£Fª£žYµcÿš½˜»½E»|ÍKœÏ»´çЏÛ¾´V¾¨¿°È¹ê¹Jë·¡ë«»lò‹3ý |ç‹°)¸ÑÛ´[¨ô«¨ƒö¹ëWì° º š¾øëÀ¤öÀœÁ l¿ܹï†ÁõÀŸª³,E/ Â|)ÂIx¿\\4‘®ÍZh&¶ Ù¢¸Ç¼|¶2:ÀÐ{}-{Áîk¹7#šýÿˤ^¨Â;l»ìÃÒ˘½›‹rË‘5¿Ú¨ÄËÃê˲º ÄpÅ7Y¹=zµoÆGÆj˜(ÆS›šVÃHÜ…X¼À,\¿L¥ÉJ½D\Ær襴JšMɺ†–± ‡×ë»S|Ä…ÿ7ǬÅ%|ÇK¸qú„L‡£Dš¼‰X½ª*¾(ùŸ¤©š‘)¾~긣KÃuÈÈìÈ-L_/\Ê?ûºu¦ËËÈ‹È y‘ÂJ¼eœ¢¦œÄ9Œ»YÌÄ=̳]L±¼K—¿û»z[¥Ák·Ã ˱[Ë~lË(zÅ¿°Î«ÊvìÂT Šz쟾Ö{©”ë»a{¥j¬½µ|¹xÎql„×<­µK«¼ '|ÏÅìsŠ<´ÙˆÊí¥À¢û«uû =wþìiMLÌŒÂP™Ð»©±ØÌ´Àe›™Àœ¿ ]Ñ Ñ ¬Ã ëÑm°'›Í¼ÅhûÊ$MŽ ]ÇmÂù9Ðîÿ|¡{[ŤwÐ~öҼͬìÅ@ÝÑSÌ‘C-²duÐ:íf<­Í1 É¢ Åš[{<³G-VIMwñ,®›"ÍѪXÌVº©¡i¹cM·n|Æp̽j̵h}¹LéŸ8 ¶¡)×ä[²­ÒKLÏ>mÏx¼¶IZ·Òœ§…L·Ë\«Ø‹šÊ‹Øw[Í\ÍØ§Cuz-À)ýÈÜÉöV¸g˜š–Ì™¡¼¸¯Û¸ˆ¼¤ y¤­KÍÇëÙâ\¹¬µÙ—{;ÂñÚÕ-ºVØÙúªµŠº„mbm¬½=͇¬Ì¨µæëÈÍÉ-±½Â=ÝÔ—ýÃÆœ‚lØu«ºÌ¬Øƒ ܉»É¨ÿ……ÞÚ]ØWýŽË­ÜèÜ=ϳ½ÑµýÄCøÍHY¼l ³åÜΞ|’k ¾Ù½™ø™[ËÚ i˜Ú—ÞÎÜ'¾L-Á2ÄþÕç¿å½ºF{à¾Þ(­×ÐýÓ=~?W¾nÜÇmáêÝÜyÝÞ“ÍÅÝÒ.}Þ.ŽÞ®à•]ÏyÁâûâç†< ±â+½­6¾¹$nà1NÙÎàNä)Œã0nâÁ|äœä+®äÐ8ä/^ä²m¶îÝà=KÓù-²[(´³lÔ²[æÉiå,ãätüÜHÝùüæ?[Ô`¹bêÛmÓŒæê×OŽâòüŒ/á³`, ôÝŽMňÿnÑLŽàXîÜ ån>å`½£Xù£dmé' àüµEêµÊjÜ®MÚ!î‹‹Nä|¾æNÛ\.½yü×Í,Ü?È¥'ŠÉo‹·Žýǹ祮ãSù¯$ùç}m’ÌrÊÙeÞ•w Ú™ŽÌ°^Ê¥{¥’+ÄïÜâzÎëj‰ê3¾×5ŽÇ/‰Û§=ÜËŽ”áLëä\猽ۺ>äÖŽ¯§þÞ’Þ´ÇËÍ<¦«jëçîÝÖ=؆탉|楞ãížÊÙ¾á|ͨÞìêõ “á̧Ü]–Ê޽ˊÎ(ê7Žæëîë¡ ìëËÒpä··®n¦ÿãÿÏmÎá]îá질˜Zñ»®æ<ð'ÿ_ðÒMå|[í0/ðP®êRnó=òÏã\½å=Ͼ>­#¿ç%lòŽòGÿóŸóLÏó‘áOïË8ŸàFîçZÍЫòiMÔ_Ž‘þËâÕô9Ëõñ(¸ïáÕ½J4ÜòT}Ó ›õR¯Ðà èèzƒ>÷òR-â|öwÑ·ëã¹ÛöìÖ¬kéñ@êø»û9ΔÕk÷ZŸå=®ñ*¾÷­^ù€=ï)Z~©[çÅÚìNÒ„¿ùŽ.óMOóƒ›Ù“|Ætzì¢ ÞÊ^Úf íq »Ÿ\Ñšßè'®åˆ?ÒîÊޮ˳¼úºËºüüÓÂ@_ø!MôUoôðï×ÿí¥B\ú²ªïû>ú|L÷™Ÿôh¿Õëù+½¿:é›^èÃZéë,ñâÎß¹îЭOü}nüìŸøñO ) $x¡B† >„ñ‰%2´xQãFŽ=~ñÀ¿‘%Iž4YòÀJ–-]²$øRæJRdÖTé’äÌ™1yþ¬’ÔP¢E†DÚ1£Ã¥›&…UêT)Q^]¹óçM­[à|‰³+˱^}z ût!U¶mݾ…W.G«u±¢uy֬ʹ9[–ݪ/Mµs FœXñbvëú,(ß¼6Šy¯Ã£Œ=Ú³c¬(ÃÔÜ·ïåÓ_SO[öÿlÚpI§„ŒW2O°•sÿÎÜfákGž|öíÒÂ]G¦ÜR¬Ì×a«÷$.ÑèöƒM³OÔXø{Òñ—–Wžþ#s•×­C¿i™zëÝhƒ64Î0ÿZóÝZD<…TJ ½S/A©Ø»‹>÷¾Šn¸ß¤‰BéTh?ŠŒ £ÿ30<ŒÞPDƒ0T0E†Ìʹú⃑µÓ^ Œ¸ýÊïC=ä@Š~ìѼÕzjH!»ûðC•Lr¢ —T²?§ìˆEÓ„oµùf´p8¡trCÿ~ÐÃ2K4ÓÌý ±D)ÑìÏÇ6㔲N*Eà{°· 'ÄÒE‹#” ÎÿJRIÁ#3Ì&Ál”Q;'-òH74ÒMIç ñD×Vµ·v{\ÝTwH›?ü_îåžåÉÃ7ÿ0·6Ged}Ö‹ŸûØÔ>ýɯ~À“]çìµ?þ•nT¼qZê,'@ÿ©¹ŽYaBŸ½bç@imës$äÜ™R¨­ê9‚qéßêP'4Õuu™³VŽà–/$!ðY%ô—t»>ïML’à¤^øï|~   æAýPQ6k —,QîP¼à{ÔÖ1¶ E9Z” ·86 ¢l†[«¡Y¼fÅ5ÖQE1´áOÅ59ÞÐŽ$Y9h60¢kŽd"„Ç>êc|ä“9I< RŠ{`órÈ*RÒ“µad$Y9´ ’|d,£Ûz½jñnjLà'CÕF¾}Qƒ¥¼dIdž®nTbH`É–aŽ.”¤²% 7˜ËäPsªü¥ WÌ©PÿÓq–Ìc2á¸Ìl°“Ña/£É>iFvð "Ür—¾VÞOˆj ,rL jmqå ¤¶êZ»â'ØBx­°ZMâ å9OZz“…üÞfÊw¾C¥OQÐ$çîxÈ( ôŸˆC(Gï—¦Ž&4– =={’Aeâ²›ºìX¡•Q.s‘’ ‘‚¨Q”[ œ J‚ÍFjóžÜ,ª768!£5©¾FŠ/àùtœðDœ *·“ µ1¥»’aQ±Ö‡îº+Mê(#úÎ#ê!U-•B¶²óÁ´&ÞˆšÏ‡Þòx¦œ/gBb‚®ªpÁN½ÊÐ.FT5ÿ~`%ŠJ¶‰†«;¥Ê»XÆêM“b4ê#ñ‰L¥âˆ³§…!X?»I{Š©|…)je{˜½’¶xd•¬Yw9[ÞúLµn -)ÿÊÌSöÖ¸m©m=G)Ÿ×Ú¶™ßó™o!‰²Èæ’hcžâx£%1Sªê ûkÇ òËV,–nS½° pŒeêÔ ÙÍó‹e¿g¸fGÎ]Ö±~êØr!yµ’d…ç])ïøÍÝ‚ï¥Ê@›:V‡–0Q:fÔ WÂJÖnL?Wè'½í^´¯¾hד¸©T]墇ˆYO™ÅÁMï×›fÂò’aà ³–üÛZö×̲Fó’7ÂÝ[ãÚ²œu5™-íbåêó½Ò…öC( è¶Ù¥v¶Çž?WºÚͽ6{k­mrdÚÅ‚õ¥g-ìr·›‹ž®¯zægZÐîÖö¹ v*ÜNX·”õXŠÿijïæ¸°PψC·¿d{;ÝÌ>ïïýlhÇâÍ* ›EŒ3˜Õ›¾Ë(³¹íòrô[ëL/*ŸÁ»cº¤|lÎU;ËQOpÈ«s]ºÿ©ß;ÿ·€×L`ÅOU~ßQô[ñkÓ%~ñ<Îéõ/óª…‘ò˜¯»kénZv©„6°õ¶ªÿñü]«4gû:_­F“]ÕU®9&ã}äœ'Yë<ö¤ͨgXnÞMµVWt…ýÄ?ô§E})é>ùÅ[>!ýlÈ@·×»U®!6õ¼¯CX¯|ÁÖÏgu …»“¿…£?–xŸæƒ=ËÛ¿›ë?øÃ7hó‹!ñ³ç{,d?‰kÀ «0•דÀØ{½ t¶‰ÃÀãr½¹;@ý£@þÃŽÁì6j{8k‹¸t?Œ.L?uÉ$Ķaû¿ç 1¥B#BòhÁÉ3ÁDÀTÀdÀ„ÂÀc½Ü{9—«ˆ‡H, ü bŠ$Ä»±J@«[@MówÙ¬+äˆÑ+Bÿ¤/ ´¿7„À|¢0Ì¿›P•;ÄÃ<ÔÃ=äÃ>ôÃ?Ä?D€D7y“½’£=¼°ÁEÔˆ^c>üë¶} ÄI¤ÄJ´ÄKÄÄLÔD‡zD»s¾/ÜÄPÅQ$ÅR4EL”D?D<ÅVtÅW„ÅX4ÅT¤dEYÄÅ\ÔÅ]äÅDœC&Ã^Æa$ÆbDZÜA4ÆedÆftFeû¶Ù›Ág¤Æj´FbDÆËSÂkäÆnôFT¹C¼;“ûÆr4ÇsÔÃl¤CûàÂvtÇw„Çx”Çy¤Çz´Ç{ÄÇ|ÔÇ}äÇTZ6¤Fȉ‰FDDǃDÈ„$EUôDBTȇ„ȈL˜d”ÈÿŠ´È‹dŠÄÈäÈŽDÁUôÈI‰dHqüÄ‘DÉ”¼Æ’ü@•tÉ—¬F–´E˜¤ÉšÄÆZT7›ÔÉäÎN¼Ní<ñ”éD‹èàNôìÎÔ´FæÏ–à‹úüCïŒNž`Ï=tOªtÈ—èOúôCäÔÃýË@¬Îø,O%@ó М1ÎóÄ­»ò´ ¥P£ZPP…Ïj”OþdPçP=ÉõÄNûtÎìÔ@ÜÌÐüOÝÎì O ´Ñ}Oõô ¥Ñ5Ñ#g ÑÑ-•¥:ðlQmÐíÄQ©ÑQýlP½Ð&½Q#­Pñ,@*µQ'MÇ¥Æ!ÍC­ÒûüÑ¿¼˜ÿðtÒ)@,%Ð;ôÒ5µRûÄÃ7ÅC2US.ýRådF1½Ó5ÏER¼09eRÒœ‰Ò™ØRCíÒ+ÍC;…S@•ÑD­S0}F?Ô)õR>ÄÏqDÑ&E€Q-ÓG=TSUÔïTÒJ=Õ2ýщTÕ¥ÔGíÔKåÓeÔT8eQýÒA%Ô]…À8]QMÏXeT—¸PíÑ'Òü Õ@õQeÑHÅT!]Ð…EÙšeWdµÙœVxÕÙœОõÙ{Ì¡ ÊÉ$Ú£¥I£EÚ¥MI¥eÚ§õH§…Ú©½H©¥Ú«…H«ÅÚ­=H­åÚ¯ýFœˆÙ±%Û²5Û³EÛ´µG eÛ¶uÛ·…Û¸•Û¹mË€;analog-ce-6.0.17/how-to/iis/IISSetup.gif000066400000000000000000000566161406366436600176240ustar00rootroot00000000000000GIF89aµ-÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿ!ùý,µ-@ÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠ$ ŸÉ“(Sª\ɲ¥Ë—0cš<ðO )R4óýû§sçN7ƒ *ÔfÑC‘]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`Êû´&CRÌXË–­M ¤Ì.D{ó­Ì»xóêIÓhÑûv°30\¿F Ö%X÷hÐÄŒ!/^ì§RÊ•+[>Š8òeË7‹¶É˜¬éÓ¨S«^ͺµë­rÛ®eœV ì¶ooÊUHwsɽÀƒ wÙ÷ók×>“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËÿO>ºÝáèÓ/þÚyðý%ï>{Ház-Ï¿¿ÿÿ(à€hàЧނ gÖi[D¸÷åf¨!5õ¶‚ †(âˆ$–x Z&XoД`~ Æ(ãIì‰eÏ?öØC!)÷l!:ê¬âË/¶ØrÏ‘HQ~]A—–rOþ“V”TBéÓ”Wþ$¥•Uþ„¥–Zb%˜[f¦™[VÙeš`R9fŠpÆéß—l’‰æše¢HæZeÖù$oÊéÓŠ ¡åâs Ψhz5†u~:ÞCA¶ü‚*dj§ êé§ †*ꨤj—袨®÷àqǽ8Ò«°Æÿ*무Öjë­¸f´B†¾ˆVªÀªªÙTÿ U¬nqUì±É2»¬²B9›,V®–Ö¢q]KR‹³ Ô­mÚ‚ë-·ävk.¹àºunÛŽ»®¶çÆëÖ·¹Ökï½øæ[ï®õŠ(ŒÁ|W£ZIË*TÕŽ{-\ôêëðÃG,ñÄ įAþ:wªÀ¯DðÁ«%\ñÈ$—lòÉ(Wt±b-úú[Ç0«ôqUÉ!ks³Ð2—OÓ»¬ÎW‰œòÐDmôÑ·®LÛ¡Ím3Ì3ƒ V_RWmõÕXg­õÖ\¯–ŸÆ?-vÔ]WE5f¥‘¦”Ú“IƶښŽ6R’mæöܣѭØÝ…g–T¿¢¾÷eu—møáˆ'Nì’êæ†“žÌ9-¶Àd+îÔÙ–g®ùæœwî¹i_7öäP¯jš?¨ ¤>¨ï³OA5›ŸV}•jûí¸ç®{€ÂÏ¿üðÂOüñÆ'O¼r¡G>:éÿWîÝwØh1ivìÛñ)åŸ>ç½wãÃYþî觯þs½·/`ñÌC¾œäЧ*½U6eë«çÇðVµ[ßwÎ'Àð€Ýi) 0¿Ýð$¡YK>0Á @²ÙÙNà—œæÍïyõ Öý<ÀÑé{B“—Ü”B²åJ/Dá›bX>ïÑO㣡™b˜ÞpJàË¡ ¿Ã‚ÏK˹aït&!Úpˆe:bsÕ'*"T dà bšß¥Ëw`À0Ù,‡ƒƒ’ó@Bû™ŽZ6“–Áå³iá¬gT)á÷ÈÇ>úÑ;Y”ŽÞXv›ðý;ñàÕFÊÿ½ñsDÑã'IÉJV2B¤õÀÆÈFŠð‘TÚŸEGh•¦ŒŠ$-ÉÊVºò•åQdÙèɰs„Bš.wÉË^ú²Vjœe'k‰ª[r.—¿L¦2—ÉÌf²Œ“/#梌)–Bf€Js¦6·ÉÍnB,˜ƒ¢¥4DÍ©ä#.þðI:×ùÅšlÁf½Â/„pË[ë§>ó®|ú“Ÿ¶ h=ºÏ%‘Ÿõç=ŠÐ…ý]=A Ð~*Ô¡õÜ'D¹•)Pôžðê(G3µP‹’D¤å§C ”¶”¤ëB©·\êÒ€ê£2m(CÿyQ›"tI.ŨB)ÎDŠsÿœê)§Tøv²ó0À;á©=« Ó›&Ë&V·ÊÕ®ž ' l ø:~ð£ªY¹j¬Ñ~²Õ¦l¥çOw*ÔFô®å©O¯U“ íCʬOûWýƒC†,a›XÆú•±Mìb‹ØÀ*¶±“-lrëXÊnh³†­,d«YÅ‚³ÕPaCËÚÏvvC°­lgKÛÚÚö¶¸Í­nwËÛÞúÖ·»b×[0D·°B².Z‰\%ª“.³¯¿®t§KÝêZ÷ºØÍ®v·ËÝîzWCT½ qÁ:¬¥ÔÑŽ¤DeÍtS³ó¦·Ž>[oR’ëU‡Ñ·¾øÍ¯~©Ô¯M,j°Ý¯¾î+àøÀ!/¶ð—Ê÷²w'np„óH`X4¡uÅëCõúVçâ‹ÀËåi\7¬Qïu¨>±OI|b Û5¯#~ëA ã£8Å-ž«†WZb§´ ®ñ‹Y¼aÃuÈ1^1…Üã¹6,Éz=Ë-ÿ«ÁCXƒÎº²|y†å s9’æÈqàæ¦ÔÃC³ACŒçRÔž Q³…ÂcЍùκ”³gœ=>ÿ˜¹ÿQð˜—Rf‘è ËÊA4„/ö³%ZÉIÓ1d,Ü+=#øÒ²²´=èùÞª¨Õyç éR›úÔœîôc(­‘C;GÑØãž¦IO‘€µF}3Úç‡iÚÄ€®ˆ[áÜæ‰ðúU+]rAO]´T«ZÁÀ|’¢yÖœÁ ×;ÜáÛT§(òp…=„âžÀí%RÏê×Ì.Ù¯ÑîoöWqæþZx;×ícªú€¾¿ËoÚ’-û ÀShš¢ßO¸ÂÎð†;|áÿnÙ\Þ¸x{dÞOcb+€äL¥ ü X’Cö³%/ùkWžòʶœ´)?¹cañ€kðMmÿmhÛÎÂ\å1G¬Ðîò– ÝäGÿùkÎô¦;ýé»]úÌUô¤Ï6â…v¶ª-ÞPÃRcÉõºtŒõõ²›}XתÖ;Íu1Kû]ïºÖ´£91õ)Kâ>“Þý´w î=‰D”RÄmÆE×Ì¡ñÇïN éñãž!Þ¹mF5ñKTœõÙ7Ÿ"CBÞîUûY$Ί#®í¶µs 9ÉÁsþõ°‡eÚ'nÜ㢾ÕÒ~u¢˜Þ†-f}¼›yî¸>.,lt¢s€×9¿ùuç¹D†iøW¢ ýnýì;±ˆvJ!à·~æ(±KÚ½œ4(!Ž»ia'}¡Lÿ¸Û·›#ñÏηÕÏÿþ jö¥W{d÷§ù§|Ë%ú° D`uwª·zå§–×w¡ÇDá¡zèt>x"y9ñ—uôg8Xlõ-*x.*Å‚ c.pe3VgÙ/.èd+¨-Xâcø?ÈBhI8ø9'X€±ƒNa'C…RصS…\djW‚e“„Ú”l:–Q2d<µƒ*„€>QoÿPF<ñPÅWp8yEr‡t‡Ùöwy˜yH‡øï7…@8~zˆš×AWh…Å‘…GHB¬¦„º2zÜAv„x‰˜èŒ¸ˆXH{åY5f\x!öfvUdCEЧ¸lL¶\PVQ9F†Íh ”x‹·x#GoX‡mˆi²‹’D8T‡w'Câ·D 'Cè‹x§ŒŽV|åzí—‰Â~€eÈ<œÈˆÿ$‰%Ã’h(â8ŽòòÇ+¡81ÞØf*¨Š¦¸gCÆR&6Q@¦S"öSBÕO°È°vceVù;j„yz猇…äŒù}䨹3„}‰˜H»Ñ8o±Ì´Žß8a·‘ù‘㈠’±¢‘$y’(y/ЖL&™’ Ñ’.“29ólž6“±k%FWï(d#åQDæ¬ø…=URDyS*ÖdïØVN¦d4֔ĖcrƘ–š¢Y?וÊfšHéf\ l½6—5FƒÇ–/±iR^”†f7Š¡4¹‰{g1šÀœ1ƒ™œYœûLa/†2ÂÙœÎYL÷Õ8³¹”ª9¤øšõ(PuF®8OI)WödÝ)\ÆÉL ùœè™ž—©™åÙž1yžêŸò Äéž^ø™Ÿú¹ŸTeêó™ó ÊõiŸúµs1”ŠY( C€ •È  :¡Z Š_š2׿ŸG³œÿ¼A¡ :Ÿz¡$zð¢(œ#Z¢,jjkg“0£2:£4Z£WA? Z#‡Bú°QµARÒ7yÓ6xÓ“1¤vS¤l“¤Dz¤Gª›Cz7rƒ¤Kj£Vz¥XÚ* "ð(wpÁ/ Ó8J¡Z˜¥fz¦hš¦jz£GE¦Øi§r:§á4L):oî‘ò0ð è¨2;þE§†ÚkJ3.s§)Q¦NA!GR!yä!\‘kã1‘Ôñ‹Ãhˆ‡…í7D@$|â&~Ñ'~ÛÆ£’v‹Ê¨4’§Ûó(;²‘Ê##-‚AÁ)dQ"Aؽºêb·GüÉ4¢c§äwê¨U!!RI2ÿÒ¢Ò:­àø/Èš¢ïö_[¦e_¶^_¦,ZfG¡­€“sªå¡Ûbƒ¸Až²á. Ñ  Ñ®õ ÔZ¯Q‘aÚ2ÖMŒª¬ˆ#48áN|Y+ðgôj¯ {nûi¬t­(Z¦ç%®ê…^§DeY!4 »±Å9‚«Êªý@òe8˱&+™»¯ ‹§ŸØ)ªq²0³ÍM+²®ª9gS7Uª? †Š¡5-+¤QÚ³S´‰z´H[îê•b jc:¡þš5˜ólF›´V{µVú… Ú’ö´ÿz³Z±:¨ãöfO]±JÁº¶lÛJ²T§üš¬bk6áÓ´Ô³.iÅ=mÛ·~˘ šô¶F±!µSpü€‹—:Þ"OÝaM0ä}”ûDÄèCŸšDG„C~g¹ž»¹‰D5Ô«[ºÊ¸Šè7Þ1¸NÛ¦P;·MxúÖqhEakºº»»Óº\475aAkAAÄ4»¤¯´<Ôº†›£°+¢Ôj; Έy×z‚ˆä7‡ÅHݶ&Û¾ˆ¨½rH¾v˜½á#ˆ}˜Œ{hæk¦‹ºÔ£ALuVkq¿¾#Fûý[Fáú_ëºa[µM-_ÿWv3Ü:J¯Ê»ÁÐá»ý!À4»²¦'G=³ÀíµÁ ¼3àŠ±„Æ·\Â%œE ”Â(¼Â*ÜÂ,ŒÂÁ?ü¼njÀÇ”?X›Ã:¼Ã1ºIǷؽ§Çž2[Ćé¼@±B\DlÄN<“H\³QÛkqm"AùÅk±:«SÅ´ÓÄñJž1—(‰Šn¹ly)—uir¦ix ÷’°~V1QŒÁKÜNÕNz¼NRå;øko÷v»E ÆïÊ8á)/éâV0ÈgêR›IO *ÆÒ¹È5ÉÊw*›0ø‚—|”©q$fÉ-&Ê©ø–6¶È…ȘœÈ骮G†”©¬0eÉÿ¡ÜȆ|•#SÇ ;Å 3UBþ|c±¢›ƒâòd,è.µÊéª0§Ê«¼Ì¶œÌ¯,qPwÍØœÍÚ¼ÍÜÌtô…qÅeé1Ve%ȃ¼±ÐÅZ¥ÕZ«åYêLZ+·tïLYëZ«UϵÎ÷ ÏôwЩ%ÐîÜÍ ÝÐ <\ÎDKvæe,9ó­/KÈqùʰÜgÌKýÄ$=4/Z©UCÌ$9Ò%ÝÒ%sÒÄ‚3ð•34}±§ôª·"Ç(82 vË>wœ¬È/Ø.Ñ<Æ\ˇ\ƒ®ŒÉÐ<ÍK½Qn¶É ¬É*åÌ>-ÍG­ÉY Çf¼ÉK Ô  Ö²lÕÛiÔ_íÔK{Ì1XÔWƒF9ÖS½Ìÿ[:ÅW£ÒJ-ÆíM,íÒ|=10ÑlÓw4ئÁ7J7mÝÑ,~dn/”b)cîÈ“;F”®9®øf’(F— ¡±yc\Ù–mÊ•-`ÉȨ}N©Ú^؊שcu¹•«‘h,„{ýLfHm€×/Ñ(}ïWŒ¹‡LÔBÔ'‚}ÝÜ[µÛøi¤ûuvíÜÖ­’tm5ÕM„ª†Ç34/¤mÜ[½(¿àyê]mwš²Ý“©½cëz”®}f8(ÞE6ß_IÙLÙÙø½ŠÄÖ®.&Ô¨ Ë–ÛÍ Ý¸ÔÛÜ…ÇŸá>á^á~ážá¾áÿÞáþáý)’ÍÛÒ!±wæš!go@±^·xt(],×sÔuX5'pUÄ')nâJ#%1îZ£ÅÏ’µÏ27ãH'Y íÐJ¾äL>[RGr ­ÎP[„òɽâ‰#ݶ‚qÑUÅ‘JñâM^[7.]b>æhžæj¾æÛU¬"£Û=Þ²Ã+Ë1Ò–Àe8Ý%r|æg†`¥o) o ¸©sBk&,ã»Ü¼øµ‹åpÎàr~â¡Qçe{hì}ކŒè÷CAÄmÞö½PÈŒ‚Ç„M±ÿèü@ý0A‰ëºS„èxÇ[(éoq©hgêL‹Í÷ëÆ!ëÂn;´Þ/ÿÙÒ¸:s‡€7á|¼çfõXï{ܹXÞã¾Ý¶Þ¿Ë"ßsÔ‡ŸyN¾Ë-êx¨Þ›ŽÜØî‡|HíçÞ½~y8ì}ŽÃmª×¸E£‡‘Y¾àèL‰‘ ¬òðžRìsìRç߸u% ¸¤Ä© ؾÆ}yÚ»‹ß~¾Vtí¤Ž½/TèáÖ&oîâ®ç\ñìËwÇM‘ùþæ0ŠðßÙ”.óô —dißVÚ6Žßó­—‹¨ï‘nj:l A†É·ìÜb©Ü÷D›xÝWC×W}çǹé­:äæç¹º˜|ÕwÜõûgDÃnkÂ7¹!ÈÜ@߈þòÉ®„šT?Ò¥MŸFZõjÖ­]£^Zöì›Ii߯[÷nÞ½}~\øpâªcûFÎÛvr˜šO.‹7*åèl¥O?ø|:è¶ÚÍn§Îüwñäù†ÏlÝ3eõâ½_Ç¿ýûùä¹3Ÿ ¼ø~þýMÇ/ÀЖ°@D0Aò¯A…pA ía"pB /Ä0C 'ÒïA?,,G$±DOD1EWd±EWŒP)³s«Æ Ùãͱó: LǬ0ARî#¨CD2I%—dÒÁ $ò¦(¤²Ê„‚Dˆ”¡´<@˸ôé-Çü願†dÈÈ&×d³M7ß„ËΦ ªºø¬›ÉNe+l³òþLë0A7£ÓÊÝä4Í…Ô„³QG…ÔID!ë3²J÷"ôηk 1ÁEO²î&“¯NKÕÔ>ñSC_M4RYg¥µÖÓž„5W]wåÕ"Fm6XaAĵWc=lRü†MÙUÿè×a§¥¶ÚÖŠE6Û^pV¢¾ ³‰YƒºôÏèìtŽ%hE³¶]wß- [mç…•[RîÅ7_}÷å·_ÿX_LÉMnÝ,áE8á`奷a‡îMZ…'¦¸É.Æ8c7æ¸c?9d‘G&¹d“OF9e•7fb—_†9f]‡¬XRî% gsÖ€•:h¡‡&ºh£F:i¥W6‰Û’|ö’$¨o æc»¢òÉgg{η§}oû⬳¾˜l¤ÉV{i·ß†;n¹ç¦{éI‡ü‰»¦†¼7)¬zšºËª­îë01)p‡Øî’q|;Yí¶ÍD»rÇͼ|l³+çÿ<ò´‡üsÊGg|òºOG=uÕW—ûnnYe‹o.{üJvª /¼L}/ΨᄀysÖ.rxãG>yå‘c{÷zÊǽ¸–eÆ>{í·–úê‡3|yS"¿|óÏG?}õ×g¿}÷߇?~ùç§¿ýÛ¿'.ü¢3²çŸþÿ÷_w²úЀD`¸@6ÐôÈýð'Ó Í˜‡? AÈcè@""»’AЄ'Da U¸B¶°€œàkô·²ÿÙÃgÜà<>BthC°ÇMæB"шGDbúð–D÷Md)#a ¯¥»“ÙÊþÛî±EŸqxä$ƒ ÓàÇ-1~¤ŒLDcH‘œñnÉß(F8ª1$ C'Åà̰dW´áï1–Mlb¿°E" …$ìNˆ` ‰é8ÇŒ<¥’={#&'9IMv“!c&7ùÉK^Ò’™4¥&%‰J§…r#u´c,UèJQ’’”­Då—8éJ6âR”lL"€V%8­Ýq|tIVC-’b @€<䡎U¬ÂäO¤ð3©]¥’Þää7}ÉJZ®r“§¤ä-ÉKtSœãTgÏÀùÊy²2ž¥”e>õ™¸ÈqŸ(ÁãEEdÿ¦F™#;@éL¾šH#™öOŠVÔ¢Åh ZÐ[Qñd+±!ð¶ Dþ"šè0$ÊÍŒ¶Ô¥/…iLA²QŽÆË£âÛØ@¹·Sžö´&$É£1iVSãÜ4§ët-ðéNS¡|:UªÎ QAé1‰ £b¬yùújó¾Ö¤’éKø"ëW;¶ÔâÍk"4fPõ-ç03™‘aNe¾VÅ3s© g¤ZUÂÒ+o#\1?BS¢Ôhj[{òÆ.ùÃûÈ îºÙ¹*F¯t½«_CkWÏŽ60œ­kaU«½« 4«CÝjG+ˆÓ€I6rS‹ˆ>`·ZÞöÿV@uíbµ[›Î–cd-«˜Äê»´¢5¹#³­o¥;]mµV±.qûáØœ‚µo½Kêr£æ]´‚WdÑ¥nzÕûÛ4»°Õîv»J[€¡w½÷Åo†¬«Søj—»µu®r¿V¤ x¼ã5/R?fßü6ØÁÚ¯P½çßùf ²È%S€ËÜ該GÍêƒE<âEøµ&îi{=·ØÅò§J²›â Ó×'³qŽu¼c÷˜› ±]Œ7ÂØšª§+éœè<'6Ì•NÉ C[ÛLW¼Å99tV~œØÒä(oîržkòç'fãúØÌg¦­m"Cµ³Á’È5²øœeÎQnÌO;Nrõ<¹;ç¹ÏvÆsÙ,‡ã)‹nЂ4G‡fF7Z|Cé¬wâøÇ;ž³£5½iNwšn-j3¥+ÿ-ß2ÿl§NËG'SV·ÚÕ¯fᤅÛ_—šdÑG®-{Ù}#_ôØJ`=lbÛØñ“õ{QÛ8¬ þÀµ>†‘‡T{, ö±µ½mn§Ð¤ø6? nrÛÜåF÷¹Õnv[%BÖÈ› Úlg[»Úbä›[°½jò¡“#ë„¥<Û'¢nÜà-üvˆîw»yÆÌ®ñ­«‚ôÚ²Ù ¿ûÝJŽ3ž÷ø)A>r2žÑß§$ÉÓ ò”«¼å%_9Ì>sW'Ü7ú>䜗iÙ[¥wm2;ƒì#ר5´Ÿ"²l£OäedùÓ½©N:v\œ!ø;Cóÿ¬SåR·úÓ¯Ns²ËÔæI>´Æ7Em#;wÏåÌ ×÷ºa–ˆ‡/`w¬ée|àß‘³sdÀófò€Åç€<ä§ž¸gVîzÄ“Ö÷`kü€&_ã¿gpP¾’Ÿ#!=ê=YËTâsðì+ü»å¹¢È `é©üNkˆÛúÈžO ÔW/ü×3—Z¥ë“ÿI‚û²œ­ïúñsÉËÖ³Þú%7þóE_ýN>ùÞ¯%%Ò ëB10µÑÑQóˆÌËxŽÇÔPæ MSs±ÏDȃl•ªH…¬ÔºB•rHIETÉÄÐÄ,WYÌ¼ÂÆEmŒÒâTôp•P™ÉJ•HÄÄ“÷à šä ÄHU„ ËÅ@È<Ô™”ÕoÿÔÓ#T½pñ‹Ïh?aU½J+™3•S,½ŒüÅf+BæÑ˜b1€Ô›*YlTÓ–Ð;• iõÆ;­Èqe׊DW(Pn¦;}×"1²;Ò0Ò@u;~%0„ÖÓK>êã¾±›>{J¥ïËÀÁ¥ÖÊ­’ÀÕ1ž­ˆ%úÙ3£-%`ê8«#'ñ»§±K\Ž«:8Ò\ËuÝÁÜk]Â}½Ù}Ý۽ص1Û2£Ý6ÞÅÝà’ MàEÜÂ¥§¡E**»µK¶Ôóݤ…Ÿ‚5T©åÛÄ,P± Où›ÍÒ^í^\}تßZßNùÞVqYq%ßɤ[ï½ÛÝ*×àÕ]ú2ÞhñYÇUÞÍ;YÔÊí“\IÂ%ÉÅ:ó[\ésêÚŽußOUYÖU…MIŽl`ûÿ`Y‰ï€É žÌ”=L‚ì`OõØFuUáµ×¿TDÊí]ò!…è¹Ï›<ú¹_¦á‚!^Ô™á,y?Ñ€Ú»$â!&â"6âµÄA¼{¢E¹áÓÉá¡ÛáÄë ¯üKJüƒ<}‘NødÏ·êbºôaø+à .K¢k?2îÌ-®Í/æ™#vã7†ã³tM5!:nã:¾ã² (y©ßSáöÊ™‡ð«½y«Ú{*ÁÏ;VM¾AÙHd)¾³”<~cÛaS6e׬eG–åKÎäótæZ.ÏMþ´|D~ålÖæmæf=Þ/&FaSücÄÍKéæ[n­VgXçvfçwvçx†çy–çz¦ç{¶ç|Æç}Öç~æçöç€èè‚&èƒ6è„Fè…Vè†fhHbÃ[âhib#güeá]{á‹ (AÕœÃ~¨=hO=4éƒÛÿã]®hºybƒà\±íWRÐÈ{™ 9j§è¥ßíhåZÝýU^‘Ö¥s*|?òËéq¾tº'™“ºC]¦>鄺fj‘³%•øfŠçÕii‡ðÙOùYTbæ+¥>>kµnÜïëé¨9£˜€§j¥Ã™Ô½¥ÇݵFk½®>í›j §Ç5kÈ•¾!ÛjÑXé¹ùê"Ñé0Ã3±êõq'êiò)KKb<ìÎÆ¨”gÞDžÆœó»ìò+ÏVmnm®íã!mªA^¼+ ÑÇ£6¿žì¦‰·ÖšmLê\åêµá>€áÆén£ôØÄEî” >8bnxÿìÕf ÁžlÐ#ìJì,Yl¹‰mY n Ö+.î*>2'Ö;`ñ+¿ã{î´¥ l¯íä %îû>nÅ¥ºUº¥ì#¿w¢¥ÜVjÃp¿.ìíËíÃ>ë^ò¤æ£n§ËêÃ%ÆUðÌÚî¡ëî¸ùn`ÞßÖÙ/ü8Á†ð7¶ÖV쮦Ћ¦.'ñ_@çn/^Ÿ.¯¯6 Îvñ¦ wé ‡›ï&,£Û®!…}°½ÌÒÅé~ê_‚jæKjÕå§¾vo¬»]»`*‡ò¯‹êœæq”(p뮺ÿ^,_ÇaoHœ¨×¨e_ rÃ->©ÀmþïFÿðöfn¿¾£p¼nëÒSoøŽ\D¯ð1?½¼.ìOóöâc !¿PK9U†Ø9KqýZÇÈ`q§{gôS_¡­éIgs'vó:ÙÐùVSGõZOuŠÃuak¿ÐVu?¶D:©sÑë×u’òæFðòÁnCq2pù™nç¶õ;Wö?‡ôHÏõ\gõ×6!O,ÖôDý "¯ïˆ@7‹ñ[\×kv?p g\ç«'?ÿÜý6ð2ÝHBswç:4Gõ€¾ ÷wíÖõkßu×îõ^æžsÉÕQ•¶U_ö°ñ1wÌ¢À­ù‡ˆZ_mŽvd3xlWéV·è&• õGùa+ø•ÿA^G3n§ª‰÷†‘®½’NùœW!–_ùlOx9{õu5×9wS vÚÚêd‹¢~ï-/Ú ÿi©†î,oð¤¸äE¹¦¾ê)GÝ÷¶¥ªÎzþÖùìÎs17ûÉåyŠóy­FH¥Y˜ýà¢`¢UÙ·.ò/™k§ªëk b°?tèStG_>@/?°ôÂoïµ{uwüÉ#^wÿ{tdX„å —ìˆÊP•åý·Í~Jõý¤_Þ¦"~¿7~·¾+W={_ï;w~æ)öÖsO{Ä–ôÕ¿þÝ,hð „ 2lèðáÀ Iø÷ÆŒIYìÈñ€>º÷æÐ²Ihwëã¹S‹VÎt8qʧçŽÎ|øAä®[¿~½8wìÒ­3OH{|ñïé»77I^·û’¬É³.};þùà]óo_>¼qûuÇ{þñ7}y‘Òƒ :ø „J8!…ZaRÀiˆÐo\Á‡×‡b…¨ÐˆºU"U(B¤¢g ^ø"Œ1Ê(a†&ÚØ¡z±hÞs#MÅâŽÙ•‡mDz¸T9î5#“M:‰!ŽJ&ådÔ XŸw^9`rX ¹¥X–dà}W: ˜eö§&lc–©f~Yö×\—iÊÉ¥Zú÷¦”Uÿ¹ø$ ^XcŸŸQYå˜ñy‰Þqnèè¢gÆ×èrAZ¥o®ç¢N:Z¢vº÷¨|˜‚*›º¹j¢é9÷Þ¥uJZèR z+® J+f‡òú+°Ánfk®Åº«°ùš,³Í:« ±Ñ»ì³oQ[-¶Ùj˱Òzû"²Ûþu­¸åš{nBÝ~»î„á¢k—p :ô!œžä`›NZ¤~I¾Ë¹vQ4»|0 ƒÛáyC†I]—ºÕ9dª’Xqœw:|׬ß§i¨ÿr¥FN!…ÔV3¤®Â-»ü2Ì3ºË£¥­ªZ¯uóˆ\¿§êwªªúŒæÇ@ß¼q]®ìιtÏ"ûU«R¡uQPED5GY'…òT*3Øa‹=öÌN›}6ÀL•5F¢¬ÑEq…ÖÛqí× ±<6ß}ûkÙh >8‡Ã¢¸÷߉+¾8…/m|ÚmEo^©Ú²Å”rJøöyþ9è¡‹>:éžÌ8ꩫΠã_Z&Ò¯VÚÆfÒL¦¥ø‰ùZî;ûÜð^"͹¸ˆ¯~<ò-·~;ñÍ;ÿ˜ñÉK?½·Ë?=ö“EO=÷ÝO›=øá_¶½÷å›?hÀâƒ_Ñø![_XÞéž??ý2¾¯>þ#¥_³ÍöRE‘n¨%/©ø+(ÿ‡«H£ýåÏyì›\ïÜw÷-kDãÉ“îÔv@rP÷k`þ8¹õ©kì\«d*¡ ï(ì ç÷AªO„” o wºòÐ{3¤aøJ'Ä!±ˆÙ)"“¨Äö°‰Òû!£(E©Ï‰V䧨Å-®ìŠ^T]¹(Æ1%)?9#Ó¨Æ5²±n|#ã(Ç9Ò±Žv¼¾F2ò±c¤ˆ2¡`†<$"©ÈE2²‘Ž|$$#)ÉIR²’–¼$&3©ÉMr²“žü$"í–G/Ö¨m )$(S©ÊU²²•®|%,c)ËY²24±%*qiJ@’RSËÿG>‰JSÎm#v+Y1Ûv·dºÒ ´|&4£)ÍiR³šžÄ¥QB'JŒ(U¤¡È.GyÅR¢%ɉ2b·c.“˜ì<ÙÛây7w–‘Ùe<ï‰Ì]®Óê¼g?çÙN‚üóÖ<(BªÐ…ÖoŒÜ6?Â?Ô€ómâ´"9Í(À" À?Òa®snÇ,)>áÙNzÖŸ(Í'A—™LgÊó¤-­ÛLjÒ ”¡>ý)Pƒ*T¡`Ó©©hVTQQÒ¦Xi *íyÓ—žtŸ05&OqšR©Ò \Õ*X¯jÓ”Ês¨f=+ZÓÚÊnÚçž5’¹ ªšE”©½4(Z1NB‹Td˜’d¦ZËØÁ¶°†]eQ'’K‡†³©€eˆ_+ÙÉR¶²–¥I‡"6ÿö®€½,hC+ÚÑ’v¨v§/A{ÇÕ²¶µ®}-lc+ÛÙÅ€Ž-ms«ÛÝò¶·¾ýíjO‹ÑÔ^¸Æ=.r“«ÜåÂV¸N$g+7± RL·ºÔ½®u3ÉÜír·»Þý.xyÑçw•ö)zÓ‹^{Ä“á}/|ã+ßù¶Ñ¹M„n- 0yø#þ@€?ö‹°·¢—¤/‚¬à+ؾ=Ä/b Ðßÿxè¸0Û{`s¸ÃþpoÌC§ç°<,|ath#ö$ˆc,㯀™½1ŽsŒD¶DÄ1$±&·°)l$‘pŠWŒih£ÅŽ,%i,å){ø–ÿ æqKÃÈ™2îqBþÃe>³™Ó\f ØÊn~óqO+¸uZ~ —;èåI ¹Ïa¾ÇÆlD(K2&Ñù‰œå¼E³„Ñ(éëK çI·QÒV‰¥kœèD'ØÎEÁ³m=ËI5‡9Ðc63)î‘ê骹Õ/޲KÍiHCúÄáë­m½×ZÛúѺÞ+®û ì\×:׿Vô¡{­W`[ÙÁ~6³‰MéK›¯º¶vJfݽZ„ÎÅÎv¯ÃÍëLç–Pm%è§]’gîy’¤s · ŽUÌâ¶°…r)çÕ“Œ4¦·îÛ‡àw¶¯gÍémßšÖ‡^Æ8¶npm3|רö´§<îƒûúâ÷ÈÂi-pnK¹ÈÒÍÕjÔâÕ’¤N5)¤ yÌ{·° m~GG“0a4Å9¾qˆËšã×öЮô£¼éÿöÇIžñ'û׿vÅ‘Ýqo3<ØP_6¹ËÝ™”÷xåÃmy%Ùkò[@Ü0ó’ÜcíIÂ5aö8î}ÑSÿ{¶ ¾KÓÙßJºËÎK–ž’j7Iª·PSÛúŸxï$à3¯ùØÊô\[6ÿ;yÑîø°·í[4Aî ¬}í¸<'7/ûÙÓ>¶ëö`y/ùøBR ±Å/äŽÕÃ] Ÿ¬=ò“¯|7Þ>펤ç6"ä{ÛBîèH‚ñA¹üís¿û7i>Ÿ_XPû±üæ/KâWþú‰Ÿ°ä??üãÿ±§_%ë§_ûy…¾?]š–?rýa™ýÞ}åÞ"í_F( BõBðCzᑎP^ c$ÕAúàƒ!`"1 7-àFÄ *  Ž Ž`·A’T·©HÅ Í• Ú A–¿¬ öà¸üŽ[`JÜŸ "‰`Ö°à .¡ &¡ ªÿÜ=u[I9“Ä\Ð Ž ] ¢É¨`zÓ\åL–á§ø JÅ‚Úâ]ã… G@^Ûð̹i¡Þ |ô &¢ÊK "«è̦!%6Ū\†Þj¦RVž?€?ìC6¹Ï#b‚b"F¢$ªâ’æâ¾Èb%ÖâD(Rý ¡Ž˜VBÞhèƒ?øƒŽ’£-&ãm!JáùäßzDJ!@åÚìƒ> £2nc³\¢â׊^#Éáî_¢ Öa'5r£;†7²„3š4’Þ!&a ê8£>Þ㿵ã;äóÄcfb8nbÖ!š#’#9²cÙ ¤D:A A~ 8Ö N$GšMEêâEÿòbFŽ@v¤IþËG6ã.þX/jdIž$L–KJvÄ<–O=Õ &ÔFÆ$ObËLZÍJvYKá 2dfÍ:"¥ î#DÊcO>å¶ü¤xÝV¡•`Nî#V.¤ ÎaSv T~å³HeMúÐPÚ£U. Ú!ªåR–ã?F$XÆ¥°ˆePêYYnØr3z_ö%òH‚#F"¤Y¹Mi&b&¦b¦’}#U–a.¦dN&eæLD`ªdH²äH¦D`ÜU¦*u¦h–&eêÒÉdÚXvÏMþ”aŽ•`i&ÒlÂÒHÂfmÊ&aš&o*&Tð`]e&MÖ%»Ý¥PE&J•rÆòÔrjUËysfUMuŠUtþSWµl’NMgo~'o¦EÈ,•påf enºæg{‚•w.çö”`5§uòÓu†•KÝ”?!ÓNIg1ÑçU§€žæ& yª&qâ^zúTd¨{ö§Sý§âMénÖSL Ô…Ô†Ê'vÖ†F¨~®Ô€–hb¢fc:åyÚå‚2TƒV‹š¨ŒÎh,å%!)‚®hqƨB½(þ(é'¥hA ¦Hîæq2\.i³”çTÿŠZ+ # âH$eˆ_f©–Ê‘Z¤‘r&’N’>Œ©0J)•ú†•6–n)›¶é¤ui`>¦'…"HŒ©™æQÒšº)Ÿö©ñƒ@ ª *¡ª¡&*¢.j¢¡“®&÷´¦# Ä0„"hlM¥©"í©Ÿ~*¨¢ ª¢–*£žª©–ª£æè—¢g˜>ÒAЩ‘Ö”‘¿1’§†ª®îêMŒª*ªkª ëª:&”vRºÈ8™Ç_I¯>+´Ê„¯òƒ5j3>j‚:Ÿq^éÉØ*-+‘4ë^š¥1ÛÏõLDºòݺF+´Nkµj±ªh«²è«Nj·ÿ~Äzb†k$åªM Û²áÚ±m±ìµ ¬¬IZ²}Ž×,Ø©«Â*ì³¹«Å¢¼Æ‘µÒ$¶ê¨‚Þ+mÆTÕì êƒ(öëhLÀ¬Ã¬ÀbÝ® ,è,¦-¬Ëb\ÌÞ¬Î&lÁ½¬º^,ÐZDÆþßOl¬Õtl½î(ÈR9ëA”¬Éc¿rj§:+O¼l×ù¬Ì,Ìnmàe­×æ¬ÖîlÎò,Ùb\кëÐ6£³‚Ó˜¨q´ºÉëµ²ªœV’Õ¦DçM阞,1Þªšæ-•™kÚî­-PzDxN4nãšÎÒ-ÇÚí±ÂؾØÇ?ñmÜ…ž ®á~n›"nÛÿb)AäCG˜®éž.Gq”±I„ä-å2žvÕ©HVÕҦ炮ïú¥èâQG˜nPI4®ê²në €‘5cì~æìºaíþàî¸V¸±ÐqÄ\صk£IlÅï®®mDI$o>Àò2/á-ô+íb’Žíî"­,ß-Ýjm蘆«ÿ]¬!ÚÄ9ÝÇ}êÚ–cAotð)8°F‡ëÒ*M>/œjfÒ~ìdé¯iµuo÷*›Ô[Ðypɉ›Óq[ Ý “\Ò}° \ £ðÒñÚÓ)Ú¾0ÂÍ0ÃÞð ëªùÊR@0q@ðÀìCìÃU¼®ÕX0ÒÞ-aqðþÖ0 g/ÓYñûpöúï £ðwœ{\ 0óo“0Ó•ñ;[Goÿê¯fÛ?èn!1 À/qןü^ðpzÿ¬¶òè:áY&òVbÃÐýl$C¬7ìÁnµÕð°yœÕñ¯wr'»p³UlÈm2'n(ûÝÕɱ%]×=Z+“o*ƒªèBž‘Í IÀï2(±/7¯ýAqôjb”må=ú£Rö£QeþöîïÒø>3‡/, Ѳ< 3ýJ￵åQ®¥ê­ 2%ï^¯4Ÿ³ìQsMÌj9Fn¡Îk‘Jñ8ÂMCÖóUf¥=ãª3£3?§3SkÑžrW.Œîs?'ôß©sô0ä#´BOô¤149ô6³d=2Ew´”Yôa4½ÊsB6r4q´G§4ˆMë?·4K¿­´KÇ4K¿sÝf4DGÒ¦ã7s¥U.3ê³9«´PO³L5LµQÓ1–²yfð!/íOçsV:$?6¤ JµV#RwuR{5â2õ“Ö¯ .²[â#S²%?Jc3õV¿µ›Š5¤R¤FáUkRVõ^g©\gkøm+Påõ^v÷õµ!ÿ5"#Ô1)c;KA“µa-vcOv°<67C¦’R¶fçˆek4fo6h£Kgÿßôg‡¶ioËhfDŸ6kcKjéj·¶l3ËkƒilÏ6nÿJm»ê,Î%Ivn7bì¶½fÒîò^ét®p/·’·Òn’‘¹-r#70Ii6â¯lf6sw·À<´jcR0…¢ÒúV÷u“it‹+ïüHИ ¾0OÅFôŽU ÈŽ”H %QÙ÷Chc[8·k0q„?tÄ'x!™®ç@v+w{ ÿ Ív x4ÊÅÔ „K¸«0b…+M %‡$‘¬@ ÏÐI‡³PÂ"€„8ŠCÛ ‰{ø‡køj¸¸ð(ʈ[8$¦x‹§; †€?µqgÄ[D‚ÿÿC“O·o«,w#‰}bíüGÕGÎì—âÑ0îLÌ•3Ê•¿·íLâ|sɦH¨Ð!šDÜIGœ¿9‘Ìù{¿ xÌy[€‡žÛ9æˆ ¬”ÊŽ "Ž„žg €‹Å‘#6TÛ#“;¹¤7¹ì1?Ä”îÃzÿ딯H•úë4ŒäX‰˜¯ÉœXLñ ÆÔ‹©Í–Œzªƒú¬“ºŸÃœãúì|É©çÉŸëútô9œ{¢cùr;°‡yš7G±F³kÊa4:û6"9°O:¶x¥?ð¥÷ò”nú•vz }Å¢{·™†´ãµ'’7¹»;ù¶€ç$1¸Ãª¸÷Ã#aç;}-F’«Ó»ûƒl;”GŸ”{DiˆDÈ Â/<Ã7¼Ã?<ÄG¼ÄO<ÅW¼Å_<Æg¼Æo<Çw¼Ç<Èkü'6!™wô¹Í¥#žvp«dM¹£ŸC$|È×¼Íß<Îç¼Îï<Ï÷¼Ï÷üeŠÔÈ?:"™÷PðÃ0òCÊãõ½Ÿ˜¹Æh¹¨øŽ­¯úv”:‘Ã|wÐüÏk|Gt=Ø{}HQ¼E„½ÙŸ=Ú‡=. =¿ÇR&ýÒÿvÓ“H­_N–ÏŽ«Û}¬cß¿º ×—ý ¾Çþ޽ÂþÇ+~Å3¾Ú#>á >ã;~ÚW¾å_þÅÿf‰SÿÛ×5&½½?(ýʇÒÜ›‡‹[Žÿ=©˜xê“xsŠÒºsþØK~HE~íßþ×Û>Hå~ï'¾ïÿ>ï ÿî¿â—=îÿ>ñ‹”á§óû>J(?òëþá?¿ò«WóC~î=zQ>æ?ø‡?ó‘vþºoè‹~%µ|SÄü[¸ÿS@÷?õ[õÛÿôc?âß?ï?@üûG@ ƒ L¸p!† "thbD…/&”8pâă3v¼è‘aIŠ'Q¦T¹’eK—/aÆ”9“fM›7cþ;°ó;}ò$ÀàRt%µ”iS§O¡F•ê”?üLÕÊ)O¯ÿ_Á†;–lY³gѦU»–¬Î?¾} 7.CC‚´Ëq¤Þ’ëÞ…H÷nà¼~5ÒŸ8ñ\¾$ñ>–ÜgeË—1gÖ¼™sÒ²C‹Mº•tiÓ§§ve»:ìO c]‹ÍšvmÛn9çÖ½›7N’/÷>œxqãÿJ%`T5jçÏ¡?Um›õìØ>]í©ýgöÙÔÁ‡‹ÛxyóçѧW¿ž}û”ÌGG'…¼)ýùòñ‹ÏÖ:PìÝyú¯§ ÜÏ@ñ<;PÁlÐÁ!ŒP )TK?¥¶*û–²9ó;mº ¯ ÐÄìNÅ )LÅaŒQÆi¬ÑF¶.$¾ÿ™ú°Ç DïòG¥sñÆ%kT’É'¡ŒRÊ)©œ0G­óH$‰DòÇûŠüRK¡±Ê3tÍ5ÙlÓÍ7a¼r*w©C;½ÓN=…ÔðË;ÉäJM8 =kÐBMTÑE •3Ä?}ÎLF)ÝéÐJ1ÍTÓMt4ÒO£›”ÓB/ÕÔSQMÕ+OQóRK©UTU×,u;ìhûî;Z¬]¿ö,aa“:bMD Ù™½qYþ*dõ4W‹Üs¾=±Pm]°¿Ÿµ±Ûf¡õ*\^‹6Ý__[íÜdÙ­Í×uÍZö[W¤W]ÛÞÝIÚiÃäÑÈ- øZÿçf…X\oÝÎ?íVñ:b&ǽWØy967E ôÅI†7XUDàµ;&yä_n-Å–Éõne“]^iÞµä›É ùd‰ÛýXE£5:_cn¶»˜¿½Øè¢Ÿ¾yé=^ú¬2L‚ÁæÓë±·JøAŸ?nšæ•ü9è3F9i·çZ×v;>úm¬‹¦ši õ|^¿7>yðÀ“u{hx¿mÀmnMÀxéVzñºñ¾ûoÍ7ùoÈFZoÌG_‹kPQ/{ÜûûYmËAw½ï%ã6âž|rܵž˜åÌïØöÛ…Ïï[}÷;b¬{§Ø»|Oœø&å¥O^hÞ­o:tÛ•×=wˆwGž÷ãûë§Ï[÷`¥ùW†Åçÿ{ëæR¯ŸÛ6û¥tutsåßÿS§÷6êœÎ~ÔÿØ´?. Œ!eÀ9™Æll’»ì¶¦w .d)œ½ôu¶²h­\!\\¡ÎE¬ÂÍe2ÁTŸ‚ñi`_³á«p¨• 2h(ÿñáD!‘ˆE4â¸Ã‡ù‡{U["û²îÀÏxàs^äÈ R‘xZœ©÷¼ókxïßËw4+b±b3Ëú¾ç»ÖµñŒe|"®¦¸F¶Ñ‰ ãg§±)’¬a &°Þ0†^{Õ¢¢D %K•´ä]®uIMn’“ôä'ub+ì #\ø8ç¾ÎUÎÿ‡°›™™å2øuîzñ“=×Bù…¬m¨„%ópÙÂØNt­”_ÞÆÈ´ 3vm›š0µÈ>OŠçS¥m`¨:uiKÖÊVŸˆ¤§ù©L %cUŸKÎ)™å;áON*q”<Û^å»×±²˜ñÚ\,E×ÏÒYÍ•*”ÈÖ¶½Ï­¡Yë§ÍøÙ7dÖ² ŸKèE]y9X-•ù„ÞF;ø•lB'¼P´ ¡uZ’^§`R ’”ÆT“4Ý$Mm*Ïyš\ô)•Bº¯MÔ¤Ÿ’äÐéNÁ(õCcùGNsúT© $¦>¡jU­úT›FU«XªT±ŠÓ¬ æ¨?ÿ5ëYÑj¢õQeÝORW ÓA¡S¦Yši]¿V«r•ªWÅN^§z×»ø0KnMëakÖµ²5?†=gL™Š§J¦T¤\Ý*X¯XÍöªxÅéWûÙÏ’•§‰5íiѵXÆÊDZàIêœ.IYºê”¶µekQ›[ÝrJµ«…n±É×w ×¶Å5.H€»[å.Q½õ-ÂJÜãN—ºÔM.s±›Ý39÷¹÷cÑl«^ñÞ6ºÚ5ïy™ÄÝî–æº†„,l—š¡ñÎw§Êò£5(Ì^™°:k™¥²äµP*¢—Jê]¯ê^W»¾TC`YJeñZSêŽÖ¸ô¬×“úŹbP¿,ä°`Yô» •À¤ßë×ÞÕÀU¬)UêQüã¢ÑµªZ•é_»ÚWÌδŗµkV÷Z×°ÞX’f&CÿÙL%”t™ã()E62•!ŽiP[æB9ª´æñíšÑdfÔ¨v;—øAÿF±TTŒ#Èvu¬/ÊÐf[cÎ ù?™Åìœu¼`6 öÎ|ö«[?ª8}9¡„ƒ&”ïyå4RYs²Ër’K‡OÊiT{#Î`ÍrIæ™ùÌåLðšó¬RK`L«\C+dUïxÕ ­hÛjÁYÌ^Ô# 7ÇÅR/‹>“ù,z1`ÓиñúÄHQáñº{·¦£EëHeMψÓvJšM÷^Xe‰Ôà¥ïM¿Jý0-cž¶„RxîôžØÚ‘¶…ˆ»No‡›ÞšÜa»ño}ï›ßý~ïw§eÞõ6øqïM”}`á gøÃqˆO\â§øÅ-žqŒo\ãçÿøÇ=r\ä%'ùÉMžr”¯\å-gùË]¾rW0àø8Z@SR+§)îNÂ/sŸèE7úÑ‘N™—j(4g·¿¡ûiƒh%Àö±h]]çGÒ3tDVC,ii;YR˜â† mûÛá÷Þd#t·û\X²tµþàO‡ºwQ:u™‘"%èIÖµ>öU)Çí)¡{Mî®’ÇÛd bgªU Ÿ’³»4ó'™üp&ÿy¹žô¥wÉãGâyÊ4þóz×oÓûŸ¿Gý»<çåO:O‘þGÆFñIE²¹4ä/€~Ûï‹ð¥î±¼qœû±œñ?>òÿƒ}·søQ½÷¹|ˆ˜žüå;ê¯ýð«]%®GÞl`ÿ¿Ïž47ßší[鯔àúð:?Üi)oüÄÏ1¶¯û #òRµ#"–ƒéxί0I%(ËÁª/û<¯û²oý ð­ïîÂ%DÏüLðÓý4ðYÐúNÂýÆ"þÈ¢æÚÍþöNðfGú BüOˆÂ)²b5Ð?p9pY¯‰püŒðùXŠ%.Ð÷Ò1”¯Yð‡ K½ð çîúc·o QÅBcpþèO‡Ê‹6rŽê^¢÷ OBì*#ípù°IOæ’Ãéd¯ ÙëÐ Ý+3è0Áý°ñQPæ,öbŒ Qê q3îà8±=ñA1EN+Ѭöâé)F±Þ6QžìøÁ @›Zñq1uqs±)CPÑ ?œ¢"KHÁ±àxѶ^‘ìL¥Àºn§ªp ãmµq¹Q§®Ñ¯N­³ØÌÞ$Ð1ÑÌW ²o© Æz$ÂBM³ñ.šñÇžQ?d‡B+bM¿¯ê± ò 2¶íŒÂ «ÿS¥,y.ï‡r 9ÄêÆn¬ÆÆêë,#ÿê#ÌÆL²#9‹²$P¥ö*«Ül4þÁ@&àë|LÇ` ÏúL'yL'WÏz´r(‰2O °TM°BÒ’|QþQ"=M‘ãý„ba (GÒ³²2%·Ò#ë,'k+Ÿê3RÔìÄ`B&iÒ&r³î,”Ò'S­.)‹2/õ’-ÉÇäÌ!IkïÌ*SCÕ¬ÁrÐ‘ÑæÆp2Ïî,#ó1%S(%“,+‰©øáùa3{h>ò!`êË$ïê/))õ Ïp 0÷ò5as¼Z%ß2°H30?ƒïÿœò óÚ 3ÛˆqCâËÔ“8eÓ_žªâ몢9 ú!4cs:©³:‡²)g {ÓsžHÁÿš‚Ç 2/“Sž‹#­3=Õs=G;×ð){󀤒=­k%éó>ñ3?Ò=ÓP; “;gp<õs“ÊÓ;@æöÁtA´A+‰?­ @cPÛŠ”@@3‘¥4‰Æ¾R(Gó6‡«“γº:‹°ÎsELCT=I4ªÄq)"wóã3‡ñ1i8¡¢&; çÑE½±6ã‰C3‹ìØ A´ISÏ$¬¶ ò&'Ë<Ò²ÞRÎæñE_Ô5et#ñò!3"ÿsÔ7wÔ_Lë˜TMS*CG=KLãÈŽÒ/µRKOSܺóCZÔ:´I×Ô÷:Ò#Ã4ÔdÔ$çO-3$µQeÍÕÀ1K—Ò)l.yRD¹ô ½tÁòt/ BÌ?¡’BÓÐO;“”M´*ú’ÕöÌPÃ2ȸ2¯”ÎÄ2OÉò/¯¤ŒÓ2ã²J=ëQÓWÔQëR.!S©T ƒu!-•Y3Õ 7ÕPsK‘ËF³>s”T#ÔT—j©HƒtF‡u' õRL½*'ƒL%÷Î,ON=)ESÕ óV’6ÅÑY?²^MSKá2K•6S“Jg3Z‰ò`·tFIôZÇôFËÔLYaá©@çµa)–“ˆÔZ3¶cÅ TEJT%’[µË>‡ c=6eU!AvUDI6»Lvei¶fï³eßL[ã3f±kfÍ3“6Öf…vh§ gýåeƒ‘g™Ë>Ñt²ZS4ec‹FÍ“$[Œ`±Ö¸NÔ¶‚–h[ñK÷'QÖhÿáƒ7ËTi—‹iãJ¦ô!ÜÖÿ(++zâIá `»6Ö*3]3J½V?ëTI2?[ßÓl·õ7ÕMm=t°Ú–ò|¹”¢ÇÊ5(•’jãò.õ,o$òQ)õÕàÒr5+2Ïõnûö¸ü,Lót5÷a³ÕpwqÕ"|ú‹¿j7ÌÌ-ÓÂBq3Ó®¨ñPkÓXwÒ^'³U‘µ2u_ŸuH¶\—2…SS—·Vo7Ë5673bå3Ä:Œ_ÄCÄ*Äwãu²`ÌZ™·$¥·E]—4WÔj³¶,ERRöU³·`µRlõ$«—/óêo¯tl ·?uv;iwæÍ}d§ÿaÆÃ.mÙŽÇÑ6*eìÉbã){Â1÷=X?ÉVB; m%ÊÃzçË*j„Xha”)Ë4ÌRÞUkòƒi¸†M‰º×{OŠDþ‹‹øˆmÀ§Ê̓tWr~8ŸŠb|Ö†™¸‰ç«+Ä-Š¡8‡½—„ÇmT–¸Hx‹¹XнxŠÉT‡­X·Ì÷[ÉJ‰eÕ^éK¸PZkj†5–¶¤ÖD»xoGTmŽö‹¿8vqôpkw‰-ÊØÆœqŽ RJñØK´n;±9¶Ž¹–oO’}©—ÁxŠýX‡uô°¤(Ùœ¨t‰@ÙaÔ¶OáU®ï–ÃM÷·xûì\Õ6YósÖ\úélHûµ–çŒs£=éVU’'ùyñ6–õX 2“øŠ¸R '˜°Ì™JqWWGí@¿ªtÂNy¹Yg™\¿ÙRe9Q§—Z·tù’‰Ws+—˜Y!›µkt™íy“9yŒÑ„|×£öÉ¥b¸i+ ëþÁêþ!þ›7œÿ’}_m—ßùjó7O×’)5V…9 v†=—ÅSœ/žéø^Ö¢ÉÑžû¸pÿxvÕm?²Ø“Úê4’EÚHkš<™9“ñYŒŸ™Ì^ú¦ºŽQúžUš“w¸¥o#†ƒz©‰y¨SÚ€e‘:<~š“bqkQA™z«A8§¥ÿx§yªÁ£%«G£‘ƒwÅkŽ¡Ô‘mz­“•Ekõ­¹”à—F6™½Z§‹:Ÿ{Àøk…ü‰Tzm,”:SýQH9önKšÞ7ÜìVR¹­ëº‘•õMó5’š¯¡z¥¥:Fte˜ía¢ ØpÇ´ëh”¹'‰«Éj’ †÷T í¤9br&{Â-_ùY/][4y÷xa™ÕÕ’}›.õŠV“ò–Cú²ùVxùrõº³¿º¯yZFH‡š‹í‹¦iØÇ—¨’Ÿž§šÈ:•I-Õ·ÛÒ•#Úy5’ï—]‰«Õ—3w¾¡×`‡ºÛ®;wyß™)÷ZOUZSþZ¨ÿ p,ÇʪY h ØúÙËJ¦¼yt3ƒT>ó Es®³×¡ï´sÃѸZ¢ýw¾CÔ£#µ~9lÃd;@S¹GÝq%U`ãšQ1—­Õz͉ÜÈ[œ€ÛœÉß\·Çz\û}v­ŠîÈx$8Œ|íµ…í5(œ©Ž¢*®"Hù¡ÏáÔ«2šÅ››Ð‰ŽëT]y:òÏ_ÄÜÍ1·EË÷Å»Æv‘Íš„¸gÀûÁüÙTÏ1‰•A=HE—›w«¢yû¾µÕvuÃÙU‹\™]dWÔPÑgθ¢ˆMyÜÛ)JÒÂ} î¼Bó¼¬kÝùõ^ýÜL\éÚ£]Ê¿±¾[½€#TŸ„Öø¬6ÝŒá]˜õ›‘éWaUS~é}e㛾g¼ž¹÷ɼÌWãÌ¿µ^>ãy‰b]Û+ÅßKÖ,4~äiöF'žâ×äQ~åÑÿë¨?žåwæe~æçGå'–æ çu~çËvSl~iy>èeÞåõ´zd^蕞ˆžQ’^¹ž~é¥>µøÝA¢žŒ§>ëÕ­éåêsK”þ«Îç<^½„Txï ݤ­^Ö‡ì×»uœÎfšª„ëÅëQK”Â7À¼eïÃÌä>B‚'wyÄ ¨ü~î Mì>Qðþ´ô¾ÛÿÉZ†„ØÞÈ ¤ ÂÓGÑ íÑÀ¬ŸéÅy–éÛ½Ì܉iÜ‹¡†¸„-‹ ‡ÁWßÉ|}Óª¾Aß´"µm‚KÑâüÂz_ÜOØõÇ£V¿Ë ­|‚]í-ÿŸXø ¢¿øYÿ¿…êõ¡-¢šLÀ?N8>üÅü“(÷ ì»ÈŠŽøi‚¸”\ø‹Xµæôu ð+½í]›c‚éj8Jý†48`B 6TøÐ¡Âƒ#FtÈp`Š'Bܘq¡Æƒ -fDxÒ#B"‚T‰r¡Á‰/9μ‰3§Î;Iõû 4¨Ð¡D‹=Š4éÐÿx:} 5ªÔ©T«ZÙôêÕŽZ»æäê*د)Ú=‹¶ëذµ¶M ·«O¥tëÚ½[”iܽ|ûÂÍê7°àÁ„ >Œ8±â‚sñ:~ 9¨ÞÅ”+Sl9sܵ39üé'×ÐK›];r'é•hWÁËÔ ;gãÈ´k';·f̺ٚlYñcI™¿iŠ„Höá˶ʃT™:äÊâÎ…cM²$r›$Ÿ[—¨q8pŽÃ_yôÞšgÛ~ÿ'nöôó®_;M–»ï7~Òr}^¦õ—šÝÕ‚ý5RG ¾†`€ÙYÓ„F¸¡tè’ëá·˜{ñÙ|$®È×},Še ÄŨá‡2~¡z¦Õ(âH ncŽyã~<iã‘ *É$Eǽˆÿ˜‰(Ny—ŠP^é•‹X¦µšW]n æ—§Y˜”Tžy›–d®É“šl¾ gœr^i&šveåœsº©gŸ~þ ¨_uÞI¨||z塈.Êh£Ž2Vh¤x*ú(}”VŠi¦šB9¨¤hæ¹i}—†Jj©¦&Ö©§T‚zjl£¶ k¬²Ê¥ªª¬ÎJÙ«¸îÊk¯¥Z뉷új˜®Ä‹ì¦À ß°Éfì³Ò-l¤¶,³¶@J·Þ~ n¸âŽKn¹æž‹nºê®Ë®¸ÎH hñ‚&§˜„ýÈÚgÚ;-NÕ¶‡­¶LpÁB½«¯rèu†asn'wÜM ño<*,ÞÕá›Ð0F ö«Õ¿™]ëT¶ŸŒrÊ!ü`’ ©¼{ÈpYNÒüß‚Âi˜Ç`ùè$¼ Wõ*)ÿMŠNIçôÑh‘Ì“É*OMuÕ@±,¡ˆA 8ãÃ]/IdËBÊtØü †ïX¯í;ôUEæ4·Ýþº´·¿rÛÔÜ^AÝ“Õ~ÿ øÕ"'v¶U…·MíTqã-··MgõíãN/-2ßJŽyæ(³Œxç­¾}wÞ3·Ñ¦7}·\kÎzëµrîyì¡êzôÑXÙNPVµ7Å{îºçÂÁ‹AŠÐ8XAeep†û#߀ØÇ¾êÐH&äÙØ²ÆÃ"F?Ì— ùSÄfê‚4lâÔ°§1%JqŠRa¢¯h0(Rq‹\¿Ø:-vqŒd4ˆÁˆF[q¯ŒlœâÓGB‰±t”âãˆÇU­±Ž|TÞóÈfrí±±€ó‰ÈD*r‘ŒläîÞ2HTá/”dÖ ‰+C’éZ`‰d”&YÉPJê’˜”•&ÁÄÉ›xò0Þ›ÉE Kº²”°:åY€ØÂ°¤+[1b/©ÒJ3Ær˜wš%-OeËô±äp=ä/kf‰°*ÁÊ„1¯9%c³TÉd kt–]¤Zj{8ÉsNá›ì¤6·ªnzé›BÛ›3 7õšël§?ñòNxjJž/gAVi˜jþêŸ ]Bú(‚²È ÁÛd?ŠQþA´m]EÊÊ‹ft¤’yèF¡”ªt¥,m©K_ªRUÚo¦4—HIJRžt§¡z%N)©Sž Õ‚?-jI‡ŠTùÔ¨x jRŸú§¥2ŽN…ªUå$Õ©¢±ªWíêš²ªÕ/rÕ«d¥S@;analog-ce-6.0.17/how-to/iis/index.html000066400000000000000000000341141406366436600174520ustar00rootroot00000000000000 HOW-To Configure IIS for use with Analog

HOW-TO
Configure Internet Information Services for use with
Analog

Copyright © 2002 by Christopher G. Lewis
Rights are given by the copyright holder to reproduce, distribute, modify, and create derivative works of this document as long as the above original copyright is not removed.
Originally written 2002-04-29. Last update 2002-05-17.

Purpose

Analog is claimed as the most popular web logfile analyzer in the world. (Details). While originally written for unix systems, Analog has supported Win32 since version 1.9beta4 (Mar-1996) and has had native Win32 support since 2.0 (Feb-1997).  Configuring IIS correctly greatly simplifies the use of Analog, and will allow for much better reporting.

System

This example was developed and tested using a default install of Windows 2000 server running IIS 5.0 with SP2 and all current security patches installed. It should be applicable to Windows NT 4.0 with IIS 4.0, and also the new Windows .NET servers which are currently in beta.

This sample assumes that Windows 2000 Server or Advanced Server is installed on the machine without IIS.

Installing Internet Information Services

The basic method for installing IIS is to use the Add/Remove Programs control panel application, and to select Add/Remove Windows Components.  Select the Internet Information Services (IIS) checkbox, and click the Details button.  Check the appropriate check boxes for your installation needs.

IIS Configuration

Configuring Internet Information Services

There are some simple steps to configure IIS to ensure that Analog functions properly.  I'll also include some of my suggestions for log file directories which simplifies the use of IIS, and moves the log files off of the system drive.

Default Configuration

The default IIS configuration looks like this:

Your first step is to configure the web server logs to gather all the information that Analog will need.

Configuring the entire server to support Analog

Right click on the server (in this case NTLewis11) and select Properties to bring up the server Properties page.

Click the Edit button in the Master Properties frame.

Changes to make to this screen:

Make sure that you change the Active log Format to "W3C Extended Log File Format"

Click the Properties button in the Enable Logging frame.

Changes to make to this screen:

Make sure that the New Log Time Period is set to your desired rotation period.  A typical setting would be for Daily rotation, although I imagine in a very high volume site, you might want to select hourly.

You can check the "Use local time for file naming and rollover" checkbox.  This means that your log file rotation will occur at midnight local time rather than midnight GMT.  Note that IIS will still log web hits using GMT time no matter what this check box is set to.  To compensate for GMT time formatting, you will need a LOGTIMEOFFSET command before your LOGFILE  command.  Since this offset is independent of day light savings, you will need to change this twice a year in order to produce the correct times through Analog.

Change the Log File directory to something a little easier to find.  On my default system installation (C: for System, D: for first CD-ROM, E: for first data disk), I always put my log files into E:\LogFiles, and then compress this folder using NTFS compression, since the log files compress relatively well.

Click on the Extended Properties tab.

Changes to make to this screen:

Make sure that both the Date and Time check boxes are checked.  To simplify my installations, I check every Extended Property checkbox.  There are some specific items that could probably not be included (such as Server Port for a port 80 only server), but additional items typically don't add much to the file size of the log files.

In a typical server installation, do not check the Process Accounting checkbox.  At this time, I do not believe Analog will process those lines.

Make sure that the following are checked:

  • Date
  • Time
  • Client IP Address
  • User Name
  • Server Name
  • Server IP Address
  • Method
  • URI Stem
  • URI Query
  • Protocol Status
  • Bytes Sent
  • Bytes Received
  • Time Taken
  • User Agent
  • Referrer
  • Cookie

Note: By using W3C Extended format, your Analog.CFG file will not need a LOGFORMAT line

Configuring a single web site to support Analog

Configuring a single IIS web site to support Analog is similar to configuring the entire server.  Right click on the web site you'd like to configure, and select Properties to bring up the web site Properties page.

Follow the above steps to configure the Active log format and the extended properties for your log files.

Analog Configuration File for IIS

The basic analog.cfg file that I use has some slight changes to it to accommodate IIS.  I've added a set of  LOGTIMEOFFSET commands to deal with IIS's GMT logging (which need to be changed in October and April), and DNS commands for host resolution.  I've also eliminated some specific files and directories for Exchange's Web Access and Front Page.  Lines that I've added are in Red.

# Configuration file for analog 5.1
# See http://www.analog.cx/
#
# Here are a couple of configuration commands to get you started. Add any more
# you like from the Readme.
#
# Lines starting with # are comments.
#
# There is a much more extensive configuration file in examples/big.cfg
#
# If you need a LOGFORMAT command (most people don't -- try it without first!),
# it must go here, above the LOGFILE commands.
#LOGFILE logfile.log

#CST (Winter)
#LOGTIMEOFFSET -360
#CDT (Summer)
LOGTIMEOFFSET -300

LOGFILE E:\LogFiles\W3SVC1\ex*.log 

HOSTNAME "ChristopherLewis.com"
HOSTURL http://www.ChristopherLewis.com/

BROWOUTPUTALIAS IWENG AOL
SUBBROW */*
SUBTYPE *.gz,*.Z

LANGUAGE US-ENGLISH

# OSCHARTEXPAND Windows
# Add whichever of these types of pages you have on your server, or others.
# PAGEINCLUDE *.shtml
# PAGEINCLUDE *.asp
# PAGEINCLUDE *.jsp
# PAGEINCLUDE *.cfm
# PAGEINCLUDE *.pl
# PAGEINCLUDE *.php
SEARCHENGINE http://*altavista.*/* q
SEARCHENGINE http://*yahoo.*/* p
SEARCHENGINE http://*google.*/* q
SEARCHENGINE http://*lycos.*/* query
SEARCHENGINE http://*aol.*/* query
SEARCHENGINE http://*excite.*/* search
SEARCHENGINE http://*go2net.*/* general
SEARCHENGINE http://*metacrawler.*/* general
SEARCHENGINE http://*msn.*/* MT
SEARCHENGINE http://*hotbot.com/* MT
SEARCHENGINE http://*netscape.*/* search
SEARCHENGINE http://*looksmart.*/* key
SEARCHENGINE http://*infoseek.*/* qt
SEARCHENGINE http://*webcrawler.*/* search,searchText
SEARCHENGINE http://*goto.*/* Keywords
SEARCHENGINE http://*snap.*/* keyword
SEARCHENGINE http://*dogpile.*/* q
SEARCHENGINE http://*askjeeves.*/* ask
SEARCHENGINE http://*ask.*/* ask
SEARCHENGINE http://*aj.*/* ask
SEARCHENGINE http://*directhit.*/* qry
SEARCHENGINE http://*alltheweb.*/* query
SEARCHENGINE http://*northernlight.*/* qr
SEARCHENGINE http://*nlsearch.*/* qr
SEARCHENGINE http://*dmoz.*/* search
SEARCHENGINE http://*newhoo.*/* search
SEARCHENGINE http://*netfind.*/* query,search,s
SEARCHENGINE http://*/netfind* query
SEARCHENGINE http://*/pursuit query
ROBOTINCLUDE REGEXPI:robot
ROBOTINCLUDE REGEXPI:spider
ROBOTINCLUDE REGEXPI:crawler
ROBOTINCLUDE Googlebot*
ROBOTINCLUDE Infoseek*
ROBOTINCLUDE Scooter*
ROBOTINCLUDE Slurp*
ROBOTINCLUDE Ultraseek*
TYPEALIAS .html ".html [Hypertext Markup Language]"
TYPEALIAS .htm ".htm [Hypertext Markup Language]"
TYPEALIAS .shtml ".shtml [Server-parsed HTML]"
TYPEALIAS .ps ".ps [PostScript]"
TYPEALIAS .gz ".gz [Gzip compressed files]"
TYPEALIAS .tar.gz ".tar.gz [Compressed archives]"
TYPEALIAS .jpg ".jpg [JPEG graphics]"
TYPEALIAS .jpeg ".jpeg [JPEG graphics]"
TYPEALIAS .gif ".gif [GIF graphics]"
TYPEALIAS .png ".png [PNG graphics]"
TYPEALIAS .txt ".txt [Plain text]"
TYPEALIAS .cgi ".cgi [CGI scripts]"
TYPEALIAS .pl ".pl [Perl scripts]"
TYPEALIAS .css ".css [Cascading Style Sheets]"
TYPEALIAS .class ".class [Java class files]"
TYPEALIAS .pdf ".pdf [Adobe Portable Document Format]"
TYPEALIAS .zip ".zip [Zip archives]"
TYPEALIAS .hqx ".hqx [Macintosh BinHex files]"
TYPEALIAS .exe ".exe [Executables]"
TYPEALIAS .wav ".wav [WAV sound files]"
TYPEALIAS .avi ".avi [AVI movies]"
TYPEALIAS .arc ".arc [Compressed archives]"
TYPEALIAS .mid ".mid [MIDI sound files]"
TYPEALIAS .mp3 ".mp3 [MP3 sound files]"
TYPEALIAS .doc ".doc [Microsoft Word document]"
TYPEALIAS .rtf ".rtf [Rich Text Format]"
TYPEALIAS .mov ".mov [Quick Time movie]"
TYPEALIAS .mpg ".mpg [MPEG movie]"
TYPEALIAS .mpeg ".mpeg [MPEG movie]"
TYPEALIAS .asp ".asp [Active Server Pages]"
TYPEALIAS .jsp ".jsp [Java Server Pages]"
TYPEALIAS .cfm ".cfm [Cold Fusion]"
TYPEALIAS .php ".php [PHP]"
TYPEALIAS .js ".js [JavaScript code]"

#DNS Stuff
DNSFILE dnscache
DNS WRITE

#Exclude Exchange
FILEEXCLUDE /Exchange
FILEEXCLUDE /Exchange/*

#Exclude Front Page stuff
FILEEXCLUDE /_vti_bin/*
FILEEXCLUDE /_derived/*
FILEEXCLUDE /_themes/*
FILEEXCLUDE /_vti_inf.html

#minimum Requests for Daily reports... These are overridded by Analog_Run.vbs for Monthly
REQFLOOR 1r
ORGFLOOR 1r
REFFLOOR 1r
REFSITEFLOOR 1r
HOSTFLOOR 1r

Conclusion

Hopefully, this will help you out with configuring IIS for use with Analog.  For a VBScript that performs Daily, Weekly, and Monthly reporting, please see my web site at HTTP://www.ChristopherLewis.com.


Back to index of How-To's

analog-ce-6.0.17/how-to/index.html000066400000000000000000000027211406366436600166650ustar00rootroot00000000000000 Analog How-To's

How-To's for analog


Here is a collection of "How-To's" for analog. They're meant to be complementary to the program documentation by describing how to use analog in particular situations. They're not written by me, but by other people who've faced these situations themselves, and who've found these methods to work. Thanks to all the authors for sharing their experience!
Stephen Turner
19 December 2004
analog-ce-6.0.17/how-to/logrotat/000077500000000000000000000000001406366436600165215ustar00rootroot00000000000000analog-ce-6.0.17/how-to/logrotat/index.html000066400000000000000000000172371406366436600205300ustar00rootroot00000000000000 Analog and web server logfile rollovers

HOW-TO
Rotate Analog and web server logfiles

This HOW-TO written by Brian Clifton with thanks to Karel Kerezman
Originally written 2000-06-29. Last update 2002-01-04.

Purpose

Analog is claimed as the most popular web logfile analyser in the world. (Details). Whether running multiple virtual hosts or a single root web server, a useful feature is to run Analog and then roll over both the logfile just analysed and the Analog report file. At the same time, the logfile can be compressed and the Analog report e-mailed to yourself or the virtual host client. This can be achieved quite simply using crontab and logrotate.

System

This example was developed and tested using a default install of RedHat 6.1 using Apache v1.3.9-8 and Analog v4.11. Also running on RedHat 7.0 using Apache 1.3.14.  Please note, this is just one example and is not the only method of achieving the same goal!

Schematic example

Each week (or any set time period):

  • Analog runs on the selected log file
  • rotate and compress logfile
  • rotate Analog report
  • e-mail report to admin (or any e-mail address)
  • After 4 weeks (or any number) overwrite files with new ones

This results in the following files being created:

  • combined_log.1.gz
  • combined_log.2.gz
  • combined_log.3.gz
  • combined_log.4.gz
  • combined_log.html.1
  • combined_log.html.2
  • combined_log.html.3
  • combined_log.html.4

By this method combined_log.html has no meaning as upon creation it is immediately rotated. In this example, apache is using the 'combined' log format described in http.conf e.g.

# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

<VirtualHost www.adomain.tld>
...
...
CustomLog /home/httpd/path_to_home_dir/logs_dir/name_of_log_file combined
</VirtualHost>

 

Method

Each minute, the system crontab checks what jobs require scheduling. Scheduling is set in the etc/crontab file.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# column headings - thanks Toby
# mins, hr, date, month, day, command

# run-parts
# Min Hr Date Month Day Owner Command File
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

and what jobs are to be run is described in for example /etc/cron.weekly. In the above example, the directory /etc/cron.weekly is checked at 04:22 every Sunday morning.

My /etc/cron.weekly directory contains a :

logrotate
makewhatis.cron
slocate.cron
tmpwatch

The important file is logrotate:

#!/bin/sh
#added by bc 23/5/00 to rotate apache logs
/usr/bin/analog -G +g/home/httpd/path_to analogue_cfg file/vdomain.cfg

/usr/sbin/logrotate /etc/logrotate.conf

The third line runs Analog for a virtual host. The last line does the rotation. logrotate.conf contains:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors your@emailaddress

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

/var/log/lastlog {
monthly
rotate 1
}

# system-specific logs may be configured here
# Added by BC 22/5/00

# rotate log file:
/home/httpd/company-domains.net/logs/combined_log {
ifempty
copytruncate
rotate 4
weekly
mailfirst 
#mail your@emailaddress
errors your@emailaddress
compress
postrotate
/usr/bin/killall -HUP httpd
endscript
}

# rotate Analog report:
/home/httpd/company-domains.net/logs/combined_log.html {
ifempty
copytruncate
rotate 4
weekly
mailfirst 
mail your@emailaddress
errors your@emailaddress
nocompress
}

Note the first part of this file (up to # Added by BC 22/5/00) sets default parameters. Below my comment, parameters over-ride the defaults. One caveat of the default parameters is:

 # send errors to root
errors your@emailaddress

This does not work as etc/crontab has: MAILTO=root which over-rides that set in logrotate.conf

The part that does the rotating/compressing/e-mailing, follows the comment:

# system-specific logs may be configured here
# Added by BC 22/5/00

Read man logrotate for details concerning what options may be useful to you. Another caveat is that the man file appears to indicate the order of the commands is un-important. For example (RedHat 6.1):

nocompress

for /var/log/news/* appears after endscript. However changing this to compress will not work. It must come above postrotate.


Brian Clifton

Back to index of How-To's

analog-ce-6.0.17/how-to/startwin/000077500000000000000000000000001406366436600165415ustar00rootroot00000000000000analog-ce-6.0.17/how-to/startwin/analog.directory.001.png000066400000000000000000000457331406366436600230260ustar00rootroot00000000000000‰PNG  IHDR옖 átIMEÒ™J{ pHYs  ÒÝ~ügAMA± üaKjIDATxÚí½ÐÅ}ç9oŠÂ/òm"ÅwÅŸ…x%ì²1P ½Ô½ulYŠÏçØ1åg©³Öj_Å©5˜°Þ`ë= å$ì8ë½{Sx˰)¼‡ åHÊeK/¸üêuÊ™ H·#S9ç%NŒdïm½7ÏÓï;ê·»§§»§§gžy>^FóôôôŸ_÷Ì|§»§{âØ÷žÌFŠ[n»ãœüŸË¯zkÛ)peïÞ½ùöñãé¿zªíôxð m' „säÿãûÿ]X(ËË.¾&´Óü˜ãsñæ]i&š‰®¹Ü-[¼5˜»øÑ­‰$ÌžNÑ9f0<:-°f£k(wÃË|Ä®£®ôz¹‹Wz·rçXÛãØ÷Þ\ìÓ#É9–cŸ»ãKòÏ[?ýá¶S ³¼ü[îž·mÛvèÐ!/ÿ‡ß‹8K¦TÄä ffFiŠš@ÇŒŽ_ü<ôÈãaþëœU`1« fNvº¨]e޲æÕç¾¸î ·x°‹œþþÏ|{Þ?û7®þÿË÷úÆLÀßÜ=HÀ¯|¬mK¨\qõµe‡š˜—îÏs33r1Sü^\Üùês_Z÷†“+Ù÷º7Ül ëÕç¾°Æó¥’8§OÞ+ÿÌ%‹¯vé,g^øŒüsò’»æè‹pöÐÅ¿§žûâ§'/¾£í@êG:º‹Ž—ˆÌ]…‚).¹»±1Fh—WŸÿBþ×)“sÞÆÛVw'‚åËy¯ÿhôƘú(ÚE ŒÐ.ù~þ'ë˜\Á´jŒ²ÃÒBSœ•ûÉÿÄé. &3Š1žwnÎö‘Õ–-3›7o­Ì‰]Ùü?ÿùÿK?’ïäÛÂE \Ž'>'ŸµnÓ­ÂEìäÛ¡ŸÏJ~wàrò³kÎÚø»¯®¶¸¬;«WÌ[b„£à¼öÑUÇ?:ëX¢]Nÿ—{$?»—ã¯Ü¾âsØy¤8ž çoþðìÑKV:˜N¿ð‡²£^1¢7½ ` i Sü¬<ÅÜ£ˆ°˜e›ÛÅl~Ë–¹£Gý·î ·¼úÜ\FÆÂ¥Ð4b_(›Ç¥²FÍÈ?…p:~6ÿ+~æÚ% šüOh—\Ê于):•ŒÍ0²¬É÷sí’ë¡`VÍê¨h½1F—l¨]ò¿âg!hrí"$‹¬f ÇU—?ÌVÇäû¹vÉuŒP0“CAsf­š‘JeúFn’?'/¾M#tLæ<€Æ­;IÈ—ÍguŒ#•m0¯>¿22FîK*Z\|Êf%äŸ ¤@îN*ó#7ÆHŽC)SÞ…¤´»X[b¢P—\Ç于1)˜ßëþÜGЊf˜¢_ÉŽAÄ ?8šXÓ³y¸]U0›³­ÌmÙ2wà@Ýä64fµwiØèR[ÍXi&†??Zt'• … ÆØ‹¤ú\ùéö¬5cDQ0²ãê>c{ ä6y|Œ‡{W·RÌ–-3Õ'ÇÄÈŸ,‰¥¶­Ô,¹Ž)ÆÇœuö(µ´•ÖÕq8†7+Q0ùÏáß«?Q0ã…Ðò_C±dR/’<¼×‚¹;élcÌâ\Y/ÒÙÎgŠïÖJ×ñ¼eˆ0ÅÑÍ´â¸v4Œzâp„oÓm0á0kÆöºŒê=ïõ»ÄP˜ê(~åv1¦äèÇCaVÇöнbXLÙh˜ÉKþ­¬c,ß(­x(ê `$Låè..ÝI¹§Ë¯z«˜2O^RYsÀˆ1ëÞða¯ Ïï­½pZñQ’%:é¬ ?M/ 7ì`Úåž»àèÄA¾U_'±,œkÇ}Y8€ìZîXÒ3:Ç Žû•.ü,/ÿ–û\º‡>tè—ÿbÙ€³ÄÂ¥t`ï­Ÿþð«ÏUë˜VXûÒ­5Bê!ò'ÖîßWÈ”Íô˳ l_'SñÆ¥þú#*\œšaêÇrÉÇüÞÏÖ²mÛ¶Fý×9K&`Æ^è3úzÑÝŒÅáë$€î±¦%æ;ýom§À‰5"¦æø€æØ³güAÓ9úá¶S ²wï^ÅÅ0°×ñ£mCzäñ={öLL¤þöÎ;ïT\Ø #I©ˆ¹üª·æŒ’€èLÿLe6lXý퇭%†~%ˆË”P0SÙ¦M›†ÒejÓ¦¥Á?þ:†Éî rY²°ºÍV[_¦„„þøÙÏ~kjúØÂÂÀmaøÏ‚GøˆˆÏŠVYXÙNM­HšŸ]qÅ /¼ðŸûÏ/¾øâ† '.øÎ×]·naà'÷å#ašØ¶w7cš¤,&ª@»ˆF—W_½ì¢÷¼gj `æÔEïyìå—¿óïüýÁƒçŸÿbî²é77åÞî¿a*hPL“?3ä¿,öSDßè§f¼ò¹Mä",_a¹h4åM$Û+we? # ZT¦²ëÖÿõ—^Úðö·ç2f!›zË[Þrî¹çþÉuë¾;5õ¡ŸüŸ©u·­ËýþìÈϲ©…‹_¾ØKÌDëN:ö½'-?£‡ࡉH;E²4ç"A\0ª,¬H™--­H“…¥?8±aðï ãhjJl‡Šç5Ó¯É÷³ìe¯¥¦ÆÄ(O¸â9âcO)/®±"RÂÌ´ç·¾1_zÈöôÈ[źý£—ˆ{Vc­‹8"z‘a†z§6l8‘e›„Šyù±‹‹A0Kß^Z8±Ÿe/z„MÄXÆÇppøÆG»ì3øq¥ë€ˆéw·[e\e²¦¬1L÷ßD.,QÄ5 Þ…d ¿¹‚;/_œk”ì¹ç~éÆ7¬~£´]pÁùþ¹?8ñƒ¥¥AKÌTö¢ø)7¹‡'6,eKîQ4Õ¤PìB»O cú£ý\]“¹Däkÿê-Vä‹Á1äÜsϽä’Kîϲ_z=÷\îòÿðë®»nÓ•7 û”îûÐ@Ù\ó;+þ—–<L–ìëQ N–~K SÄôGïwóMIô¨G½‚ô_<ÿŸü“W޽fz0æÆagR¶pðw~çü•éîÖ ~YXX81.ã'bR¯Ôñ7æÊâé[xk¢wÆ7Uîtd˜HsQw¼‚ŒSÙºu×)bå²Ë.þ; ³ Mm7µ2ž)ZbÄ3¸Ø DyúÊaãŠû–ßÄXÔʸê¤G¶ƒî?zvô(ÊÙ„%-IVp °áĉ…MÃ)ì¦V&½ËDwÒ ÑåO=G Ù5…ï…lÓ¦%¯ézs&ò›ûåW½U,“$×ûÂ1wyÿ{ßÙ¶B`0/@µ011QíU4° 5̦¥MÇŽ;~üøöíÛÿþïÿþÜsÏýùÏ.Úi^~ùâw½ëü…¶Àî¼óÎB¥äi8|øpêî$ÝECY2è::qbÃu×Ý6õ¡½öµ¯]Ȧ~ðƒäî¹cþ÷ÓŸþtáþÇÁrÖ>°vôšaZeUÀdb¢˜l T†ã`6løOKK¢óhé¬Wé§#ˆhŽ)³aÃp˜á/Ï/©K)1{÷îm;ÛÐ|ç€q¡TÄ0žº {`$1´Ä<ôÈãm§ :ÍwÞÙvL"fÏž=m§ :Mzµ Ö5ˆ1 @—aL Œ$¥"æò«Þšÿ1>Æ—Üb¹ÝÚNl¬Ûdwô+5Ä£”^ÿ®ím§ÈB¯Téb7à}£bæS(ƒ{“"äËÇ?þñ'N,--½ôÒK<ðÀ³Ï>û¦7½ÉE4êçŸøD”9õ9• UðSŸú”—Ž‘GxíÝ»W^:´P'ŠD^48Ž [ÛB¬"è1ˆ µ”qË—¿ø‹¿øÉO~’Ë— /¼ð·û·óC?üðÕŸüä÷¾ûŸ*O•HqúoüÆo¼ùÍo¾é¦›¾üå/ç?ðƒ|ãßÈc¹þúë¿õ­où†)7Ýåš&—2Bpä[Ñ·R¸¸#Æ¢çg¹RXÆ’þÿïû?õìöJIn¼ñÆ¿üËùôñô’h"F~óNF‘ZáÅ_|ùå—_zé¥+®¾¶þ;±vaaA<•sù²k×®\Ê;vìŠ+®xÓ›Þ´cÇŽ«¯ùŸì:¦@V3‚‰‰ ÷Dæ‰òEvüÛ¿ý[YÁÔ̯ÈfQ@Åwq¢AÅ^jJ£N¶Úãˆ0õW_£Û$Ï{X#Giûû¿ÿû5 qDŒx¨-ÿ)‰«căêSŸú”ìx×]wéÂ<Ø\¯ä;¹|É·…‚ÛgŸ}Ö+´'Nd«KQäJË+¹‚ùô§?-Z_rò\Á8p Š‚Q†¶ˆZ‘—Qá.4нª:’Ë Q‚ßýîw¦`Déðƒ¼øâ‹³UukTH•6·“+°¯|å+¾ŒDŒ-~ÇWÇèFòg¡{˜ùSpzz:ßùêW¿Z(˜x ß™Ÿ_é\ðjŒ V0‚7¿ùÍùÓ´èEЍ`,ˆJâ¢`ê"šI}ì YǸ+y\sÑ„¶¸¸xÉ%—¬8>ú¨®ùÊW¼é¦¹¼¼<11‘ÿÌwtÇ<ð†J OÔ1²‚1.|K^ØERCYùC=\‰}1w°’xu8?ðd« fëÖ­ïxÇ;òŸO<ñÄ'?ùI÷Ž¡`¾öµ¯‰Ÿùƒ¹Hd%¢Fì—)˜\K îÝ[öbeä®`,ß+¹2¤üÄ]wÝuÅÕ׿[¯6ч(Ì7¿ùÍÜ8¹cqz~ôðáùÙºs±"v„|1:æšÉ+L€ñ¤–ˆqiƒ±÷1)çÖ"•:Æ7.ñÜ:Fè†BÁ4~9r$ßNOO æÆoÜ´i“6ßæ:¦P #·;vLîó²×P†ÂˆT “'à‚ .¨Sb§Ô²wHÍÐtÜeøØÊWÁdC1111‘o…‚QÎúFhP_díbwä:I‰:Äš}$BKLÓ}‡Jر &¯¸„‚)öï½÷Þ¬F÷MÎÎ;óíÇ>ö±n¸!ßÉŸBÁQ":›Âðä{ÓM7eR3ÌüãóÏ?ÿ׆~n½õÖàô„m‹OŠ ?PRêU¡„|e®v¹‚í1¾:faaAW05ñíNÊc/t @¦–ˆ‰2&ÊP‰Ìm%*÷¸DM!_2IÁ\tÑEa:&ç#ùÈç?ÿùâ§P0Ž|bˆØÏÉò¡bˆŒKÂî¸ãÑ#Œpܶm[¾=tèøù¹Ï}î©§žzðÁÝ“§·¸ˆº¡×2­)Þx#·ë¸|ÜTP(˜Õg¿‡Ž£wݳïN@w’Ð1(…º-1zóFX Y•ªÐßé3éÁé®|‡ed«ò%[mƒÉ·ÇŽóÊàõïÚ~àÀÑûpà 7<ðÀO<ñ„èEÊyá…DgS.,cP”¯lŠ}yo6ìZ²'æßøÆôôô[Þò–‡zHh—ñÀÎßþö·ç &߯ӯ”…6Ñ••‹Ò®ãÒœ#º{®¹æìØÛa/›«ŽY\\\ Ç4ðE¦e}»“(_'É:&¸)ÅåÄ2?¾­8Ž>…8¸í¶ÛdG17]¹pŸXoݺõ“Ÿüd¶Ú‹”+1 Æ«å£H¤¢±ìˆ1"ßúÖ·î¹çžÏ|æ3ÙP¾äû⛩lØsë­·þÚ¯ýZîÇ}T¯,1ƒÁèAeÚ3EM³wê ¦È~®c*Ó zf”>a=M|‹8óÄ´ø‰uý~(#BÁÜ{ï½z/’o3Œ@¨qî³Ï>ûíoûío{qôÉ'ŸÌ%Ž×|w™¤` ùâ˜6ñquN1æ™gž;¹vÉù—Ù7ƒ‹@Ê«vË&æQ9]o¥4‘»ö|áë$€XD›±·•mú†\(†ªÈ! I!|æ%~ÃüÇüÇÅ·H>øàŸþéŸþæoþ¦8ä®cž~úiyº<ÇäåɸòÊ+¿ÿýïg«Ã{sÉòÔSOýÝßý]6ìQÊ·÷ÜsïÇÕ"W0–Ï‘ê/8ܹ“«Ñʢȣ#؉¹vR+«^Ǵζ B)£8þÉ¿_Ñ1 ҙǘë˜|'—2‡zýë__ß%ÕT05{”j†–«´Ê/­¬Ôtí7Xr i†O%Âÿ×߸úšk37Q?"!e*Óæ…qvâÐ*íÓÊê ΈK©ˆ‰û2 .¤ïÁi(ƸÍc­´ð@÷)1­Œqé¹ÝúýÐí}£€•ð m' CKL‹ëQ8b1Áï4„>Z× bºÜ—O+@ÓìÙ³§Ëb `ô>±>|øpÛIè-_¸÷Óm'Á•Rã¾Ò^zŠÅ–ÀŽW›Ê-·ÝÑvz=°µÄŒDSØqœ5´æq>vp¸În:F¯;IfnnBþ¹sçšEõ@¦a¢rÕ—¸Œ°ˆÉÌŽ§''nwNLL cZáÌ™3“““ÉtLd£K°†DY®`¶l™9~üÙ1w9p`Niž™™AÓ4È£,öŸþùK/½4Ž 1¹.É:°šÝæÍ7W9]\œh›‰æÇDÖÏËHXZAÈ—~ô£âçøÃ^xáðáÃÆFb?–„áî¤!Gmmógs±oyH;zk9" ÝWzšË<(‡ºŸ5(ÈŒ/¹v.¹‚É·?ùÉOîºë.YÇ4Ô-ã-bŠt(‰Ó½égÉç w=„2äÚe³´5áõ°,|¶õˆU"‰Ç¼]MªHˆŽþ¼ÎBÛE„‚ÉåËÒÒÒO<1üŠ+V: QÄ3Wq -W0O?ýôõ×__¸<ú裊‚)#J;Mºî$E¦X2ž¥ fsER0²"QŒŠAvÔ!” týdÑ öè”ÅnwqÏ©žf—&z‘’!ë˜`#šar½’+˜5ZĪ`êÇ«à'bІ–³É J‡r–Ü…”ï+?=­§`,M/Šß'®±á¤~ÂÊ´7#UFW¿9Dɯ½ÝK‰AÐ4zH?ü᯹æ%{Œ2b¤>¿óâ¯~ô–±Ê~á/®nhƒY^¥~Pâ +4%yE;Šh&)7öØ›HaY,z²ñ0êÔˆ/--9«÷aÅ"Bw’±ƒÍ’\½!+|T¯±ÿ¨JÁ”õ¹Œz€ÒiÕâø»yGÝÎóÿøŠ‹½ Æ" ì-k,Ñ£·7«xý,cqñ‹Ã2óÖŠòŒ×Ÿ©Ž_2Ëáȃ‚ã­žcçWѾR{™¯œêžZÿpjòÌ3Ïxù¯” Œê<133uÕ€Q¸x³x0~mTö³lÀMYøîþ_`eNÍâ2îºÌõïÚ~ÅÕ×~éK_J¼X’Â¨Š˜¬Ã<—súÁøäŠþ uÌ‹˜¦ ~0wð‰ÞP’:˜SÐÙ»woÁ¶¾Q©ˆi(Ã’[n»£í$4E©ˆyÿ{ßÙvÚÌ|áÞO?ýWOµ €Ñ n¶„¦±î¤={ö´èªˆéx/ÒC<Þv ¬1´sÀ¨°FÄ0ÖFﵓº"F’5ÝI ›€Î²gÏyè‹úuÒáÇÛN!€Š>áaž˜C‡µÎþ³mÛ6ìlû¤;§;§;§¡E;ëŸãè"RtÛag#Ø' Ø9 Ø9 Ø9 ]³3{`$AÄÀH‚ˆ€nqÅÕ×¶„î¢'ÿén. ›ŒF°ÝœDŒr¤)¤‡yüò«Þš "ˆ‹¨-E‰X[ä¹S4 Fný¾ê+Gòí±ï=™ÿe<;«¨yëÀ¼ŽXÔB™ kªðŽ®b] ÊuLGF â®*»(?ëPܬ#† 0Šè—…n]¦fÑ¸Š˜<½²HyžåÄ)>]xÿ{ß™ËcFQmd­×–šÛ#Š×XQV±°Ø1– nä`ÿãCq_Ujo¥qäÊÖÞŸ1¬‚QÁÈfÏjo&™:ÃÈ%XîÆêj/ýönŒ´VKŒ·’ÄÌM+Ó3BÈ7b¹ • í[%|Ó ‡Üh\ãƒb:ËOÝì¾þÇüyàeýÅÃ:RöÄ•Ÿev— #;`|dÖf{¯µ‡ˆ1Þ˜Ïõ-×÷¿÷b‡Æ˜‘ÃR£_꺖7Âm%º‘+uLÛIî•µ× 눽6Ú͈‘ë«Î‡·Äx=Ü“k\¿‰Æ˜ Ü©S¶ˆÐúâ…2"Ûñk|©*Z•Ÿ…Ò6ß×-Œ¬vߨß'Öʘƒà|ZØ3$W-Å_+@ÓX*tÍåõ"Ëû“#Bvâà ã°$ãOÝÿxÒнà ¼[¾FÃÈ2uîÁ„·Ä¸×Œ²qFhqi,0¹xU‰à4oü ì­bFûϬj¯î¿þ Ro¨c k¤lÈ¿~´Ìhò×*Ù£Ý*_h-¥ Ÿ5‘»5=òøáÇ:„’hìlÇË>ö`z˜ìœ윆Öí¬(f쀑ÄÜd] ÑÁÎv\ìsçwÊÞ”ŸàKvNvNC+v.¾\.0ˆ˜mÛ¶µb‘q;ÛÁ>iÀÎiÀÎiÀÎihËÎN"æÐ¡C­$  } cb`$‰&b&&&ÚèTÌ37·FFìÜ™-//} ÷èÛ\Ç”ÅãŒMÄä fÇŽÓ““LJ¿Ž·;ËTECjFJEL®`¶l™9~üÙ1w9p`Niž™™9ÛvZbÀˆ­%f󿛫..Î ¡«(ú•D©i U`hŽÊµ“ŽÚ.žÝ¥%šFèí>dJ?±í¬tÂbŽÂNø6¬]˜KYRíÀxÔ8vi;;¦3 IM[ØÅ³Wà= hÈ\»l–¶C Pêƒ{õ "¹£<–ÊQÍE梄©Äb¯ ÑÜ{vnÑΖ¸ŒB§#®ôìx?úÄZS0ÙZÝ'(UºèdŸm›º‹~…—U$ã¹FÏ.Õ5ëuÍô¹/‰;¦l"eB¢2º°Dz…Ùz bç4Ôyrë.3opD-¬{î¥jQð1‹«ÛBǬRðò*…{ábô£Ÿ"3eîXî zM³œXæÙ¥gý}§1š4J~í—¹]X"+½Y®rT”µ AAcçÄv®L§Ë}ÆËVQÎ2†£÷@õø–åÙ´ÙÜ—”ÕV»ö—¶­]Á^,·¤XocõCôû Ñ½¡è➥dDéPЦl„ÇÎæ×˜c:›ˆ(úYFådìd×óÛׇ©sKŒÞ³¸æxp›a!i!ôÒèÐËݶË(÷;9ûÆ>{¹‰«~tžÕ)°s’e!…Çí^TI•ˆ1jMÁdµÕ†¥%¦mÁèÑPµ“Úè{#®)òÜ÷íãíÚ*Vìœ= ÍÝ’iD¥«,_ãp˲u'-.~qøOfÞ®Et&]Š7 ¥OT>ª€ÞG*ë’‹g— <ÈFȵ݌•ÑUÞ4*)|ʪ Ñ1:ìÜ;[ⵤ0JD5-\¸”=.Û²p‹”Š˜™¿Â3v7º¸TŽrè«éÁ—²Šd©{wcGræP{_!-t7ŽÅ§ËW35K¡þ](A)cçÊð£àõzìe[ƒ…ÛÅÖã•ù†ÔFï `LèýaGÀÎ0VMvg¢¡ †–€~À…œì cEÐdw&ä1ó·\`$šˆ‘G'ÄÝèTt'ÍÍ­¶s'Â:MÄä fÇŽÓ““LJ¿ÄrÖ;éâ€.P*br³eËÌñã·È޹ËsJóÌÌ šRck‰Ù¼ùæ*Ç£‹‹ó)Ûfh(µÂ8­'•  ËT~b}Ôvp±êl€x''uÑ.³~Œe>S£õ,³ˆ†EæR–T{0M<“,vNigÇt†­Ш…]<{Þ‚扱.¢ÐÁ“çöõn‚²µ…¬8S¶¸±‹‹¦‹×¼¨iVWÆÎ-Ú¹rºä€RH`áJÏ^÷ƒ O¬­ fb•â§|¨Ì¼:«în\×Jq/ó =F¿ÂÝë@pÕ’§2ê%.¯ƒú!y•ûU¥aÌw²vc²5cX°stê<¹u [žJ­[x ×ȼEŒ¾¨õZŠË¬¸ÒŠùâTü.úUªû4Æ"»´mRh»®5Öã‰ežõŠdôÙ×w£I£ä×å ‹Å½KÑ"p•£¢¬ ;'¶se:íXî3^¶Šr–1%¨dnÏî¤ÍÕ}IF}ªÛ´fºËža‰Ì-a/bK½Šõ6V?´Q¡ìšmèBkô¾¯dDéPЦl„ÇÎæ×˜c:›ˆ(úYFådìd×óÛ×G¤³ˆYtR0™Ãý]©¸aé.+6—@_i¨èǰF)÷»Ê>ûšÞvß\[;§!YX¸é±S#GUw’Þä<žW¹Þ²¸ì¨_i‹•­ÇøÞˆ—%Dp–±àŒ#KR‚ÓP¦D”æ,‹…Çá–ek‰Y\üâðŸÌ¼5¡ gÉÖ6*êC^*1Y2Æ¢{ƒ±B¯žõÊélo¨ùn`7cetºÍ¥`I¤2Ï^ˆŽÑaçÞØÙ¯%…Q"ªiáÌÚáТ…[¤TÄÌ̶;z”ý2?–Gwè1ÆÛbV^+,'fÎU+¿ÊfÉ »q,>]¾š©Y •§g%·&Çð£€+ÂcÆ âb«q°p»ØZbzŸyHFïß;v†±"h²»Tpô.ç4`g+‚&»hD Œ$ÝIssk††íÜI[%t›ˆÉÌŽ§''‰å¬wö`â#è¥"&W0[¶Ì?~‹ì˜»80§4ÏÌÌ i 5¶–˜Í›o®r<º¸8Ÿrý (µÎ8­'• ËT~b}ÔvÐañ0x~€ŽqrR—zâ2ëÈXæ35Z¯æ²e–9L½\Ê’j¯Æ£‰g’ÅÎ)íì˜Î°Õµ°‹g¯À{@Ð<1ž‹(Ä"xòܾ^ÀMPÖ¶š`Å™²Å]\”0•X¼æEMÓºŒ[´såtÉ¥À•ž½ïAŸX[ÌÄ*e.–=œ²02Óî^OÊ<;Và×F—×Aý¼J‹b½bÇhó°«ïdíÆd7jư,`çèÔyrë.3opD-<†kdÞ"F_ÔZcyyå*åÚsAœR'è–;ˆ½ž('–y–Ý-ÁöõÆhÒ(ùÕ k‰.,‘•Þ,W9*ÊZ  ±sb;W¦ÓNåó¨Q »„£÷@õø–åÙ´9Z_’±±KìôÕÖP{ݰܒb½ÕmTÐïƒF÷†¢‹{–’¥CA?š²;7š_cŒél"¢èg•“±“]Ïo_uŒsKŒÞ{4Lå €e‰îÛe”ûœ}cŸ½ÜÄU?ºFÏêØ9 ɲÀÂãv/ª¤JĵK=# ðeçLÜi¨ÛqLz3}/Éš"/Á}¿lÔåh°sô,4wH¦Ænô&rÚ)lÝI‹‹_þ“™·nÈÍ_^bsbõc°`Üðª'ežõÖÚñ¬~²rm7cetºÍ¥`I¤<ò)«*DÇè°soìl‰×’Â(Õ´páb4W‹n‘R332ŠVyèŽo~`¬(«H–šfq7v$gUÕ5ƒÚhÉ »q,>]¾š©Y •§gUw˜¥Œ+ÂcÆ âb«q°p»ØZbzŸyHFïß;v†±"h²;Ox¦¦;ÃX4Ù@Û b`$©èNš›[34lçNÚ* ØDL®`vì8=9y|øK,g½“i]  ”Š˜\ÁlÙ2süø-²cîràÀœÒ<33ƒ¦€ÔØZb6o¾¹Êñèââ3©×8ì"m÷͵E°s’e!…Çí^TI•ˆ1j— €|¡RfàNCzwLd´ï¸¦ÈKpß7œqdIJ°sô,4wH¦•F¬²|Ã-ËÖ´¸øÅá?™yëÞfw)ÁäŸFôšàÙ¥BŽ5ß\®tKtºÍ¥`I¤<ò)«*DÇè°soìl‰×’Â(Õ´páb4W‹n‘R33ãWx‚²NPcg¤âRf뾚|)«<–Úeq/«f–*j¥7X2èn—+Ý]ÍR¨<]qqñì\~3`[ƒ…ÛÅÖ“¬1etÐ \éiÀÎ0VMv®4€q€+= ØÆŠ ÉîÚ#IEwÒÜÜš¡a;wÒV À&br³cÇéÉÉãÃ_b9ë=˜øz@©ˆÉÌ–-3Çß";æ.Ì)Í333hH­%f󿛫..Χ\ÿ@'J­3NëIeè2•ŸXµL²ø€À89©‹Îp™õ d,ó™­g™E4,º0—²¤Ú+€ñhâ™d±sJ;;¦3l5€F-ìâÙ+ð4OLòE”Á“çöõn‚²¶Õ+Δ-nì⢄©Äâ5/jšÖeìÜ¢+§K(…®ôìx?úÄÚAÁL¬¢ü”‹ÄèàŽ~…»W§2Ï–Š*GÚãJëò:¨’WiQ¬Wìmvcõ¬Ý˜ìFÍ–ì:OnÝ–ÇVëÃ52o£/j]Âò*²}e—â‚+C,,w¹FY¤‰^ý”û”R->ûúNc4i”üº\ïa±¸w)Z®rT”µ AAcçÄv®L§Ë}ÆËVQÎ2†£÷@õø–åٴٵ/©uõ ½Ä~Zj]¬·±ú¡ ú}ÐèÞPtqÏR2¢t(èGS6ÂcçFókÌ‚1MDý,£r2v²ëùí«Žqn‰ÑÛ`¬ †VHϲD÷ƒí2ÊýNξ±Ï^nâª]£gu 윆dYH`áq»UR%bŒÚ…ñ¼Ðmj“öEßqM‘—à¾o,8ãÈ’”`ç4èYhîþL#*Xeù‡[–­;iqñ‹Ã2ó¶Kg¡—w”Xažõjélok»+£Ómn,K"å‘OYU!:F‡{cgK¼–F‰¨¦… £¹Z´p‹”Š˜™™‘aìt̴焲ƒšŒ·Å¬¼ÖYNÌÊ«hY,öÐú„%ƒîƱøtùj¦f)Tžž•Ü”Ãv® ? Ž0ˆ‹­ÆÁÂíbk‰i:ó½WˆPÀõžì cEÐdw‘à¸ÞÓ€a¬šì m*Zböïßo9º{÷î¶ÓcJuwR™R™ŸŸÏ%:Z¡VwR®`ìM5 .b¶nÝšogggù@ÒãñuÒþýûg‡;û†ÚEŒ?räÈôôtÍDD\ø*cp>˜ðªŠçL»ÐK\[b&VLÎìpL×`Š›ÚNȸcŸúºr9{—ð}Ï•ëFåY^žûŠbትØ=׉(ØE Ó=y^9ÅÎØ;»X ADÎ-1òÞýû£4À@ÿ°Wß ÓB²ž‹³ÔÔ©¾«Õ4g«Î2aZ[¸rzÙ€;—Q˜‹fe^‚sб3vîN-1ÊèÝÙY›çr%XæÇânW‘Ƹ\N„&°+Œúú£,÷*—­],Í^3ÓdjTbšðiu ‹ÈwšvK"Û½¿cç4`çdL¬6c§¼IºµÄhÍ0bT¯‹´¸d2Öh/{ÔY †|L¬ ÏþòQö:b¯!eRiÜFÉ­¶N¡`YDaÉ«™M%‘Á9 NvNv®xq1"ëóóóƒ¶o?»oÂE4 ,z‰ÜÈQyÁŒ¢ «zkìûË(¯FïøÆ—BãËOñÙ\N+3‚›;ÐÖ‹Èk'¹4ÐLÒKì¢DiWQF=ýî$+¬ï¬]¾Û`ç4`ç4yÏ<_e£à!b”‘¼mÝÐ{ð,Oêë˜î(¡Ž$#YîÊoÊVwco`²œ:f;7vŽžÓ2”†Ÿ4‘zˆ˜àÆ.G?²{1ŽÁšîß+Y…„õÔ*%« "óz›ñ­!a(îFöºf"2F­œ¥¨7÷‹Ì1:쌱sg‰Ü”•ôÏ)ûe~ŒÝbÇXeûYIý€X 1“.­†Â¯ŒN¯lJ ±œÞ×»€BÙýÑѳËÀ+"—³ÜO·'©2üˆ`çh¦´‚£™ÒŠW¾"R-b,cx¬"{/?¡&Ô€Q§BÄÌZ§„I@ð†'Ø¡†Œ:"†=t“R³sçΙ™ÇPî¾ûî‡~¸í¼ÀQ*br3=½këÖíó󙘞·ØNww–ƒ¾ûÝïn;#0^غ“r³oß¾ÙÙlß¾ÁÏ_ýÕÁÎÁƒÙ¾íÿ öö FÍ(¢ yª€%ߊ”?eÕ‚‚€6°‰˜ùùAkËþýƒíìì`›e+Û¢Y&†ˆa*h*@/©n‰)Ö«JBº ´Ëê_®r ÷(«ÏO¬ÅèG>WÙ·,g°,øz[õãRÜežëD좄éž<ãÑd厱sŸìœÕ¸?c³{÷Ù¾¤Ávvz8æàöáh˜á¨˜Á‘Bå@_™0­ÓaY¤c¢dÁŽ ÓB²©V÷ˆe<§p)ne‰:…¹(aVæÅ~4å“;cçÞØ¹-l-1bðn±¿¢eDÒp_´Á(3úZ4o™‹»E/ã’Ùãw—Ͳ{ˆ"V&V×—·T°²:SV%ÊjË)½¬WuŠI¿-¶ ‹ÈwšvK"½&¤vÎ~ÄŒ8f!ÃÎnæRîÏ °‰˜U­²²?ø_|‘´ê"†ú*-1˫Ȗ­t‘ó_¸Ë.{þ•~ qÝÊJß(ŒbÅøÒPæÙÇ &§D®Te§Oq‰¢7T·#•¶ «Q*OV^i“Ó€{‰­;I¶+õ-‰Õ„‡ùùLž&Æ¥Zĺïµ°R~=~Æ$FÑ……»lpÙKhŽž…bD/VÝ=zDÑÏ2>iŒ+ÕµU±s°s_±‰˜AKÌìôv1”WŒƒÉ¶œ…YÕ3¹óæÍ¯dÙyâEêƒuñãH”nH€..лxbõOÉáC–ð˜àµËå‹Ó€Óä=‹}v¡bLŒ>Fü› ›âc¥ÉÉõé-Uæ8±:TÊñDpÁØ)S颥çeY¢m«ôcß_šˆÒœ%ß.šÈWpF°sšìcç†håþ\±äÙq0Ã!¾òÇJÙì쾡‘»œ\Te~”•¡éþ‹r-Þûu?€½hÊ\ÊÂ) ËîÙ=(Kàú¸¥ŽÉC¬Ê²ß{d›Ø¯#¯k6 "cÔÊYz€ú-ÞXp–ÀÓ¼GbgìÜ';·‚ƒˆÉ¤ö1ùÝŸÿùÊgK¹uv︬ŽöÍJúç”ý2?ÆGŽØ1Ö¹€¸ KÑX\t÷âJ®Ÿ—jcŒÔRmÊBv©i½¡ìþèèÙÝV޹œå~zVU|É ;G3¥ìÍ”V¼ò›ˆ™Ÿ?8==Á›m†¨–âÃëáçIùæ–·7`p¤TÄÜ}÷Ýûö9‰“w&¾;¸[|o´ ØiñÍÚ¥TÄ<üðÃî¡4¤`ʨ“e÷|ý¸ÑýÔñ“wï~WÛé€1¥ZÄäìzßeºãíûOîœ[<0³¹í,À8â$b?zåÌÉSgŽ?•ï_vÙ…ùö[6OÏýèÈÌmçÆ'³snqé•¥ ë7äÛüçû¶o9xfúÔ©¯ÏÍmɲÙýöí~_Û€ñ¢BÄÜpÏàkêé™í§&³ÅãÙÒÒ™-'Cd¦³3³ûv¬_?yd1;øØ×o¿ýö»ï¾Û1Jˬ;–i||iw .h›ˆÙùÅÇ6¬¿pæÝ—Ý|ð•3CírfýÆ#çm|÷ì×ÿ¯}ï{åLvæÌÀÛ™¥3Q’Ò´€@ 4eLyÒBeL÷BÑ—öt™oW^áÜWXb¢›®S•SŸ [>jŸä´NDÁ.cV&Ï×?vÆÎØÙn”w3ÛÚIKg&Ìl>xpñÌ‘Çf§7>³kkvò™ '×/]¸ù–{¾žK!^Μ9,¹ÐYŠu–ÝV¨¯ôìH±NG;b%¦‹rYBñly=¢0%ÌʼÔñ±3vî¥"æ†{>¼kûþ¯Î?¸~ó™ /{ðÔ仿þÊú —–^9ïÂ'—²“'tÚÔ3±ŠòÓX1Nö¢è$bÄhzzzß¾}GŽYú²: ¼aw–nöÝt0I­S9º°¹ˆÒœ%÷PëޚȩcF°sšìcç†hååÐõk%M[·n5¦ÒýAe÷© © ˃7SâRdËÒPüX¥N”ÚÕo”Ñ‹‹)î¾Rµ2"cÔ•Ÿ è·øÊû•%:쌱sg‰?OŒ±NÞ×;&¥RŽ}§2@ˆŽE»(ûae¡Ÿå£1^*ƒ…²û££g—+×+"¯ Ù¥’X’T~D°s4SZÁÎÑLi¥­nµˆ™ŸŸo(îÞ+DhŽ 3;;ëNj„@¿©1Hè&_'ÉßJé[€¶°‰1"zÿþýÆ-:Z¤´;©P*•Û¶³ãHEw’üaª²mî«%€JœfìèÕóÄȳ¹Xæ ,<§_qÊ }^)1Ö¯åì+÷=±lUí€D·Ugk¦2‡“Ýòu&|²Ì^ê墄©Ü…ìÉóõ±3v¶[ [ËØgt?zOåSÙ¸¬û³¼¸E©W Œ ’[Ld|0„E梄Y™—:þ±3vÆÎ¢º;iBÃ=tya*ùܲŸràöSŒ‰ÌÖ¡rnÛ¦î9^ &n¼J=‘É~ÊB[†ìõP\9êRu?ÑmR“:Åd1‘žÓX«Oø†Ù…v¸šQcçXqÏvvI‰²bTüZbêdÌøSן8Íä¤ü~¯‡ÐKùÙA,í––7Œš·¥bÔ©ö—¤2”ö!ËÛ•×ë`PráeLÝDY¹ ¸½y³ÄÎiÀνÄcLLAYÓÜ)|ûÝ^í–±9õ³  ƒM,¾é7ªÀè¶môŽo|)´w%$.8ìœìÜWR´ÄD ³õgÔ¡9aÑÙŠÑÙ„¹L&xgÕ_¾ãúOŸýdaç4õÃÎJŸ{2›7;&Æ1Ûa§XÆÇŒƒü9š.åâq«é‹m䪢¥ï¯éˆÒœå’·`ìKÍŒ`ç†X–h:®‚ø-1z_£üDQFý”îuʲôí·<Ú@d4ÒoÆÝǽX•ÁÿuÊEÔ½TVÔÌZcY£¦B*hÉŽÅbQ"2FmÉX¼*žËŒìë;cgìÜ)ªEŒŠ¥ÊFVZ~:žâr{cyZ+û5…‹ãOKpIªWt–¯„ucª¢X¬ò¢ö 0àt{’*ÃvŽfJ+Ø9š)­xå+"6ÃÂÐYJEÌîÝ»+›Ñºù 〭%¥bLÌþýû-GwïÞÝvú`L©Ø[¦Tæççs‰ƒŽ€V¨ž'ÆB®`ìM5 þ‰õôô´Ø™eô $&¼%FÌäsäÈÙÑw^ }ÐÊSZ0ôjÀèy²;w*¦†‘Ã2 ¦RÖakÇש'ŠXin-§~ Ïƒ,­œû88¢`%LÙ½2y¾þ±3vÆÎv tkÙ‘®,Æ æeð,é.ªÔ¸l21ÑÖ„’#‡±(-æ2>Â" sQ¬ÌKÿØ;cçNáÖ”ç<7Ͱ÷gÅû*ÊX_-R_B²Ø×í^¹Ò¤KøÐ)š¸„êTƒ€Z7&Ô)&½ƒØR"aùNÓnOd‹·uìœ윌‰µËÕ¥ÁIÄ Ò³¼þ[ïNR Ö)ûþ²Ê«Ñ;¾±ZÚ»×ìœìÜW[bªåȱ¤xåm0MËmÛ<°”Z÷¯%jL2e™àÕ·XSVìÜåì'‹¨v–»Û²„¯…N"F<¦§§÷íÛwäÈ‘eíËêF’ÒPŸ² ²û:¦HÛIhßöÑ…ÍE”æ,—ì$xìaçàXjf;7D+¯‚®ŸX+iÚºu«cÖòêPpÇz£Ÿ7|hމªë–¥¡ø•¥l‰"[½ZbU—Z7V(C-ö©Y•£¶Œd”GGÉ.eÅêë;cgìÜ)"ÏcìtT\t›¥[y®{ø‹èTöî(K¡ë.J5(ói©QcKYCš£gÅE/}߈\Îr?Ýž¤Êð#‚£™Ò vŽfJ+^ùŠHµˆ™ŸŸSÓoº¼ICF5'*DÌìì¬[8Õ4ýPá¡Õ`œ¨1< ›T|$+¥oÚÂ&bÄçýû÷·èh‘Òî¤B©TnÛÎŒ#ÝIòg¨Ê6ÖWK¸­b Ð1ªç‰‘'Þ¨œûÏ8ó`Ù´cJh–sõŸö©Ììý\ô‚5‡Ñ¶Êô‘Jñ¹—Eåüu^I H@[ueºÊËÍèQ°‹¦ì^éÙ=§Ø;cg tkÙûl€ÿe«†úžë’0è•c½UÂýY^\–QŠ> c‚.:³ªÕ$² /ê6ÀE ³2/Á9ÅÎØ;wêî¤ ( —}å¤,0¡¯á˜ìlm%W”äëªèØK§!­ TË€â–+›^Ée=påhÙ‰ÙÚëHñÝ&5©SLé9µú„o˜™Ö;§;'ÃþXo¿–˜:y‹šK˜ò¿.x[/ìqÃò†Qó£¼yÔ)nûKRJûåíjä^’”\xS7QV.dÃn,Y¬4€§$`çúûf;÷11•/ܺ·šæ3>NÜÃäkð«7ÇX?»PÜlbñM¿QF·m£w|ãK¡ñNRˆàærZ™ìÜع wÅ&ˆßãÒ¡¨4Î÷Õ¸PМ°èlÍélÂ\HvI&xgÕ_I»vNvN“÷¬ÇzScb*{Å–%Œ‘´»”ÅX´ð7iI¨ é"P.÷¸š¾ØF®âUŽ.l.¢4gGP5šSÇŒ`ç4ÙÇÎ a¬7Dƒcbä—oÙ”–½zï,a.K_ƒËã”aG#ý®ÜA %^fXc•¨S Êp9öÊâÖ ‡¦¸¸k#=(‹ŸÖCåâ²dÇb±(£¶\ûz%´Ù1:쌱sg©1^›OtÛ9z³œ[éÙØýit„XXžÖÊ~MáâøÓRÜ.IõŠÎ²ã•°.àx%XÌ¥yÕ·|O·'©2üˆ`çh¦´‚£™ÒJ@çIl"†… ³”Š˜Ý»wW6£uó=Æ[K :KÅ×IòGSú -l"FŒˆÞ¿¿q‹Ž€)íN*”Jå¶í,À8RÑ$«lùv Z¤zÆ^€Ɽã£ÊäƒÊЙ29L}Úx=F{Oý\ma´¼quèâ¨{Ié5§N’ÀVAŸY>Z9÷qpDÁ.J˜ÊýÄž<_ÿØ;cg»º»ì@eÊŒ÷eãD~.wpåÉ—Ì(FåXoãB²î…ë^sÜC‹`oÐEgf½ö†°ˆÂ\”0+óRÇ?vÆÎعS4µdŠÄÈI’—ÂêNRÇ„Ê&º&.!¥ZT¹eH¯ä²‹¸r´ìÄlíu¤ø‰n“šÔ)&‹‰ôœ†Eä;M»=‘-ÞÖ±s°s2&Ö.W—†È @ÚW·Šk_ù^—´½”œ£‹å £æ-FyϨSì/Ie(íC–·+¯×Á. ä¢º‰²r!&p{óf‰Ó€{‰Ç˜˜GåXÿNí^ÏøÞ{äˆÕÈi¬Ÿ]¨ lbñM¿QF·m£w|ãK¡½+!qÁaç4`ç¾¹%&.­?‡ Í ‹ÎV’Î&Ì…d*0Á;«þò×úì'‹;§‰¨vVúÜ“Ù|ÄÆÄ”Å^´á·˜6°Ót){\ Æ6xC ¶.l.¢4g¹d'Á-;ÇR3#ع!–%šŽ« rKŒq„Qå°£eÿon—¥ï½å~+e`ÑH¿ …/3»\XQÆÄèc°Ü+ƒž=4ÅÅ]‡•ùé`-U®GKv,‹‘}˜]Yzô[|™‘}ýcgìŒ;EµˆñB·”åp¢ìhìàd`o‹¸”uý­öšãX«¥{t–¯„uÊK/Øb•W½o€§Û“T~D°s4SZÁÎÑLiÅ+_±‰€ÎR*bvïÞ]ÙŒÖÍ÷Hl-1hè,, # "FD Œ$ˆI10’ b`$AÄÀH‚ˆ€‘# "FD Œ$ˆI10’ b`$AÄÀH‚ˆ€‘# "FD Œ$ˆI10’ b`$AÄÀH‚ˆ€‘#É9ºÓÓõ”ûù·ÜvÇîýtÛ¹hñ°»üª·æH¶±¶E ºûÞ“ËËËù6ÿ»óÎ;ßö¶· |ýŒâa·<|V²¾u/]±œS&y|%’¯€¢õv‹þm à cbªéÂS¿gÛú…â!b®¸úÚ¶«@;tá©ß³­nd_¥á*bP00Îtá©ß³­ÑÎ^zÃIÄ ``ÌéÂS¿gÛ2S»«Žjƒ‚èÂS¿g[‹µµGµˆ9ö½'Û®9-Ó…§~϶k;j§î$t Œ9]xê÷l[fjwÕá:°ãLžú=Ûíì¥7<>±FÇÀØÒ…§~϶º‘}•“ÝTÓ…§~϶õ PMžú=ÛÖ/óÚI{÷îõ Å×?ÀhÑ…§~϶Ymý`1·Üv‡W¾þFŽ.<õ{¶Ý¶m[ÍB™8ö½' AôÐ#¿ÿ½ïl»žËáÇ״ÄìÙ³§íä8±FÄD* ¾N€‘dMKÌC<Þvz qöìÙS ,h;-ä<( T ~ÄÀ^€±b|nû"§>vðu¯{‡Õãý S·~øª¶Ó ÕœS?€‘à·ÿõ¿9räóY6µê°°æðÿ÷†Áöœû²[?ú«Ÿû£»ÚN/T€ˆ€1baaêoüÉ/þâ_ß¾ŸÝÿï¨>¦¦¾ûg÷½öµ¯m;¥PM|sÅÕ×F\*ÒZÜ(`|´½üõ/¾ño\Xøë쾩ûîûîŠûÂÊv l^—ýô§?m;¥PMé×I¹PP~Š¿°hOÔ#5Š•Ü18% £ßä·}ãƒ@9K>·ƒ÷ê _úf¾ýÅuËÙÚ^¥©©¡¾™Êÿ[˜2h´—m›°F-Üú²‘æ–‹˜k¡á ³è7yãm¿òþ/{¨ùÔhŽ‹.zÏK/}sꪞ U‹qtLîøµHÑu-û£K®`öîÝ«ŒC7·Ä(¯¬µvý®ï»xV ^ñFc @,\ž²^ ¦Ë¼4l‰ÉÎù¥Áv¡Ø þ™ZíTºâg?+3”þ„Ò¢*mb|ðÉXŠ»ì¢ÇeyÈa¶mõº£»{Œ‰VPÊèÖ—²RWľ ¬¼GâÚ]䛼ü¢¨?­]†*Z<·ÎE½'[-+ªe…M“»ÿ,(`',ÏM½ÑË¥AËèǽý¬û FŸÀCÄD1GQ5£^ ]F¾É»¼ º„æè9?ÿùüÞ½×ïÙóèÔÔESSS ÷/(DïÒk^3uêÔ©²|)9*\ºSý!Ûz’j"+×11ÍfÍâÒ š£#ðJ¾2÷äoÍ\›ë˜ÿzúÞ]:µá÷6lÚ´¤ø9qbÃý÷/üøÇ?n;±!t¿¼PŒë˜…Ž ¨îYÙt„(7ù‘ª˜+˜û>tß³Ïþw7ÜxÛ5×L\zé¥×(—_~ùwüϯ{Ýë,95æ½Ì½•œv¿,*ÑŒîÇöu’Ü„XÖ»éÕoª{V\ŠŸÅ¾Ü“uµ}`¤©¼9gÖNÙ}»#|äË_~á;O<ÿ—çÞ¿0˜íîûçž{å•?ÿ_~õƒù¡?ûÌŸ<ò ¹²¹òÊ+oýð¿ŠnÛlí“ÎÅ8–RPÂ÷ ¹ãŒë˜£œ,‹ÉëS¦ÊË&†iÁ„cƒËm¿r`i&=kÛÎP)W^yÓgÿÃôÛÞvø®»éùWï»tÝüýïßð7ó?LM ÆÇìýçï8ò?ñúK÷Ùg?ûgþŒ,e,±¿W»?ø,;Ž¡y=‘;K™‚ÑÇÄ8u'Õ$¸Õ¤¬!Žf楗îûøÇ?þü«[s“oÿÛûÿé?=þ£­ËµË£¾úýã·ýÇÿ8‘ïûÛßn;¥ãˆEÁè=J)DLÁAà Äâ+sO., Kzùå—…‚É·?üáe\ðj¾šZ˜ššúÝqä×}9ww¶¡§Ò>ì¼LÆ0Vä:æs_º9ß™úõÙvZ` • F3‘ ½¢“)ßi; ‚ñ¹íONGe¼‹‡yüðáÃçŸ£ÎøÜöÇ'§cEŠ11Ñ´ÄËt™ÿ$ZtCÚ¢½IEND®B`‚analog-ce-6.0.17/how-to/startwin/download.001.png000066400000000000000000000265771406366436600213760ustar00rootroot00000000000000‰PNG  IHDR1‰R þ’tIMEÒ0%¤vj pHYs  ÒÝ~ügAMA± üa-IDATxÚí}MSG¶vÊ4иAD·G€ð‹u-æ†EŒÃº yãÕlüæÍÿšWÚŒWŽqHŽ0xdæ"bšЦénì÷Éz裤²*+û‹®F牎Šê¬ü8ùùÔÉÌÊsç÷ß7 …B¡PDãôÜ4ÏÌÞ‘yûŸÎñiçâü ޽^·R™Ç÷—ÝÎÜünè‚+î—–+•…J➇ʴ³¦P(Š©uzLZ".Ú­¹ÊÂâRÍXZZhõ:Õê²½_i„cSNR( Åè~Î[?ýãi»}†›­í¯šGû½^ç¤y­œ´ùÙ\ÀU`¦Ï¿xbU%Õ“ …B1 `î6Ö›? 0ÕVЙޞï™Ö6·q¿öéöÁ«Ÿ<Øi6ANÔ¨@NŒ9ÝW©Ì[ÆšvŽ …B1Ãà| ¬} Ô&Ó6ïŽß¬Ö7Z'MxÀ~®ÑOe¼…üÓŨž¤P(Š¡1WY¨­ÔWëë÷ììï>oíC7š›Ÿ¯V—A6dÕÆ:è žß¾ýáiûü¬º´¼õð+Æpt°wÑ>ûØF²ñùO>švŽ …B1èXZjT«5jHø™k[xôúÕË‹ó³ƒW/î6ÖÛíÖëW/þ}´o¬Ît|ðËK¸ìï}ÕŠ‘জ¤P(ŠáQ™·ûëjw¸á\œ±ËE5*I (º\^Mîïï~0ݰwr  -¸/.-ÃE9I¡P(#Án±«Öîmnƒ‡Nš‡›ŸíÀåþƒGxiµ¾Q±û—¢šßÚþjms{kû1ï}ú*¼!T3Q¡t=I¡P(#Ówva©±Î&¨M­“æIò×jQ+uhQµäã$\k[ïŽß€º~þñm>Øéu;ðf·ŒO;/ …B¡˜mpúnµ¾Þ¸g—‘@9`hNÜÚwðô¤ÿþò›_vŸsNï¿ÿôM¯×…O®'Á(Êžò0í¼( …bæÊ¹ÛØøc²Ÿ;Ùçm’¿ÕêÕ¯Ô/­JdÝk‰ u™lÇMµºlÕ©igD¡P(3dú®NîáK‹ÆÈ_<åÍâyMü›d+Dê‹%å$…B¡PŒŠÊ|r¸êÒu×¥´Ÿjÿø†ÜxÏîܹ#÷<><à‚¿¼@€cŒÃ41ž/ÎÍÜ|9|3ëOÙªâ( …Âô9æèàý}ŒgÜ´N-3áç†LOâ4KH2qç/,™œE¦<>K-VåýÍ»7ž¢–$3¹<Ǽ¼ÒU(Š —]³Z·W m®n Aògçð´¶bÞ[6:iš{ŸÚ¿âslsw™T!–¢.XO¹»äGGwáJîób ˆ”™\@?/\( Å…ËÞ{]¼) 'lŒ3/×ë^yn·-!˜én#™¾«_ù)椩dºÂŽ’[7¡1¤/’Ç ñPèpôt …âÖ€„ôú•Õx.ì¹ f×^·¶-9YÊ™O{†‡jÕìï™Åª½ÿã— ¥%Þ8ƒu¸ýuEæœÛˆÉ‚JW¡P(n úc ú4,åà~qÉþ¸ÂDéÊsïÊ3[§æÞ¦uÜ|`¯²9"Š“|*’i«I³”›Pf¢c§¥ß \¡P(>T’½s5ËF`®u 6qŽîÚþ…Ê•g¸ÏÍ[ÿvë]×ÞXºJØk¶ÏqH-ùŒ7`€q‡NW¡P(nH$Pz¸n.™ÛüÌ^kËnçâ¼Ó:¹:^¨×[ g“LâA—2–´:íÎI³“hWã;[(µS@î]}BÆqßOÊ=^ý ÉK.3`¦ n¾2w–m>S¡P(n •ds7ÎqGÃE2q‡¿Ð™j+gí6XËÚ¡0<Îîºg“(O¿ìž}¼Òm·;«¦ËIyÓwƒúŒqO4ì'^†‚+ ÅèI •æ‘å!(@kŸÚM 'Öú´¥³^¯utðÚÏZbîϘ÷žÁXk›¦znŽÎ>¹×úéÏWë`¬íÙž»S( Å= óùv‰È~c”PÊj²±ÛÎÔwÀFÍ£]!$ñL4ÖpYhu¶¶¯¼)') …bx,.½¿ºg µÛJeùà—ç÷ì1`Ñ÷,§ ]XÞZ~ýêùÖ¶õVºíÝ …B¡(9NÏMóÌìÙëY;ÛOÏnp8³7½Î•m¤„– ¼M;k …B¡¸ÇiLb<)ÊÛ´eV( Ŭâ²×iŸ[E§×ë^v;tLv~_Ù-6â—p•0–r’B¡P(†©uzŒøi®oÑœ›ìþï|õÈ$w&™µ»Ú1¯{ …B1,’Õ ÖOÿxúîøäÝ„T[iT«µ­íÇ–i–‚Á{ö»Z{­,Ì%ÖÓKÊI1f׈ ´4–hKxVá„à~=З×e.Ÿ<ñâÅN}½Î›Ée¹„åé!vk²–'áèÍ&`0Jm¥~ðË Scm ´”ìÿÞ‡;ˆ W“¬Ñ?gù®ÂVæáœtt°wÿÁ#0Yy÷‚ûe:´‘õ›Á„K´ÔHC)yùÄØ‹,“u´Ê <]ŒåˆÎrf-/§7™…v»Åé»ÚÑ> ijÚXçl®²¶~²' ·à­á'M«]Ààß*Uõõ’rRfQ––ŒgŸ©TÑ~€çò ”å©—O¸mç‰7ºØêPS/ÏQ0\]L¾Ø“k6)ÌÙオÕZµº ú÷@õù¯GO~M¨èçÿ~ÙµZÔ î€€JtÑ>ûx¥ÿPª~úáiûüŒ~þôõ·vaiÚ…BÉu#…B¡Pœ£{ýêÅÖöchBà*И Žïš‡ïŽßpBÏp#Ce¡Ý>ƒ†rj#,øÉ>*íÜ] ‰Qã™ð Úf†2ž¾”£oÊ6O¶L™²™";î…)f>Í[!ˆ>PPyÖëóŒü†_ âåÌK¢°v2›Ê¸Ê'¯âL\£ÊÌNÀrñ@ÒÆWef¡ååË ÛË ¢<Ãùì°™eâ&:DÃ.¬…1¶ð¼bt[”_æÃ5›Às÷ì$›èìBÑâR Ìtb é°z^«.-'óxàª]¸¯Ö×Ûí4$’Ùû­w#Ê1iT%)/`ìÜ•ƒñzoäja*­<Ù í¸‡S Î]fÙ†—òäI¹ÆS˜\a©~(«ø®|ò*1²Qe¶ÏT /¥A«Òä÷¦¼|™a{Y^íŒRžáüFvØp󎬋@œ“ná…ÅX8Å7›H\&KD`è=&ÙÂ}$d“º¨Mvƒ]C:«­4j+u(IЙ@Tð Ÿïw÷QvNÊÃX¶?¸1H´ñqú2Œ"[¡Ï¼h}á²ef?0ï짘)ç 3Ô™=!Dæ\y^ÀÌ¢‹¬»Â€î;D¦Îï@%“éž×N2Æ(½,“ùbÊj ò¨ÃúeC3C”›™X /,ÆT]ÒlBµZ³|SYh¬mÑTX‡G3l5Öö 9Ým¬Ã×MèR]k½Â°0¦v·Ž¿ˆQÍ*'©¹”I 5œem7,ü¸rnë£gpD -@fÀÌZc‡«”oƒŒÏZ^º‘l1ÑcŠ-|Œy]rÐ Èî¸Kvr㆟{æ÷Vë´yÙí®Öíž:¨J ¤‹óÁóæg;ЙªvOÄc ýscžr’ÅDûai…Ÿh®g·< 1ѱ{¦›âe­ ¥4-Êwà¨;üò÷hEüé“dçkàrÐCµº ìõñJýÒªM˜ǛUNÊ›}øË>Fœƒò§q3§wý$†›ÃÌrX¶¼r(,¢HQõV˜©˜Hâæ¥[Ix°° —ë|?1«\£Tÿ½{,½,Sƒ&T­.·Ûvâî]ÓêOø[»[OŽxx“5T§^—E{^“Ÿ7)') …b$$+Igû»ßW—–_¿z —ä V;A÷ÚÚú;ƒb}ÄÓ:±'…omϸáIásóók›ÛÆZ²ØýhÚyQ( Å #Ù>×…zÄóëhÓïõ+KEøÝÛÜž›_€V´ùÙ£µO·y 8imó!îï}ú:ÖÉñáËÿý|6KzRügó7´h‚û7ÓC¼œ7©ÈO,ó¾:Œ?~ÔÅXNö+ùò/ cìº,‘‹c^rƒJ’™JLBã*ÿ«ó˜SïÂM±ð›wã}…:ô 3Ñ1¡ÌàVïK»«» ~‚2Í$&þj—ÝŽœü-ûÂÿëÑ“hK !î¾Ã:“Ê›vvbø {*Iû'͘ëm×?ÙwÄœŽ™Ç–„û‰ßµüx ª7V2#H8‘8ý qó<Œ’Šü-L(#Òp‡ç½8J³,<¥"|ÖCahL(cŽ­›ãwðêEcm úÐÝÆ:Ô vÛ®-UN¯ì¿÷ŸìnÀÍÝÆÂ&û¯6àAÙš¥=“>¸“•MP1ËËàgÏ «rh©Ü!u\>'S¹³‚)Âþu¸„õð!cÐ>2: N;Ç#áÃâ¤[PañãüCaB7¯iM._c©3‘·3ºœñšÍ„ d&󺦙¶*|?¾} ×à pRüè?\8†ú+.8#g‡H.¼¨Øb0Üæ‚á Ó KK1KV…ˆüNe¨©‘|úKýây¸Á0Idœ‘b šP8Ú›_O*¬îÈæ:Ê{Ïèc ø™*ì_‘k·‘È´U‘á-Ë>…롤œ”·‹,µè'%›Z¾+ÜwGŸ©R5³A+™G&——©ÂµÊ@Qnà1E3ÝñûÃ>ýÜú‰¿ØëVex-73æð¾;’Š»bŸ¹ß!ϧqT¢À [áœXžO)`>4EÈÛtPÚÑ-×Oªˆ ÷Ýeö¯˜ÊŠßãÞdîp“G™[×|FÇ3´Lò|æ¦_¶)÷1Žl.2mUø´”iŸÂEI9ÉdnÞ£@¨ÀÓÀß%~É=æï ÉÅ´¿È ñFÚp 0O’Èr‹©qSôPÞÓðú¿` ½…Ñ^§çß ÃŽ”ßw©ç¡f8èža÷@«Žì˜cñ?  7ô $jüȉL[<£‡ õz]úÄ}óhÿ]òݒاà£+´cH¡P(†FùçK.ÞÔ%̳U±¸Tã§K¸V*ó<´Äýß­Ó&®•Óy×í-á¤ñNŒ*‚?iس7ëm9üµ“—ÙòÒRiñÌ´·lä٪ߴNáåéã•:XÊž†·g­T@µºÿ`Ç$g@€¨póù£'³tÞ]en1 …‹ð”Úm ù*m/.­`%ϵUñëigms ÐëW/ªU{ŒÐÁ//ð·’l±oÕºõ»õuðçôNš‡ +Dò®y—Gÿóç[ÂI ÅŽ2¼,+>LäÙª€ªTëuµ»ìZG»s•…Õúz»ÝJ¦ïZ4AË5'®0Ò,{M;; …b p÷h%'ÅM!`«âäøÜóqÂ:ïŽß@%‚ç{‰=Y~¢d¨²E œtií'ÍãF9I¡¸UHm”Ÿ¶8ŠÛ<[[Ûvš,µù`*ÔbÕî¬K`µ‡ã­Ö7@K4Wqt°ÇÂÕö¹Bq;1Å“ R¶*VëëÖ\…Ý罦ª¦áÜàØÈ®*­4Vë ¤ûvÀC—Ý.âÑ»ãÃRï'm’)ÛŽšð9Á)Ÿr?Æü–­@Ê€ $2â¹™_éÇ·Ÿ’ äâ)òc«W~3;—5Êá™CÜ8NûŒ ÷à6xž»•ß' z¨Ï´åÍ'õy¹Ô'å‘‘úÔ×jCï¤Ë9ÕHÌ>¼1ÌœÀ 1¶*\ûÖúÊÕ'´´Oaœ À[ÈIáTïk©Ã? =m^Þu¶ÇG|™ÖÚxËy#7ÕÅ?(ŒÝV…®')³}oPÜn”QOr· ¥îóŽìø“ì1§_»g¤fјy2c¦$]Oy±Ì,ÿÅ@~ Ïc äÅ>\Œþñä…‘gÆï‡÷¨îÂb -¦L&QΩ‚-LÔO%¾sÅÈ–*Pky­7P 1g++Ê€[…(#'eÙþ™Ð©9t·í†ý ÉÀuOù)<ˆÚ™Í‹Mîš#Ê\yÊ̯ï9/¶¼¬ t>ÍÔjµz½.œ÷7oÞÀîáÞh4” …B1 BzÒóçÏwwwÁ4Ðþüç?ãYÒþþþÓ§OAKø»•à›o¾¡Î4íL) …â&pÙ3íssqnz=sÙµ.só¦R1‹KöZ™8ÂlN¢ÆšÁý÷ßœôm *©B–p…ÏÇóêI …Bñ¡á"á¤Ö©½3‘,–ÆÇI¦¯á ÕJèäÔh4 !™D‘Â_PÔ‹/Ö××ñ—¡ð÷Ý®¥KYa¢.>¹îŒœàާxÄ+þÂÄéô% ‰Dä§»Ÿî´+Q¡P(nz]KH?ÿh9 „ÔVLµj¶¶fZ8ž2ɼ®P’0¸Ëò(#;W’p%[à)A‹²’Õj¸ÁÕôõ*ºÃ3HB–¦àŸ¡RÀ3I‹’QÈ.âÈT„“èÂõ-Ó'T¦.|&4©P(ŠMTÔX3ïŽÍ'÷ìýjükšvÛ>%K]ù¬Ø¿råý¸“~•pz\I¢.ÂAÿðð4Cý‰;îèOAП@?ÔW?~,œôìÙ3BXÓWÈð4³±±ñèÑ#îªxþü¹pBá‘(’ÞÙÙö¦$)BÓàHW I¡P(Æ Nß–€Å%KKø ‚i'. ð \ðˆ÷P¤xÀ^ÂIб*…‰QÁ¸‘c=î1¾ã.îe2³p/_¾+˜Dû!Í€EðwoošX!µ ‚T‡Á(&ÑÆhÕ©P©’­€¤=ÆCÕ«Yð ß·ß~Ëà¤. >íŠS(Š[…¹Šåp øf1™©kÚ¿ÀëW–o@|—¯¾úJ¦þ$¸Ò’B¡PŒœ{{`&™¦Ã¬ÝÈ$,úçö~×2Ví®e,¸Ã\@fP’pƒx¢8 BUƒ m zÉr™¸ãè@ãa€ºLŸlÈä6¨JœU“Èùñ“0ãd´¸îìì0 #ä ÒyŽ‚É#"Ç=ÄÃÍúúúãÇÝàÊI …B1vp}èÞ¦¹ÿ™ý;—,2o@?ЊköOAB¼ï%ÒEÛN÷®ÀF (nÞËæ$Œh9Ü€Àù1ü5}n Ö"CìííÁìBm‰z©˜Sûâú VĹ8jZôtá‚p!ý“Òྀ*‘éÏ ÏQsƒ+') Åq™L¾Qãáók²/œJ1—(/©­á`&YóÈØ ‘œ4ƒç8È=U Ü@óàÚ†{îqàz’»Ûôiƒ3~²–#O_¾| ‘…%PT#ÕªA²ot‚žúÈn…¸óûï¿g¤×Ÿ—ãÞ9®ôÈW´âGv.ÈDõ!ÎÚ™¾ÂäN¬Qµ¢òä~N+iI@÷cXð“åœ<4‰¶Dyä‹¥z #{%\6kL»B …b†qznšgfïȼýysôþÓÿ̈;¿qÅßË®} Z’i:(Ox*{Á/ú§…¾O:‘ܸ,$;Ù| ÉtgØÔa ’’sšdZÛêÌõS!HN©s\wF‘÷zˆƒB¡PLÜNî1ý¥#n畾W].Z­[ÿÜ;Îofå|<ÏÖ“ …B¡ÈƒèI¸žµ <·Ï-ýüã•&ôùænÃTsŽ*þfV¡P(Š¡A5TÄOhßÒšéyÚÒ* …bÆðÑ3?gªó¦¶Xìù²b–*梯-Ví¾»¹òQNR( Å`øè#³Ð'¤ÅÁ RP®õ$×t…ñvCÄx(!¸kÃ=è/Ïr‡ŸGî4ý¾ŸH3c/7WfÍßäBÇ®£Ti+ݱD;!ÙJÉ©¸Äd¹äå“'^ÉÅžº—¦Ó5ç]{ÅýQ:=‰[É9zòè ”&1l1+„D±¹G‘Òò\ É-w˜þG¾ÜÂ.šÍ¦|¡ìîªD’)‹Ž2„=ZSüZ€¬I6â9¼&Ù©?–´âE’OÜšeˆvB²•îg!îÛÉŒ–Ožx%{røèŽÕ“ --Í›ßÆª×”‹“Äæ:‰çñãÇrVŸò¬#xàÇF%·¶Îìð˜ó—/_>zôHzé÷ß/Þxª…˜F„z@ÇýÎÎî‘SÓ×–HH÷§lçùëb•*%ÄÿOžd¶“Ö¾–ÑqlM¹-Û]¦2ýƒ<Ä3³,$! ÈùìÙ3Òù²¿q 1}úÌ[Ë«»T™K ©*‰M,IšþÊ–Ÿ#‰?Õxu·–ÐŵZé oú'ó>•#×=%[f±û-¶ã,º%àWK™-?œœ+fí§è-EH¾lRþôÆ¿c)ú‘Nç^] 4*7Rïœ3Ù°[ñ R¢b(yQ¦H }á<ºƒùŒŽ,4÷@5ºgŠ%ån²^nÊÅI‚Ô*"ªÇ8jØm"…`4d¥Ñ ¶3ÎÐþ:×6LŸ'h´ƒ&m¥óÞ$uÏeÚSg¿Âk‘Øqï$ ðB„§ˆ c1žò5¡h®‰Y l|ír_ßpåB‹øDœÜÀ®Hð¸§qB¤ä®²‡€Û -I Ý y7ùsÙìÈ…Ð$S”×@ »%_T©·Ñ%Ì,£ 8ë辬Q~÷ Ñ}=äD+U=QËÜwF©&‘D*”2H™£XdÕJfS’ƒY³¦¿é戹f-wú“KîD y„À(RI‘ì()¦¢í$ÇÏspq[#„wW6±:æ67`§?ËjúãõÓ§OiÙfV ÍiR/g_ýµ¯_òpákM öQˆŸÅ1àya±°vR²™d=ÉÝ/J;œÒ¡ ^Lùtú«ÈZ8#ÇøŽ¿‹—TN90*I‚¯bî€ÀÚD@“Lp Á0ïhŠdÃ%XV ý°iÁ'g˜SÙtêçQª€ñpéI <¹ØœjHÆY£wfEÄ<ÞbZ*¶é7,ôOÛãp&¯Ûþö3y%DµqŽ uI{²GOötLÿµþå­‡÷BÕ =á/®h@hëh[œ€BX dú˜‡›¤ãI(7 rvŸ¹þFŸR½åo'9B¦§ 6 ’#òN߆¡ ¾ïs¤ šÅÍo™…ÉC§B„|ƒƒüì]®`Ò 6°×¡ØÝ,ûkxT1MÒ½QSdw颩i)"w:Qª‰~Ü EÒðùÝwßQÚ4á0! hJrR õÂÍ‘Iz;ã§}N0òJê|&›ü‘?Z—¥ÜÖˆ ,ó”l)=ÀoÆ’œ°K~òª†o]Lˆ-–ÒbüÝO€îIñK^äÏ«}š†a{c+…£[;)Ù 3 F‹¶Á9%ž›nfùø)0çÃ!?÷qbM¢’$øææ—# ¼É ÀræìÞHØÎùFâV Ø 1“;¥êiw;/Æ™š3 ÁH¬b¿!ùu! +_Èn1!™Òr’ql÷™¤ÃpªU›fÕr™‘vÖÙÂ8s®Ì­E²…{•I‚ ‘KYhah‚HšZ6¨‚:Šq¦é$”+çúyaì\ÿt£ãmÅ¡Ž ³Â…Ò· 2ÙˆÌD–Ê+I¾Þr"sðÍK^HÙ8ºÑ7èÉpG¯,§¬Ý‡i3yÔ8|ì2®›k™&MU‹Q*”UÏ÷qÙÒq>Ìò%GlȦqŸS«h¦?Ãä•oý¢Ÿ¥RtÇV?Z6˜TkDi N_¶”žä7cæ(ß9 Ë3³jHÃn‹•B`i³Ðx“*yI:Pû2E&j¨é+Á™²‘æÝÎBvÅc«—_R¥š@™h“¸Š~–ò)Ö$¿LBšnÇ93ZÔæ…º—[) ˆØ¥ê%§¾¨n·]èŸ-=ÂoH|«Îl`Ò$†Pg%»3Î+¶hH¦oƒCú'¯ÜFÀQ˜ƒ¯«”ˆ†+7,ôm r6ÌôÛ"éÛÍùzÂY~2µžI#] ÈŽ¨Æ™ —{ß3Ux¾‘¥ö#ÈVÌf Ï}wLˆû&ñlœ¹>ŽV¼—ÉnÓgɲo}JQ±$Ý fB²ìV“Œ›R¡Üî!Ç`cŠÞ$6r³ˆ‘Ê—*1‘òQx Æ¥ýõ×_C™XH¶¶g¦˜-Û‹:ÕåS-W6¿SÍ ¥d»23«†ž‘§þøÊϰÔ]X;’º[òÜ=®} βe±P˜LÙŒ·Ž•êPô,ô(Ÿùn@Ê™áÈ/%à0UB$~KsÎs4`“£ðn¥pj%@Ÿ©­F™y”IfYE'bgt+×8‹U’w×íá? (/'™þB…Ì¥È0ÊŠ”×sY JM^¹ûXÂI3ŽòœïôWMiœïnœvg;I$”|c”™„&Á…ŠÁpÙ‰}Œ»Ô8½À6*íÞäó‡ë'iúT"Sò›ëêš;»ÈáÀô»´¿,›¡"r\SKG…j¢ün…2QUR#©à)ÉSS£©q€“bl]×8¼²–ý3 JˆŠZ´FFèË–¬ÍX2±þ•W5®i±®ÚÇFÈu”TÉsU#\ûg›Œ°;_žäÛv7 qæuS)Šxyuç×r* n 3®ûÛßÐû0>üå/á×~.»»´É¼±…E*ޤE¥”¡”¨™iå5$–˜ïn®«\·ÿ‡2çQ%ûØIEND®B`‚analog-ce-6.0.17/how-to/startwin/download.002.png000066400000000000000000000422031406366436600213570ustar00rootroot00000000000000‰PNG  IHDR¹…*Ì‘tIMEÒ3®ï¤ pHYs  ÒÝ~ügAMA± üaDIDATxÚìÛwÇ}LJÄâF€bT¤D¢)Xu$ƒ~ ›”m*3Žï‰í¦~nû^7I㺯²^ë¦mÚôèsê&Ž_ÛuªºµzN¨#JG ÇÕ€HÄXýÎü€á ¼á~‘~Ÿ³gÎìììî`~ùûÍu ŸÏ …L&‹Å„‹‹‹333>Ÿ/ "—¦§§‘rèÐ!Ñ ŠíehßÅK&“/^ …B.—kll,£äHD"¨1¤w÷}T™LÑŽª†žÓ&©IçD2#âÖíB4½¹´põóóHŸ<ñˆa8-«xýÊgkÉøàX6Bºo8Ïeƒ£¡‘À˜e’‰Øj*ŽÄ›K— *k6›EàYøäˆøý~$¢Ðø (=¥´õËØ± m}c8N”Ê¥ =BH§HÇÕ®?°*“é#ÚôC%:#5V±`.¢o8ˆÓÕÔÊøÑ“_ÞXÀ)Ò!‹ÇOÍ&–£†Ó…”P8‚<8…†"é,‹étŸüòåËÃá0ýÓ@ˆH¡O¢«©MßDF±½ í{cÃåL¥Rø‹¢¢Z(…œššÂ¿Ö@ Pï×ÜòöQe2}D;~¨_Ñ©±Û•+‰$´’ìG·×G`E–¬‚ÃØz#ìM·W~h©X€í‰8ò ÀGAa†P>|lý߃JOånë_UÖö2´ï —àG£¿]@ßncenùû¨2™>¢?TûÃEۤƮ•©t!ŸËö ¥‰:®Oª¸,´R…Åò%{á\tbÇþÆv,C¯A¥Â?úw‚Ðîžtý}T™LѦªýáíþ•Ârôxq4nÿlnn¶µˆ Ã0ÝBÛ•3fS2jϪ;Xé´±)píu9‹Ei`ã¿_“ÆrK>xk+§“-$»½®ÃeèGö­¢»¬{ù㔬‚™ÛòÁáVÛm![0ýH1œ»–¹V­¬j°€^@‰`“×U#ö¦4mÀ·¶FìåL&“öïŒ:ìê}iK>x;*§êwÙ>ö(XÇÊÐìû…vàÏ¡§>o×PfÓ©µTq·ÇGâÀ43ôÍJÊŽÔ¡•º#ŒêbzzU îðôÍ ¸ö2ܰûøò!É/F£'§N"£ËY‡a[c9“©T6“¹xñ"Y‚Ôìóû£Ñ« ¼Ôþ@J‰D"ø\AÈåæFkK^{åd²ò£E£‹áð±BÁôûÚ8$h·‚u² ýȾ_hþzêó¶ «T€¼ÀcD¤ÆKVFeöú• ·–£ˆÃŠœ<1+òË„† ‹§Ò´lÞ®¤UÊP(„8B†º£MABY*Y›’AJ7MéW¯^¥¸wÈ‹ÓÖÖ#kŽ¥¥¥|0ûý>ü1†qíêUƒ ¼Ôþ@ü·ÀCLGTz+ uUŽá0Pó“÷ß¿QÚ@ý·¼k)X'ËÐìû…vàÏ¡§>oK(•Jx¸l^t»]·F­„ÂÝ ŒÅ¢óM°1‘â$–£GÃÓÙtÒátÁö»õƒ“¥Ç7Ù{Nu#J‹Ò³²²‚SŸÏ‡t»K›X‘ª2¹Ä1yb^9ÍkÜÜâP=ãVCÏ^¢þ2$…RL2‡ýH8Bè&åGÎH$B #”–l ç#Ý®I†açÌ™3µgž››ûðÃëÊÿꫯ6ðº«h ·×ËÎ8¸r)6iiB‘îÎe•’¨—\Tüq#SŽtSÅMÚ'äº(M¥ÞpêÕßœ:|D Óg¦jìiÐ-lõæoæ.!¹"”VZS!hM6øÚJ„j4¥/8‚Æ¢ŽŽ‡egŽÔÇ­5ÙHC¡§R+í+,U…EmfŠ;Wd Å€i¬%,MxâÔÛ#RÌï<÷Â×ßx¯Þ[ÈÓáÛïÒØíÏý>Â÷?ü¯.~†é:ÛEMóâ OµðEÅJƒaù § ≤Y:Ò~T“M¯j8HM“£ãÇh4%‚’R?”T¶`Âf$aFÚ‡ªí ‡Ã¢b9".‡ãG£È†K4Föw«•·iDä¤á–rŒúC§÷­©ûÙ»òü“¢‰|á[ß´Ÿþì­_¶°ê†i+§¦¿º‡yúá¯!¤Á3»¥TE¯}Š-) ­\Yžým@@ý4æ\-UYV^=ÝÞqiÌÌÌÐeZ r©¥šš&õÐtœ’÷­N§jèTÍ”9äÜ}nþíèŽ6È¥¨¿ß$òùgÃñÆ/~Õê/”a˜¦8{öìöÄsçÎí}4∃Äq_¡ʆ5;²{¬ÉVž×¸ßvƒ&tÓûœN'—´‡Â¶® É"­Ü7œw.<£Nkšü·£]ùÇß~\Çÿýçïïv/ZùÜ3ß ¹DD_úùÛ²™ùÛOÏ!|ó¾õÔ£yöIÙüÖ»SDó‹÷þ£êáO}óuü~M‘'ûøÞ¯ÎSä‰oÌÖòI枢±QÕZ.õé™_ÊÈ mn-…ü® ÅiOœŒÊ*¨á’$¢‰ã§o~°ïëH(!š0Q!‘8H.÷†$ò™'þ‡½™’.I"!š8Þýå"N¡P¢ ‰„\’PR%µW2 Ó $—b?¡R%0ÔÈn«åÉ%K˜9‘Ï•Oi-Ë*‡8¥°ê’ÞºL1œõ¬_Ùì>ønØMËÞÁnW2 Ó´Q©ñ’WZišÂãy9(}K:ó*ÌZò’¥F[–ŠåœB®Õ¦ÂnWÎØ]ï&gn4 %™–,š Ó쥽í²%XE©Œ×¯” ÆÑq&å«8E¥ ‰«ãjVûò²ùÀier:E¿.lòü³ åwï–A»áo¾óŠ¿õîÇÝ.8Ãô$[ö£Mo6×ÛÞÃÓ v¼à¨È¦ÅH@¬%Ë~7Tòð„´1BLq)oÊø5Þ‹æd•EIM–ÜRÉ0vöíòÞ‘í&dË}pQqÃËÒ„„!I* Gá:ôñˆ¸~yËä$¡Ô+uN+·RÕc†ì]áU}ßvº¹›KNfÕUmNR\_%ë’N©‡q{÷Žîû¶£ûvìo\öþZ Ó uiÖ‹/<µ}%Æ^ÀaHóЧZ!”·–Å©ùÊA06)ÃjJºÞÈ;”:vD¯Ù• Ãô{ÌÀÙ;]7Öû–&¡ÆJ¥P=ãÙÍm”Û+5ÐM-”‚µ’a˜íÌÍ͵53w5ƒ¡¬Kò²W“â@@6M:”B(ŸËK2$é´¯@dè"vÛ@B´s—W†azæWôé·°"a3B 5ð¯¯]’’H<,wõ˜jBÈh©X0E¡P«^´ê eÕíÞå•a¦“ÀTÄ1”Í—B‹ŠPXvøÐ JøÝÉD¹ÕR À”›ð”ä¾>¹‡ÄüüüÉ“'íHÐr¿Ÿ}öMs|ä‘GhöwcZÙÚõE†aêÅ*JË:­„÷ 7R¡DâÍ%iWÒ°JÊ€pDºç™R1‹ÎèçÏË©Íö $hù û$£µ/Ä0 ÓSN)‚“'ʳq¨òø©r{%RpAMmt­æ „o}•‹MMMÉr"˜B9ãÉd2«ˆÅb8…iÉBÉ0L¿Ccƒ(,Oú6Ê¢I}>²ÉÒØÊ–ÏÁõö'¢ó‡'NÊ—œš‰E/?%5pÇí%ìÈ=$ª6¶=!H"©c‡p†aú2*¯^:ÈàŽå¥ßp0›N 9åq…²éÉT(·uD(êÝC‚…’a˜þ¥dp@1át—ŠÅÑñc°4-+„ÐH;íÞB+ÕÎŽEºKn/ÞíÂ3 Ãt·Ççöø}Ã…µdüà‘c¦™ Œ­)‹rùÆeh¢Ãp…œ&–£B®Òކn.]†t²V2 sOç7¤våõ+Ÿ%1’B!§6Æ”±éËçä@I(2#QYèfÞÌÔ­•›››ÊÈŽyŠÅ‚Ëí©óÁ Ã0µâv¹ G¥wµJ¥ÈT¡ä²¬!¶ÖVƒ‹ÏeFÇñèÅ’Q¼~唚­ôä|°4å2†K -ÊBLá‰C4ÍF´R e©dmJ6wÌÓíšdænfxxØ;ät BŽª.•J%Ó4‹Å¢,l¸¬’—´’ºk`$Bóˋʹ–«¬‘-©PB.Ý6fÆá”¢Im—õêšU,Ngc{¥3 ÃtŒøÿeÆî;^ð§ŠÁdF|±¼ûñæÒål: ë!ÌF%Ds5µ‚ùà09GÇåÄîÄò"„Ò[œo¤o¶$EzsW †a¡¶H‹DJ¯C[í4ò||âäõË Œ‚cPFØŒ‡'¦¤Kn|ÃÁÉ©·šÏƒË–ì4OTyñÁuœ­K†az–ÕÛ·£y·³Hs¹i0ÐñS³¦™™zøŒ ÕÎ µNÂ1§1CKȨP¾ùé™ÇófÖTs"›íÿ½ÿu''Þ¶µáæN‰[WwÜq`Û½[‰›ÍÝ~gÁv½·rûfëJ^Ëí›­+y-¯ÞÜ~{£%¯åöÍÖ•¼ÆWó¯¥-;?°6.ýf !uCëD)‹ÃAÕ0ͬ¡6ÓqW¦ëÐ$qJ¡áèˆ@4i]tÁ{“1 s·¢ ‰ÊZA¡üëªÌÛç8"¿=‘µ’a˜ÞesóÏjÏ<77÷ÑGÞ¦’°V2 ÓÓÔØ/²÷Vã%«`æ¶VcÓ³¼á_;ÈÞ4ÊsEÅ ¯Zy¨íZ¹ý1¡ðKí~Ñä–þ¡wâåÆn7c‹Ðú›.~†aš„ÖÎ ¹$}„PæÍ¬C ¨ªA3k<µœåpµ“Þ­\¿ö/öÓ¡^Z¿öcŠÔú„źã Ǿ×Êd¦w9ýðׄì·ùt”ÝP‹Wf¯]:ošDBáH2³,91œúpÆžD õŒOž˜Ù¾¢åà¾ï¨¡þ‚©v¡Üz±ïâR:Ô¦êf¦O!M$}õ¥¨t쎭+Ó¦o8º™M'G‡äÄÇ#a„#Á1¤ Ãjr‡™ËXmíßÑ®\þ³Ž…ÿr·{aTB+q MJërýú–nM~aîú?"ôN~?÷Û‘ûÿª*¢ñNü êá¹¥n]=ú×åÄgK|¥œ{­M•Ã0Lc@!‘Z.kJ‚üntjHËýÂ̦XM­@.³kr!K„Ve56Z¢ÆµÒ®„'NÇÎW•PB"I%íº¹×3•PB4I%וJî‹÷þà•–J ¥wâej»Ô ѤC%¾¦CoèOè•VÃ0M¢õ±>¡TÃ*Gc‡'NÂㆻ-N˜–z8ºï@FV®¦âŸ_xï?y}þÓ·n.-ีm¥]IÞ·b×A¤5Jd‡±Û• Ãô2v¼.¹¤5Ù<¹ŒêäÉœ ކËÑ›K—OL-/-à— ŽKhkv-µ|ãòèxÚÚé1C{¸Þõ’«Ø˜U~wÝÏQBY1*Y4¦w±·Q’3^»\NÙß-ÇÊêABÚZÍ¡vÐ)•ôô*©Ú.ˆ·ÒoÔ±³GW¸WùãB5PâÐñnœa˜6RÕ™SÕÕS ²ñÑã;8†>®%ããGáûaQ µÜïHàZͯÔ G •¡ð´PB³+aQÂß»{GÒB94ù½õë?ÒÝ;C•l ïÄ˹¥êî²%œ¬²(½G_ÉÝx»w¦wØnBÖ僋Š..ƒcÔ‚ 33»–\S§ÒêÀêô©Á•i¹¶¯”~zk´ÒÖR©SÊ=àöQè{ö}×vvGs'õ†W%VLK™h·(U¼œSw‚«ˆN¬ŒH·­) ;Äíoñª^]WC`¦ß 7|$0<(·Ž€:âñÁãjëµÈÿøéYÚ¾ùñS³yS.jÉs†éiöž¼X/ÂÁC¨a@j.£œÚ¨O=žòž¡á@©XpWÒau²V2 Ó»ÌÍ͵ö´&i"¸tË5€Ë§4fH›9ŸÎ/¤?`­d¦wiùºApÃåï©Þê<Û—hëÅ~p†a˜^£Y»ò~ò§Ýþ Ã0û£f- Ë‚[-#†³¾Ììƒ3 s¯í6¬%s>'Ãlš}p†aî HûË[ñZ2#²šÉÛ• ÃÜ3”Šb$ C`ŠrÄá”fæv—W}Ãe¡üíÖJ†aîJ–ô¦q}„Xj­„& [ ¦U,g6M±–”Gâ ÖJ†aî H(o.‰ƒGD^ÎÓ±¨ Ca)š‚w˜–”<qýŠ´.¹½’a˜»˜Š¤}0áSC w{åA-˜dc–3[åÌH̦EpT&²V2 s÷›òÕƒJBa'’\ÂÌ$_ÛÞÛ'2#zI¹íìƒ3 s÷Cã%a$B:”»=~T†ÁÑ‚ÜÐ1WÈ®•§9Z–‹2 åŒ;hˆe·?Ã0LÛ1Tg·o¸‚¼rÀq Ó7œ1M¨iAn~K›ƒÛ2C^ekf·?Ã0LÛ] áK&¤>Â`="åOíEë2cYÙÄò¼ÛëUË ±•J:kÖJ†aî`WBø&OÈ&HÙø¨”"(dOŽKä jS¨JY¨nŸà(k%Ã0÷nïVhŸãhšÃð/ߘ?…zzzº{0_>OwO7öÿùxîN+)”ÞpØŒÊõA 7æÙÙ™©”ŸT÷íxöWǵ¦ëu­{óKËÖÎÎöŠÅ"D;[[[J b£P(Àä¤Práåryuõ§]Xvám”ÔG_e Jªë®ß§·#cÓ¹­Âzµ¦£‹ze4hßâ½nPš!1}‹ì{–«AêéÜ¡ ;¾a*B4aQºœ™Í@1´P–ÓÏ2éYmxZZCK¿’[8ÑC/3Öòò2ÎÜÞÞ^YY©V« ElaEær9ˆ#÷±-•JØnÝ¿ßQÎBŒJ/v3eûž˜–L3–žñö» é·ñªytA‰ž® ó‹,-ÎB,@ï ŽõzvâѳCØG=„¨Ù€™‰}ÄAxær>s9£6&Té‰Ó‹PL+ŸÏCa9¢ĖŽ6q€(¬K8é´1!©æ2ĨÜܼM7;ˆÈ}bfvÑ“~QD´¿†0o}¢Ó"‹!)ÄH:Ñ:hMçç œªjÈ7v ù8ã°4çò Äv ¶gS[”Œ9¹`ÃöJ¨!¤smmmû00'}}}_sùÜfªMćƒ(MxD<èýÈ‹¢kÅéâD§9é5-‡10…aª½³G åí‘CÕÚÓ Û%¡›Ä“fÆã•Ü"LKåѳ!òÒëk8QËeÙ†}ÜpºaW6íþ ˜®-»ËGõ>Æ•…ò¢0½êÜêqö{¸ioHH:!g…Dî=ÛQr’šï!ßLvZ oü‘û— Œ(ð©!ˆÿò³÷œïíÀŠ<¶'Ly¾ l=Uç{Òé,Mщ?ýéO‚ñsRK¡Ý~çÎâ+ŒÍÝÝ]lázÓCo4Žþíßþ ~ß××ßýêþm³4ZÈ {x|‡ ùEžøè£”¼ûØD¿„åyíµ¥å·ÞNÏ-Õ­kßýШ>õy\9Ó„›£æmqÝ')Tv?8mØ•4!766 ž‹‹‹ØÇ.9ütD€znoÿ½¯%Œ±-rœ 0$ `JÏŽÑ~‚Œ¬ÕÕU( …rÚ¡ØR( ,J8àìÛY/ÏÎ΢X”†Û·#™ŠÑ]oß·z„^}„p&óù<\l#”4aE"ĹE4Êd;føÈ›››m£™7£èàÍ›7é€ ‚ tÊq³Oþ¸½cù¸y1üøE—Ü‚ÍèJȘ–þÛT7Sµ5-MÇNÐë:Τâ«dAF{¡Ãz]ws·š#SÓ dçøñqáì.Wêù\mƒ˜;#¢i§Q);‚ tgª<ÞÛùó&¶ÐGm]2ð;Þþë_î|ûõ½z½¥§†Í_ Q›˜˜8 ¶]ƒÒƒ¢™îoA„N¡ýxP-»sï¨~˜NëqæØB¡›ýêÎ?ï]É-<©î+ýºÎúI³Á¾rì n®ß¿üùÿ„È%¥s7(—PŠQ)BGë·kº]²ºãæ=øàétV¤ž«­¢_yÔ*çrö+=ûö+9zåV©TRçm‘™LFÙÃ*MÈÅB¹„?ÞéÀ {ê¶›"”‚ ô‚ÝRy¸WÚJÏf=ÐÓÙsghÅ{ô÷m…ýøÏïöôœ•zæ¡ÂJ‘m¹lLV*•r¹Œíááa­¦ýs±ìK¨3bÝ?>!B)BØí’M˜“3³Ú(œ_Z8>z %Ÿ«K+p·!‹K¯¯Î_[áÔmÊù%=»^gâÎ;|»†ä{ï½···W,9aeŸr ¹tN>äkfÒ侫R„R„.°ðÓãÆI³ Ý„ñq„tÚSÿfNìÆ[1íÞDþÉê¾rk­¬¬ììì ŽH_]]UýqÀ8õÎW4ƒFPŠP ‚ÐH.âøðÁv~¾ûq.¿³.ù“ê¾õT¯ÆC[²ÿ¼Wg.¿˜NgõûŽÕjÕN¥R.7œ¦µMϤ{Ï:U¦ÑDècHG¹¨¤ ½`^÷†©?ϲÖO§=Ø9¨”óöÜÐDû¨Þf.ç§R©—¯Ywïð¥¾î gœsg˜E#ø®ŽóUñJµš½øˆb vÚßÒc6\êÎ×*¡Œ·†;5ö…±"hN6ëi ‚ˆp›—.ç žúmñÝ-e›¢0?že±†Ä8ã}\}íD~Ôù3ì4'ûQR‹rH0 ØÀŒËžTðœl•}=§Æß·kO+ʦ==i6ær ì ¯×kˆ6¸yчWçFGq\ ÿ]¤ÖQPשùV¾½"m/í{¹xk¸m麻)¾m]ßWVÃË%ÿÏFМl0-3ÇÍu¯·~ï{Êš¾’[€>ÚnxÍž2½r%·Øñ …ðÁ§gÒ_Ýÿâúú»£ÛÃsጊ7*ùl›óÑ-ˆ0>ùôó×^[Z~ëíôÜRݺöÝ<ÔK’í•îg.ç3Ž˜/Ïfôâ©íÛ ‹™¹ÜÕ¥•ƒJÒ‰˜¯¾±–Ÿ/Œ—]y±x :Wy˜{¤k\¼ÍÉö¤R.¬,@Fçò Ko¬Áä„tZ­‰3´·Ž˜–¢•Ý4Vf˜‰LFÉíhDˆ9Ù8ŠÈ66õuìà(Üó'Õ}ì§íøo®nˆV ‚|BædƒVr,ú”ýÊ#¢ñÝGøÝPÉ“c˜™™çc†A’M”9Ùœó°éU%.7M4kŸïä˜é38w‡ {·ÆÑ믿w©A:àædÛÛÛ[\\äTCøÎ•o9_wnípK´R„qúuëÖ|`Þþ†PÞ»wf¡Pàlf_é7Çëëëÿ1îl ‚ tI”9Ù¼LB«Õ*çË iÉÉ2`EÂÞ4[†à¨Ì[.ˆÂé38ÕPíiå8`±/“år™ 7ò»Y¼f5[ΚŽC²Ž # çd«<ÞÛùó&¶PÌãf$¹´èw·þ¶×¶…t®­­Ý½{wqq±T*a{{ÛJ¥²¾¾žÉÌÆ]XA„nð“ ÛããiNë«×·ô´jfI2Ý~ÜÔ“ûØIMGjA6‚æd›™ÍümçTÊùùs„d.ç!PX=@½P(lllP%™^99œ!ØîïïCUm¤×a'›¬y+‚ÐÑJA„öˆV ‚ ´G´R¡=¢•‚ í­Ahh¥ B{D+AÚ#Z)‚ÐÑJA„öˆV ‚ ´G´R¡=c¤•?{ûç] ý܈‰;·#A§Yòba–bõÀOÜ ÆH+Gˆ.–~‹åÝÝEq 8´+Ü1c}ý§/Q ÂÛÄOb Þ c¤•®[îÚÚçVbAžc¤•qùAòª‚=ï¹ÑÓ ºPÛ‹†\.¼tÞȾ¹m{Qoœ¶YXŸAÙöÓÑ}Œ~{9·mNBŠ^"ó5üž•=zÝ Jæúuá40ÃMWÌ I³£Ó½IÏ1(Žï!WˆoïŽë¢Þ8Q²±–³”Õ¶uå¾xÛVrww?¨8áõtw¢_±£ºsÆK+Íoλ;kþxó6€ÿùÞKD©_ùëñºÑ1÷1è˜ïí ªß?ÎèÿéÇœñÒÊ‘Ã+åøá^Ô%:M§Çë:ë*¢ Š H%DgìÚ+OTGFet„ÉFI9JšA½±˜ƒI§‹ëò”ðÛÛ}•y±wÿbóÖŰ9QRƒØ•/à|Øœzª<ÏaÛæG=Íð\¹Fox[#Æq Ê›Šðœ„¨OGé„Ç’”³J#VlÛd}ú¶•ì ìî¥>Û^1zAミ«ú3uôL«“¦™J)ËR3³zk¥Ú§0qvvÖÑ%Gõé™ôW÷¿¸¾þ.¶q×À2*¿°QÉçho­Ê=%Ÿ|úùk¯--¿õvzn©n]ûîµÿXkeí©> ŤJf.ëôlûÅ®¼`œÖ0nÈÝZŽ›Z(¿ýZk%„@%ÓiUXÑŠ©D+Ïh='£•Ûágêsò0„ÀˆDæçÕ“ªzùªÞ¿’WO*ª^×G©ž­˜–þj¶tÕqºh¥ ã‘Ýd ¹p½!—ø )¬Û!'M­ŒÁ!îÃðĨ»R„q`ÊzÞ:9c{ÜpÆ)‚h번ìÌ/©¿þEûæª+9uõšŽƒ˜c7fH„±…àß=Ôe»Ûø@ aK*[=!ŽûZïï•´>fæ´’žØm¢•‚ Œ l¼º¤^}]²1¡ƒEX‘ùy½£Mî7u›ºí2îÌ ‚ ô“c­wA6PžXZ |ª}s•dÊhé;ÜRìJAÆ6VÂÑžËkAœIk;•Ǻ™JšNÛÔÓºÿG÷€Ûà »R„äozMÄöŸßµúy`iÎ_Sÿ_«“2ŠC/_UGuUXÒ^9TòÕ7´hêëqA¡ïX¶Þ½ùÓÖ{;êüG8àÿò3½Åד¦>ª-JK·QB%alâ,(©Ø•‚ Œ *DMTçM“´(¹=¶Û4¯(uPÑ~:UÒ¼0.Z)Bò©˜n÷Þwý™–ÑoëÖL˜4*Í)c¤•××ß; }äý÷ßÿÃïç{h$f´íß·úÆövmÁ{‡ÓÁOçÐtZ”ÏÆ]ö’Ô‰‘>ùôóðÎ&5*àÉÙÜÜ ::¶·{l îerB¥¦”J©ÌLûÈ'–šµÔѹ!9“Ö®÷Ô¹FŽ—VŽ3É{~ºxr„qcrRM§Ô´-”3&© á¹V6 n§§§MÈááa³©BS©T6›5‡A†kJͦT.¯MÕ<é-)þiØ@¡†F.«Õ*±¡„hær9uv: ÛTaè>m;àPÌÓÞ¢´VR(Ëå2$rggguu_kµ¶[[[&j±XDH.w%îâ ‚ DZiMªÙ‹ð‡[ZIr{{{ee…* ÝÄWê&âðëúúzy¿œÏ¿w Äkí¸³OÙ_ðþÝåáYéÁw]å^ò}ÁôÑ¢— (”Ø»mt1òù<¶Ç×û÷ﯬ¼wžãÇu¿G÷ö÷Xöd|œïrŸé:œ¤»ÍFIeÛØÂ§Pb[°1_·îoõp9!QŒîï^ ëÄi>'~4n×XPIÈåîîîòò2…ÒtˆÃ¢œ¶aTØ›•J%î 5¾.›Ëcå¿Öä-bå[LsȺ*g‰rCÛ®-<*x ëÚ)QPÍŒèÁj6›Ge•®‘CF(ÍWYðÅõ›’ ¯ Œ A+J·uÌã¼·½¡Þ’yÙMê¦nYÈÿB/Þ*êèô¡Âr‰#G¯hzG_ ñ:5#ñËÁ÷Wî*¦ëñ ªŠQ¤£𰲇×CHñ€û½Ž9W¶ I÷œáfôeÜ=’ôs "¢ & *º–þ!/»ë¿ZJtáLºœk6P‹ÅR©„¯ØîÙ˜¯ÅõbÜyU’aYD/EÈã7ŠUÑ]ž½gbÙ;-c"±`H:_jÄ6—Ëag}}Ý!´ÂþÄP"°qT;ÏñãlÓQ/þƒuµåµî.¾%rUHô‡ß»Ü]IG¢ìÞŒ…d»ÇD…¸°àq×jµååePF¶H.,,”Ëåµµ5×{;Ø.,.Äç¡ èûþà‚¾ŽÊ¯$JÙ£Ž\y;-”óŸÇ¨TExV»øõúV‚³cgØj "”1“ɘvÉjµÊöJÈ%ö766ÌûàˆÉ÷Áãγ  Ñí•YX‘0-Ù¥ÃVK(#d4oƒ|u·¼ŒÜ¿ÊÞ“¶*AÐýà”E¶QêÞ{Ž ’´1H{¥àä£>•ñq‚Ð z}pZ‹pºS©%Åx¢³¹¹)Ö¥xZã+)Žðµe´yRéë,â”Kؘq—RúÅó±è®—ÉØ®:ðþûï÷)å›7oÞ¸qãöíÛË›6q—õ9c{»Ç¶à}ÅÌ‹ÞÚR*)˜ýÓ‹á'd¯qŠ#å2î²¶ÛÛ=¶ï7gggÈÃCU«éï©”Êf•§Gç9£úôLú«û_\_7yË] æÃ?ÄLK†@.¥«Gˆü2_{m©X|{iiéÚµk½'8 ¡ÄgoOU*êέ˜çSY B7HWH´VV«ú¡„\âc¯Û(qãÆ ³/r)$IX‘øÜ¿¯òy­˜ê¼íÒ@}¿õ9¬Åea¹†ïЖôvéÐC‡†B.©¡ÙŒ²à„¸}û¶·cG†© ‰A÷ƒC.WWõ—LÆ-—J8æœCG——ÕJÜ™† åÙÙwD…ä1yë–VÀrY÷êàe¤-I¸¿³£evûLLÄka˜0úøñÇ߸qC¼o!‘LÒ¢ä !3Ê2ˆBAoÏÎâε0Lˆ!)Œ“»»Ú/•Ôö¶VIl•G.!‘ì+‡šÈaêB×|ôÑGF(óë_Ši)$ëƒôÈ%}íµµ–PÂ݆,K3—kE㎠±(…1a’oéäóz»° õ;.g¼\~~‚,y+„ ¦¥T¬»W;“i ‚»Í·Âá•ãS©ÖÁ¡‰ Xqg¼s¢L(ðá‡Ê‹›½cÞw„ÄК;ƒ¶d±¨¥º©lYT¶†B(阳±_ÏÎÔW÷ãÎxW„O!ñ‡ßÿ.î &˜–bQ ÉÃÌ_ÙjtmÕ‹ÔбóÇ?þ1èP¸EéV×(ëëFÌÒrÞ6ý^òà=wxîCœÛÁçJè“üC­„uéÝ⳸ØúèfÍLÜYîc3dtHà.òb«†§Ö'#7D²‡¡†… g2î ÄO¡4–BÜ™!ÆQ+âØ£EiÔÓw‡Ÿð¾iºùÆìè\WHPƒ…\Â| ¹(w|C¼¥óMÐ[ä º ʳ÷DÉyÛº ¿PÛ4…Âê=‰Qyvvf„ò,ôU$§o݇5Ñ|O1Þ£®}ce#è\åñ;=äýêu9C.T^W¸ëܶU~-ï‰]TW”‚‡\(Ê]F³†DƒÛqXu‡DÊ(ø¶å‡Û&¾ïÓ³£G®;s¦G#(Dæ"†‡ô"¨JVð¥) ­•ÈÃÃÚ=„2•Jqeð¸3ÖG¢[”†NîáöñµR}OtÅìμíˆÍŸ¸¬§Þ{Ÿû‘s±%“A«½²Z­B.ïÞ½ Å<ƒE$(‘Q„Ò˜*æãÔ>çÃþ ò¨ÓO4m3àÙEGÓ˜ý£m•ºnÁàs.æHÓ²+ÁÖÖ¶•J%ÙF¥¡w×;„ 'Öe*Ñá=1<¦×,u^È™ZÈ…z<ý¢]×›Š`3F¬(ßv’^ª+z‰ÄÀi&ž>} Crgg‡r¹±±­\^^n6›ðǹUúÅž–cÞ8ªg/Ïâ:ŽŸ|úùo~ýËð8}-T"›öûW¨~¤,=-ãÃ…¯ãhííí9Û+aWBËå2”‘]=Øfíé-óöÚæ¨NžÁ¥YcÁ×Þ¼¸Ú.$[„OÛÀÞÌž¯>111Š¿¹­àQ¬®XŠÖ¿ŠŠ2¾GB˜ÜÝÝ]\\¤,B )‘Ø.,,@:±eˆ²Ñ ïkKŸ Â2Y,s¹TrmmM鉅Zï{×ÎáWÓá3‹žA'“l”¤EÉnH't“âûûûØÏÙLŸwžAÅÞŽ©„ÉFIŠfã|ôÄNAgrkk«Z­Bwvvà€ïííåì%u …BÙ^;"e#Z)Â83¹¼¼ G²X,ÙßM—[:ãY›¸ó)‚'{uøêÎ{ï½§ìnXš”Ë……qÀA,Ž2ÃΕýn8œñR©Ä1•ìÕ‰;Ÿ‚ qb9ýëCøãØÂؤ.B)‚ðÂ\¿´Â%íÁC2HHAyçE>æ\FS ‚0Êœž^ä†>veø Ç''"Ÿ‚ ?Ífó_Èîx½3£øÇwU‚ riöÒÌÌ ß¬éŽµòôôTÇüþ°XüO~øáº}vêŽsrú?ÿ×ÿŽ»¢AH,7oü×ÙKšÙÙ´ë\oX”ʹ¹9D°¬‹Yq¢SµÑhÔj‡OŸâsP¯A:½qNŽ›?ÿÏïâ|À#M‚kû“O?ßÜÜüÃï'EþÙÛ?Ç3›¼R³¼ Ê\yˆlYSÿú¯o½ôÒK|ÏЪ%„²Ùìììlï9ìÆO§g!°étâíçxdça$È\ºtåÊ•ùùù«W¯úF€ë ‹*yQveÇ©ðõðpnÕR]‚ Œ)—ç.çóyå…¬…ɸ‹,‚0\Œu*$O>ýÜì·]Óm8éGœi%ë]/ʺxƒ¤¯ë%uqÑJÁ>Û××ßå×?þx¨õx‹àZäη›ÅÛé4<ÝP.9K°º],¢•‚?®g{xõa(ÂÈUE"”­:À׫5 ¡AÇÀ!´FûQ×é¾× ºÐðÔ’qÌ©ž´7]k»âø†$ÑJ¡3ŒJ¯Öéê?×§óÞcÌk®˜êEOß“™CÕ)N¹TÝtÅñ†Ä]ˆ>"Z)tŒy°ñØãùçÇâ|þ‡Óyï¥ÎöJožnö]e÷^H ‡Pª;|HˆöyíÊÄ#Z)ôŠ«¯ƒ Éóß§"t]:ß . 1ú‰É¶%ˆV µcØFÆ g†­®ºó½g‰.Œ#xŒóH9ŸjWk3&ã¼É.‚ëô  O]™óÕØöDïYÉJ%Z)ᜨ^§·µÎ!.½HX|Ktº+á$¾ºæ t~5ûÞCÎJ¢•B A­rÞpWˆók¼ —ý(‚ošAq:º0ÌÈûàB IÛ˜AˆÑJ¡3`% Âà­Ah´W Âè1$ƒ Æ ÑÊD1†Ðùý÷ß; ãˆherÃGh ‹ 677ãÎÂ8b5lù=›Í:W ÷=ÊððS¦gÒåCèï:V‰g ‹œàŒCŽÖÊjµ áÓgëSy”ʈðf³™Édp¨V«…œR©V³—çâ.š Â…aA +•ÊÖÖ¾@×××…(ˆ÷îÝ£‹EšØ9EÙË=Ê?@AÃ$Togg'cãZǰÝÞÞ^XXÀ~.—ƒh¢„¼†Ÿ²³½Ýé²ã‚ ÃÌ ã+¡‰®ÃBÒT„!©ýëJ…‚vÊâ‚AHZ+ …BÕÆéJ«óÆGhííí­¬¬À¨dxø)8 >xÜEA¸0´VÒ¿Dç1Ê|pøÚÙl–m—Kvõ„œ">¸  Cke¹\:Lw›Ýß°"¡˜©T*Ê)‚ IBk%ä¯f³ººê) L¯7Ž‹E*&#„Ÿ">¸ I‚ü­­­q¤$ÌF¸ÕFøðÛ zÖÊnÙä!véU….³¹‚,ªq½C)ä>Üpzß®¯§Hc¥ }äôtÐ"£µÒ)—N(‚AGCN™œ\„>smÀÈ}™;Ã4VºÖfA¸.Í^š™™q:»ý¦/ZyzzŠíoÿûÿX1A+þÛo{éÒ%ËÜLiý°cí~óçOñ9¨×(‚ ½É‚E ¡|饗²Ùìììì`®Û«*³ÜL8Ä-|ðtz"œN§]/Œ?̰)|h¢9¾™:‚?Xç(aö\†×¥9+Jä^rÕKúH)œO¦¨²YZ”¤Ì‰Øš'âôè‰\`1ñÆE •%»Ò 'Rç;Ëz?à+I|•÷ƒ_Î@>„åõÍ|Ü™=ðsæɇO,*2¤.©#ü´ÜK®²ÔÅïŽ)T«­ÜRãr¹H©ñœËbRÂŒPFLd0ÅìcW–J¥••cÎŒ4œ¯s{{{}}]5(&BÊåòp–×7óýÀןH|VK%ý boOÙuÙFþ¨AÛÛ‘"÷’«••çfW§) “•ŠÚÙÑ_¡wÈ*´/Ÿt.>÷ïëð¡EÉ‹E}ˆSèôþ+轘ý£×uù@8T"šÉ[[[°Î*•ŠqiM _‡Îòúf¾×:<'aoµò® úY…¬ÀŒ‚¾„×%¥dk+Rä^reÿîºTzÐ(ŠKpmMÿàÿƒ(WÇ'òedŸåeµºªÿ=(ýÒó &aŒÅìîüb\K†˜Y…L㇠;·ˆÃY,±5Ï O1˜‹­Wq>;QC½èØ2¦×|3¶LHßµ.¼gLÞ`3ær¹mû'`²Ä©•îß¿o¢1Ð[^ºÀ†Š¼,GHVƒ’b|擵纹ιëM-ùΞ=„p.ýååeÄÁEÅ]b„w¶µÏ‡ÐdÁÎ×Ô¹?è äožÕðÏ‹ÐÚzsÂD wøÀ\‚Ãtøñ½.Â! S0‡˜l1nÍÕEófÆU|FÀWDv¦R^gݲI⸿¯¿f2:ÂÇv?(¥|*v%bB×ðsƒòÂÞD²¦Þr±ÂÙé¬n‰`Ÿ94•à*N,Xœ(?nü¦!|æùtÉ›íb¶Œ ÆÌBÄ@Ž`Ç¢£Î¥ÍwE Dà%ÎÈ”]3¡‘÷}såÐßLľ=5s9oéL&M(.ü'á´ËÍüçà"̰«¼Þ‹²Œá•ÐQVC’rþoC²ÞÕAX3Ϊv&èM“¥Æ–ÿ™^7Ûýý}¦`.t—Uë_N«Ù‹;¦Á‹Ÿ[Ó”fd‹!|~øÈ™hDÚŒÆdùpºt=c.¡ôæ„]&5~u¶ô¹®K¥8J2}>ð^UBjˆãÌLÐ?ªSk[^Ó’hÎ5‚…È8JÚY?Þ»`ÄŽœ‚-þ@dqˆ¦7ýeØÔtÆ™mßr9mX*¾«Z†9‹i}‹ƒVÒ:à¯|mm¿o&p3K¥’ÑÛÂjŒ,Š,¬°b±¿¯Š³áÛ……:ªæmq>BxÆx9<~ëëëá|leC8óÀGîÞ½{L-ŸÏ3\ñq->Ã&Ÿ®lLd ÍÞÒ1“8„S(UÈR@úÎw:øšÚ@š|þ]å5ÓÖݽ{—)¼óÎ;ÁÑJ0:Õ6«ÎúT~+|PÇûÊž¡YÙK} M#ñ¦ª™7§þšì±qQúøŠÌ°PÌÞîî.¶H) ÆŒ\zså¬*Ë;úÃ/ˆÎ  |îÝÓᨄÓlANiq¼óNËl¡#©Î[ÜhΘæB»\îñ<#5vA࢈O“ _aysbßÙçJaÿÎuü»wŸg1q •×E HÓXŽêÜ”C˜5>/=YS4”‚#3Ãâã¶à(­ZÊ"àdÒ˜Š!åÅéôdYj ñY{D(CA‰Ð[‡—Ônhäêf´õlŠÌ4M¹Øl¤ÙU!œÜõ ÍÅo–UD!ö'¦~ñ‹_,--Õëu"üà@áwSp‘2ÒG:Þœà(.©ÂÑz½õ„ãÆW“ÄG Bx]ì ž°ehµ!)ªó[o©'OÔµkúôW^ÑúÕWÏ‹†Ëáä–™añ±ÿÍ7Z#°< c¸ÐÄÄó,…—ÙC&ÙåBÑGìàŠ×¯·,Dðïÿ˜²AûḨ:·d!gH–f&ÂYù,¾"E=£ÂQcˆæ,’ÂYˆƒ}S!¦rpgQ9¨ ÄGýóô â žIüÛçžp­–ôÌ?ÿñ5ñ½®K`ÌN4߀NÌf? _xkkëÆQËO§?ªñ(j-ˆ,°uÿàz½å›¬¥´1÷þõAþ{ýìË5W¿ý§ùêßÿY;¥½ÿíïóß'ÿeKµ´ÅšÊÎö•´UŽ˜»Ÿÿ½øç©g^èº6zêÁwoå¿yìW]HéüÅËž6Ë…KÏeó®ÜÆçtww—ˆ ÅEÌþAùŽs{{Ë”Qùb]fg;ý]é BDÄäÙ±“‡ööv'…Y» Æ2A÷Ö0JÑ'Jy¬èéâYÒææ¦jȬ­íªæL¶ ®w@wêôŨdY[d‰uVÞ…BrªÑjê |c®•¶l ǃ>KyRž/›G-E™N§ljÞ`¯ÂRaäÊÖ«½ÆÊª1Ö1ò˜¨/Ò;™i½=ÞúY* •舱CµOs»©Ì8±j‡>OQ‡·NŸÒ„þAPÚ‚NíRé?‹eðœdYË`n­ý Ç*‹‹˜<<eb„ªbs¦²ic¦kº4§´L½R¹Ð_ÏBvH+"bv¶?r-# ×Œ†,æ=?¶Í"´ }.VS\+ÆuÈ™™=,ÅžšÍùôôpšBl›Eˆ'i¹ +‰G½ÓÉbvÙè9ó¬Q=0›-í¤ÿì Øxi¿cXâá<ÛäD -K1žN_ý_‡‡‡ÓÍi ûfíãÔ½§YÝ÷vs Å9æ2žÕ­[¨,Uà~é¸l¾Ë@mkwnß:}æÜÍO?n²•üD)Obw¯ùe_×GÝj"oãðêA3C‘ÇB~€K õéùŒU²ˆ©ý ò% u…aI1;ÛWj’Â1ŒX²V IÀÔÁ}”¬"€ "€ "€ "€ "€ "€ "€ "€ "€ "€ "€ "€ "€ "€ èˆ¹pé9õ“°Ü嫸!©¸¯ €(õO”È•Ò ¬éº}æ½s{éüˆf0>Ñ7œuÝ'LM¸b ó&­ä 0>Ñ­kšXï…hÍ+%Á‰R`ŽÐHVP\woxKÄsÿyš3ÀêHÐã¹E¼gEs-º{ñY»sûÖé3çn~úq×%0*û×§Ó)DÄDÄDÄDÄDÄÔFÄ4ù®ž¦8HkÌš2× 'pãbµ(þ¸¢…çû–++͕֢JßÇsYþ«1=ßý«üZà*u°rßW¶f0¼¥&/Vs]^ú€¨èVŒuh˜Òh Ö²ª!c\G»kk¥eŠW$©1‡°‰ÝÓìøµãž›µaVWqƒ®´PÞ©W€Rý˜õPœSYEáû^±èD‚ÁÌ ×‰Lå1hý3œëE\šãª¢rÏÐ\•Ù×Z »v¤²žýªÜÁð*²>5•hò¦ õ[1šç}¸9OÓ&p,×1Ø Óþ+µåîaD!CJ;¬Ápõ½»À 1Eœ(í\ﺴza2™~F׳³}¥ë]0$ÑݽÏî|XšóÉþóÌg>óWj~8úb"b"b"b"b"b"b"bŠ/fÿà:ßî;ñrehD3™LºÞ/1Œ`pè‹ ˆˆ ˆˆ ˆˆ ˆˆ (ú†³z:Õöõnè²VË· *Ý<¬tÏ–ÒÌÊ;ÃgUµX®ÕvDzr«ùdf„yIkŽx¶“yk;*ay²Ð•ú'J!w&]ž¸xãTÿFÒ™‚>Hv«6ó4Á:¡g¶“…âüsBÖÒâ`‹-ge}V®ž…Uõ j½•&b¢Úäfú¸¦KsÌ[¾›k™Ë´|„TÞ::ªT!ǹµ>=Eʹï©FRµÉÞpÖ|½f1Ç|ȉX¯NÖBŽFW˜•…õ|ºõ±<ÍÃÀí~]ÞÓÚÏlXõçð4YS&m‘\ÕŸjÄÈÔïîõ ÅWpò#ÇUÑí7©ð&ìD÷IŸ¬yú¶¢Š ¸D·b¬½Åk½(1·`þ9®µZëJ¨üÒP`-¹a­ºŠTê!öW# 41$„SCRqAD AD AD AD AD Ac/¦M•5Ó¤ÀM¾7œ¤¢¾øgø¸9•Œ½b³o¯™1’ñbúP˜6k¦ómRZÏ寕›jrÅæ°*m4/&=jƯɡn½¤³ë‚ÏàÇ‹)®nm„wÛÀñ\¨eˆÓsQZÀõn½Àÿ¸æ3â9‘ñ<#þK¢2o‹‘¹_?±•_,[é!2â©Ã/¦ÈµÍn_F!íöÒþº‚#äH y"B6î^ŸÏ#úKXÉõå #¤<0øñb$ü˜,®Rš°n°2|CÒ¹(aÍ{š6#»²#ðéÖàÇ‹(¹½ ÿTÅõ¸-Ô¼k0À¬î ùÒ[ã/¦?*‚ŠÚ”OÝš=]ÕFeý¨óÙâ9šëõ²µÿBk†=^Lé¿ÔË´«î^WmåØ1•UѤ÷r™ç(°Hµû\C¶fm…y:¼!ŠñbÆPš C)ç¨ñbúÛƒþ«<ã`ƒú\÷Ù 9&\ @@@@Pýñb²D=gcúÑÁaæþF†ÿ‚ÆÌñÿ$÷ZDÅELò/³¥ÚTç9åÿÖiøÈ&®ë¹B–ï¼'Ji˜—tûöä#ãU>"Љß‹ñ t⋤r ó‚}ÿˆ*ý/&ª£®A¯¼ÜѬŸÒ i¾zgŽ9à’ª8ßsa¾gˆ³ðÁVúpUû8¯\ÞuÍNíÑ'´»·ò+äÅë+×z zÛ‘2ÔS©f¬µçÉ×2þ"íH1á/qëi½Ó„1]“pÔ‹áVF¦íî^}âÐB3¤ÛæL½G¯Áõ¹xx1zÕÊÃè¥lÅDb=MÐÓ±Ô‡ñb<…4GW Í«^_L퇒c¼"Ôx1|/€ "€ "€ "€ "€ "€ "€ "€ "€ ˆ ö®W.3™Lø¢0-î¥étêùßk\ízwôKô‰Ò 7ÏZ.=§ôœTûÐäbbµ¤kù…”¸ŽY´®ÚÙ‚èåÝ\;ÞgmôÅèk KWB7߬ë¿b/&æâãQ"zú ƒî^Žg`u$X³×@Ö!ãÝšÃß™»V´nÇsŸ#k!c¶Žgl-†u(âÊmîoH‘ŠƒþZ72yÈÀcž=ÒZG†,’g<ùŒ7TB8"Õh¶ 6"vwwu¾ìl_¡!ƒ(D *Ð~AD âÐA"uèïà~|hhyC†ö 1¨ƒâD € "€ ù‰ÒÞÞ^×Å0NkŸ}öÙ;wº.€qú?¤|g0óDs¿IEND®B`‚analog-ce-6.0.17/how-to/startwin/first.run.001.png000066400000000000000000000234311406366436600215030ustar00rootroot00000000000000‰PNG  IHDRÔ¨Qû‚å,tEXtCreation TimeSat 21 Sep 2002 17:28:13 +1000hX—ÔtIMEÒ (H„ÏB pHYs ð ðB¬4˜gAMA± üaPLTE3f™Ìÿ3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3ÌffÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿez|#dIDATxÚí?v㸖ÆÕòé÷ÔéœÓ+xïE¶Oé°7QÑн‚Y28ªUTæ JJamB5Aq;Cÿ.@DÊTßÏ.•DQE}ú| ÜKìv€ y P®Ö4 L®þ<ò€i›\Œ¨·þBà£yd,ó%5(›^Ô¹/¡¢>¤±·oíßÉû[ æ×ú1¿`+8o—Šº±ŸüŸD™/Á÷µ¸Ý· ¤_ßý…Ò7bpê÷e¢æ¿==<=Çxû‘]'RÛÇg½Ûþõ,p^¾LÓ©B§ÿUpÎÝÇÓ5„¨:5>}:~?½^¾~¿|?6×IšêÚUúþ0°xDLÿ­æÕ>&?ÒŒ÷úv¯ïè¯Ä>mkíÇíãtUÂþtz=u¯§S׋ú+³œº»Æ®•4ÅMשâ·Û‡œ|ßu{¤ýVß…%ÜuŽ ½2xµmÕÐòlɲAÔz DHØ]c§Þ¿þþúúéô©ûzùziQŒ¨õðž÷ä¿ñ®xM¯/)jýãõøÓuBÅ–¤Ç I±*¹v¢¦¡†mËñˆÚgÔÐw6§öˆz¸/n›Çubêýë§Oo½QŸ.Ý¥Û³Ñ\-«w³¦½' —•NmשG÷í\E‰[”^>.ê’EŠEü'ZÊy¶¨£¨• ‰Sz•}\É©›>ü8}"êþÎóQ xÔ2õð+l[»÷¸HX¨^"D,¾Û -ê×ôkKÑ›×ìõäríÏ%ÑÑkGD-VSn®iWO Úî<ìÍ¿qñƒ/üpAõÜ: j.œÛ8õâÅ××Ó§¯—ï_»þtqßZ¢>tTÔBÆúŸÑð(X)M~ì¥îÅReÞôf­øÃ^?’¢TÚÜHС4-uÞ™…zõÐfœƒ¢¥Ø}!5Õ/„¼ŒD§VÈj1usúôãÔ‡Ó_»þtñ™í­Pø²¹#êumõoŒ:d2þJ…Ë…Ê©EÀ­[ÊÍØ»åÏFÓTÔú…{ãØSQ?¨] ÎÞùcëÒ"ããÕ _L=ïÔíâ˜úù4DÔ}@=œ.>4¨‰sOE-•)ôxg†Ã3ÊÀµEßñTѨî`ipêÔråƒñ\Zø 8æÔJÜ£K«. í R^Äf1µŒ§?õ?¯OÍÞñ¡KõÁëÔ#1ëôQ*ßß!àÔ¶P-çîRE-ï=Ðõâá‡S믢Óz”Š©MïG»RïÇÓûOŸ>õáG÷Äö4ž˜ˆzr¢¨îï;­UéÑ{¥õ½~ìÍ™ Ô¶E3ãí»Û'@;øD/žõ_ §z!ð+ˆ(6ÅåáÇÓOÈׯ߿þï$÷£ (zÒs­¤½·Ç¨ÝÅä; š>'ÉޟµÜÌÃTÏþ1˜ID %/¤wɦmÄï±éº¿UÛÁ—»†5m¿PÜW ?~{~z~:›ãÀ¿Ùþp {zgo»õDÜÚ§íEË©!óÃÞy6z‡È:¨Ž©A6sUXÓ5VqêÿfìÈÚá¦ÿ9²ÇkmY4I]R—Ãßd]7õÃýßä}P_%kj8÷ý!µT[RÎÔ5¾×±‚Sa’äe^½7j6!÷^Û(s2N~°âƒò§~°ïÓè#ÔùaË>ýÁ,vjÊcaïGš÷;‰Þ‡ð}\Ö‡õÍQþ°f\£_ÑZSý²ñw8´´Ì·m´ã\áè]å¨þ;Žwån´ò¡yF-eäG¬¢ÞŸ‹úELîù‘î¢Þ—éÞ·úHèF½ ÖC%[kš•‡Sí¥¼iõ–ä âŽY,·=|4rcããñ¾Ús¹Iydô}çŸyª•Ÿ´ÙúÖw’>Jß êôÐjeº¤! ÝâÂÛãÖW-À‚/u{õµpXGœkˆº¨Á¦Ø—Tj”¨—ÄÔpj°-vwE»†¨áÔ`[lQáÔ ~lQ«ðcÑà œl‹-j§õ#E½³15¨.K_vDÔ GáÔ`[¸®#@L înŠaÖ ?àÔ`[|'Š «ÉáÔ`[|ƒ/ˆ©AÕøú©—¦žBÔ`Sn0L§Û›öØŽÿØñ˜ÔO ŸN êÅ'FAýøò©†pj°-þ,=85¨ô~€»ùÔàîÀˆ"¸;15ªÉA½†Ésã¹585(€@9cïLðNnYp¹Üœ@À©-Þ™ÿ1Y.·§¸DB.rkpjP~ê%¢†SƒmÁˆ"¸;ü¢æ¼;_èï¹ëÝ…Ão¿pø•[ƒSƒð÷~ðo]rkpjPþÞþc¨áÔ`[N͈N ¶Åßû‘«i85(ˆ@ø˜ÔK ÷15¨SM>LÑuDï¨59bjP1·Ðûª‡w“85¨85¸;àÔàî8õ N ª%àÔ85¨ÄÔàî8õQéÁ¶ø•/ b|NÝ>æj×ýpj\¡ ÔK(¦†SƒjAL îL«ž‚Š ÅÔïæ÷]ýgîëÇj©Üœ€Ï©¸B¨¿Sq-=P/>§f˺ôàÔ`[|N}D?5¨ïæQƒEpwú©1ç ¨—SgzµÜœ@À©Ñûê15¸;ÂNýó§U§w‡?Ÿ15¨˜€S/éÒƒSƒmAï¸;PùîŽSë99½Gÿ—·rkpjPáEäSƒJ õ~ òT bjpw„®ÐÔ]Î?~þ0S“s9 ùYÎQ.ožºS¿ÚO¹585(\õܧÎÔ4®z "àÔ˜IÔK0¦†SƒZ‰ô~Œ<–ÍõC©ay—éA„¯ÐÔëv¸ý9ˆ×<u,ïõK8œ‡ÿºM/ÚáGÊ–KE‹„o‹'™òn¹585(ÿˆ¢5÷ŠZªº¿×°Æ'j85Ø–€SK+îodPͤ7«ðš2oàÔ <N͵†µ¦¨Õã¦iœ‡¿÷c ?Ä١д´ŠIôˆ©AÄbj&ZŸ3š@›iÆSƒÒˆ]¡i¼•=xò±rhùG?5(@å‹Î)ý©_æ!FA¡D³ô´tOކ]MéAAr?ÎÈýÕpêLMéAAøœš=ò œTKÀ©—„pj°-§þ§Õ‚Epwò©íª‘í¬–[ƒSƒˆ(ꪑ€y §%á©}EÜ-?pjP‘,½Ù"1MN JÃ?¢HŠLBµ[$J=…Sƒm 8uB‘€\§¥pê´"ø§Û‹©gŠtÈ §Eá¯|I(`Á.=85Ø–¹ëS_ìÁR$`• È­Á©Aò©"wØëK*€Sƒm ôS;Sd À©Á¶ò©•–Ss@äÖàÔ ¥S#KÔ œÜþ~j85¨ÿõ©áÔ bN™@½Dú©1“¨59f¸>õ’"85Ø–Xå‹S$À1“¨‚€Sc&P/|êàL3 €Ò‰äS‹“ÅÉy!f…¯&w*_äY"U9œGìºÑ™x‡™@™*_0“¨—@–fõȧÆL ^N™@½øœ×§UƒÊpwø³ô…pj°-ÑÞÌ$ª ÒO™@ÄF1“¨’xîf»ê©S$pÆL  âùÔ˜ITHÀ©ƒEgÌ$J'S‡ŠN˜IM´òÅ?“Àù‚™@Éú©ç‹Îfe¹Bfuȧ^R$§Û‚,=pwøû©‘O *N îŽ@L©i85(ˆœ|j85¨‚hï‡fUé§&U˜IT„¿F‘ 9c&P±|jÌ$ª$Vù‚™@•Äó©9È3 €:ˆW¾`&P!>§n1“¨™€S{gPg‰˜Iß©1“¨¿Sc&P1ÑÜsr¶žÜœ@NîœTAÀ©35 §ásjÌ$ªÆßûÊP1þ,=85¨˜œÊÌ$ª p…&Ì$ê%Pù‚™@½Äs?0“¨Xå fU¨|ÁL ^â•/Ó"o˜I”N¤FñÚ"85Ø–x59fè§ÆL ^"WhÂL N¢ùÔ˜IÔ®O SgjN "OëSƒzñç~À©AÅÀ©ÁÝpjÌ$ê%ÒO=ˆ‹nÌ$*Â_£HŠÌ¥|1“¨ŸSIîfÕ«|¹²HN ¶%àÔÞ"f5¯|™ œ1“(H>5fu©|¹¶HN ¶%vÝ+‹àÔ`[ü½˜ITLôZz× À©Á¶D+_®Kh‚Sƒm 8u¦¦áÔ  ü¹ȧ“s}j85¨85¸;rœ3 €*äSc&P/±EÌ$ªÄçÔGÌ$jÆ_MŽ™@Å*_0“¨—€S/)€Sƒm‰Ô(2užˆ™@UD*_0“¨–f¹BÓÈin,N JÃSë"Ô‹¯Ë­Á©A KÜÊ—LMéAAœú§Õpê œTKÀ©1;¨—hï‡fUàÏý0EBÆgqéuÌ$jÀŸOMŠ„Ec&PëSûŠΘIT¿÷Ã[$ ¤Œ™@ÙœzI‘œlKÀ©1“¨—H>5fu©|  pªr85(ŽØu?"Eg©o\÷”G ò3 €z‰æSc&P#,½% Mpj°-§þ±@Ôpj°->§fȧ5ƒ|jpwø³ôàÔ b|NÍ0“¨ÿˆ¢)ýÔRÓ˜IT@lDqH—ÃL bùÔ˜ITI쪧N‘À3 €*ˆçS÷7—3 €º8u°Hà‚™@éDò©¯-€Sƒm‰ÅÔn‘—g‰gÌ$J&O=?“Àåfeè§ÖE‰‰ÕrkpjP|j¥åÔ¹585(dé»#àÔÈÒõ§w‡¿ŸN *Æ}j85¨˜€S'\Áêæ“[ƒSƒöSˆÂ°u_5×r¦ØpjP¡EY"`rôĨ¢xh 7©Aap›G]ùâ”èT‘:æžÂ©A‘ØÁsû¨s?œÑ™eg²JN J„wÔ¨%êÉ<Ê©¥u3©q85([Ô­ ?&%\åW+ïÖÑ œ†Ï©E5ù´D@,‘q‰™N ÊÂ5³Nb.NRáÔ \ª»$¦ž”¨kÙÈ@DÝ©AyŒ2÷´S“™ÈØ¡=öb]¯ N JB¨s';¬¤H }85( i¹;ûD1CÎpjPþ~ê\MéAAøú©ËD §Ûpê%áœl‹¯ŸN ªfHMj‡‹â5ã § À©Á¶<:ØER¾JÄiE- (ä09ç´* «H 7tàÖ¨|ê«‹(fY‘åÑ,(èO6Ûc;œtâ·›Ý6ÿ¶é ] íððqzuê´"ÿ<P(–g ôüã·ÿã?;ï¯Úîð6¼¦=ß ¿ýƒñŸº¥È=ú+—NÏnŒÃÄ{itT¦WŸkI~®˜øiºæºûÕŽÛ—';b÷D£¦i9Sï)ùBó7X¿Ã™í2zXÔ¶ÊûØ\³\&ðÓ•fŽUJ»-iWùt~‘À\÷¡8lRÔZ‡;µ#Výh¸×ME­—NU=þ\ΗÛÜjòwqÔW]¯ @Fpj®¾Éš+ïcG%ÓEï€øH‡ÉyÈ7R?õ®ÍËÊ’7óDp²ÓÞ¦­v9'›Ñ[²”K%n5küÀi6áý&´Ëœ>»Œ"9U‹ÍzE=Á¿tþ¹sáäüX|Ãøÿb\¬G¤Ÿÿ6ˆíëVÌÇ%>á‹^x¦O™½ï ïŽ^rî<¿Óf›º‰ÎÚ°ïiv8ªgn/'s-/owòvs‹DÍ¥¨I#‰ŽNfCQ; ®áåüáýõgní‹~@¦æéøä*‰Ë¿jgß•Ï]e…oø•í¦_&2Û©­åKß7 [Ô”N~ø¡Ùz×ð“/jõJUƒ2Y êªE’.ê÷I—^Õ'ŠÞ³øÉ2gì½ù®­ð~’{)nÜaùAíZ[»Ê©ÙŸ²]v?õæßÒƒjw‹z̸€YKÔ(ÖÚû%:ªƒ{¡×q»É¥õ~ë¤ýœv§6Ü™†éËÌÄÊ™í.iÕóv³{?ú›?{þµÛeŠzkIw:wÑŒ(ºÏ3Ú1¬2e:•kn×®·_z “<4{A×qoíKë«ÔL5ÇxB»ŒŽÕ‘pkØ“®orf›ÖO7»™EYNý¯ž?ym¢æ\ޝÒaYû`s’È Ž[Ý®åСú”˜»fû‡fÍ›/ ‰œU×MéoÔLk˜|Íõ‘åsíêqp½ÚmÌ$µª Ê›OãÔ¢ÞiQïv:§Cç{èG;ÝŠµÞŒÉI$i¡qE­µd L¦ÓHÏȤíZ©ÐµÌrRûÈi&„+Fñéª/׎™ .NÖ_ab}|¦a’®/pb»–¨%Tã¿É­FŠrN…QwÄ©M^ž/WOÞîÈ¿ ³ÁDÑ[ÃäaåÖŸ["*u@Ë)äS*m½]³´E¿T¢e½ÓÊ‘/8›—Ë:.ìù0ÀäpévuR‘忞†Ínͱ4Qwæ[£¶#-¾™y»ÓV»X‘@Þ‰âøvÓ,=u¿LQ)oFÔNt,?ŒË¸¸/½Õ¢“Q›fEQ“ܺ®ÓFÖŒ ©Ô^N>e'S¦»››k·£_&fËËÛ°/]Ÿñoœ«œÂy§ÖåvĦ3Þ®±ê.R$u¢h‰ÚΧ.שUÌhå:ú¡\r@©¨M†õjá‡Ù/b\*ZZ7_*“ÀÌ©¨ÉY0£Š™k×H‹Û`ú;möJ4ÜšÌi_º>ç$5­]ƈS3£ß´·K‹˜ÙÚÀUN½¡qš¨w…ˆÚ8“9bÜ}šþíåäo±ø„UØ2éÕv‹q6qjñaê¿ÇÚ‹œs'ú)«`Ôœh¦´kΕÒ@6¡au<¹FEÚe–SëÍ«È:­U½ó|%§V» ?¬EuiVÞ ý¹['%äi’‰Ï†Óñø1áaòo{§Î׋>LU€É‚—òÒ§kn‘€›5O:+}œÐ®î»#§ˆL¼å„†­®’NYhêû%ÝÂ(h˜<ßêò"÷Ô"Ê.iÑx?v} øEœ‚¡˜žcÞ¥h&wWÌ&Í^Ès¿N+‡ öõ}ÜŽ.~w(È‹©É†ª*˜v„ºc/œ“NÔÉK­1«Õ÷ìª"ù”óî¸÷=„ŽˆÕœÚðÅ4l $õáÇúÙßîúEºåšò©­dÊÎ3¢¨ueÎ…9TzÑmz« ØYóX$p¶¶Š2ÚݾH@;õ÷N¢¬*êÿ ÔG…dyqûCT jú’n*¡€$$×eíZV‘#É)% ¸95þvçŠXZ«²½«ó©MLýýûîûî¿– ¸/èwö´²XÜ#©Eí-KT¾99˜4‹låòÕrIEL}Å ̉ºœ"-êß;>.\T$à$÷íºD«Ï,V$ R>S,•:„Íúåºi¢­œ"ýÌmŠ ëâHN4'«0깊)01õï¿ï~ßýß²"¹Š~Án}­¸GRâ –—Q+?¢6YŽë—¸Úª¢H ”®¯Šf›.²H`g9õ•Eôêë"j•*þsísKÔÝ Êèg¼f‘@RDm´(P›e³ ;E3M§ L[e¾V•W][$ðž2“@Z‘À®›¬ÒÝ8úP!¤u:㊚K§Öq©¶ êÝ+ûŒ|Ê*Pu©éú“¯É|»Û ðõŠÈ;¥õ›è^ •ù?-Ђ™îýÏŒ·«—˜ý*´H€'¥ëÓ¨•ßïæEÉýÔ”‚ЬÏ9`eÜÒòôÉ•ËèŽYÂ(¬H Ú°ÛÚló¾Í8»MÚC‘@á#¿¾lgwÅþ‹a–ßg‘€÷ØoS$ÀÝ"_‘ŠkP$îLQ?½X<ñElýæÁ}’)ê—ßûÃðû4ðÏ¿ jP¹¢>¼üñòòðòÜ4Ÿ›ÏO5(|Q?¿´Ï//m/ê¦Qsï] ?ô³0»ö±­ÝC‘€E®¨÷ÏÏϼ<·ŸÙçÖ/ê]A¢µèm²èƒ¾x¢™eEWäêß Y?ÍnÒ.ÝFº¨ß¥¨ÿxŒú¥y{i÷¥‹šŒFÙà 4«“®-VÇJ¤ƒtÜG•'®º“z˜÷ú"¼\ý›$ë'ä~@»é¢û©_žúðãåóQ÷wÅ‹Úds®³£9WòÎ09cΚäëáºo@æ.¤ x³æu‘€z“ë_FŽ~LSšÕIjÅù¼Ó› p»j'ש½Og‰mº8:uÿôx³Ó÷åÿj!Ynžû(Qs“wÇuB“¯HÀdÉ“*§1½É$õ™‰¸Ïé¯ßI’[©D]$ ¿ 2—0AÔÑdý”f­d}+Côúv³‹¦í^åÔMOÛ§Þ)ÁÊû»É2!gn¤ý1¢¦äü[´H€$›„G‘ƒÉÕÇ@&HQMºª×(ÐyŸL×9|t²>OõíÛÍvê—±ë£m†ÓEåÔ;âÂ^Q+#'÷?FÔ$ƒÜDÞ™,Që9d*ªÌ€÷L/°–¦ èdÌá¥MЍo‘¬ŸæÔ+µËCíf;µŒ§ûÓÅççÁ©©€Õ­Ï©‰c¯’Æ'çVøá è,y¢Y#jcÛê6íLÓ´#êÄ"I>µÉÕOùCr«dý„‚›[·›.jÙO-âé—ç·ö¹MõnÃðCŸGS ncÏôZÎÜ86×:›œ¹¬!êÕŠ¤uq®wt¾]¬òåÉú)¢¾}»¹N}ñô[Û‡ oOðÃ:Q¤'~¢èéâZ5NLÍTèlâpç¼ÐZ°Öè͈wö9§HÀü9NËÕ¿a²~Âû½m»ÙN=ÄÓíç!ùüù?³#Šñî½Û‹Z¿uw8"Ô¾ŽLÍkÜ–·«îäÂ"é`KÂñõlgq²~Ê7ýöíæž(þv8<ˆl¦¿žþú-.jâɉ:zh‹­X€3“€rd™vj9µ>ÂJá*ýI¤˜©„OùEÈQµÎ˜Ò{"6®ýG¬Â’æ­Ç¿h»y½CD=Ô¯¯oý™âÛ(jš>ßÿÿNDÝù’B:º´ù8Që¼r‘€vjòÕŸ8µ6®¹|w•‹~pN?¶«“æ¿9?¦]š ú‘íßofL=D£¨Uao*>’;e>U-_S§fÙ X¨j^Ž©iü5£¢6>Ÿù–ôg¬G·–$Í[ÕvócjíÔ¢§Zý$³Þ8¡Ô£úÝOøaªæ\åMONiFß°DÝróFHø!ߪúŠè·›÷–tȨƒFýwNïHrÒ¼ýx‹vç:¯]vÅûÍtêQÕ///£¨ß§–gHßøE”CÜOu>Öÿ^hÇÿÆèO^üÿA’Ö]™ª]÷û$Ÿþ¿ð¡»ZŸv&³}’·®¿«Luù0}Ÿ*j§ÏjIÒ¼¶¬ù¸ãv3cêó©·ç××öíí­¿#c ª½¯?¸n‡¿.{w{a¢?ýì.ç¼Ï©¨…Ï7MÞyVÿ]ÇÍ‘ÄÛËP¢“$ÍëÇ¿p»yáÇ©;ó··–µ­!߆Åo?ÈéÖGÆ‹àçKÒjú‚L‘çïËìÆ?2Y¿þvsE­»¾˜4êiÛIbàfdž(v*Äx·~ArOéI0$ Š$óDÑêÚù¹õÎà#3ü°U½õÎà#ש "‘³ZxÆ ö‡ôç|dïæ·{½¨3Î À?œöS»®3GSò÷kÒËý+ùÓæ‡dÕìv3Z½"y¢h%³ ;u²“qôíKgŒM/cÓ²ñ­¾ &†ëEko6HwÛ®£IózÌÌÚ ²’?mÞyè Analog HOW-TO: getting started under Windows

Analog HOW-TO

Getting started under Windows

This analog How-To written by Simon Handfield
This version (1.0), created 21 September 2002

Contents

  1. Purpose
  2. Downloading
  3. Installing
    1. Introduction
  4. Customising your configuration
    1. Introduction
    2. Running analog from the DOS command prompt
    3. Using your own log file and changing the report location

Purpose

This How-To provides some basic information on how to get up and running with analog on Microsoft Windows.

The How-To covers:

  1. downloading analog
  2. installing analog
  3. verifying the installation using default settings
  4. some simple customisations to get you started analysing your own log files

Once you are comfortable with the topics covered in this How-To, I encourage you to read more from the analog documentation to make sure you are getting the most out of this very popular log analysis tool.

Downloading

Download the latest version of analog from your nearest mirror site. The latest version at the time this How-To was written was 5.24.

  1. On your mirror site's home page, follow the link to the download page, look for the section that begins with the heading "Windows users" and continues:
  2. You can download a pre-compiled executable if you have an Intel-compatible chip and Windows 95/NT or later...
  3. There is a link to the latest version of analog for Windows (zip compressed) in that paragraph. Select this link and download the file to your PC in a place that you will remember later.
    You can download a pre-compiled executable if you have an Intel-compatible chip and Windows 95/NT or later...
    Select the link from your nearest analog mirror site.
    Save the file.
    Save the file.
    Save the file to your computer.

Installing

Introduction

Analog for Windows is distributed with all files organised in a zip archive, and so no installation is necessary. What you do need to do is extract all the files from the archive into an appropriate location on your PC.

The zip archive contains directory information for each file, so inside the directory to which you extract analog it will create its own install directory which is usually:

    analog [version] where [version] is the version of analog you've downloaded (in my case 5.24)

The archive will also create subdirectories for you in this new directory which will contain documentation, example configurations, images and language files.

I'd recommend extracting the archive to your usual program files directory, which is usually C:\Program Files, which will mean that, based on the latest archive file, your path to analog will be:

    C:\Program Files\analog 5.24

Step by step

  1. Open the downloaded zip archive using a decompression utility like FilZip (freeware) or WinZip (shareware)
  2. Select your decompression utility's Extract action
  3. Make sure the option to Use folder names is on (or all files will be extracted into the directory you select in the next step)
  4. Select the directory where you want to put analog (usually C:\Program Files)
  5. Start the extraction
    Open the downloaded zip archive using a decompression utility.
    1. Open the downloaded zip archive using a decompression utility.
    Select your decompression utility's <code>Extract</code> action.
    2. Select your decompression utility's Extract action.
    Make sure the option to 'Use folder names' is on.
    3. Make sure the option to Use folder names is on.
    Select the directory where you want to put analog.
    4. Select the directory where you want to put analog (usually C:\Program Files.)
    Start the extraction.
    5. Start the extraction.

You should now have a directory (C:\Program Files\analog 5.24) with content similar to the following:

analog directory contents after unzipping.

At this point, without doing any more, you actually have enough to run analog over the sample log file supplied (logfile.log) using the sample configuration file (analog.cfg.)

Testing installation

Testing that the installation succeeded is as simple as double-clicking the analog executable, analog.exe. It will run with its defaults, using the sample configuration file (analog.cfg) in the same directory as analog.exe.

When you double-click analog.exe, you should see a command prompt window or DOS window open, then without warning the window will close again after analog completes.

Testing that the installation succeeded is as simple as double-clicking the analog executable.

While analog probably ran successfully, you can't tell by watching the command window. Instead, analog writes any errors to the file errors.txt.

You can check your analog directory and you should find a report file, Report.html, if analog ran successfully:

  1. Open your analog install directory in Windows Explorer. You should find a file called Report.html in the directory and several PNG images: this is analog's output.
  2. If you don't see Report.html or analog threw errors when you tried to run it, you may need to extract your downloaded zip archive again. Delete your analog install directory, and go back to installing.
  3. Double-click Report.html and you should see your first analog report open in your default web browser.

You should find a file called <code>Report.html</code> in the directory and several PNG images: this is analog's output
You should find a file called Report.html in the directory and several PNG images: this is analog's output.

Double-click 'Report.html' and you should see your first analog report open in your default web browser.
Double-click Report.html and you should see your first analog report open in your default web browser.

Now you have confirmed you can run analog successfully, you can go on and customise your configuration to analyse your own log files.

Customising your configuration

Introduction

analog is a very powerful log analyser. This is great if you want to get very specific information from your log files. With power however also comes some complexity in configuring analog to give you what you want.

If you are just starting out, you are better to make small changes to your configuration, slowly working towards the reports that you want than leaping in and trying to create your own configuration file from scratch.

The sample configuration that comes with analog (analog.cfg) is a great place to start. We'll use this as a starting point and make changes little by little to get the results we want. This way you can always go back one step if you get a result you weren't expecting.

Let's start by backing up the original config file so we can retrieve it later if we really break things badly.

  1. Make a copy of analog.cfg and call it analog.cfg.orig

Now we can start editing the original config file, analog.cfg. You can edit it in any text editor, such as Notepad or Wordpad. Just make sure to save it as plain text.

Running analog from the DOS command prompt

Once you start creating your own configuration file, you're likely to encounter some errors. Analog normally writes these to the file errors.txt, but you might find it more convenient to have them written to the screen. To do that, find the line in the analog.cfg file that says ERRFILE errors.txt. Put a hash (#) at the beginning of that line, so it looks like # ERRFILE errors.txt. The hash just means that that line is a comment, so analog ignores it.

To read the errors, we'll still need to get that analog command window to wait for us to read its output instead of disappearing as soon as analog has finished.

To do this we'll open a command prompt window ourselves and call analog.exe from the command line.

  1. Establish a command console session
    1. Click the Start button
    2. Click Run...
    3. Type cmd (WinNT/2000/XP) or command (Win9x/Me) and click OK
      Click the 'Start' button and click 'Run...'
      Click the Start button and click Run...
      Type 'cmd' (WinNT/2000/XP) or 'command' (Win9x/Me) and click 'OK.'
      Type cmd (WinNT/2000/XP) or command (Win9x/Me) and click OK.
  2. Change directory to your analog install directory
    1. Type cd "program files\analog 5.24" and hit enter
  3. Run analog using defaults
    1. Type analog and hit enter
  4. analog should run and exit without writing anything to your screen, and drop you back at your command prompt
    • analog should run and exit without writing anything to your screen, and drop you back at your command prompt
      analog should run and exit without writing anything to your screen, and drop you back at your command prompt

We have just performed the same process as we did by double-clicking the analog executable, but this way we get to see if analog encounters any errors as it runs. This will come in very handy when you start to create your own configuration file.

Changing the report location

Probably the first things you want to do are to change where the reports are written and to analyse your own log file.

Let's look at the line in analog.cfg that tells analog where to write its output:

    OUTFILE Report.html

This tells analog to write its main report file to Report.html in the same directory as the analog executable.

If we run analog on a regular basis, we're going to overwrite our previous report each time we do so. Also this mixes our report files up with our program files and gets a bit messy.

Let's create a new directory where we'll put all our analog reports, and make the report name dynamic so we can run analog without overwriting previous reports.

  1. Create a new directory (mine is d:\stats.)
  2. Now change your analog config so it writes its report to the new directory:
    1. We could edit the original OUTFILE line to look like this: OUTFILE d:\stats\Report.html
  3. However, using a static file name means that new reports will overwrite previous reports, so I'm going to use report dates to generate a dynamic file name for my report(See analog documentation on OUTFILE and LOGFILE commands for more info.)
    To do this dynamically, I'm going to use the FROM and TO commands (see documentation on FROM and TO commands) to tell analog the month for which the logs indicate usage
    1. FROM 020801
    2. TO 020831
    3. OUTFILE d:\stats\%Y.%M.html

Running analog after this change causes it to output its report files to d:\stats with the report file name of 2002.08.html because I'd be running the report over a log file containing stats for March 2002. If I want to run this same report over a new set of logs next month, I'll modify the FROM and TO entries to 020901 and 020931, it will generate a report named 2002.09.html.

The image files that display graphs are generated dynamically by analog when it runs and these are stored in the same directory as the report file by default. However, they will not use the date as pert of their filename so will be overwritten with every new report run. All the html files for different months will point to the same graphs for the latest month.

To avoid this I'm going to use another command in my config file to save graphs with date-based file names in a new subdirectory to keep things tidy:

  1. Create a new directory in d:\stats for the graphs:
    1. d:\stats\charts
  2. Now add a line in the config file that will tell analog to put graph files in the new directory and prepend the file name with a date string:
    1. LOCALCHARTDIR "d:\stats\charts\%Y.%M."
  3. So that analog can add correct links to the graph images I'll also need to add another config line that tells it the relative path to the images from the report file:
    1. CHARTDIR "charts/%Y.%M."

The %Y.%M. segment in the last two config lines is not actually part of a directory name, but forms part of the chart filenames. It might have been nice to separate charts for each month into separate directories, but this requires the creation of a new directory each month, which is something analog can not do for you. Having one directory for your charts is not such a problem though as you can prepend your chart file names with dates.

Now your reports will be written to the directory of your choice and won't overwrite each other each month when you analyse your latest log.

Using your own log file

The other important customisation you will want to make is to tell analog where you keep your log file so you don't have to copy or move it to the analog installation directory.

analog's default config file includes a pointer to a log file:

    LOGFILE logfile.log

Because there is no drive letter or path information, just a file name, analog will look for this file in the same directory as the analog executable (analog.exe.)

Your log files are more likely to be in c:\WINNT\system32\LogFiles\W3SVC1 (the WindowsNT/2000 IIS default), or in some other directory to where you have transferred the from a remote web server.

My log file is stored in d:\log\apache and is called access.log.

To have analog process this log file, I'll change the LOGFILE config command:

    LOGFILE d:\log\apache\access.log

I have no spaces in the path to my file, so I don't need to use quotes around it, but if you have spaces in your path you must include the entire path in quotes:

    LOGFILE "c:\my logs\w3svc1\ex0203.log"

Running analog now should cause the program to run, analyse your chosen log file and output your report to your chosen destination.

There are other changes you will want to make to the configuration file to generate the report you want. You will notice that the images do not display correctly now.

The analog icon and the red bar icons in the individual reports are stored in the images subdirectory of your analog install directory. To fix this, you can move or copy this directory to the directory where you are writing your report files, or you can use the IMAGEDIR command to provide a virtual path to the images from your report.

You will also want to change the title of your report from the example [my organisation] value in the HOSTNAME command if you haven't already.

Work through the example configuration, reading the comprehensive analog documentation to determine what each line does and what other commands you might choose to use.

Once you have worked through the simple example configuration, examine some of the others in the examples subdirectory of your analog install directory.


Simon Handfield

Back to index of How-To's analog-ce-6.0.17/how-to/startwin/run.001.png000066400000000000000000001122151406366436600203540ustar00rootroot00000000000000‰PNG  IHDR®ðO¯tIMEÒ!*Î! pHYs  ÒÝ~ügAMA± üa”IDATxÚì]ùoÛÆžÞâ!ê²-ùJ$ò™¤i“´/x‹Í¢¿,°Àî¿»(öxhÓ MürÇŽo'’]”LJ<ÄKû%Çñs;['–6ü@PäÌ?ß‹3ü166:7;óÿþoss³—ÆÇ ‚èõz(B„?/\Çy[­¾ySzðð ßI’¤(šf¸"MÓêv»Žãœ¶S&-ð<n]ôÿ!‰0{M³ª¦{žÂs]Ei(J³©(†iž¶S ¾œ3ét"çyá¢ÿÇN„iz§vÀq],$€iv ÃøùÞýR©bpÚN3™t.—½ýÝ-Š"9Ž;¶NpJÇé ˆ Ø :²Î®ëz¾ì÷ýÐÀïïÚÝŽ¦ûWWWßVª§ít8—µm«8UˆÇE9.¾_!”7Ok·¡4 ÎÈó"X &òš"œ#Ç]ìû>²×Ý ºØ_.ï~D¿²f»'Äпªj펾¹µcÛŽç¦Èɉ¼ßóSÉD$.ô§wñ8pa[Ó´®í¬¼Zʵuݲº<{¹²zíÊ‚ïy¸¸C‘5ˆpžè£`î«j;ˆ°«k·Zªa9 Ãzž×¨×»]«\Þ“$ÁvÜ0`À#BaxpÑ¿L„/ý`ÿ¾¦•J»¶ã° ãû=ò©ôþ¾ GY–QµÀ)r=¯ÖhB…ññQhˆ£‚‹þe"| û×5DðY]]'Hšec;oÊÕZƒ@„$ųÙl"‘/ȱݽ·p*@5¨Œ[]ôÏáKA_-€ â^`¶ßCƒƒC ×í·•X,F’¤išÁàƒßK¦Ò<Ïë†I*CAà/úg‰ð¥ /€½EiÂGUµNǸœ/ãe9AÓ4è~Û¶!Ðu½×ë±,çºÈÀëmσP!ð…rôl4Âyàì] PüØû·m>ÀøhtAvwwÓ‡ó,Â0€…p¾B5¨Œ[„ΧŸ‘!©Ðp†Ò|[­>\z´º¶af:•ÆìW¥Ýn×ëuØèv»ªªæóy,P *ChÍ¡“H"ôgï‰I’Z^~%JqDÒ™t&™Jq777·±±!Š"ðü\9N—J¥ùùy>´ ‹‹­VKàc[Û¯ž7xóTŽ6áT‹ƒQ…pªÅïíË”¸~ä€} èK  iš®›[$Å@ ~C àÕ«WoÞ¼p]"¨<99 ‘ÌG¥wv*–iÖëN\[û*MQˆ@ éøÿŒ‘ ;hm7” •À;´{*ÿF"üéшÇã±¾n˜@b :h}NB%É`¶Iº $éÁÇó`Ø¿4Ñu¨L Øùù ÝP“IT9ESr<ƒNV̘ý {[Û;`@÷ _(äÁ%;¬  G¡!:AM“ñàtÁþíí×…ÂeGkÃöa+ºvø«À<¤:|\{*;á³ÂÙ ð‰cÙ¹ÙâÝ{÷-Ó†í7ZjSMÆ“ëë ìG/‚¾gY$ID³©ú~C’²†¡Y–V­–hZð}ßÐ;V·£µ› Û;>Mû#ÃsÐy\J,.è~`@kÚM$dYŽ»aHŽB²Â~ÍicÀMLOæ€ÜŒãÂWÍuÀXi‚» >ãíªñBPâ“ò§·3>œ½€¾ÌdÒ@ñooÞ¨Öê+«ë«k«ÃC#«‰DÂCÞÞÞ^h^_϶Û¥Y ÉæIcdL8|‹ós•j Bê'OŸÃ5€¼A`ÒÚÔ–§¡\ t¶9§··wÀ[ªTªr"T†³C,%D,øÙlC[EÙÀÀHÅëñ±Qè ÎÉÀ}œ ¾$ŠWç×W·ø;U˜lî7o->|üxü’亱x¼•LN!´$Š··¶^Äã£:Ó4Aq»ÍÅbþæ¦øÍ7+Ý”âÏ\w¼×kõP¦Ýi ã0@ <ǹat[(äA»ƒ0YÁJÝA< B€£ÍAƒH+Z0¸“pBõ_*ïærC9'{Ñ÷1ÂG¢“á€4Éd";4tóÛ¯oÿõÛÑ|.?y‰d–ñ«•ŠªB@ÌŽŽ¾‘$`ÿÒøø ð‹4ÍÂcd–Õnµì|žßÚJKÒÊÈðu«[ÙØÜ]úûƒj5¨pÒ¾f Þ0Ø %hqüâ%|ÙȤAa²,Ã*„^”aܾÖ,ÇùpXŸ6„#€…má™(\ÆÁEßlj>Þ9¬J3‡ÃR¢ÖëâGÇhD\Ÿ-Œü«$-ݸqgié^&“C¨Ê0l,¦ZqwwÍ;w:,{‡$^\üªTºÏзW^=½yãNð@æ×ÑpøÖþLà¨@üÊÐ óÁƒ£›7¾®T«À_ØÿÕµ+x.hú l…„#›Ÿü€Ì¿gŠSÐ Á û‹áWÜ „¼°Â¨ÂP,Nãÿî¢oe„AoÛoœu PC æ€.¯ô$é9E]ÊçÅïº7;{ã—_~©× ×U]êÔFºv Ø[Ÿ™æÍ••ÿ)—ÙNûç‰Â쾪ʲt̹·z;˜ÊøŒð´þáS>4 X¼•O3àýC‰Ÿa~C+ðï±v‡zàJv‚B;3Säâ°ä¢oe„Á¹ê- K*%'“ƒ1NuÜíÆ¿XÖÝöýfg¿Aè¥ Üòý»š6Eú'ˆ,ëŽaü/² yw ½ÈrT\’NêŸqép¤ŠÇó PŠqùpе„¡#ñQü—¸B -®ƒG¼;€¿†Œ‹14>‚ý¡q®\Ñ;òÌôÜÝ{j·[ítÄJåGE™N§ÿóñcÙóþkzú6B?’äMß[_)ê§ë׿o6ÿÛq®ííÝ÷¼a޳®]ý† 5÷o:Ç,ðüY‹¦å»?=¥¨ßcS©±AhÎql$ÎçýìâèY:5hYR"ÑSäü\z{§ì÷¬¿ýÍEèQ"1 ih~îÖÞ[%‘ˆ“ŸNñÙ¡Áðáf”w1™ábÞá1²Å…këë'NM·5=;TxúlMà„Xõ®]]tïòå¹R,›žš†&ï»þ"| .Fð™çyÉdJ†¡½¬·¿¯µz£Édê@À048%DzÉ(\„³Æ… úõl¤Bèº{DQºég/GIã"ô6~ù6‡¯¤Ð$IÄã:ýÛŒ"|>—ü<Å¡8×Ç "|n¸ ð‰¹"D8Cœ½à‰øÇ&9LÜ fí£pžžšeƒ‹pþè_jD+xìÕãIÈá{UM¥Z­TªëË+ûnðvà§çr¹lÎȆã\Ñlœç‡>$Æ }›—Ë+ãc£° œÆIJ@ç7”f³Z]YzÔ®ÔEÙ'M]B¾ÁWìÚð^öÖ•*Ò˜ K³4¢hDsˆ 6ˆÏ%RðçC²B04hÿ\6 ì/•‚¥–ð{´8WîòÒ#¦ZíTª9­½›vZRf¥Þ4c–ýÂýîۛ˔x¹~ÌDŸ”¢@04­^áìÑ—Ôˆ™ Z[^™(ä;Õª›Iƒ·“}òô€^.3•ZQÓtו\T“IºÎ„ãW{é{ûþ@:Á $m÷8;1á.È“¡y‘eĘK“½H "œ-ú’ Ê+Å)×0ç²Ùž¦Å´öÞò«^¥Öm6-¥É™&°Ÿ…P…,ru×é9v}Ä|­—DÆwU‹3‡‹wóÓ ”¨4o&%cü(Bˆp†è—Ø^Û˜)äéò®P¸Ì†YC’ŸvãËŽÛAL¹[ˆµ qűǑ×öL¾·¦¾ªä¾å"ƒ%-¢nò"Zj€DWG)Óèä~õ>W„Ÿˆ~Y€bq9N‚çEP:N6EkÒÚ댠›þ=„ó‘8¢Ýmm"Ÿ¥]$öZI;Ƴ íîÓ¶5Hú׫T¼e *awjo¾›“XÊʈ‘D8+ô˼X{=9VØFGœÅŒ&›z“cQÅFN -äÙh"Ë>“XtuRß*¡.ËÕz •þFŠ õº5 ùtZ'b„—蒢Ѵzìè/Ïýõ«!Žëõi¸àÓ£G™Ù/ ý²…âB×!öŒ$%#[æÇ- é7Ss(‘:Ê#š?•[ 7æÐ“-ÒIõc¹6—ãDÓhl#ò2e4íc!µ¢—iªVU‰d<™¤ã²býƒCï— –xb)¾¼cv0|&ÊÅ“O?î86Çú‡É}Ò©#Áè7Î~.~èù|mÝFh×ôÚŒðDk𣴙Uu\cR]öÁoxYA$ÀpÈï!Ÿb:6¢ã±Ž±ÂÅId=$cºÐ?Hµùz3V_~ý¢¦ÖÛöû‰±ð@›¦1<¶Tµ6¤>ñÊÃ*×Ö6>q¥Ê£Wr0ïãÈ×Sú÷´ð)è—˜)^6 =;Æì;|3H½ŸzKk Ä´á°’ˆ“BÉŽ§ìxçÉ*Œtš*B±–Ù®JÃT§U•Û"hC»FÄbž´ä›®WÙo ª‘Ñ:qé·©xðÜööN¡ÇÉÛŽn?yúl¢ßÚÞùêÚUœß½›†tؼR©™¦ÙPšPÿè«gÌ»d*Çkîƒÿ=œÔtôJ‚4-aµµuœ†çcü§6Ãô½pÙãã£8í6úõJÑä‘OD_æI3K«pÏ^.¿+ȲÛuh9Y÷9­©›áw™m?&Q²´/LÚDûAɰ)dø"AU»}*»`ÔžŠ~†täX¬ã%ŸåˆF»éÔj]޵µ2’}?3: K°:åâ4€XUt0=)X2!Ëø(NšãG“ý+Š–Íá\Ö sË®*ÀY¹õè ø¤xÏáBN¸Ô€*s6„ °?B³ùÎ¥9þÔ «Á•¿ËçÝ‚HàKJ$‚|¦°ÿèJ¸¹FŸ€>X€0éÚÂÂ$ܪL†KÓÖRéÝ\A¤-ЦȸçÎLØ^Š XM#ýÒªá!šµ=Nâ9ѵ]™¿ÅX®$"Š5(¹®2 Rl8TÝòä®›6-ã¤lÌ3ÀÛQ5¸%\ñ%`IBÙ\˜Ÿ]]Û'hȉx.›E÷P%˜¡TCa.膢€ ‡ ÖĆçy¨*Ü ´{à‘ÞR¹<Ɇ](gå ì@àÓ‡Àu”wËÏä²C'…2ƒÊÇùí°¹PšÍÃðèJ ósá%‰ùxô/=:®%1·*—íµÍíñ Ò¦E>Ÿ%dêMìmÇï¶HAë é¸)ÏÇbH7l.…LdÄÂu_JÉK^ì%Át³Ù^Ým!]±]Ûñ»†ezþÁ’-G!„+»GÁÛn=yúøËÕÀýò‚5¼ç¹\VÕ4¨ö2±JA5¬P¡ ¸yãk`-Ð öL.Gq’9L>؆£P‚8ͧ`çÁB'¼µÿn‚ óSom¿Æñ:˜ R© BòòåJ±8 ­Àœâà ¯T§†Jå],ÉÍ¢?0ú2(LÕynÜÂŽãhv·§¹4½'—¯Ä'v<£]Þ' ²ËL²¬Ûi~Ðn!÷‘z{ib0ñ¶û¶î(Æÿ±w­Ímãê$’ DʺIJc{;‰wsÛûíô\ú¡ŸÚNÿG§úÿ:Óv¶éôC;§gÏ9{s²›ì±XN$[”Dö%`kµ’íÍnly3Ëgd ‚-½/ðŸg°Ea8.ˆJ.O«·`ºÕ².Šwb«x?=%Ô§U0ô%à `UfÀöÇÓ/Ltžñn( šðÍ[7·<\_¿vÌÂK^D(@肎ýö´ªûE$ OèªàÊ•:˦” àK³>–øi¸¨…–úç,(—Õ˾}»VâyN·±ûzíõŽ×ñ‡^žv·:N¥3„»NúåBü#©aî'[•j¯#ñ´IÚ!ß,‹O¼g[Ìå9Xx0Šês¤DÖ3Vµdæ$K8ý¿¬Ñ·ÄN*† D&#‰RÂý‚ œâZÁ" 0G`âF‡V¶ˆ••ÜK ` FC/tM½ˆÓUjº•-€&lëZO æöžâކ- [ýßÁb¤þ±°äñ;np)Ö¦tS­c¡BsÀ£-­Ùq\õ‘ƒê)ÿÂÅŠÛƒ@H÷3Ú ´RPò60JY]]¹lzµ1§¥öÊ“|ˆ Ñ1Ÿ„†ÁqœÚ¹ôFNóFŸ¤ýZU|ËßrÍ=tbǵ‡Ž‘ôé§æ€D–J§L‰m©C-㓚ÒI¾ÝÆkŒ¹ÿ ý År^ÌØ(¶çI5B0W€mé”"jït´dc,RÀ&··w§„ôÈ[Ç÷ã×>7”`«Ž—tŠ–/¸[:U­¥]¡j-ÁV¾rÑ@i‚¨qR©àÞÛZ³ãòìç•Çü#ƒ£hhdJzFµÏ„虤ëCg¸/X†‡ŠÚ‰Qõ{Ë)o8ìjjH'ÍdN‡2¨–D¨cQ×öNœ˜?‘ï_KÙéýwÞºÙZc}€ï«Œ›p=è_è}|A3Y,R#œ»w=e9)0V+ÓOµ =¡Y Ó׊6{MµÜcù‚Ùª§Rôè”R>‰%»ÄœÀA‘¤µžG(9 =6ìJÜ·òC’‡R(®¢ƒaŠy­W…6“öËú±09olÙaÖ°æžå7Ìæ7oûÿ´~–ïr‹Žgñ•8ö´>Î0VÆÖA‹®kbmÅQE¬Ö/Ô|4óX |Ìt\f 5ÔLQC÷zÚËÌV=•R@ÿËJ僰—Çœ#‹æŽ›3—,ÛgFŸÅ]ÉF(M´íÌOmÂnxÄt*8¬dfÈ-1ü„Õ}'ÙÉòÄ6›¾ßX¨6üjpÚ¯~ßÿQÃ\#'æ|A¼¸ŒÀ,ÍQD#=ý¯Ÿ+Ož*Ù.ór{¹W˪«|q¯÷-òâlÔ<Οø^.»5~°„[™àfDš‡+ÙFnCÌ“þ5±ìШ,¾¹y¿Ýl×üWO’h²kºì{)ñæ÷¾yÑ dnCTÝžôx?Ù`”ôPö¼sÕ8XQ›p" cd¥HæY=Ê#”ri¿ëZõjm·U­_©·ÏhþÎ(—sþ<1G0pÕ¬Ôeý]ïÞïEQ<:èñ¤“³Çu~p“ŒÞä¢Ê N“$2"'3‡ò<6’ì·ê×®Õȇo½Ñn6^Åæ¿ÄÏseÁ©“…Q}¼‡ö¥²£øÆá @‰ ùψ{hFÌ+·¼Ñ2M[~¿Ý¿zïvƒ6Jq¤çŠùj„Y…í®T¯Rõ¯¹¯û‡îv:ݪSd,7÷}dd(³-a;¢I; {ûÎr»å,]¡ÍzàÑ2†.qž˜»D’E¼‘Ê¢›Óº¹¸ðör¯'ÿüå“$Þ%Ò4ˆDÒ@†KMê »¯_m.ॠ|·æÓ—yK«D‰q ¤kzù xBÍóZ lµD‰ä,ß<΃<Urlúålw‰ Á% d¨u£½Æxr…3>^ÙVš~‰ Å%Ón–º%.¥@F‰_4J(ñ‹Æ9‡@†à&cV·kÀötœœ`I)ì 2Ä/qy8oà „ + ÍèTj„à,Ò 0› Y*b”¸<œ»pÙåÖƒ|{×êöÁmÅ€…|FjR*š ñÖ›c4ð1!³Ý…î%ò‰÷ýŠÃ²Ç(q®¸Y Áüa(³#nPô q‚&±G”"î>xx RÂбÈLw½„ô<Ž<¼Hzú,ðK7(q^8gÓì_ÛëvI¼¡¸q*ÝØw*ÂøA„Âï¨w;\„âp@wvE?œì.t_ѧ\%]]­"Tëva›¬_çKmÞn 8•>Pâåqî€ÍfQz%H§Ãº=ÿŸRjïì’â½AòÁ;·kKm¹ySꪨ) C¼³c0fòâò>B‚ŸRjÁÞÞþœ[Bxœ¾5WW¢_} ²ˆK(ñÒ8oÀDRj,-¢šŸA;ÝÙÁþó¿Šs;»6`³Ý|ý:ä4šM“±tuåÙÖC'lìu„ Æ{„ôÿ3L(c~æŒ9ýô‰¢9‹ƒÊÇåã³/ !Æ*žìÂ'àf䔆ÿöÛx{ûžfGÛz®­ÆÀ¦¡É÷ׯ¹'„@ÛïÑß7ç@¸£ÙXèöªŸá2–16ˆXÏ£Ÿ5ËÐcð¶ûãï­d/1…‹\ ADê©¢?ÿæ¯ÁŠ´½}¢x0áp¨‚ "Ÿ­‡ôwáãÑ/WWFKíµ?òn0ÖÞÙ­ìp†¨íF3µ¦€& ý'+Ìz?ÂëÉq¶£Ãr Ó«‚ ^ t¦Ôþ%Œ7o‚õ³0ìžþ§Eã¹úñ-¼J›&®ï³º„FP#ã†ç3´(“Æ=¹4ô)âò_ƒ4ë9š/Qs;Sj²‰ñᘥÄÏß3£ßüÕ‡ÿøOÿüÓ ÚÙÙ…Ï?üýßNŸ˜ðÁï~üû'÷ãn†ÅY0€-³Ðh ûcd«èúoW¯ñö*ú¡Ãz9éÂ)iŠ]ÃÀ€5›+wnÓàZ°?°o¸‡f£¡©{º½ÞR»+%'Â>„Q#§¦wFÇ”'Hù†Þ91lv&=G³v~öÙPþòR;`´2x ÃÎ77oÁöŒÇÜ'gŽû“ɾëdf®ÒNøƒB8%&1—Õ Ç>`p>üø#3bð±ÂsqÁœxZC‚¬¡åwDuù‹z{ßÂs›Gnè-÷â;专ÒÏ—Û|iÑ^j»ÁÉïÅfEcÆØ7ì©j5w•æ×TépvФ_³Mͦ覽`<Ÿ ü/üM±þ£#®!èB->°¤hþ[¨1[à‘’£µßS‡c9-M€NR˜"Ìš1 ±•Œq/€y-‡V>À—ÚÇR,@æ"Ï…h"ã*Zyµ6Pó«]A¾_L˜ÊM1”ìpArên¥K¸~uõýš[à †6‹f³¹µõ (æO JÂUSà¯>ýÓ$ݾ¢Ø/ø áì$I¿¶§Ù”Bff ©ÕÇ”ÿÚdYQÂâÖÖûwnÃvmuå›G5 ÜgŸ1¾\ÝÙÞÞѦ U!&'Yÿá¶{(*ƒžR€NL§/--jéñU`ñÛÛ»wïÞÖÜîS"e%NÄWƒ’¾h6ÙÛY-”fŠk(»Šâѵߠï‹åk¬Z…øF»¦»{þÛ¬ö~ÞÿuÍÞh­~üž×\ôOуÐÄ S”‰º™„Ò›ÍøRýÆú58Ô$ý`|°- ˆÒS”ir6£¦ã¨ÉÇã}¨HéV`}9¤|¥S/Xÿ7ß<Ö‡š´ý«­‡“ùu8·‘•²þÉ[*R”Â@¤R&¯Ò‰P5dÐ<¤óûq_YÌõ…˜œO ¤Ga+\,r”¶Qø.ZþY÷ªd£,³³¬ÈlQdY©å"J­eÏ–îkv3ðšM—8§9@ `²¶¶ æµ±qEÒŒo–nìfФÍÐö£#}¡[SM<:¶rÃg}ý:” [ý ‹Žï‹?R¬ÿ¨Ð¶øV‘~†:¦×‡pcP`¨ óëý±¿ÍÞR=\Ek).‰ ®é{…J /9C_ó}#ì»UТn¡t ¡5d]G•6Š8ëÿúk\¯ËçÒ›7‰å¤õvnH‹í›¤a#Ó´uzñšB¼`ÞÔœã`­{Çš‰¶`¨ý´§§(”>À¸p0¼©F“3ç…Ž_ó,¼d}ýºfñ×Ùjï·wvµÏ@C§àa[ѧ­®®èü`Äîíì›Ô¯Vk)hÖ Oñ¹å<ì b^!çFYÝ.DÿX- âÏjèð n!«…ì ´÷¶8Mo(™/và+AVqÓÕ7ö³½Cb¦‚e§U¢éõkJhQÛë1ݾ¯mkJ€ëŒiû=ï»>5!Ïë›7Ç„ÌjÒ¥08„››7‹ˆ%š‚þ¶V 45”£e*µd„^H‘Nêç‡a®þN¼IÝ!5Òõ¼ï]·­¥ T(XZÿ a^ôèœÃ¨WÏ~’N†Â©™‹På6ЇºÄ²,0¶ååXˆBvàвrdÙ&É!L“å"Éy~FE…Å+Ë(Œ XJJ4O?RÃV°ã–jVOÔÐj“´ý:EbõÀZïOVTS˹‹Á÷J²>o{÷ûª!‡àD3°DJFb3°ãçDzZqãí·îYÿa_÷'“7 >ýý:–Óý äÔZSW!êZb ss!ÃP~úÇáÖÃÑ£Çð+ÆFjZÖÐpÜÜDÌwGIžùÄdµÚþÁAqI­SæÂçyžD>Ê3)rÃ’Ë3**  h‹irzd ÷îÜÖ³‡Å9¥`I'êèùD4AÛ?Eï•‹tã:YјíYÉœP dy}óhÖRjq;}8UVh~_Ä €Ø¦è¹#ø×VWáÚ EÂ>{Õ%™Ó«‡¹~SZQ:-¦ƒfU\?±ä¼b ³C´iÛ±ƒ+NèûE°+%ÎE-~”ÞOYOÿEª˜%ažäéGÇ¥NÔ˜Tдý'êœVÑx0UàÑ+‚õ°têp¶ºàX—{\¾žì¯ñàÏjj5R¢Oz Žgý'¯šçoúªcN£Þ“týÚÃn7i/FŸÄ®Ç+±?ìٽ׌'_Ò•ëØø“m‹\ ¦iÊD~Ÿíîåæ›fÌrÓËsl³Æ-³«ÜN£]ùÁõp³WMûƒ)? gߤZðþ»Sj4¥¹¿$ææÄTÁ÷JÄJ T¤ÈÅLFO-›`ùÔºòÚh´Tü$ÂVV4l™UL…ŽFÝ+›Yo'3ס;1.ûK» ð‰j4%~2æú$Ø Å{oçKp3Ž*F£¿cµ! ʾ®UóÞ³8ß'"R²'ŒEÖ¸âŠèkiÜ·[îr™¦ÖKßÍ«‡’Aì‚0¿1ÀÔOcY>`ydÅŒy· ^EÙa«eÉÊÔkôVZ­mË §“› Ó­Ô5IÉeTâÜpiÓ`Ç–ëQ÷ÖֱƄþDÊØäC‘¨À1¯™¦›‰+‡îB6‰ëpIé%Η9_¦L|ÊZÎ ê~-Ü«_ß60riñ¨+ãÊ!}- wuC¢d6piý%ΗìÙ¤^ãÛ¾Jóô óù•âiW–ÂYò¥¤îÕ¶eסíWÖo—Í‰óż “†”†láÐ4s 6žc;7jîµÅ\$†Q<(f<±£^ˆû!ò¶¿´þçŽy8=’F–YBp! ó<Ã)—fnZ$3ÍÌvM¹¥ˆûÈÊŒ¬Xì`Ó ¦Ø}iú%.îE“/Ì8!™Àƒaž$‚E²ß7÷rCšFV]HmQŠ+Û¦†ëbŒ Ëü…Nö—˜3.Üç,¶aÚ;¢H¸³³óUà.$qXÕÔ=zÔYh-{Uälå*F¹¨úÎe-%~)¸pH’,bñö/Ïø_v­âå¾#”ê=["æZ2gáÚ|û b¯­y˜X¶­†fþò7P¢Ä¸¨ØZ vÍ$%,É»‡b÷éWßîâÑp4²]o#ç5f³ F}ØípXI’ê·yŽP­ß·œc0`€BJ(q±¸ë㎞ᦜ ‡–…QjPÇu KH‹ò¤?;´,Ɉí0ªlU,,Üg!m5gŠbh”BjSŸºVüjE…ôñŸ~~íu¦âe) çW5ÅQÖ€`(4ƒsʰ.‡B†¢Òí¾À 3G’QJ4)hœ¤9“Ìv, ß¾ùin~Nž¯=\ ú$…ò‰GÏè u=øEs½½úÈ ï¿¹p¬ü‘xæ`@Š.à)ò­X"Wׄ'MºžÃŸN €’<@DÊœÆ2*ŒÍHh‰I0…ÿk…²"J’¦Ìã2àã „"ÚPš#‚ …úXD4I›ABJÚàEŽ£0¥g?Y º§&·ä ©e.™Ç32üŒö{ÏHÞi·üëµÍAÕ·IÁÏDaढ‚§—¼h¬ü±ôûý]ø~}ýÑ$}Æy­üðÃÓÕUËáç™f~«@6ЧÿáoÏK)Ùøâ‹†T¾Ýˆ†š„¡’¢ ¾Ù|;¿ò(Jœ)…£Èh³8$´à “àȔâ“ öÀªIÜz»½¹~å¼v«A÷ä²–+µ¬ƒ>rt=ð/ØFxiévàÔ`F¿ÿñ©ãµlÌ«++Ò͘Ÿ`O(Tíç4[?ó T”å“ÛOùW\@ÕO:a·{à9¼€µ¹}.©*p¡ AµTWïÄfgÊìììåNQÁ3ˆeèãX!ç¨O[1G»WmyvT0è%KKT\óU‹¼/6{ÚÙoao·Þýñ_þ ¶ņ̃ûµæ:°¤l\<~°<Èh–Ça NÄXº|ëÎfs“\qqk¦Iµœ›ièù¦PðCBé i¥œ¡‘¡¥@‚›îAhFäðùÆãåYÎùùÀÒØ‚yʪÄÑvËÛ¢1õ¾'.·úvrl¬7VØÌ³./-.>{ö|mí>« À|Mîä4[?ì¡ïf´ÏCµô©‚ô?ŸäûŸ´ï`•X“s÷æÎ'«ƒºŒªÀ§U’ŸC7*gtï´AwÌ`ç{â-Ò•pL{~5©œ§g)% ÌÜoPµX.ùh ÃÛüÀöðêÉèa›óúÿ™;€½- IPFIØh`nPX*j4Ç/¶–—Û%GœCá+ ÌH2“„¥1Ì2‰sCtʤˆuQC(*±ÜÈž½øò°_6`3gUõ¾×ð20¦ŽbŸ9Y +uÁÜZÖ ïaüRôêÇÍ'ë`ƒ3<[?lÿ`íÞ«×vû ·½c<÷¢“|ÿð=¬î@ëžeѧ:>˜¼}»å{héßUüvèiosv™taœ<´O«€©}iY£­çy*éÿk&|ZŽ`ljY¡qùä½Ñ[sš¦Ây‚_é'‡¨Òa€ao‚žX€z½>tɧ>{öæ¢g ®a"ú¯^múFÏìÿ›ë•;€Ÿ†8IZ­V5b‚”îs>dŒÇ͹™ù•ûÿ5ç0î ÜP2ÑAZÒæsÝ|!Û"Ý’Éî(êŽÂpLå0 ûÝ®'õŸ¤ÞßÚzçƒ/,Z«+w}‚ÆT›ž:·Š¼NK&g8S@À³õû™Î7ÿ¼ã<œ%€-¡Kž*Ô2B¿}×vÜ·`»ò¸ ´Ë?¸¥goï;šÿ·[[ð:­X)ƒ¥Eë®ÕGØÃ%U`©öV+ÆAãt÷Δ#€ À·'3rxïd~nέúŸOŠL޳oèÄ€€õÛsÄî>_ò³æ© áW>;ë?Ñÿ+ǯC®bt¡PFî½ß¼·òmà¨q+Ä¥ 8ÏÊ?ÜS͘âa€bj†Ú@Õp<(eSIÂŒL© Ã(䃡‡õC8Ïë|Fñ•åµÝƒú—¿~ÃA¼¢ÞÏì_Ž~NcˆÆÅ±—/=º›¿p¤¶c½=O@ÀZ€Ób‚IµÌm¤^óâX”ÀK'ån‚«¤Å*C¹óÌå?Þ |éâ7ðåJîZñ—>Ž×ÞñG» ¸M÷R*0¾žA.ŸíOwÏˉ<.TاÏáH+¾–}”D˜çãÃ95 ð ÇS W58“ÎïN÷ÿ·á”b¤ËF"_¿yUš´t”éh¶¹ÐÌDÊ aBÍeø*¥žc> Š,(ùœÖ,„|”ª†Y@‡'å>~{6óÉ<¸t5ÖÚ˜Dß'PxÒóê‡Þ¼ÝÛe׉XNpí_F•Þ3ªÛ=³Üæ´(µH—ؤÇí|¸”—ä03 gňï”ýѬÌ1 Á2 s1#¬h=Ãw‚bŸíýö]ÔŽU4Ÿð°”hu‰¾Ìc’žÉ9wƒÓ “‹|ã 3ß^4ð5ñyý¿L-¬‰Ib*TFÔB=Bò<ß|uk~ÉЀFøÉò,ŠJDkô*àÿÞÐý~ŒH'èij7:9ãGYÜI@4þ¤øòlccÓ…_»Ò{¦HK*ê}'gÌ!/òkž_w` aôW *ØÂü¼÷4=ð\û•È@% «|S±õ£ñrõiQ_N¾©¸ü½)Ï»¦=¬LF§í¶*‚ÁC&?®;YƒË¨¬¯?FcÁ_¤™‹Œæøœ-«Œì¹ÜæÉãÇ^”~uËb§ÄÁn±¨öŸ8A[S¹v»¶~ƒñ·{ºÿ¿ @UžÅBš8â‡vÞídYµì~ÿÍ\»ÃH³iœdºuÀûo Ûnš.M¢´ÉšŒF ’FÄD@ Z|asB®¹(ìOÉ£SÔûö›ùäcÎà30÷ ¦t¾ÈÀ$ß?˜Ž–[/Ò蓜óD ü êÕý›I«úöÛ¯«°ï¡×ðÕ¡?[ T/£BP±I#wÞ ]Z3Áocí»óQ›~[]ƒ=Ï'Îò¼s–XÁéAcñÂjÿ¾0†~¾ª ¶¡SýÿÍ8€Á8dXGd~r¢[ÃQ>eï¶whØjÝK©4ËS¾Íû­É>Ì7û[Q˜v0f‹Š^ÚS«]˜yþdwM(©.èœfú÷£Æ+ÊyLÿ§Eªdn²å»ø°^å6gŠ|\À’ªÃ[<Õ ÿ¥óÆ3>^N…`ò*Òå5ª´'g&žÛõÄ­h|à<±‚É'U¾OÑq4^ª1ŸÒ½!Sw› iP¤¡óiÄNcÖH£8Ž¥!IH8–ë¾>Ø@r—µgU–b÷#¶Žð#Œ³‡“‹#À9üÉ—!U¾ûr'²õÿ &ç³;½>1P—¹í¿ýÄ!¶ÔÖ×AŒE‰ÐøŽ£Þc\b… Rªø Ùkuð™”@—äíð~aÆÖímÕd‚Å—¹v}¨Ùúÿຩ½¡ƒ BzÄ!2ªfe‰9†22]}¥Ì|ð6J4šé£R!.£Yßôˆ}<ŠÏsI«ñ‹pc世ñA›,ÒFã`!ZZ {,iÚJËÛµúý(lÓf'T¼g¨ÆŒÒµü[+ÅÍØ¤3Frcr)5”ÁÊö÷äÞûƒƒ> R¡lĬÍ+4ùÆ$``ìXò¤”Hˆ¥ÿý®ßlŠíí_õSçB5.ƒË+o_Ç#‘Z¢,C£ÙÜ b6|ñªÃ•>®u9ù k<¼~óÍ­—¯¾ùfñÏÞ_[ 77ºKKå`˜·Zá§ùsл®ñ9`Òœ`î¹>p )iäsΔJ fᜑ8 #·ò“ãÜŒ äú/_êFcùÅ Ôn/¾x±á`p(ÇRŸ>æ×»®ñ9 Ò~¶RˆA`ÕÎñé;dø…Mâ'ÿæÅâí/ÊЬ`Çÿ›x m  ›Ísð ß/û}™çãƒC÷¯Kóõë]Wû©vRGž›LP÷à`ggwccs}ý|sž\G°ÍHœ4Â(Žo/7Ãp†Tiæìþ<ا„ˆß½ë úÜR„² ž.¸)½k4Ö¡AS–t®qy8íçìíÖ;x³ß=øÏÿh÷û­3 Èé;€Ëq‚4KIÒèÜê´)FT*åê^ðºôÌFho¸ÎÆéþ~yÐ%Apܔ޵գ޵dÚ’Î5~¼d(XÿÂüL¢Sš§'eú·Cûì†#L0Å$0:Ä<ì} ù>íï+•sÖSɇ^ÒË­c…hŽŠå}ݘ¢ÉeÔ‘nDïúÙ³ÐÄ÷?<¶¤s_óÁútÚ#„n°À_ZwÓ`ºù‡möüå~š‡ÿÞo4~x3³ºj!FðdpTýtøÓ½øaB©—6ÿ›Ò»–bR¡zz’Î5.¯7 Óó5@Ûáì-§Ú­9¤Ð¤ìÁJ/E[ë†e‰3ù—¿æ·FåV¬Vz{Ý…=š¿ÿ/Õ™%ÿö§¼Ÿîï˜7/»ï6ÍöŸæÿ(ÄðòÍ݈Þ5rÅ€9›ª¤sËÃí¹9/,;> ”\w€|GÊ|4£Ñ@åyaQ2ÑPrïÙ7LD†4´ù¾„TliFæyi:åËí­aãÿØ»ݸ,[,¾Ù/µÚz8²b˱ì8ž$Nfv‚ì.ÿ™éOX`±Àìg,°ƒ,Y`v&Ç–ã$v&–mIVKÝìæ›Eî­*‘b«j˲dë„!ª)’jÑ÷Ö½·ŠuNß|ôAÜŠÑèÛSà´ô®Ùo„͸^©¤³Àôà}Dr´7`žÂ<€$)Y†Ãõ{’ay–P½Hhš¼resc½ºp1iéñýî…eâ>ô’MUZ’“Šo •lãÆÉD¬ÈŠiÕ” } îE¾"ëûÍ|\R@àqB ëlµZõ´ÿ^r\·ÂÞjx«!@à­†p·ÂÞjœ1Ö‘! pê8 ‰$Ê”NEb’4í"1U2ChZCˆœ N@"‰tËIÞ“’!/w€4IeÏ•5íŠïGÕÊn'ޱpûöí/¾øâÐë¿üòË7nŒüQ!‘$«iÞmÎ.c¼)Ë „böÓ´ï&à?ÿôÝ;ï\î:n­V'd &9’À«ÆqÁöð¡\"‰DÑO³­UMs­JÓ0-ìÂfZ5°xÓª¼winsë™iÉYÉJVÞÒ4HÓÄÜ„8âÛÇãJìáC…DR½1›fš>'ˉ,E Æ]¯ÇYê¿¥æ¹?Ëšžï‰2¥$FžŸªÊyÏs+].r$ãÅ$€ôæenÍ$’EQ-«iUôŠÕ1]åRáZf™I£–†A$a jEÅôG|#¨Ûw)¹³voaa@sf^8€À48}€q™ýaØ'1)$’U‘eGU5” 0ü$T/˲Ì(õ‰ZQÊÿÂJe %n·o×+;÷ï÷W/]÷üÚ„Õ[e}N ýòü9zlÅ0cX1‘ˆBo¦×˜ª°m;¨•'\È$’Àx¨È—®ªº&ëH–*¥jqßè÷(ÒÝ~5•ë(™5´–Zu½YŸmÖQÓjZŒƒÐ‰CÏõœÉË‚ }ÇqºN2Ú2rÏ—”Œü°7÷è=E)ò€[ŸÿﯛןLø‡›ª¸yóægÙl¦±JÙ°$e=a D}®”_߬JRxÿîÌù•'8¬._ìÇ¡^5ØíÓ øn¦÷0ò£$K³C2è´Z³Ða¯¬\(þQ‰Ð\ÍY“òX9 Àû{Ø·Û”T žãò¹süxíÚUF»G»ËÏ/ë GÄâúÓÅËëØy] ½ÿ¤ßTŠü¼ñ«½8µIŠ¢XNòí÷³ªBžmÔŸn¨^ØX:›ì|ÓüíÕ^„d=$”rÇaßÎeôºS¬!£Ü>àŽÃ Û,FrXøLÁñ_QòCvIñSN˜Åuxè€swP½ÝnCpœž¢(p‡q:Bà5ÁËëØ¥mCA ¶ÎCäõà¼û‡_2ŠÈ°¨kX?CéñÓJš¹üï÷fg;ß·.]r×î-ÞøçG·ªïÎzzkýUåï·X™‚1á5€çs}~Úw‰ãŸu<èÑ©(êãõuê'I²Ýnó^Ÿ‰>|ø ô÷ß|ûÝõ?úæÛ;çÎ-AwRtö¾ïs:-8ÿâÊÄBŠÐx­ð’úöPƒÚz>.dí’pŒé«sȪáçÏ«ÕêÖW_-8=üׯ/ÔgÚíÝ:})sÙh¨ÃHÕ{ÓFø ‹|ºm0qhÿð Àú!±á\çã9˜{¡çlÓþÞœ>úŒ–q¾õå%žÿ€õS5¦²ÁÉC`’BàõÁ”ú/æ<á¹}ûFq°4XÄÏÓÈPDä,M¸ß|úT][[$„`ŒÓ”ô¶Û§è…2.®œgÛèæÁ wë„høàÁOÐ÷€.RCp ØCÛcÙK¡áR©ååsœ”ðœ‡?AŸyÜíñã'Ù} }ØÃ…¼9Å{B`qqá?ÿý‹êØEP8-‚;´³,:ßý]Ò|¯QPԥʅóÏ µ¾tÑÿúë•( Á.]úµÕŒ/\ì!OS0â,•‡7™œÂÀórð‡‡6 ŽÿÍ-k[…s®8ÎÁç© P¦DÓ4ùåü\üþTQÆóy@ …5ëþ…>Àk‚éõFF»Ü(²°{ÈwÌŽ1—°Ñdpó%´#DZ¤ë™Œkç–Ho÷̧ŸüR¯¤Ÿ\ÔmÏB,5½ža°~>_œ²è1õ+êžJ¤%²CÚC‚r2Îñ_¯×:l++ w‡=t pšÉD1Ó 0ÙMàñ5X·whPÅ€š™íPm*?@ïl1Jt.)€˜>@! )pŠ€z£ö¿û”ûÀ}€CS ÈsŠì¿Ô¦ÎP#²G߉k„1}$0eµ’êj¶<×O ªÞó-tíÊÖÙ¹è‹zH|uùݾfª’î¥þ}æ6MGŽKÇg,f›ùXçÇ?êÌ„™tºSà{¸‚ÉÉlÂi°¿Âu¸Wð»AŽÀq(*ؤ˜zùò%¨¡áGðJ^‹5àTyM,|à4Á˜Ôh·u††a&ØÎ÷¼101 m^û‘í¡2€ç?>Mi0†&ņþÛO{TçzøþÌÊ…ž¬Tßmö´T74‚eL/ òk§Ã°>ç“C%Žø¯ÎxpyƒKÿR?qz…nÊ„žƒ÷ñð˜8bC¥|”˭“-ë \¹¼'-,ô^¼¤>€]rÄí|ä›·˜Ø#‹`¦æùA;#;( Qè¢E†"rðÌüvèH×ßß@:ÒÒÝDF AŽ/iaÊ»|×ßõc'!ašþ—ŒÔ@ƒÿüå´76Z7 >0YÆ3þ=âzj¾çÚØ­Ä,Ø›…q€ ›æÖ?nm@>f—ö{> a5N·=#»’ÿL1wQ胭SD4D>ÎÂ,¢ZbD²$m;•L‰Î|é{Ý¿Ÿ9Û½Ž!IÅÒ!ìÐ#~ÿóÝ€É÷ø{„`çmtØÊ˜òÉÿR ÚK’‚2FÈq4À¡x/›—òÜ&Ë‹„ÝÒÁ|Ôú~°~¬Ö­Z±ê"±8vì"¹ÿvtùü}P0Èø½õ'kž[ £¥òÁª;eÅ1aa£ØK{U/Ë|T°þÕÕt£n vhãÆ¡€V<L÷í¡@Áûs¶L#¬¦ñÅ‹º®'G™‚Ìú~°þ™Æ¬HEŽ/JÑ7@å"˜j„ÉPÎ#TÓ´…äH/Ëkýã0M `óàæMþþ[ùÕè›·nÝâ#¢#‚„‘ÀkŽ 3Á{ûɯC]2¥¬µ€ÀkÃ`Š›”Ï\‹o&§@|CçL¼‰]ºêô¿N‡¿ šü óÁ7nÜUÿë ¼¼/ pÚ˜fˆ¶‡‰â²ì  ƒ+ÂìÓþs^ 唽¨_í|¿×G“È“E÷/ð&a\l èâǽ ÁW ^òbCõ)C’$¼qÚOCà­Ãp°ó½]úH¥°$Á€æ­Ò›åKø«ÏS½„ŒÐ! §ý@Þ. G{ä»=ùÚ—½ ­(.Q§Ì‚Àô³ E1‘$¼Óé¥òüPø€À ãðˆ*e;죧ÇlÆ5z.,Mã$ñ‚°íù›®û,Ú~Гe©ï…õÆL»ÝAHr=N##™ݼy³`D„ö`a`çf/ûÓ ˆÒ•Pv†zQâ©îyñÂâ9„ÍÖÜÙ­í.Dá'‰ÃS á…ðJk‚‹«F°Xqë£çÚÝíþÅõïívÖ¢øIÇ韙_plÕf¢ÏÎ-nµ»"No×õžÃá‚Fš :NW…É)ÐÞÇ7nûÓ†¹=ôBèˆ,8N {®»6Û²*kaq‘dgæ—žw2U¯|õ½£5'Pš­¹­]’†½~;6Ãp'ŠwÒ4> ðŠ0<fÍgÙÌ(/V1ÌÖ°Zض#Jˆ/¡°Ó]kÎZî¶eÍol¡¹ùù'ωa*ÿù§'®6ÿøç­Ï¯ÕvݨZ¯¯?}hÏvI_U³™ÆEö-kAQÄÒDiq4}ÞsÛ|ãÔW|®w‹ €üÕè[ƒ«dþPŽ\ 5ŽwHºEÒ¶çõEêõ²fÓÚíîÊrü?ùÛò‚ñ_úáwWëÿûÝ£OV /p3òÎ6ªÕS?ˆ=ÿ›Fí#BÔjõuŒ²>Ê׿Ÿð*‚韻À+ÅÑôŽü&³]Úö#@.êbœ¨*–°j˜³®[¯Õæú®¤*øþß:WÏãµGÛŸ]Uø¥}í‚úði×4â$ Sj·×íµÛý»÷¾ïõûùøä¿™ëPÆOÊXØã^q¢ÏÝó…’À©ãhúEÏm¿à[=v) ú÷bú~°þ,ë“ôW ÷kU5Š:†’e릡1¾²$u]òùû’’ϯÈpöÕw²4‹ê†D²æÙÅw~üIÂØ B„a•2O\Ö€¦e^Y]ådXùãèü©î ;bY&ï¹9U(ü´P @%aTÒØ#DIâ"æpUއ~Y^^©$ Öµ ަÀ{n;ßöW~M'fç½HBRã4Š·Z—TÍWdM–3’d²¢EÓöýô¢*ùAjªØè>ŒŒ<§·é;XšŸ?û|ËS”$% •å±aŠ‹\€5...€I¶Z-nˆ…uޤóGŒ1Ž®pÅ \j °øÂú‹ ËJ…#5êµíö´!þ4õ²’€Ð 8aM` ¤ý5yík£MP> „Gþ­<@ˆe$ˡǦ‰!Bœó±¡4«ì¤0'Á5Pæ’9z,=OBY’«•ŠúÎÜÖ–c˜•CÙ9'ó^ÚgY1ó„»w×–—ÏA»ËÌššSÙ„667)yºïS^ÄÍk×®r–ϯ¿½Ãå9[ÿ)åŠ[XH6é/)”àì76¶x¬àTs” qggÿ[%‰Ð 8A xèÀ¶_—I²OÄ¡aК«[«J]W+¹Y¯œ©›°oÖ1ÛÑj³^oÒƒÍf]jÖš3 £U5Fµ’¥O40'â53;;–19, âô œÚö K?À‚»]þþ‚þÿî½5ß÷am8“?°ZèÚ=o¼ÅgDqpÂãÇO8E.\Ê7ßÞ)+ðXžÖ_hÀý ò,.ÎsÕ ¡p*8‚>À@(næb0ôsy˜½a ¤¨%/Ñ”¥®ócšj‰´ÃT"{ˆôÞCIlGüŠzHêa×W¢kr«=9çžÛùùç* ²Y~áõ–Ü@©…çôÿ`åÐ+ÀÚÅáú1`ô°w˜ÀØ:\T$<¼®…ÎÜ©Ppü¼$Hø%E®O_èœ<^R`ÜîyPÌ„éü”Á §F”T „Déaê:&AJ§\R@W´Áöˆ±ç²¦èªäAþÔݹ·ö£$ÉgºîL£~èWå& )8'1ç&ÈKÏq—:y`÷\çL±$ŠǦY0࢜óyeåW›6©Y»ÐPøoe¿Ÿy\.tNGÓ›¡|æ«dÿcRxà£$QYBÀ΢K(ï'XÂöÓ€é³ <¡¯Òa +DÓM]#ŠïºnßétÚÍei:¡F9ƒ·Q0bø¹ûo®]¥‚Ì4£ÿ‡Á)³¡çº/Jn²ˆ™>7k‹Ñ£³Qdºq¹¸[¡ Ðuz –Áõ&Û—•ø ëB7à40½>ÀØ"xx•ãx~{p`ßL! JWS—»Ý_,ã"´ÕÌ@jBû~°þ.¢Jx‹]vÄ£Wc$+DÁH‘Ò4‰‚¦Ê8•¹Âì±¼åÊê*WÂ3i¼N3ýÍÍkP®sØó"ÚüÁG§K““)bТ6š¼ÑjÑ^ÿºõa—uü]ÿøC@è#‹.+ 0amz[ÄòŸË—W‘Ð 8)Pfü\ M=\-°÷‘'?¥À·€Ð ü¡|÷ý,«aìëYJê‰3[ï3»çY“çB̰ÕH·jÖLu¾fíø‰¦La6B7àÄq4}>|iú€ÍQ˵/cƒ³ÇSFfA„eAQHB)ÆnÚŲɸ a¿Ãì~—ٽÎôØ7ê#YS ¢ÏZŠéJ±*O1IM)èXãÀ«(Ÿ(‚ùžáB`|ÿýz®!?œÒð±UR˜¬$³6w$fÁ^WL˜ÛßÀâ ±xþ tQò"Úÿ€gAŠ<×nß‘êU¢wtG£Uï³û-f^[ì‹ÑÀDY'CJOÆáÒRúë3¤‡ÿ%“¥†/a£xùç Å„°¿±±Î[< âÕ0W S€gAa^ìncãL¡•.q£K¹j–wpnß ÃØ45>¦sÚÏJàïSE€| $û¿4<ÔýÃö~Ï‚dy>Ùõ;·›%x@à€õg{G’4ì‘Y«…¨ÊÔÛEù(pü˜& ^HÒ­¡™`øhÝóà‚6#fÉÊûëOïzn#ÖLƒªcHBCàÕbª0q&¸''áþçß]I)#UÇHñ¾1o Ae…™àË“úÏéÏxk¥ŒT#ÅûƨLÌ£‘_¹o’ô>zt°€1n©RFŠ›‰+”—ÍŸ ¾<…lSŒ æ-НLðMÏ?~Ϻö¿>ô7J‘â ˜Ç TaAÄ?~  gá Ê¬»Ñƒiâ£Á^ ä5¦3ºŠ¼B\Š×Ãrvè¤ò9‰þGér“¡á%—¼ˆØÄ†ã¸|!§çu5£‚;ŽÓë÷ÛÝn§Û¥[hôád†cI€_-ˆ#A&)þ ,­$±MRûI,‰î ù‡P~€|ßS?>~ÕjµÁ 0Çñ<_Ó2¢(îïßøÇõ<ˆ<×KC – d 0º&xÖhrÉXË M>Ïó¢$’¸žeYççg­Všþ^ƒn4›uˆy¢(ˆ¢ÇB#ÜãC?–ÿ(XU 㦇9i²¢2 €óà¬ø~¿ßëõJ¥b±˜ßÛÛ[_Ïíìlår|tM³ÖëÕ]·„+ÕŠ¦HñN°j4:–¬›uÕ\ó…šwB—ÀêºáO¡úôï_}õ™at!Š"ˆÌ( â8œæ£N‘â}`yTY®syò‰H±ùëºZ«nn×~mY§šæ·ZGçç¿ÙVDz›®×w^žo…aʱœâÊpåcv³%ôà B Ë_!˜©3\Y™Îf|‹ÀúÁ3Íór9óóÏ?mn®þíöí»º¾µ¾~GÓ¶§jšn÷ ~§=£æyWà§ß¹Ñlž_Tá;ôÌ|.ó¶)­ù'ÊÛ5z”pÁÿtf9ô`Ý#¡%ÙÿñÇ'b†çWVq,À8ÙlìyÇõz9@¿’ËɶÝEÕq°†dŒ¬ hÅ(:¿x£í|î^¡Lfc•ÅÔvá;D(s=L2û””°@nGOH|H¸òG˜áfSÌFühdè“þ:}ò81Öhû9žgd™•åø€ªJçç¿«êz&#¯¯ƒ}ç\7èv[½ž§fŒ³³³[·äfË>?·î}¡3¬¶ÊBjý†aPÎZÊè¶··›Ðó#Ê:äï7Œ¤"°¿¿· ÄæfùèèxÐR"º'y  ÛJ" @ßJ×ëÜ@¼>@U’CêÂ= ÒT†WUH9ô¤0ˆáyN’„8ŽX6æ8Ÿe½Ý]Q9Û† ˆcøhF#EñtÝ…v£²YÔl*½^/£®4'@é°Á 1uä0•¡Æt4dôåïïv1(Q”ÁB2”Þ°¬j­Q1J›…(5áºJYÿo,ÞN AeæàÏÌõ_ãi@…Œ•CCÐ|ah¨j|væI’«i²$q’e‘aÄ8†þA&ŸÚí “EÏž÷Ô¬ÕZ<ßÒ §ÚêvF›g°lÌxnÛ £?%9¤üý°½ûùgtâŇßÿËß~ùuïÎÏ^PÒ8Êxžˆ €«P£ßÜÜ@Ä‹RÖÿ›Œ·ÐHPA«ªÂŒ]2œëÀ<¯ïymB|eg³b š¦qcY&ÏóQD‰PàL$I’að¥R&Š-˲¬ï¸uÇ©·;˳aJ?ˆã®40;'f<‡/Ÿ0úŸœœÒVB Û„3ûð¢7kƒ HøþGÅð‘Í2½ùàž)ëÿ ÆŠú³{‚úKÒð/s‰Ê49.ÀvlÄöÿÇqjÝî¹(;;ëqš¦S(ü¥Zmw:½ ð ¶,϶¹Û·ï×j¿‹±iznûù‹_À‰y‹#T,–CЂçEµ®EÅ,šÍ&„7Ñ¿°ˆ„¬Qæ“-½œ†)D =:š ©ì½‚F…^’úÀMC¢íäWÕ¨ A½ÃÙ9 3_ é3¯š^™f»]“¤~õ76J®k %–E£€ñ¹.8€â¹/GÓ²õºqûö~¯g‹g'Ôj'ŠÂ?yò¿¿×,[ŸÆ|îõº8ò±<éõö†ŒþTù‹ùCëŸli^›<¸„(L"¬ÿ:IYÿo*V×X\]AOÀ+Âá ¸Ë“f­†©L¯ v?Œ¡¨ ©eÕl»¹¹Y‚¸?›•×ÖX×ÿ9€ç…Qä•ËÒÎÎ_ ñ}èÕNÇqÝ󬚃lXË.¡Ç¬(¶ª‚YCàf M8O€GG¾¸û9‰æà‡?¡AǼòº6Á÷ßT¨˜@0Ðà‡aýO2ã7 tøò:4Ð ^I Ae¸­$>ppðh" ŽãM4Ÿà&eÂ8Þ÷„(’‡ít|]÷ß¼é]5–®,˹wo˲\YÖÏÏ/Àêú}ŒãTσÜÃRd­° ŒŽÞS¥^°K*Oìž2úÃ>œi+å¶öÁŽ!š‡'E{‰Q¾Ú“BÐ$#Hô9‚ ¤¬ÿ7o§ 21±5mýd^ì`Üa&Ç@1++yž`ÛÖû/_¶<OO«º6ÊeE’XM+¶ZU–ž<9„?õîÝR£ÑÖ4ùùóÐó”8Î ‚žÉh‹ùqq;î{$Úó¸()4¢ê¨TVŽ€ƒ{ÀvmœïŸÆó¹œNÅÁ àZ¸„ž“²þßL¬NÖ½R-Ð<¬‘U‘h¤h¸ ŽÀ† f}ýŽëf;::5 ßq2–¥…‘bZ\ª\øö›ï76¶77·eIùP6G;–´Éÿ$± Ý™$‚ž¿(ì²ày •ŠùŒªäõ¬iIý¾rrbv{-]ƒnam{û¶,yÍä—ÐöCÄTÚÿ§/µ¬Ô7Oó9 OU¶·6·×J‹¥Nß+RVÓOˇA<~!bxU-¢aÓÔâSüiXšãý¤íoòg^r¤ùeŠŽy•d›´ôãÓ^Ó'£‘N EŠ‹`€$øyüøq½FX!’T ÅGƒåI`⋇?Ç‘ZŠ J!*ouCnDAH4¢9ü‡ Ã’ ŽãXÓFèG”âSÆâZ ®¸kw»Ð!8Ž›ªf¤xçX2 Jp=:˜¨ƒX8ò‰cËóý˜oY^ÈIbi[ÙØ‘×ï°…-O.¿®¶^¾©_ÔÕZ«Ýîöz¦eÙ”Er_QR\׿xáåáqß´ú¦™v)Þ9Vš@³Œ5ܹì0ÍD?1×u<)¿©n•óY^Ï RI²xÔâü×~ñIJU½hÖkµZ·Ûf>Ä)ÈqœZ­ !ÐË—‡àÏ_Ú¶ãz©vFŠwŒåt`úôµø¬éCõ1Ó³lµ°%È\!£Qˆ¦Íˆa&ò­HÛv[ûÜ™ke$×õtÝÍçsÇܺµÄ<à ﳇù…Â?U:‰’ ¬Â,â¦aõÿÝ Ü £Áì@ ÆF±jÌDˆQ²‚*ˆº&û®eq&Û¯xµÉ1ý0‹"¿d°¾a°˜ÇA„Dض-¢.ÉBbËåû}z„UØ0Zâúÿ&çë”—Žr©È¥¸ù5Âo0×®Lh3‘ŒzÃ8 ˆ±1X$²ÇÆ âq¯À匦 Áñ£^‡ßhØ,뺎ëZðw²,+ËÂúzIUUø» £gt»‚(,ž^EàJ Or¦ ŸV­~D¸¦>À»å²¢zñn„ +ˆbä‚¡Çè®5ÜÈã"äøfÇ0ú‰o4Ú'˜&fÞ”$‘ã¸lVËçmžç=×Y:°Š>À(ß?Ý!-;ŸÐÓ-½äâ¢÷¤ü ¹0]®ð±àíô&qÍ hÈ ¥ƒ2Ž·=/D1ç|”›çÅû¦ -¼å{rA—$^/†À|EQÒõ\¯"¾Û²ï¼T€:e ¥4'†ß]€F©²èÝlÜ`§*Y”—òï¦>pÃqM}Œùk_V–ý…Æ?ˆzV¤!·+d´ÏE‚¹–qú±Éú|½ï;– ;-·Z`X´÷3ù€±FH°)Œ[ý£çéÜÿêKJôódz”@n³\†Ïzóæôþý/Ÿq÷3¸ä¢Z…ž’À‘Ë_!âBû{»°“RÁ}¸Ž>À»‹â¬*»íó¦ëõú-Ã'â|¦|Ñ+W[…§-®Ù O_¶x¡‚ƒµPÐÖÖr…‚/žçÀXqµ³¼&t}èqŒ­Í2&.ÿïÉïðŒº†ñìÙsÂncÎçrÞÚßߥû{w0b¹ Ž éÑSÜp\GàÝë¢rœAPÅ=»éórèÆ<2Æ{ïy1çÆF­ÕíJ![o»Ql‘¨gEIâ2Õó"QTpéèjÑ«èÀ9"¢øBÉn±\=Áw¾Ÿ° GMA  ³…DF À .dâÓæÿÆãšúïx6—çÂ8(ª|ÓlÝÐ ¾ç;^è9~èº|ý¢ß®fT¹Ö‹d÷U9k‹ù‚”ÉH¹\þbè(»ÖŠXª€ˆACv ‘¤¶ñË€ó3àê:%L¿|:D@ ‘ 8'Τ:ª7×Ô˜‰ñþUÊBñ€&ùÔuU6=¿Z;©·[–å"CtıüîîÖà¬;¹»Íã–{ÐNï”%RôÀËrvbô±ï³Pb}lÏÓ?ãNƒ¶ ÔúI|Ï5€•+ª’Ȩd›ö7×Ô˜Ä誀ËeèŠÀj8&äh²Ì—ší®"KŠ"óû¬ÖµQl}û°~!J™í¸v&ŠaΑ¶X!›Õˆ¶6‹â•|`}€¾¡úoNNiËK¥Òiౡ³ˆõÁÌiÖ‹­(@ U•T àæãšúc Ö?1ãKÆñc†YR$G–t±8`϶Ø2Ú(ãªOVP¤Òæ™äã|uOiÕ¢€‘¢×/Ãë’ÔeYÎóü(ÆXå;¯®ûêK*îBFq ï*ã†,"-È@4Iç >ôÿ7Ŭ^½²ü9mýh¨ .]aÀ”¸¨B¼I¼uk[–%QRã®ÿï|\áuXåÍ×=sXîó_k¯²™PQ†i£Èsl›TÈ­â¼ð¤ÿS™kØRÑ4ìé‘$’ã± 8ŸdÉ[T5•Cýô°Ü~øá‡y&@#–Þ$AEdÊ ‚@Ž)Ž×}¸ÆÕž¿ÉIëµ"߬Ë(‡9zE=Ó´²’Å3¡M|,|Á¯¤° ®aæMÒz¸OËç&”Fÿ•f‹ñR`¬šõûv·Ó3:Çhkq_3ëÿ±îošgå `7¤Ž˜y­ìüü"xrÜyõºÝi ¾–IWE¦xçXÞ1FÅЈBÌÒ` øD:©Ñ¨‡aD‡8!Èç½X2Ù–3¿Y,§l5r|ß`\éøô_³TÕ5‘çy–{Óv)þ1±âz€ƒiqhû¯dýˆ «CÌS*ä)=D2¿ë‡q9âª6w‹áþû¬™gKý SdÕ•w¶Õ­b\,(Š"‰¢x¥K‘b)VИꬰPf x,Hà%s˜óç2¯•þŸ½+‰m#Kϯ6’U”HŠ”,¹-·7ívzÆžL݃ÀnÏ%ã Ð äÄÆ¦û6}j;Ø9õ»Oö%—ääh$‡ d Ú3Óè±;ð"Ë–-[’µX")®EV«ò¿÷XÅâR$%K¢Ûý>…WU¯ŠÿòýÿÛ 6@¼, ²ª‡ù;‹¯tŸåKgÆbA½?ÂËŠˆ{ñŒ1ì2^+ ÚHZƒ¦D}¡¤nX=AÉ™FyU5d_ ì/ÇzÅÑ'}†=Ák¦AÏ‘²³t)ùׄ$r ²¤^.ä+#¼|Œ¥øÁap¸;ÃÞ`WÒ UéO¦ÕõÏI»3}C‘u»dØmH"{¨– ÝÀ#lÛ+Mƒ6å9v´ªÿðñÑnA†¶~ýrÍh§±öJƒ‚í§³¹ÂÞÿûëöwc`hùåIµˆ{»´P€ŠQ÷Jƒ’…ã·× ÌÀð† “+éérÜáiPþºcßé] …öN àÕ¶êXûi' çCgC±—H¢•™ô3|ÿàåiŽ»Ò ÔÆOÛ“¤Ï!ç¶%úŸÿÓ;;xË«W¯òÃÿÜíÿÃ[ˆöA°+ wm1vÐpþüùí¾å•+WجT {¦ @E¿"èv´jþÝhHƒBá“Nžúᇿõ:µºúñÁƒS©TêàÁƒ w |ûöínÿ—ÞZ4jB[; ¯£@ ÊôAñfî ñ°íëë+‹´ ÝþG1¼hKâµiÐiû²Üæ¿S¸}» jbïAbØ ´§@¨Òõ­& zîÜY›úïÄü;é¼òÿÅ<á©Ôg÷Ý«åÙí_q’!“.¡­:Ã}>ÿ•{wá ºQ[áêêá¡c­ß’y†=B‹1V•ì>íÁá ã°&DâÔ`û=W“¿p]¶®_¾~ýòitý4ú„|@ä©¿qfö÷›»7fK®q2ºô¡³Ë<á-šòãêðƒu€„¿îõRë)“ÿ:ò«…3%té÷xçÌÅê‰3Àmn¬®>ÄEœ:ºpóÒÍÓñL>ˆ“/_Gw¿¼{Ú®Ë<á-‚ò¹Ú³x. ª õ=Ó _|ñE$ÙÚÚ‚òìììêêT* »À†.nœ¾ëT¾†ÐåKè&BŽtîòO¾tÊÁÑŽr² ?d´î ·4 êb8XÜ)j¨ß&ž%pvA¬Aúù€ô¯Ý½9tú=~þömt]¾èÈ?ö%{úq+CS´î Q‰tY„¿Nsõv'¹ŽR@Ôä.\ÀÂMÅhÏiÌŒ&j|p} "]zÍ4Áñ´ÌES0íÚÆI0ãJþ 'å:`¯澤ÿ~ËÿÙgŸÿ¹~ý:ì^¼xøÏ¥K—,«2âëÚµßÐOÓ]´MÐ!˜£`@-c7ŧ™Ÿx]|l‡ÂÓÝ„ê:€>û "ºë–~ÀåË¿vW®ÛEÛôŽ@3ÓÎÐm=@ÕØ¯ƒ¨E&”¢X\󿃷ÜA °×ÿ8†·m=@ »v;ê0êÆÃ‡§¦p7Ãi‹Ä”ÛlKC…Æ2Ã[†íÕxמ(Ž\“""Ü!âY6 }oÐ<[ºzõ×CC“SS8 Á° ç,È7µñ- ;hpt€}/pÃÇþìÔ©¿ý›¿î‹Žœœˆžúñ»ÎVX>Íx’‰ kºE JψêÊÈ«ÆgØÒ äùÚµkçÏŸ§íŸ~ú)æÂÐüòïŽj…|fÝ8³¯9ì¿ÒéÙc‚AÖëVŠ·WŽi•²¥¹’¡{‘Ûa`ؼÆL7íáã,”t‹À>Ü> „0é¿¶°°påÊ(ß¼y10¼hôuÙžŠLí‡Ø—š}ص[PÛÎp€O>¹rçОÔÇœ"¸yóf·¿;CMLç3t‹>u”üÄk×Ékœ%Þ4þ|þ« ½èô'¸ }‰ß»¶õï:4ÿ•2ò«nÿ~¸p+€;p·yC¨šùA•Ñ0g]Cdâ-Ò Àx®ÜÅM_Ýþ¦ MÐè»#IûÌœ% çõ§t¨ÒU®1mê3ð o2¼bwG š…Àˆù¯€L1]«0 ß'46„Å)Pù·»Q¹wôMÈðýCë®MdȱúN?wÐÜé¼@ Ý…ì- ÓŸÆv€VMZà ¦§§gfn¹†»;Æ1Àðý@¨Ç/‘EJÝ]!ÆON„IWˆºIàª9кf`:5u´òýïþØí¯ÆÀÐ_ó`yéÅââó¦iP ÷ 0D¹>Ø~·ØåªøÿüéÑ£\ÿ€iš–ešÝþš Up<^©]öût] Š˜þx¥Akâ`òº›jQ­ëëì·½#”˦½*ÃŽÃë”ò§CËI à¤Aëæ½ÕTîí©™1¥¢¦ù[Ëògs˲@ºý•ªéç8.ÔzâlÚ¢UjßÅûÏÚ ¤V=€ üBôþ~“™†7<‡ ]„*Ûo4Ïê€7¨íW1[Öï8. ë%p8Œ1¼Q TFxOƒMc7€úWæBtb:S4qˆDUà¹_¼áóù9‚ne†*,Ó,C,ìôŠjº÷؉Κ,í d÷’¨zÓô— ½Û_–Á–Õ< hÒ¤r*Iϳ÷t®ú+„4„¤nG†ŽÐv Ï,ª&‚f\ãwùAǺý½:B'è\Ý5µ‰ ™ÚÊÛó¦iêºnšV¹\–$È™$1ïÁ°h‘u¶5kÃÐñ6j¬¼ @š‹-]7Š% ‚UµÏ~Ât€aßàî ç#Û&A°{<Ð!!àCƒÆÊ²G6©Tú57—å Åg ‹%ÝH&S:A·ÿ- ?¸@#Ûz£îãihÔ²­H­Râ_,éÏoer’/ÐÓz47_ÒõD"¥iLö í=€3D#àxíò©€ösbÛ¬RI7²¶™@~qSM§ËÅ@¸çþÜœÆüÃ>¢pΩqˆsÄ51Íœ–Z”k@˜ÂÒÐòÊšn™s«Og7Ÿ~³ð§—‘Bª ¦ û‚¶ Šx<tˆ~ L6ôˆnŨôCÔ+ŠR:‘îý‹KÞ»¿vÝ—øÓÜ·š˜ö=~¤iãB û€¶ ×ø÷JÛ°ËÄk=€'pÒÓ0xAH¥³A¿’zñråνÜüÓüÒB2}ëO<]øƒ$§"}þ‡”4}3‘d~€aOÑ©pÑýÊ1W`à®ÜŠÿå2‡¸\¾‹õëÅ—Sc¯rCKzhÑ ­úóskGŸÏ?ôp¸ïñü3ðét¶» O/ ét¦î™f¾è¤ ‚ééig2,:)ªÎÑÑ„(¤¶)¢UÒü<Ÿ]y),aC壅RáØO"¥TylL^^^‰ÅF£Ñس…çc# ÜœŠ#li3¨·)¨•¥kY¦…t& [C×EI¢[|Éxýw`Øg¸ ÎT@'Æ¢åÆtPCWˆV°L“ã³TôK¾b¦xüøÄ­ûk¢ïä³TÆïÿÉæÂê;gÐÒs~jj4›õƒôp:‘^þ$Ý$q»ÂG¥dÝ :Ò¯“û¨øS×ÖÖawhhêd2¸ùÖL±­0¼áðZ ¹FÄcÃï5(Ìé(Ú©°,R-•çýÁüÂæðéþçïùú?ÊÙ ùÁÊrò/ÞéšT|++ë£'ŽIb'w1]Xx~ìØQÉEñ²è´&ÂZ„ƒTRuÜ!‡1÷ä ¨(Òøèè‘õf>WèƒS:÷—$|r?÷S2鬬Èô@oBá^ªEøYbõ‹8¯ñ ½î}˜ò욈qÛòÊ*‘t Œ[ ì>ñÍ?üÈÅb)—/dÖ6ÒR°|UþÑ{ó·^Mýü£ogç('…À³ãÇGtC„¥ÅÅ¥©É1Yápo‡Ò2„­5WAao´èp¤Ÿ%¬{ ‘’DÀ@¾Sû eE‘A+Ò™L¬… ¡~iy 1ÞR adC˜¹ï%»½Ø²W,´J™ èÅÒòK\'ŒVÝÅVœdrà¶ P†çRG14t€ÆÙ”ç@MPK§­ g‡†Iú¿r§2ÎÒ*8… &¿®ÜaÛC[xýë'I·‡¿ šuºBØhž²Lq†¦«=~Ãç7{zÐÄİa”³Ùg<ïK¥ò²llm©¥*—éÔdö¢2–þbÊâÆFVàŹdzロûD€PPVî4*a¡‘+–•±KO£…D|‚Ãþ©ÀY¨ãÔ§ÇíèSt¶µÏ!À•ˆª„ˆhRivšÀ0ª!¡[ö+…lQvßß©\÷P¯`x´HƒÆíJWˆ¦YQÒBv¶vDX/iš?7ØrM3zzÔååG>¬e2Z($æó’ZP ü‹ ‚Åñx” ·ËP¡,¦ÔÉ<Ó”ô·ÎÒ°à§~†l‘0©Jè›ßÁuiþöí^÷oý ¯‰ö¨ƒ®Õ^¢u€çEž–¹˜®ç$±<9©¯ùýR2)r(úôi"ݲ ‘«Þßo%“:ˆ{,&nnÇõEz³ÙèäĤÏ'ïŠßwlÖ# D–žո:†{6‹Ôš8Š{’‰D ÙÜK]WEBÑÂS@zµ>xüè™r9†øÏòËå£G0Q^_Ož8Ž ™½7)Š¡H8úú’º‹›áí@[ T yiV´NhT@Ô 9âyID‹Eõè»?{4‡BaE$´ÎQZftc}hôÄû7¨(Q2RL?95B³ý˜Cs½sP†HBU☩fØe´m ®¤z)Pmã@܃I{aržÐÐ EªªõÁ¼(—ƒè l”Y²,8Æo&Ó’$ôöý>I…@À7 Civ»(Rõ1 œˆe"­„‡Aâ¹Ñy!öûý Ì&‹ŒÇ‚J¼ÏçÁW”Õà4P§B!li O1õ‚‹`ý&v{hS1³$žã-“SsÆâó¤ªZ¢äë,÷ÅäpÄÀÐ^`ãáS(¨¥R)›Í[ðù|46~úìùÁ¡œ;Ÿ&‘¡Cx*íýO"³öDˆ3Þ}Ôw…€ˆW+©ÍâÒ¬¶´¦Uõè˜ñÎachØéÓÀH’?D@ñÁ €Ó “«%‰ááá­­T$º÷`öÇï’|â¶z±ÉÊÚ¢#àÄd2ÐD¦Œîü@}Jy.±f®Ïˉ·šà¢KÅÇ ÃïöôG }±@°¤3àó•hö¸pžl6›J¥°CàsHäòygš/85ÓqñÕ¹üéœ ÍàÿÙ»¶Þ8Žì\Ý]}+‡WY”%Ê"i™òJvlì¾1‚$$ÈC~M€`‘ü˜<yÏS಻phw%+¦.¤DJ"%ÞæÚ÷î|Ug¦Ùœrx‘,™#aÐìé®®©þΩsêò¡JÒWÎxáêOXÎàe[ãe¦ø?¦C”.P¤A`4ZÎv‡ó]gWI¶Ú­© ÷æBòñ•èê¼U²BÓ2ã8–SfpÈPË4Ð' D>™æ­Z09»bçûÖÖöÒÒ"¦sW?Ý¡¿Qos蘴ù',Ç*À7ßtW¿ nË4á—¿B˜5 b†KQàé‰]ôX9*—Ú iûÅ~GñßüêíË땃æ'7ÊNчëKIz’J9Í/飃äãÆÜÜìÖÖIR(9NŽÐ«Ÿå¬ÿ\Ÿ›ÔC„þß?"•³{yq1ÔˆeÆÜAÒóšaÛw —YNêú üà¾øÓ‰„/º¢ë\ýBãÛ»µ;Óîn+©ê|­®¥­ZÑO•(MÃ3>/ÄD+Hým;äQ¥R–ä<–w¤À„7ÂfÆùCV:ƒîEÒÙNÚݬ0:õ (RÂLNŠdM×®]Í<¢ŒÝßÎyeÄĈ¨]RóÒ™qr™åT.º‚¡Û‚O'½ `iQåjü»VsÖU?]®†ÿâ×gÌòLwl•BÃHßÉò82ÒäßÏÖžÓŸ•r(ÜWVn£€EøðQ¹R‚›$Ø9IÛ ‡.o¨D3eš&È<1ó²Ÿidìþ(mk{ûÚü<îºdº]]}ŒëX}Bгþ_f9Vô¬ëðœƒ0=s%N£ÄHYËW¾ÔÔ§%6»ò‰ú;¯cWS7#‰‰î̆?"º"~Àngw—À °¾¹p–~nv–RW@(— Å dÅó¬ÿTš 9”ü„8Æí¸²^oll¾¼w÷óŒÝ¥ KrΑVàxgwOd‚qÝå¥[cÖÿK.'Ä#L¾ …GÄÁpéáѨJÂ-ÕQâ‚Û÷ÛZkscFùßNÚÒ ûm¥’ªaœÛJ–öDºQ#tƒn™¤ÝÚ~Ü÷_ÿ X÷˜¢9ññÊ„G¡+à(`JŽ~ëÿ ô„»uàüÚÚó¥Å[«Ÿ,,\”ÿZÆp1fý¿Ìr扰îÿh` _s*SÕçUV­Ôý  uDòßh· N²(PU±RN¼¸G4Ìäš"ÝÐUå£ÀAa€°Ö”œB"/ϾO‹)p¾!Õ€õ†Aa˜9çyôg©tI°®§Ö!S¹^©ËxNÝzøWcÖÿË/gP€Þ€ÏhÜ“²IãÅûÞãúëIÑæéÓ†¡Åæã¤úîC¸Fí4€·”yñ@?™X|†Ž¿ŠŽsjD"Fw% íÍ~öý>†~ˆ-ˆüË2g €F½$0]}€.!ÎrPz&±Ž¢PàŠômè[|îÈÃ±í¾¬ô¸1ëÿe“c!ÕÍ ™›£‰áÓx>$ªª(ŠXÑé´ü0djsæÝ’Þ8è<ÞôÚšÞVFäv¬ð(=Z“H Àç8–xÝùÔ²­|ž•A¡Àumm½#3û¾ƒìûeÆÐߨ7q Ggv3èºLõÅ󩘌ž—…‘–€ÞØÜ$vÿ¥¥E&¹ÿ¡dìI(f²³þ_r9!¦$Á¸ç¢añ™Íœ¬ \Ó —K]×Þ¼Ùa‰'>:‹›6×Ý)ýÉ [K¸Á*5Å´S]?\ð,t£È4xà{ŸÿüŠg¢ZÑGfò £™ °ʾ¿"í41ôS¦TÖKC¡0 T)Õ`âô¤- nK‚õ,• fdN |R¶¼ìä˜õÿ’ˈÏã›6ä;È7ß;¦ªª±ÐÌÎLùA°»·¯(¾¦ªfʆYàÍ;ØO*5£PT9O²A „ζmùž÷å—wþÙ™iÓ4GúÇÄü,‰ýâÙ÷uWIdÙ‚³ذT™÷O“''Jð?fý¿œrZ“Ó‡þÓˆÚ8ñøïû>BÅ@ PÇõ@áš]âWæ § 8…˜óÔ÷»³`bSŒÎWV>- §FÿIÜ[gc9®¨s$`cÖÿK,§œ`§ |Eë‰mÆ&Ô~QW ÔÐÐ#MKL“QB^×u=Ï#¶ˆj¥R(83ÓS§AÿXÆr>9ç<À‰ ¤‡Èp5B¨A’qÇÉ0Ûí"çJ¹ÈÒtfzZf¤£,ïKÎu àþlÝÂ50t¨ÁÛ=ßssD7IS”TSÕåå[ö¨‘Ÿ±Œå‚r*¸ îûdP àîû~ðêõ¶XùÜiß‘ãè•JiäÈÏXÆrA¡GÇ:/„û>TDZƒ ¸þñU]d¶Œ—å} ¿27;9Y£‘ò<§Õ¿Ié-yx_’WωþZ–‰3cèåG¾´´4??_¨š¦žW€3mzÌÄq®ŸyE'é€aº5ÆòÿNøŸýÉWªHŸ)r&šÖ€Ój'üÇryÅír3‹‡|qiQQ4Ïëá>cöƒû¿¹HÑÿñŸ¯ê( Çd·c¹¼ôÔÛívF¼\,4š­V«ýüųï¾ë4‰ï'axfB]Ot=µíD#Þau9DÓLËÒhyH"Ÿjšš&©ªª}{h)ª¦ÑÁ‡nê±¼K^©f Lã|/¶ß¢B¡8Q«q×sË%çoÿî>ô¯-õ—‘ÒFy&XDñ«UMíÛB)×^  àÔ.Ùb6–K%xѾïÃw‰ã¯Þ4 ˶Ï÷¢iß¹nè3ÓSÜs]Û2?ô¯-ß~ûí?ÿÓ?RÕ›­ÎÔÔT–iÐã8Že+$†a¢Ql§@í2NÀñ“˜íýý}x//^ÌÎN;¶]­VÏý¢%Ž â.í©Ó¡~ù›¿þs|ÎÍÎÈ•B±Æõ‰jõ+F_Ш „O4Y´KIG.’4ùU᪪ãnUåª2„½\óÏ5¥Ój™†Žÿ•Jy²6A/šÑJ2ÊG‘Š|pñÝiZp3ÃkRÅ?:yd"Œpviezz²Ó+& ³=55ÉÒ´X,Aü¿ÝyëØ&ΔÊeR€À÷èÝiû°AЀŒ,÷FÙ2 †^Äñ‡þ¹c9".œu×Ãâ°R.×&ªÓÓSô¢aË»j‰a w€)ˆ³Û‰kJa)Ü'Aɬ G™½WrÜw.@vþÏnô£(žŸRl$ú6‘–&ôÜz£ñzg÷‚`?I}x&SЇtâ8”êœ;:·˜¬#Uc915ù…cÇ–5NGp¹oY„r±0mÏ^t’Äa fQ¡!øî Þäºcoš‡¾}$2Å( T*à¶RÑé‹úw_A§«eÚ„VÑå/JÑúèŽK݉#´À®ëî‡a›‰‘«‚mO(ö¤ÆÍZÁ<&6Á4³vÜC„»aWº{}ÞÉz“Ó7Ë{mÀXŽ(Š6==“ªºåƒHÄWBßõ;­×íÎÓ§kµZê„nÄ43+À{¿ÈŽÜÿõ;¬ý9$•ûg`ä.š¤/çŸÌÍçÂöýµÉŠÂqMº—h_KÅW5fÙʼnÚuhRšF{»ë¸ØuŠÒè¸Ý–éc5Ê%zAéCdïdD{,EœîÖ³wõ,âhßL,´Ã'_~F<´²kXÊpM™ä#Ù,ï£3AgàGì ÍÔ–’hšÉⲂ©F±êâ÷aT(•ž­½X¸>/Ì??K‡~þÌWƒ“žl?Ðo…ƒƒçqFѲ&4ÍPDŠ>+Z¥Ò• hs\&CP¹(.müÅŸ•ÜK"¬µµõ……ÇîžU‘®ÄÜÿÀ‰”… \)½Ã “—Ñ–`j‰#jw(?ªä‡4ôgzÚ1eA–¡ë§i–÷Ñ€½ú$AÄš.kúªÚÖ;š¥§ÖëVâpõ·œ$Öl[˜˜õõð—?]»½¼èÛÁp²û`¡?ÍBëÞÑàÅ—MàùÀö7›¯uÝú§¦>µ, ºÃßlnªªŽ¯p—qÍ|B¡»þü™äå¥[Àb¶¸Qq;’/ˆ¨² ‡l¸¼'÷ø‚‹·Ñxøðî»27[.—æë­íÝݽ;+·Ÿ­­ß»÷yØÛÂO¼¿Ù®Ò–Œ¯wheX+’IB|…gÍÍÍâ`woÂöå#ÂŒ3˜6û//.â6É|!ØÄy…q,Ùe„ä÷XÖ‡8·ÑcàJÁ¨'™ÂØ…û7þ ª7‚z˜>ÛŒ‚f;PXìpßW¾¾íüj5úÃEÎTsnnÖmggGSEÄœÄÉI=!;oøû'Ò¾¦þ^"»ýLòn;D½ðûáùÀØÃêW*{Þ>çæää:IØþW¯¾sݽVë•ç¶,K/8ŒÔÜììêê“k×®6¤·À¤ÝœB{{ø ï[pCHÂ] C!JûMöÒe.FjñI`=.¿àœë¸ä–¡/„G";»»pU 4T“ fIÄI#€ÝGç*ÓU=Ê_Õŋdz€W¡ vG‚¶™#¶Ç‚x~ž°ŽcÁ¼½M€äF…q™°b˜®™ñ6sNÜ’¸Õ8¡eN/ðþÛ-‘‡ôÙ3×5,ǯ÷áûúÆ5ç_ßþӻŷ­ä#›Ã¸à‰Q´Z-EUq×pÈÀ7èöühÀ}W FÃ}øý€þÔÔ2¼-(q 3žW/•æß¾ý¾ÕÚJwQ¹w—€Z]Ú³M&ño„,bžpªÂvÅ-[ÛÛ„9œÁ…ӈϩÉÚêæË¥Å[™ÓÜç[@]QÔ ´nå³ÛB÷æ¯v atÿ·¿ÿú+]Ð[÷’à+q:‡ï×a¼ñEþÑѶ¨9êÜå<• Î.Èê‹’Ô¨ùìÙzF Ü‘\‘°ët#*úïÿöwËK‹?¬>ùú«/y…Q•º2"fÍêÓ×8Ô?td*•òêã'Ô2éÄ$±ø»¾ÖHÍÔÑíüã+V`Zo·ÃÉO Ï·ýO§,EãÕjuf¦fˆ¬¯ ÝPŽÉÏVzPÎþg_)CŽF t#Ó%:<ÃŽê[þ‚‹H,ÈéÚQä –ÝÁ žÏÁÁZ£ñ2Ž…w$‰è|\†‹‰¦BZõzp /›hn Ä7®Ã†áÌÃïOø¸·m|nl¾$ÛöàûG¢ÅW3ÂjöÈçº.~€šõ¸´òÜDqÇ$5ú†’ñD ß•ú³ºúXöB.—=Šº=xøˆˆ„ ¼¥ëÙYýѹÍÏ_•‰l£X" TªÐr¦$çÁZÒž ^ar¥¨þTõÔudlA]…Ä8†z¢e$‹Ù…ü1ù¨•b„J¨¯¿0¹µÝPöBÍI½×¼^hSÎáˆ!XD."vò<Ôàáý_¯äPØùa:¡6¯6C âÇõ6ï£'QUHƒ»Ùß ÐÃãÜŠã`èõä^g0%¾:êÐ3Â]´;l¤ìú»¤¹‘ä%já‘7oÞÀ;–É5éë¨@I˜ÕAü_Xã³·E‰I6_ál L騄”ÂãÎÍÛ@¤ìÐs|½QHœ§P`šÜôŽ›«ÛÑúç>GÐr¸;24Æ+,–,FQ÷YÙã†4NÁSÂ1Ù~|+/\¨À{„ìì½;ÚêÛ"3Mß³î|\TDW·Ó™"b¡TSB1ǯŠý'b.X.¡þ›öÀ·2Äw9àz䋾€á¸àø8»þž|'¹·¬ j4-ÐÑ4¼oaYƒ Ežï×M³‚¯¨Š‰‹å‹æ¾'†eº…:Ïhn34œ¯2}å/ËØØé€ÓÍeF€8ޤ7…×Aey„ @ž.z&‡•úîå²·¡ßB>qž˜T‘ŽNúìr.I‡m8¯0?|Ed…@?zx‰Ð§§Øç~Ë©`T¼¸S÷Új[+¨Ï¿\â®Ç>š-²¨}磒ÌÂHô³ÇýüÁýß<Ì#²‹Ú#aðPè•ð‹cJ>ŒÞ‰‡3R¸x¡–]DÈ ÏG×o9ÎÜ!(ôR¯¿0Œ®AŒ‹{w‰–èï±Ím×5r/já$äIs¹´‡Ö–à<¤ä1FÃù‚¾.|d‘Њ²R6²Ü´U…g„¾„9Qx¥Dè—I7xöhI&@©q"8iè(†Î.À¯ÈçÓRL¡öòâ"¾„þAn`v”W˜~HY°rmº nùâÞÏ667—–Eî’  _QbU1Õó;³ZØtT—«OL…™×fu»ÐþúFÑ6S›GŠ`á?²lîäQ ¡øü`úþDç–bONÔ®ñx¿{{Oõâ McüGì‹PN‘m×ö÷žsÍ‚?H¼|¹ tˆˆüêõFFs[üÒ21ŒGGùˆYé“â¼P$Œ¹JAðÏY4å+ PÏ×ýÜr=’=—HH¥cCëð›3B_ ‚)uMùœ xô‚××á1 VB-)!]' Înì!1°PªH97òàynàA^a¨Áää$éðrîqƒÓ­@BГý›½‚s÷è½á×ÏÍ.½Új®|R~¼±f±7ª1oZåHÓ—çJªYbáz±b‚¥£z€l_Ø0ôwm¾`~>:,:Ô‰'¿èN.ªÝöÝrqи K_*]i6_»î>@€Éµè’$ªV¡m\†¨0tûÎgW)Ä[Áb^÷‹»Ÿ‡ÒZgù¿˜ì(˜ºlîŒwñQf1¼`vüP7%5[’ƒñÒê»ð,T¾ú’ʇ^e³ÅÔ9°^œÐM?Ó{4¥f¢¯úê–' În§ø$‹˜$ñ¦³bû¸y…E—‹~÷s\IUÍês\ykE´ÞÉsª÷«ª(³èkŸ-³§kÞÏ«µ®E§:U)9zÑLjNï–%\7Ëå3éI @î{~{ä{GПéÀ â‡úäËNsæÜ’¤Q‰q@–¾ÕzU¯oÈðWXŽJåNâ+1$"12…&V_Î:1¹!?kÍIPÈHs'ÂÊÒ›/ë'›7‚]¾ü ˆ¤fôÑõ&ÂXo}“©ÇòÆ'l5}7X·Ëƒ;ŽL—2oƒ×äŸ5RN >¹nùg ž<Žø|‹ÎÝ8§rµý´âÄ):†Æ[ Ó(Â43?°ùb—П$‰X *ƒjg˜;ÎN_65KdÅÀ˜çÇA júž¤©êôZ—a08㞊jıíyp£$ÕÄ&˜ÔÄ-7LÒ·þc9"]*‡8J{›¿²OÏ}rzqÀ¨ìÁÕ‘+þ»®N×çIŒ¿D¿êy\‘Ýê¸GžÒùѦ~O³÷™‹·;^‘Z³ÑjâÄÕ8.E¹ 1ÿ×ÞÕ´D ÑÙ4]«®""èÿÿ#={òà?Pð°^LªMóá›ÉîâÂÒ·Bæ’™d:LÞŒZÚM:HuÊ ˜ ï¯7o»]•d3þÛT¦ÃoL® …#. >ú$Òw¸q‰«3JGx’ý…G¨pÁ±§tæÅÐäé`´+Y™7i½~ï:Ãq_¥xcSü¾꾯>¿,ŽR³˜pöCû…Ö¸ãîŽs›$òϧ 8»G‘é`½sxê¦aÍhÛöÔ,#ßY3À¹ þåõÍZk¬…= :“VV“"É+hý©§;ãLûÚ.ÙdEÕ úÀbË>¿êŸWg$-©uèùé‘K‘òýøÉqÄrÒ‹Ìág»FcdE%¹ƒî¸nÂþÿfÆÿç2©5´µº\.ëÓïý l]ßǪªåIEND®B`‚analog-ce-6.0.17/how-to/startwin/run.002.png000066400000000000000000000325351406366436600203630ustar00rootroot00000000000000‰PNG  IHDR[³¨Í(átIMEÒ&#øm pHYs  ÒÝ~ügAMA± üa4ìIDATxÚì]ùwÛF’ÆI»ª««»ª«º!@~òðUU•eE–å(Š$?|ÏûÐlþúëÑ?þKƒ;Ðs†D–8®ïùáG¯Ÿ¹ùª•p1Ö÷œWÚðèjÕ¾n혧¢‹Ô{‰­þŒ§Z]—=/p]­ÝA¨!:€;hw§gÖéÙвý˜­bÛçu"g)4«ôn´U–º¢ÕIÒØÈ«˜5d[Kë»ïyT¥ååE.G¼ èáû÷²Q4Us\·kZ®çûð2¢¸ƒÿù÷»·:í3{•öÈó/Δ_6ôS„œV>ÊÌ*Íêæ·1šb•É¿Ìl¦|”ü]^È$K3XÅ‚Α*å×h‰Tò¼Ÿ2(*Q~þ|¾¼s«No ¼„O6uEi~yñ8œSxú§\NÑsj¹¤á$—S¥Tx¾çº¡iºQ¨àk±˜ 3R•K(lïßt{=7 C-Š"$ ˆàž¾j5O†© šj¼\qã‹Ñš½%§™Äd0ÍJ»¸××ÍSõftˆçø/ôÑZ ¥éÁÍ/“"ðÜá;ëÚäiÍE5œU’(ã“–™ë<ÂHZWà >'ÉâôdÑœ:_ÄrIߨÔw®j5äõQÊlضNÇ:í`ž—á êÛeN¥f¤Êçär9¬T<Ç @¢ágß‘, :€;x×Ì(wž.–t¹|îÛŠ$k‰.&X:ItIÍŸH:ËH²×²Ðífµ®…$Ñê$™k‘gFîr)I´:IöZ¢ÕI2Ö²³£KÊÃë×s©ëabJ÷<ß´,üš® C×YÖßétÞ½Nxëº[ª¢Ý9ܼ~]'*iü ˆ©úƒšç–)û“F‹ åtµ\Ì_«Ëº®ætÍõÏ †C‡N$O]W0ÏÃìíJ†d[Ži™½n_‘-Ó´$–ðÕZEQÔ|ÎnµZ劄îÆFî`oW®oû–eÂ0nðºŽyv%BE´Z¿ª{f+2“Qn’ôÚF­¨ç %ä!Ü# Mghä;]'Â)|2ärj©¨bž‡;¸±«õºáq³;POß¿0AbËÆááíB>¬Vkºll…¼ã¥rY"ª©}âRLA¨ðUå_e ¿OTC=ٚÌG€#Ø©Woìþ¥TÌã|hºp??y‡óÖIß=çäœÆè´H<¸&ŠÐsWÙ­˜¤ôa £÷¼p8àóêåKat˜èON~s]ûÁ·ß(²ì86àûH‰Q…8µ†. ?zô^ ¾½Ç'íSx‡ýý›¦5¢B-’6Y¼œxÅêf­€¸Àõ|œ÷õ͇¿¼CÈkç¥F9Ê ¹ ,ˆ< (LPD’(><˜±išŸöfëFcNáiûE­ZÁ×n¯wpë`?.0‹së…¼z­^EPƒ‡…ã(E½kõ Œ§¾‹2Í“>Ž;õ ŠÁøo\ߤbÃ!Üû3óê[÷LxK¬·Z­Þ©7ÛíÓ£·o‹Åâ­ƒ›0o¤’eϥ¯mIÚÞÞzõÏ={öWÀäßG?uûý¹TÓ›– ¦Ž‚…kÌ TvøîàÆõ[_Öq?ÑêãæŠ/7b”òW­@?óc’gŸZYówno3l-œêÙb¢F¡"Páƒ|ÅEö«¦Ï'œúŽŸ»mœuMDo?œÑEX>ZMࢊè'ìþG/Èy[•ÔYÒñV?»j ü¡ sÀ¤5M#P,0l1Ï%ñyz4çÇÇMZYÄÉÞ]\ÜR5Út˜Å´G ¸àéËc6ùÖb±Øö$Ž|3B²Âlù sfJ|a2Ç·-q¼j üaÑØaó¼ ¸‰EAâ; 8"Ë@hp÷ð¶Ä×è+ý4óö¡¦}DO_6ù*c®óÁtuvÖ>0 "š'}”,]\ljė!Dðí±ˆ ðQÐëõ$ž¤—ôøÔŽ Žcoo—ö|¯÷÷ozÞü=A-É¢Ûwd¥ƒ(àõ¯'¸òÔ n46i÷ñç_ÞÝúr´1I;H(à2Z¿õi¹‘Ðáåªõ& ð»G†~8¶kYŠm³)Ýu¼0ŠT•Ù,Nðu0ÄdoÛŽãûAÈïW Ȩ<ßw]ow÷ œèšV,"ë—LÓ,W*øê±MÇ0¦Jb↦Û<é=}Í|K«º ƒ ÀÀ#Ð^#]ñ\d .“˜îpèH€ï{¶#u:gùœ-Iã°ÝX¯×7¸m÷ØlrwpvÖ‡|_Òµ»Óé€ÊóíÁ`@·<ó’̧xÈà ð_C¢šr ɬ¥ ÍSNÉ" vëÎn]݃_ óeòpœ*ŽdNˆ¬A@à‚pݰӱ޽×Z­ÖÆF`ÛÌ#°øÝ3ÌPÓ]Ø#æyv«ôz²ãÈaà¼{?LRÍE’* Ô(7ï%XòÀthQ`‚ËùS`šîéiøã/Ë·GR0›óbsÌðð0ìnW³¬`˜óüáU¹â, ’f©t]5Š“»˜GÐ4Å(hÛ…z)A%þzi½â¯¡¨Hü5ôj˜PÈKzÎs½î™=Ôv£ñb„ìÎeÄïø°[\¯°ÕæFysC1ŠžmË’Å=‚®)ÕrîÀuj8Y nŠê©lºåQzátk\òD°ã””?\•(ŜҤšëõfÿNŠEøÇó=Ëfe#¨JT6dÿã=yõr<Âe!“çc„OWï%àÒ|ÜÕµýÒÔþi[} ®ç“BÓe× º=Uo1QiA5 z>§TŠÊEÙ üÞ0`» {lÂì_: ü™!<‚€€ÀÂ#L <‚€€ÀÂ#L <‚€€ÀÂ#L <‚€€ÀÂ#L <‚€€ÀÂ#L <‚€€ÀÂ#L <‚€€ÀÚª!{®3]Ο°+²¬(Ц© ÇUëD@àÏ‹u<‚ç®ë1—„ŠrÑBxž¯ªJEE£§Ï‹×F \Vö>wÍV'tk`5ß|5'Yâ9×Uƒ`…·¼©*:…¼œË)_\¯—ŠÆ§÷¦=ŽôÞ:~ðFàOãÖ5zùßU u ÂÏ*üRºà³íÇß։؎/Y‘wfÛòPU‡NN2¥BÏ*††çN‡ýš&kºÂž0¯á§sχ••Ð4¥¢Öë¶6jE U©2[) .Ó²è‘õôÞÛ¢a¬m$ÉÑcšôr O÷|»W×ÓM¦7yEÉøL»¸ðä)’ Ÿ½²n¥e²F¥ÒË ­îØCÃÁÀ M÷ñO§‡¥£¦}²yß}ùÞ8jîuš5kPš"1 µRÑ …Ð0 ²0ž7x¾˜æY£žæph…… [&{ã5 ¸X4˜;ÐÖŸ3“£§×ëÓë×oöuô>¬+Yd;>n¢™‡‡·É^µ\— xgôN;tg<ÕC¿q¿Âk ·à8âáH×y'ùü-z@µË_¶ ¶Û&Ã2BÖµ4¦é"0ú ÔÞóú8&_ȯEl¥ñ¼êsþø #Û÷}\aãûülÇ u\WŠ`$Fp‘\òý¿ÝÃw6=6G¡Ÿ¼Wo0@ïÜÆzõú?Ô÷)„du?ñ¹¨åÖÁ>½À‡ÅÝÈA‚)‹F ÐK»SØJÜ,Á'þ ÿØ#ô- £ C75œ¦Öÿûégª+E0h£óÕ«7÷ïß{õøÍÝÃÛ =n6‰?„‘˜I¸Òãæ nÜ„þñýwƒ•·¬¥Â ˜À6’–à—ÛÜ`¶··ñ%®šì<2®œ´Û`‹bhì‡ã&×äóXHXËÑÑ;Ö„×o Xœ±Çà Ö[Ì Q޳-ÅõXxðdBµ eÖ··ÐR´"½¿’J %S7aIܼ#L%wI ‰É¹~™×¨«Åš6,´¯¿ÞÊ9ËÕÕÒ¦dÛÒ¡$ ’››1æHÓì4Œ~|ÆAÔÝà €{fÃZcÑuã`Ñy?Ù»±ûèñ/714q¤ÎiÇ<5{èH ;öÀTB ¤ñâª#‰œ¦¦££·% ‡ãWbŽ QW[ÎãiòüñŸÿ9ȘŒM¼ñ$×õ ãøûï(òŸìß?ýŒŠógÏž3—aZ¨±Q#|ŠÄLºzÜlá'(åö©±K_ýí›ýÎG2±z)&OV¦¡jLé¸26 6ßB`”Dí0ÒEã&éððËhÎO§ø)Ö[’ ±ÛÒíqÊò2„0šÎ’Äÿ˜ ×Òû LÀ •ÞÝ»MJžÛM‹$$y’ý2·QW‹5=òÿ’9yÓÈËa!—3rR¹ÌÒ‚º*ÍÙ}¤”!7>™Àu]ÄÆÃáÀq¬Ì•3PÈ€Éj…›‡SǨ“^‰í’úlJÅ«úÃ{¾&[yNu¡í¨n¾`<™Gù¿?ø&Jú¼‚X9ˆxqŒßŠŒ ¿C<Ø’Å,ܰ¬IE‹ÅHøž‚i˜Sëícó°F’%š6Ê),‹¾Ækr¬uÌþGúÁWËÜÂñ«û÷ØDª–KÛ–½ÅL,sÄv¶¥<°÷¨ …`hf¯×ÇŒ@ÍOï/žf²(VòT7Iã4a®„³ý‚’É%Ï™úîÉ¿ {:@à€„–…±[ ¤è½:ÊŠŸYBK²ˆ0.LnË]س%€ŸNÉXge±q ôІå\1ÖÉä4¬š”À$¬V™Õ%–ÙR%qÏ.±hÿÅÁxÛoJKs›VßÞÆ±mtÕ÷W«$õƒ\~ç‰ER|Ñ4¹¿8¥·7õ´Ô‹Ã˜¤Èw³™ç]Ö_lݪ±CjÅ(Æá+2(¶H©~1ŠŸÝm&=BƒÞéOû§a¯o+Ší¸ªeç=ϖ异à çêz®ÑˆnÝúvgî`kkk)[‚2 ª™nsdc”r~¦ÇñxÕ™w0øÀòYÐçÓ!­Ûá10&UP˜2^ÖC,Jgf@kHl—a{›¼ ÆÍÿø<(~Mù9BÌc¨06Õ»<Ç–øt nõÑR%!éd{ÛZÈv,­?yÍ&ÒÚõùƲ™ˆŠQ]´ÓÆ’ñb^Üü)1!ñgK’>«Ù2åDE–¯{Ó-jª„æ©+™©Ô*³=5U5 WHz£¥M‹çPø<øv¢œÓ”N‰ž7Ú˜TD«ÈÄ-å€!È2G”žý|I E×\UQ;¿œž¹š¼dÄùƒA`!"ÿ0š&âþ’mÿ÷_ÀdYDXã[q´qvàó°™o SEg{ÍØ”ÄÆ6¯&NÝøLwP×J£[V&yÝe0KË0[8ïÇv>Vobñh[’'µ:ÞOF•tNÅ´qº>fÂN’ÍŸåäOjÁš»ÌöéW÷ï±8¹6 ž“-j ÀB^óÝʤƒKöÔ¢¦Mé-îˆX?É&˜ÜêŽ_ÿgª¢Y…L197 HÜO­Ñ_Iy¦zŸ©‚KB™Î\ SzöóAF çkµ|$©ôrÅ(Wòù¼yvæv:ÃNÇêvŽŽä|žy‚ÍM£\þxAJ.eë^Q2nŽî'1˜xðàkúúÿí][sÛF–IPI‰’EÙ’ci,y-9¶â‰75©yØÚÚÇ­ý [óæGÌë<îÃîþŠ}ØÇ­ÊÃLÍm+몉Är|™8¶[Rt#%$ûu¢ÑIºB¤ÎgAìÓÝçëÓÝçtë“a]Z»Žèé®ßp¶®ì”ž#}o{ÝFö®â¨ ×’Mýi1³ ­$³=ÖÕr8*=4ô•Íé’?ªÚ+gâˆñ+4¤Št¢¸i–QOdÌ—ŸØ¯YÚ ²®CƼìY,?(’ßç Rx—Z##ébËp›Ãcãcãh•G''·¶¶jããîޞ务¬V«•7âM4 ½\w‰ªý{ÚÆä)gwû4v¥³Yî–‡Á@½áOËþð„ºhH <ÒÇ–^¨\ýh.à ³‹RB£3èðÓE“,Ïz|>Bêc…œ‘gôesL>âvc2™ÌÈððxq|bRŒ1Aç=Ï«×놜2 PäEÌ1€\åUÏp\#išIV•û”%ѧ±+GòW8ÈwéV±ï"©äkS4ZÏ8ôÂóÉ(¢Ã¯@q “A‹4{EEµÕ5l‰HdmíÇÒä$…áAváE\Ò«Ä%Y¡#î2§iᆔͤS…üˆãÔË{{‹w¡Z/çææPÆ ƒÏ?ÿüÚµkSSSçÑk añ¢tžQÖ ¬8*xò¢¡hê2à «Ð·å¶·ü+Ò4ýÙg+Ï‘þ'O¿Q÷£ ÉœÃÛ`¯ú!F.µHx‰h¤ºê?aȈ=qEz1â†72¸ç U¡¸Ù“[û‡õ +5R†!áN¼ ô÷ã+Ãïö+èQOäO!dzW*ºtø éÍwn«&ˆ²J‹dã„r€Â„p…Ü`pQèAÄ )ßw ÅC{»%þvp”ØAVã[Ê%©Z®á\#{C÷—¥i [Ú zøúQÌZ‰(Ùö<«ˆh jŽëw=´©S/zUýTí¢’R¿»%“ŠrÄkå‡xD×Z ¢BB@U‚Ž]ýÙ/Ç`„Œ$…t:56ZÈIOõ‡‚ ðÕÇ\(¦§§A{ç4õ¨ [˜FG´‰![-d. ´•Mv>+"hoVŒgU 5Ñý–0 Ã!Fʆ§—™­=bÓ8ù ŠJ ­\=¸¥,½è)ºFt$¿à6z!ý„ ×é")Œ4\-j°ŒÃQO¨£¸YÕ<]:äÓvÙ6ƒ)±öè€X¡sû(m. ”5ÕŠx¡ÑY¤pKÐâ[(ŽduÓOP.áןÒkG"¾ŸÞ`i±Uzè  Å u–lgœRðІ”D*úvvùìŠÚRaKäG¯û5€òÞȺ£¸‘•*¢J°”᪔/'q™’‘vq|bgg‡Æ{2™Œçy¡^¯÷Z©4$‰û\å,1h‘¨|Ò‡”ZE£[´ &ùŸwDËŒ‘ß{DPM§ÑkC#dy9VBö^^ºÑ#í—ȦÚóÜáPåB¯G×Ð@T×0¤0ã jv¶`mBQ·E=ùÁHºt†_ CPNM¨‹¥Ü$Õf:"ÇÔù€ÅyaèÍDøÎüm°\ÛáOܘq¦ ͧ¨óþÎеc!çÖ§DË1(º¡ŠD1H‡èਨ­Î°¥pž,ÔĈ*!ùÀ_Í)¹…¸ÙM ®:Ž—Î˜ Çœ,eÌ,º †°Àg^¿~=::úöí[ô FÌ9HÐlå,IÄJ¡L¤$#ot6!^õ]¢e Y)õ8¥Îh–uáy¾(CVÚž‘mÅȵ£€²ò\ÿ ô<Ä œ²¦EGpÞÐ5ØFÕ! ß…!Q/:$‚ŒA¦„B£çL(©3gÔï¶c|üŽƒ-D#ÊFdœ[gœÕ„ö¤• =ÒÖTÑGGmu†-µ©T ãô”ý еJ(‚EƒÊÅq@HËbÞFþÊ-«Ö(•¦Ð¬g2æææ&ˆ<òåOúÓüü¼šƒŒóN<:X[[Û¯”ëµ(ãBê‰IKäŠZÕ5Ú„âU–d K¯è=N©3¨‰ð‹vlS{+çŸÃ¡;4’Ds»–Ý Uë¥Á6¡èšP, ÅÑE¸·¸Ø^åp4Q¯`¤ÎœQ¿ë/ŒØž÷Â=ãNÑ.µ-Å>æ}cª½‚CvF---2`Y¡¿–Ü«QÝ)—è6JM×dÐøâTiG–QI¥¤mÚÂ9õá#âÜzÕ„¶*®HE?l)ë‡áÑŒF(Ò,T%LRPzõÝ×#¹|Ͷ`8z¯ûjµ:LtfÇ'®ŽÓé º (×÷ïßC“qÄ=Þ¿ÿÙÏ~–13…xƒ¥è,Ðòxétª^·?{ôéS7å¸Z'#”åpYb§Øž¶ñý T´IhjJËPÓ<ÔIöÓB†£ÒCóI¾5«O}2jˆzÅÙnëóéWôè5µ¡^ØuvÓð'Ài&TÒgà:ßÙ)](2Ê_pÁRruiµ8Ræ^/4üÈ"•Êý‘JJ½ÐðGï:¦»&C­‰¨çÑ )vhYJCFdSëªÇ¹Y|gMW¯H1‹^§î<Ž‹¦B(¢‰’ª3¡*¡Ö­Tç6épPµÖ×7W¾{ùâåëcØ®ë©ÔLÓéôW_}5-ÖŠÚ)ìíîîïW^½¾ ñ' ÑY€u0<2T$<ÑiT™èZK7mbøÇˆè”^qJ¡À5=nºÓv}AoSKj(ÂJ] EׄŠB¡8j<O­õ¡é|g¯(,å–C÷ëru ß; ú…]#‹4ÇS9›‹¹<¨–&¬Gt&À_{Z®mã«Ÿî ¬Á”!Lwjä{Źõª ZVh)^ÑG„-éaxþ‚ cUBA×·]âÚ`ô*öµkbøÃþ011ñå—_Þ¹sçoûÛððÐÆú‡åçr#Ó7®ÇOØdhht€·òýr‘ © CjÝyxõt+ã"[×~IO4Nb#@okõúÞ^ùàÀÉ­®®Âøâ‹/fffþøÇ?ŽU«b7Wк²×§JÇJ¾GSÒ™sI1!4çŠ#½®xzâ#îªj©Z­YÙ÷vvZ¹ü‡w«Sׯ¯b1Z§ƒry{}cåÛ•2ºéL½^OYÖþ‡™ZíÉŸÿœN¥Þ>[ÿhÆÚ«X×íKµþ<ƒÁˆ¸ë,¦½fc}ãN³¹ûv¥^7M³¾½]¬Ù8O^³m;UÈ凲{››ó‹—¸'&ƒÁ8b1‚Øe!ÚK¥¶‡²ûï×Ð9jµÄ:‹•Q±›sJN,µÌ¬]š¼6Zh]¾¥ã FLÄÒÞlÖ,‹ËÖ,ÛI¥ r@jˆå˜Aii4ð®|.S,ŽÉ韤åb0'AÜUÕ†ŠcnÖLe{8T™þ”Aާ Œ¾EL!›íŸ¥# Ɖ7šÁ`\0#0ŒÌ #3ƒÁÀŒÀ`0°ãÀ qPµ’Nƒ…ŒX5•»´©tÚ8jíB3 ¡;g0.!2¦Ø„­P(¤Ò™á¡¬‘! #ü×ÿOÒI0{6é$0®ZMÏ£“è›=ÏËd2 ƒñ†;7'Ö§I§Å~+q~¨ŸøýïŸtÚøÕ¯þ5é$0®ÄÂÇàÁM0‚Øp±<¯Y¯×pOÃq&'¯áãðÐ0(%æõ#¿ûÝï’N‚ÀãÇ“Nã Ás±Rqu_ƒK»¨u½ÓqœÝÝ=±%D­Ž›Sñ¨ÿAGañ×'{ÐzýŸ1»U½ðÑG%-=ã Áu ‚êA!N»®%oöèX¶J¥?¬¯«%Ññh$æƒB»ñ^ñÿnÝJlE}ÆD£^#ìWrà‚êØ Ùu»Ç¦S­JÖÌŒ@UÁÇý¡¸¨µÀm˦Íêpžà^T'FõÕ$ã$@Ë/{Bg[-ÚS©Ëú ^Sl°Öl¶šñFuÄ]UÍßVÜ}ñê-toq¼ 6&Ò¶ÐT+[+SB-Ý­;­Þmôçrt ÆÅCÎ3x5Ûª×ë{å]}GLµ|±ØXEÐA3Î>iˆËÒ"p¿óíƒ.7Ï»S´·T¡]Æ‹c´û…¾mFÅÙ§½=ä{Ä=ímNèÁäö·c0úb§ÜòþöÎ-O À—&ÅŽX™Ì©c=L›sÃ: :˜’Ûéž<ýznö–ÜæPè9íÀín{€v³¢]ºÅmë›Ä¸çμA;—nïœ~;Õ (,þºó\ =rg10·óíÊóõõÕµi3h"Tòó_|vüŽÂ!Ä´\Õ ˜’%rk*\# ¶}oén¹Rò?[yŽ”=[ùnaá6z¸jàñ{sí{Èа ;ÎOGzšn ê:è·150úÔ‡¢½yóè-+´jH{ÛrMÃS=ìÐæ¤~OÆu]˲a”Ë•—/_ã Û'Wt|\ù17¥mûÉ`0â#/÷¡^ZºKt`ÊsÚµ¼yºiõ¸+¯ª!CÚrGêü«²õ›ñ·°0o[b«ßŠÜs¹X#Ë'Ö7 É&Iç*ƒÑ— ½?É"ø—.¾xùFz±XÄ0E½q*ÍŠÅ´ ç½ÅEM$:@éÀuÓ4iÿ\œäå–Û¸¸rW2ôsðˆØØ›ã(¶–[àŠq„<Ïê3džÜfVB¥2FÔF Ãá"!+7ö††ßY˜×g×76È@øþÍ[y›¹üà>N>ÿÅgø ¦z >}Hb[g¹}pÞß*÷ôfBh41Îm Æ`@.†ÜÞô gñã2ŽhüË•ýOܧiE°ÔÌ´˜}D7V€!‡: Ù€E€‹–¿ÃwNÒÇQ쇽$- z¡ÚûÄЉ@Gœ0ƒóp牫ô«° ç9ÙÂûŽFfQBìÔ€Æ?×þJÝVôu^m•‹£‘;ôZƒq$<Ï“½sײ,9Bßèz›m×jõºë¹ÍæI†Ñ>wݵ |ôè!5õúW]7w8sJ;E_€;Œ~‚ëyµZmwwÇ­Ÿ6½¦çöètƒööÊÕ+“Éœ œïT;qµüIçØE£Q¯%Æ‚ÓhT«¶m­­ý¸¿¿/ú»"¹"DÒë© ‰vZE@ÆÄiÁ¸ª–ÿ bHŒ½4ø?míÔë tÉEÔB°| /_(Œ òúÿþo¿}öôˤS!p}šçMÇiÔìêôõRndhb¢Ý -ÄîÍ…ÑÑB vÓsâwú‰~ó›ß$„›ëkI'q…J¥GFFp2<2âºî‘÷ÃL€u:ȤSžÛLF¸$Öax„÷Åe\42i#3œ5†cõÓÅ:Kž:ð<ï\ÖPb舟ŠFRh¯àÜôÓF¸Tpõ¤“À`œ=x—7ƒ€Á``F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á``F`0˜ FÞ ¶' ˶Çu'éäœ=Ì,`æs¹¬„¸”H§3òÿ©¤xÆp]·Õj: 'NãÄ4Í+*r$˜zt`×êUÏkº®744”tŠÎN40\ÃAö\oll”tÀÿq‹ñËf³éy^­V÷<¢eÍ ©Ç9Ì=ët°òüe³Õ‚ÚäóùÁ¨.ÍV³^«ïî e}ú0cf ¾"ÝÈåG©ÁD•J:±g´–U«æ5w«ïg¦§šž 6¼š"Gƒ¡'ÐY€u:XX¸ƒºr}j œ›t¢Î°wvvwß¿ÿ°úî]£Ñ¨V«ãôYÐøÏi4äƒÓWª×ë•Jysó'È{p/Ž®¬ÈÑ`Fè WŒÀàòD÷²Õ‚]9 6‚‡jßX__?¨V¡v­¦FIR>pŽ>Å`0  ¦mAÖ:¤žt&P°WVäh0#Dahhæ4¬ÐÁì­ÐùN:EgÛ®á811aÛ6t :4ßÔ’j΀n8zÒ‰=3Ôjv½^\Aó‡tã Šf„# «‹‡£‹ˆêâWûX%Y8ÒŠÁ‘F@Û3#Œs3BbP³›ô1ŸË²®S½×F_é€>k+S~x‚óäïtñ/ë¸xa"¹qr]B0#$ª^åʾ++ê–#ëºAáQùq=ŸÏ%ÞÊ…ôƒêÓ=¥Ú¾yóÃÂÂ|Ö5ifäâEC2*å}1wë¸ãÅ1:}Å×G‚!Úloï J½xõJ¨½ëÜ[\\¯TÆ‹Åïßüpga¾\©ÌÌL¿yóviñ®².9Brá D-,Ì;Ú¾  ò‰Ð[úJYLêúHzhákË6âG¢ƒoWž»Ò`)ŽÍÍÎâ ±!CF‰ (¾g^ºS6YÓƒ!P+Š:åG­"…Ç9”§R©@£„’äó/_¾ZZZDEé!$—!+w.Ÿ#ÅÀuè3Î+Î>ޤüÔÌâ:nÚ.¯ÕʶýDÉ€ÚÞÙ1M™#;ÉTZ$LB¥R,…á–Ë¡€`³d³$@O3ÄÌiG|¡>Ò#]…MÖô`FH(xÔ´¢DS¥É­íXùß/q„:¡ýùþÍÛúÇÀmT9úr‘£4qZW¡Ò3ÓÓ¸¸¾¾I_AX\1¶ÅÖ76¨Á,•&mÛFVÎ@ IU”Î¥qK(-õbPjH'Jêó_|öýÊ÷–îâ[ˆ@i†¹>ÄGä†-î¼+«kkS¥’eY ~¢ ˆ¯ »üà>~ oN„8Ò)PkCçP”=ŽôM¾Bgaf攚ÐGcW!¹Àn7g¦ÇI™]ç¨îöÙÊsÜFÝ"¢\Jàˆó’|o€†H­0qqmíGC³«ÊvR }†Œ²‹äÀXqƒV×~Dj!/Ž/^¾Fi‚ø¶···Äߎ; |+¤C¯*—ÃÛÚ¥°«$lBôÇ6ã|…4g¡Ò¿‚2àJYöŒlŸ;\×Å·[BOÄ„hNŽ)à[|ÜÞ~£ü³Ô ‚älÎÍÞBúçæfaÓ-,ÌCº¿ôsh;è[zµ¹$õ¡Å/-Þ}ùêõÂÂm!ŽmË~â[z,©Š Ńd^u{:×(f„ ¥mI%Ùc¢tÉ6Úv´{¨ý†YØzº#«z¶$-£¢ß-"]ò_%cã6ʇˆº‹M‚ÒXI¹Œ$‰™iŠ>iðadÙ™Y 1‘úDÈ•=aPavö ;>^4d'E‡?çÚy<§YXî5$T¦˜\Xß@¡àü“åû0>ï,Ì㜣É۔~ù’KX×’TÛ.tCŽÌ£ÿ "ÀX8BÄEJ¥‰gqôÏó7eÏèÎÂmIv%,Ì aY]ý¹×¦ÔŽós²˜ØFHY©(S(¿>û(ºÖÓÓ(é¹ÙYœ/--¢ÿÜG³!¹ ^ M= „õ C6}¥R‰ÆM Gè4êÞÒ]5²ˆG–äG| CúѧÉZV3IHgïH‘àœï¤Tá+N„ÎÆŠÏF œ’?NDWp3i5¾Aà"TÂ~òà>½uàâÅdFH¤Þ¨%hú>‘mµ®hypýÑ£‡8Ò9èÀè“.CW¹hNž¦å¦äujý /8‚ZEü[–Zi¼]=¢&äˆ8è‘D¤£‘PWÍC ©y‰¯ü„éJWffnéãHÔ€——‹4iHfĹÒÄÜÜ-éâ%ˆµóüœò!òˆjÛ¦âöbîèr™íÑ/Ùy–Ó Êà'aa!KŸvå¦) ‡PPæ}H07ðÓä)©«:SY 4L(]3L9 I¿rF3úÁÐñœÄdFH 4xÖé«#÷DËÕëæ~3Ž\§)Ð8^@v1#fK,©Öô\Ûñ‚I'ç ©×…P´^ã¬ÀŒ˜võZ}gwו+#Ô뵤Stìí•«Õ*ŒÒV3¼Œ\)À­ Êpƒ môÜV^A‘#ÀŒ§áìÊÈÖ××'&&£ºÀ:lnþFÎÂÒ¾+&T­Z¥R¶-{0ÐæÁ˃†hka]A‘£ÁŒÐf6Ûj5S©Ôê»wÕªmÛº MÿM")ær#ùüHndD øA^±toÓ_àݤ¤{f@S ÝH§Sé´œþÈd®¬ÈÑ`Fè dâðððÐP¶Ñh8ªN¿¬8t$ÐY€u:¸61Q(Ô<l"´'ïVß‹µ:«ÕÁ`@_dŸ Ý¢X3¾z\A‘£ÁŒÐù\Îs½GŸ>D]A,´a¿X ƒÉkÊõ8«ÏLOä'‰a@,gbùÑѨþÊŠ f„ž€¥566š13ã¿§]”53MÏ,Žb.ÝÛ_0Åæ èFFë5\5‘¸?é_^k^}0`JÄÙçc`pEŽÆ@Y ã”`F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á``F`0˜ Ffƒ€Á`0]DZ[–m[r§ºFÒéa0 }1^óÃÆ†iUÄzø ƒÁˆ†ZŒ×u\óÝ»Õr¥*w©q›Í\1‚Á`Dƒã-—+°Ìÿ{üWÏkJ:hÆ_°•Á` ÄúôŽ+»µÿówˆ7M—ÅIEND®B`‚analog-ce-6.0.17/how-to/startwin/run.003.png000066400000000000000000000122671406366436600203640ustar00rootroot00000000000000‰PNG  IHDRL2‡Æ¸tIMEÒ/–Õ2 pHYs  ÒÝ~ügAMA± üaFIDATxÚíÝͳäÖY`‰šªŒý€ƒqâxA•Så¬pvÌlYSYì<`“`b¨ñqì`ï²¢XQY°J±›ñ.aåT9;ãâŠ?À3^‰ž«{5êÖ‘tÔêVw¿÷yêÖ¸¯Z稯õÞŸ¤«S¾÷îÏ çÆK7¯¬þóìsϺ%°K·oß^ý{¥þæ—¿øù¡Û;ö‡nìË•ö7¿÷‡ÿ²ÝZªjàÍr}Öþ·6W:ðîÀ:½›hÔìuNlçú‚ÕÆw¹ÎñvftÿÑÊü˜rÖYõ-µÏitg?öÛußOþÎÖ9ÞÎŒîûÉŸ¶Îá=sÞ{÷w›×WºoÿôÇߘ´º?ø“;t áJrêµk×2—õÕWÝ–VUßÌŸùúõëwïÞ4ÿ½{¼ÅVê¥ÚÒE®.]¯¾z«þöÞ½w®]ûýö¿³ÝÞëNàheÞ±ø“ÿíæŸ³Tc¨È­þ[[çºö¿³å&¹ÏÞëñgnLÚ}»uÿÃ7ûòKlÀ>ù‡«¿ýW»\á§ß[ý{õ‰ïºgÀ¥óÕ¯}½ï­}üÝö•÷ªúÂzY¶§´¿ÝðÙûo·¿}ü™VþÙ½õpž¯üéÙëî¾þìƒ=ZÕÓV»zq¾øo>þô‹«Nüò‹ç?|sõú³ߨØV_y»ÿÑ?­Íö¥oeîµû¿þpþ§¾=sï?øÕ÷›×WŸüËÄÄÖ6€ÓUWÇv!ìNéê-rM=«_ —·â¢Âõ¶UŒ›溅íáV>øQûÛó‰gµíÑ‚g%­.uMy[½xæ¾ôçÍlu…kMYú~¡º˜Õµmõzõµz}>ñ¬¶­\áV_;s‡’,K ¯Yj5Ïê«^<§ÂÃI®V×¶æßÑj×vQùvy¢ò¬Î½¸9q½ÎmíþG?,."ÝýÏ^?U¿~½™§ pçyîwþâáëÿþÇG3t¦œM|ùþ¯~P¿¾úäËE+ºµ]LßÃ>¹óh©/Þ|ðë;këùâ_?øõß7¯Ï9;KÙ»ÂO_k^á·^Yýûùÿ¼vöúoÎ^wãõùœ¿ù·ów;@ަÎ5ߎ.2þÇàõIËjðOárÔaîÑ·_yXùê““öyËÄZç*[«nÀÃ0·~~²8Ësõ×À‚ÕîÛõ×£^|[׳UmK¼—W_gðØ“/?vVÞ\T»â"Ú·ŠnEëteæZïÞ9›xsUÞV_ÍôU=«Kڪµ_7ÿ^}â;ÉKqu…û¯¬¾Š‹ò–ÔT»ó‚÷¿—ñáìFSØ2/àõ¹:´5¹­IoõôÌÖ<þÌ £1®©s/½ÂιʢuMn’ö©Ëb#Ã}ôÃvŒ;Ÿáã×Ûy®kUÛ6Ò[ŽUmkÎX67*Üb>ÿôµÏyî»íw>çÅD€%51nôôfmèteßiÉwÞyg·nßr2>óŵºµ‰ï7y3gñ¶¦Î '¹U©«k^qVêúî7©cÜ|íËr «cÜCc¿Æ<*xÕ±?û£}®}}nÀ6Ï®ÌÿSñÏÞ{íå37ê›*Ï¿M–ì;W¹6ÏӉ薓çVUm¸ž­{,Û1nãDåN4'*7&=nãŒånÚðé÷.Ô5×亗âu½iíi+Eçtåè¶Æo<Éôø3/œ•´·ÛS欰‰kÉ;*çËÿû&Æw¬þmÎ^Ö—â6ÎU椺ú^ʦε¯Éµ‹YOÁ»ùà“;ͽ'íËr½›;»¥¯¤]}â•©s•]«‚·q®Ò½'À$ÛUÁnh˹,W®fzö¹çë?)¯ÐüÓãÞ½{ùþþ¿þߤ4¯Â\}×É¡S»*oäÚK_œ{ê[Éw'¶³ØùcjÏþ–àfwãí,<¦v€4Oî¾4gµsRSOä'ÿ|§UßÌɪ¦Ü½{wÒüÍc½¶Xª~@s=%‘ä ÏÙ~«lX² 9E¢kjßúêDþA¹\_pàuþÄLåàF“Íëv?Ù‘dÇ3×9º£†ÍÜKA•±¡üvû1XäFdEÿ1¢êÌŸHΙ¬"åôCy±¾x‘ª^£îQr·œîÁ.§ÜtsôÇftÇæt?J¸|zþ¼œ}”ÉÿMvÃYÝ*»_3b}¿éO]Ãñ¨.¾Ú’ñ®~l2›´X÷GVöì¥%Û tú‰'eëè°˜åKȤn°ÂµÏo$æækWÝœÙÎr¿ŠåÈÿ8º»hÉvÂ¥1i¤žÁ"·Ø¡v™ -°•ÃY·TŒ:¶ ·ÝN8”™õµ<­š¿’SÿáˆÕ.¿Îõ¹üß^«ž5s¶¯ÁT©bœ>ºÚÌo!¹•²¿ýEç$^fwŠì åOÜ¢§}ÇðNÞîSÛ¢374iëÝŽ7ß¶§'W8ó³Öµk[fK¹rÊ·Eê\VßÿÒçsFçXsæ™´-:8zÊ.9¥û:§…[)fOœdëx`Ó9q~êþ±É™y`âpÇ7&–Ó·l¥[Õr꜡v.·äß{±W®ÏÁV&=ý¤¡È]bjÛAØí° ±»+3/áÌûÉtð}5éÊ+À™Œ?ߘÒøín,¾?sÖŸ§@æã’ó÷Æ2ÏúŠ÷8·¾¼Àâú‹Ü¤ÃJΓGžÒ¬¤=çÆ17Ù˜ág²ŒVèdò–ÿx§™Ï|~8Èè†æ<ëkÒþ<Âǹm÷S—ì‘ ‡Ð÷äåLÙ×äfÞ=úô¯bð]æÍYÛø6¹H1¸xfg·»÷ýø•aç6ç§.Ù£ãÿì –äè9“ë'ùG“©©hë 寰ʛX¤"Bߣ³ŠE²óŸÍ‘ÿqaÍH6þØ —IwÔ;OîPÚ''ü¸“<ÕÖ—Qб|Ó'€¾+ëö0ž\ÒÌêrÅi·vØß…wÝbÛšsÖ¿î(ϰ ¥Æ“Û8$Mý?<¹xò>…¢gâœcÖ¤ãi_«6lÜ1pÛKæíº3—ó&ô}‹ýYæÍ9Ü÷©íÌ™yÒO]Ò¤ 82ýE.YQfžLË|àSßÄ*o¶¾·F°™kÞ¢åÃíÙnC“°EwFwH~æÌ9³SùËîcÓÀ¡ &¹œ›§—9o³“ߦýJpÉŒ®ÜÕÙ­I愞…›Jl~fàÄzÐTØE€°9ÂRäK‘ ,E€°9ÂRäK‘ ,E€°9š7hênëªÆž]fÌv䒃ΌŽ1”¿òý¶]“–ã'X×7j¦þ"—3ZØ% uŽ*ãÙÓƒÒM²§cN“vEß蛳oô%?~×—nÎ\CO‘«Gt=* ;×(S§ªRãµ'&7”LNÅz]|cÓÃ{¦J­dæ ©“°íKs†rÍÜŸ}¦Ž×ý¹Úë¨âÀ¸{÷î/ñógŸ{>óßîR×ä&ývÜq»žÒ=Õ«m¾ºG7´ñbc UjbrëUjb1¸xÑ¿xÎkÖVv^çH6¾H5¾oô2o/õ͙٤üOs¾}e;ˆbR…[ýÛ]ÃÄkr}£$WCm±ÔxªÃ7o·õäâUÞl{RõLLžÿÌ =™Ã¯ïµG“ÊüpÇp&U¸ì$G×’%©‚›5Z–ò¿X73ób»U݉ÕÅ ¨ùI.Uä=U&¨:³°$\ÙúuÀúÒjû¬/ÔÞ’\r‚†¾ò–\g¹íVÚ›«ò®ŠuçÌßúÆœ —ä®Ëìø¤Æo7çû3¿ñÅìŸàdíóš\™=±yk4½M]gŽÑ›ò3·>zWáèôü{g¶˜˜ßÍæÝj°meÆë-yÓìÌ­d¾ œ¸#»&wŠgÉ&EŠÓr#ðþ·øÝ•£>´Íß\ìcñò½‹½?eY’€ÝÙÏÝ•p$9Â’äK’ ,I€°$9Â’äK’ ,I€°$9Â:t’;¹Ç1oݵ9£½ìi/]æh.sßá2Ùg’ËO®ï9÷[E·°ª¿©eçÛ­=¼§Ñö1&mþ7<Û¾?wãñÂå°·Qú†J©^9Ç—²³ªjýp?<[ÕYUæâíÙÊŒwßXnxæn˧.ž¿—2×9©U™Å£ûù&·50æÎö82ûIr“›Sº£ª6SÚëiO^¼è_|jG6V8©;eçHº±’¾½”\<³›ùMêÛŸûP¥:~IúìÚâãÉõ =ðë|rÔéíŽ8ÉÅ«¼ÙúLÊm‹oLLŽp=zºísòÃz·§}O®öû™#¾»r™_Ÿçÿž¾«ÅËõ)™—µ2·¾XÉÌLíVu'V/N«ïÀñÙÏÝ•ǸSO~Ýnˆ¼§¨û¹÷…¶¦•ë˪RÀt{KrMÙ÷’í •©‰ù‹‹—ä^êvg~ã·›s‹ý™ßø"o}åíûŸ}^“+³'6oUßâs–žyôšÙèôI·VNí~Δ¾½4ºxßë-¼ù3‡lÑÍÑÙŽ­ïÀñ9²kr;<7)Rœ–ƒœ´ ¼?õâZüîÊQ»:ŽÄ>-ß»ØûSß!¨#Kr°;‡~v%ì$@X’aIr„%É–$@X’aIr„%É–$@X‡NrëÞ>mëáZö´—Œ D·Ï$—3ž\ßõ—‹n¾ª¿©eçÛ9£‡ïc?ìcÒünx¶#ÿܱ·QúÆ%©^9ÇÖ²³ªjýp?9ÄóvGÛäâUÞl}&å¶Å7&&­=Ýöιùa½ÛÓ¾ŽO]-À™#¾»r™è0?£ìjñr}Jæe­Ì­/Å2ób»U݉ÕÅ €yöswåÀ1®êjm‘÷u?÷¾ÐÖTâr}ÙeN–±ÌOr=§+Ë)·*Ì‘¼É"¿t¯f-)¹—òÏ–Ù÷hl7çûsæM7Éy:ïÞ»w¯;ãµk×òš\"S“\·Îõ_“+³'6oUßâs–žyôH::}Ò­•S»Ÿ3¥o/.Þ÷z‹$oþÌß![t3g6€AGvMn‡§ãªÖi®`rÒ2ðþâZüîÊQ»:†Æ>/ß»cÚŸÎL™Ž,ÉÀîúÙ•°7’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aIr„%É–$@X’aÕu+óß/Ýì®áÊ¡»½’'!»nß¾œ®ÈpÔ’ç!39] @XŠa)r„åš'à«_ûzwâ{ïþlx)I€Эg£®Pä8íª–Sá E€R×¶Ì W(rœ–ü W(r¦È–"@XþN€ãÕ÷äåLŠG*9zÎ$›Eî­7îºS°kEîÖ­[‡nìÌZ‘›3fwWÖÃ$7óÞ8Nåµk×ÝØ‹ÿ#˜±sÚ FXIEND®B`‚analog-ce-6.0.17/how-to/startwin/run.004.png000066400000000000000000002342001406366436600203560ustar00rootroot00000000000000‰PNG  IHDR«9 ×äîtIMEÒ 5}~À³ pHYs ð ðB¬4˜gAMA± üa8IDATxÚì][WG¶®V_¤–WaCì8NI&ÉZ“¼ä?Ÿçó6ó0³æŒ³â0ǃmÀ  {K}=_ÕV7â®–ÄͩϬv«UU{ïR«¿½w]¤¼þÏ UU%¡(JLBBBBBBâO ôo¦³Š€ïû7­„„„„„„Äu@£èßjZŽç×jüèº}ù–ôrÓ Ä@¼ÏdøŸà]ê«kA¿òÙ~¹îòrÝÊ]î«+Á0:ä–}³S§ŸÑ(úñWjíâ^­Zo[-÷æz 7®…«†&äì†näû܃л圫ím{\†ú\ëgàNˆ£mWÙëïüø‡ðA\¯™ÁMíÏÒ+¿É•!Ëé©¡[ÓóCí^-ßçÑ?èÿïÿZ/î7Ê–ªúøKꎪzšê»^ÂóÔ¶£{ü$_¥Xf Ë ˆõ]è—”ìKÛ8íC¹ùzïØÄ´´÷¦z-œû"¦æÃéÕž…žß±=}£ zcÇ‘¿x÷ϰ¸~ûä²®zidxâ.Óf8Ûóý6ÀÖ¿¥½ûÊÃ{*öªí9cÛûs`ØÔyª®Fÿ9žèôÿ~«R:¬™I%?êŽfµl&P5Õ œ–¥TëµrU³ÚÁi' ‡„ç+×çC\¶ãv¬äù43”hc¸6žÕ`púÂUxƒí{>öÜi—دj\ðŠ]Áw„ ú5‰)7~`©‘^y±÷‡©ry‘ɸï¼àÀß‘ ž ¾ú6è¹äDª ð˜eƒ=ÞÏ®~âÚ0ܾó ìx®ë[-Ñ?èÿ \Ÿ™r’†ùdn,—2SÕR+­åµL½Ñpf;ªx]‰×SÏ ëü-Cר–#ŽëǘAûúD±s¾íC`™+`Α-g5®ÚöqÃû5S( ^¨ÀI3{u*¯¾c‡"4è.v+ïŸXBƒ^šº;fý¸)·ÚÌ žýH¼i3åÓà6›ySOíDI-áçFÜûÓæÏñ¿þqz"™Ji­V»tèÍL¿~µ:¾hÁ!¸^­îVÜzSSÕ0ŒL:I4i;.È©Ñlƒ¥iiü( ÄdóŒÂrêu€(†Ð éÃ}—€¿% ÔÇm4íÃJóbm©~Ô:†®ÛX΄8GwV¬XmRogÒFdšÍ»Ý¶»?þ.¿%àµDo±#7N=éÆIHHHHÜYœô ÃI¥ôožVAÿ_?µ''F L UªÍÂäóû…W‡Ön;žïíï·¶wÛ¿¿6>ˆ%âd‚ŸêͶ.â~³NráÑäæö!‘ Êäsé±Ñ´(Ï=”o4“àTœÜ,»ttËA7/ëM»Á á|‰ë…É–^"ú¼ )Ôʦ“ó&6·ËÆü¨4=5²øü>Î{Qà´ip ÆòÓ¸SnÚ‚Ô…ÓcàÝl&Éß ñ ¢€E"p1+j‘PéHHHH|8æÐì¿Lº‘ñÆFªf*©©mÆ–vKU„ûLpa†%‰ðÀ‚ˆžñ.±þ³3 "\Ü–ùù‡…åw;¸^ìBÉâþ(ïí8éΰ‚¦†ùƒ“Áh¹Ò¬‡dŒÖºËtÒòZgÜ!ªBô)26çlë㸱}ˆbàû<׊;.³÷ó H´³[êiÙ0Uà8f÷‘.¤ïîÕ:†7 ;̨S¦Á0:S¸nÆ‘PoÀ%²…K¡tJŠ¡UaŠÿ¡ün©Î0T¡€Âà|ïR#Ù þMÁ¢r“Æ (×a,o®}؇EðoÈ|r2fïåpDaþéäMx|, aã¼0•ýñ»ÙzÆtò<$$$$$î:ŽyIÝñ“ÊÙ²™L9öjµš²¸ì2_L%žÇšs¼D ˜í–ç{,¡ˆÌùhJdΓÄU`—¬8Ÿ4É8]Õ¨}Ê€øy<:9åˆã‰Àp²ü®ˆÖÖ¹»` øŽ<ð(µNíÔm´3™$bôÂÔ(¯¸ºƒ·––·PìÙ3‚íÒ`,òHÐ!2…°h …)v_zý UÀˆF'žÎçLø”‡”DkICœ£ä‹Ñ>ªÃKXyW$Ÿ}Q–-X ¢å—”Žá‘‡ñóA¥äîl~â4 ßGÐ9;ðÐ\¸‹Ïï„8/W¬<Ð9[S&àÙ“é(¥Yäî ^§¤½hÊþç¿ßŸ/0ÄðDVøaèêRü­}<(4íù¹ ²ôC¦§¸¥¿þ² s_Ä\YÝ…ÛqÓ7­„„„„Äpj€®iº91ñx|\ÃÃ_aÃ<á4˜«¹~µÖh×ÖÖ·Úž_.{­VKO)”Äæs¥ ºÝÚ.‹QsæØùœ\Ÿ4ÕXÞ ùÞÓ—ÆþÁO"ÒÕÜËËòë“#`SÈr’]ýú×§ÅRµ09ÊG©‰mP#…È<+Þ´Á[kxš!+² ¨‚êà0ð+ø˜2ç"ëàâ­Å¯î“k‚ó¾}ôÏë£~ ÿ¬È¨S”L2ã<„\-Eêü]G­á"j•E;$ˆñ|{yáÑÄR£ A\4°p¤°~ö^¨[8¹\„•Õ¢ðB,Q˃ǀÆñ2+zÕ…Quø@ôòW¼Ü«OOea#ýSºÇâ^:ÕÉdîZÝÏA±LÆ «¹`smQýáý<<˜åÕ]r/@ÿxÞÚ§6£Ñ ‰»‹“€ëóµþAJ¨Š®¦5Õg^‚ÑÓ>Å”ªªêm§äÕ*VÓnU*|E€™“RUÅcºàø*óòžÓЫš;šÞ|ýæà±x-ík­§R—øAê8ÏŠ,}¸Ø/š ×™"Gµî¸`Ùõ¥µ{ j&õ4ãOdàµh*@/ ˆœ‚rJøïŠy…cœàUâ-ïç:49SvÁ C|£K–X¿çÒ}V¼K#ýPôI£ <Ïñé° üaK~eu—Ö‚;‰báOpÝöj¶í‰õP.å¨P2Û4 "1€@ßî²¢{ö@,½³Ü"x4¾§¤ -Óã­•Õ=¼EŽí-<ž ÍQçK¯w ™¸û8æx^¢ÞT\ÏÙÞmïì–³I/M%Z6÷¼lp¸Aƒu]O¸ŽÕn;†Æ’h•ÖÇS¬Ÿsõu‘œÇE1;Ó ø’ü&OÐ[UäjDö‚J„Ô4ESÑÌ>”‰Fh¡.< šÉöEõb©ñS´|ïBM<¤=9ÝçÔPª|íÃ>÷ H4 q”N ÁŽÎüÁ²%l·"£ ?Bö|ÎŒV@I4EYò~X×ònÔtƒkb–¹wB\Ë'ñuæùw–ók™¦!°ÆÄtl G¢a ÇîüÄCg®ßý=9 "yöÅ ß0Àviå^Y,ÃˈÁ{1ÍM©‹¹LÌÑ#‚…ëY8!`áѤ˜±ÏÇæ—^oí ïATl‡†!ÈT‡¦ÄŸ³±b¤d>×µgޏÒÕÏÀwGÀ‘½ÑÅhADg…¡È¥OOqªÛ"‰x¶Çì…î£@¿‹Y»Æ>”lšJºaÉc t¯äªæMèCdõMÄîûÇ»µûpY(ÕßÙóçøš~ýøm(&1Ø4õO;³ÄTJ««®Ü´¡rWà[n¦Üx@‰Wj¦| ÅÌ“³ºÄ@@b{/Ñlè#F-¥µ‰€ù>¯%&¾ïÁ hiÕZ¦\7l/íØšo9n©Ú½+0ãŒËéSŒ—S ª=ƒhwKUÐŒd;á©- ¢tw¸i+Úl²0¥O‹ñ@¥b€¯¶G¨Ö=“‹íö“IÛ¨xâ÷lûôwº#ªK‰„àø•:'ò&•\ #ܰ(Ú</…¡Pê>Úçê‘Û(wÆJÊ5ò¨Á3S놦•u5ò¢¾ PË];ñ%|Ž;/vï¡Í|~{¹A„M½G>Љ͈XèÇ„„ßfýî-"¨ÿh$$$$$î:Θ×-œÍ¶õ%§*)pþé2®Ç<—µ™$“J`ÚnÂñâÅÂ:CËË[œ]l·»|¸sþ±àÒ9µñ­X´æýíŸoÇr™0ÔnÓf>ÝsÓNUŒáõó6_áõñ¨÷rs™ ÑoœŒ¡ÏD|ç”Hýïÿxm"ÄGôù/êá‹>£ó%ÊyŸ:€¦%Ì”6ž7 ”‹ë~8,ðÎô:PLQ™¢ó–¸Pge*aÐlØ£bt&Eþ:p Ê_–¿܇ò×{oí–ü:°š`é”–Ëj…ñd¸üÿJ!;8“¶{1¸í;¼$êç2dÅ ‹Ô{ùÂ÷®ÛÕƒÐOê}[½¸Aü-_ S¨ ËñA q±mÃмŸŽí’/kdo~8Õ·çÈ«ùàÎÕìyÚÈ« ãa©}ªpŸ;„Û5Þ<€þU½¸nÐs^*^aÝOÖs«_*.ÈÒ>l<_éÓžQì\÷±73Ž—êgÒPó#ÆOÿU¨ÖÇ›-GUcîü:ÌÅUUaõcX–Y§›êÞÒgˆB‡ðAôè ñÒ9ÃE?©²ë–8 ® —øŽWs¿]A' ’¸ºB Ñ5Xè …B3¥¦ô@ËiÙ´¢ëzôãPHô†«¿wïØçrÛž¤W†kŽo­}ÃÄpÿí)wÍ7ÏMõHÁ1^‡ÜêϾ?˜)}b,=>1©(Š™Jù¾œü%!!!!!ñÙ¢ãø>ùñú÷=p?|0Ùó<>¼‰Db 9· GèT5¡ë:¢Ð6›i·Ûð€ 𦨚üMX ‰ÏǦЃìyòÿy~€>+í¤Í$ÿ­ÀT²_·gäöü×jYðÇÁñ¦õ”&ÎXF¯$üb‘¤ëzº¦*Jì9ðè¨ë:ã{ÍêW¡ýõH‘×ù1É[BBBB¢Gœ½‘ß0¿ þ¿`¿?G iYŽãºŽ£‰nÚ4q…v³Ç¹ØÃ¿ÏñéöÑšh“C¼éF²r£#\bšÿº],‰Ý´AÇf3Ô?~kƒÛÕw›8^©æý©MþéŽÛ÷Íp‚Ú£‹'˜~(²$$$$þ d+=âƒj¥Æþ7äû&c®2¶±¹ùå—OuWK§ÓÃjþ…£¹ôd'*zóæíÃÙYˆjÅ}ôwÓ¹úTz%,r±]ƒ4‹Eß÷Ó½‰pñáB\ 8ü×.ñZècZ_??ÿ¸ï›áµ“&§™~(²$$$$þ Ô ûϫ׮x@OLŒã¡üìéÓß_þ1?ÿxÿ Z­âù•æžn¬ƒ–‰ïwvv-ËÚØÜƒ~åÍÛï¿ûÞÀ7ß<‡Ä™™éÞuÓ…þ ó76¶¾ÿ~ѩֈrÁ5gwZ¬´óÅve&Â8ØŠQG° z„ü¿ÿþ þPÔh™W ËsW#T O„XxåÍ*z©R­åFGÐWÔ­öiäèÀcäf8AíÔxùpöÁiY•j½AeDš_‘øü0x€‡ËÄšx)2ÏfE¼$’Àsßu9ƒ¢žÂ”«g=3ewû »\ÿ¸œ†8åìïïãX­Ö*•*ÇKHÄKSŠõ¸GT vmtbMÇÅ9ģиŽU§f¦Í¨Vô»½< “v>Ýo8!£H4Éâýe&Âw#}"(úGEý iZ f©<êâ Ž¤ƒ3ñ †^Ü™™†œ˜‚ï©ÁÓ"èÊþÁ4A¡›¡Ѩ‚î*íp—Gã÷­ëº;;ER`’Ÿ…~nÓÑðP¬OBBBâ³Ç €KÃÍ»³Î8´þæíê—OŸTE(†G3tŠS¿ùú9ª€ z|w·ÏÕÕø½Éx8¸±¹¹³³‹‹ ˆ@<ýýwß‚Pì2337Ï)IJЈ_PÈ‚Ýg_>¡€’ôŸ)ðniq¶Å£Rš›Âùˆ5ÞqºßHÆûj•»#®ƒè­5›Mã€w“¹£àºP€ôÏAµµ÷Äùzà÷—K³³¨¨Yè¹¶þžÊ/Ì?f‚766M‘Ãç|œŽ:‘24(Ý¢.bÜ1c;Å"]¡DÊðntþDS²w9¡$Ò¸þ¯^“,ôwŒàV«ëëèƒÍá¨+= ÂpvúÃS•‡ûblÏhºH‰_ß¼y+(ŸsÃÆæ s³qÛç#ÐbÒ3 К]˜Ÿëæ$œ?|øÜyéàt7ˆ,A´ðTp²Â'<ˆš7oV#ýA¥ dð (¿Äÿp¤˜[dú±‹ú @gœÜ›)@$ Yä‚БÓùÚ{hqD™—^E'ã%Þ¥ø˜ú† s·þd ¿ÂÇ&bé …á”€GQþ -ÓÇA*Œ¡ŽÑò?èÆ+÷'š…SÖÖ?DhÓâÐÑ ¶)n0ô›Hä833Ð?éà:G3$$$$þŸ½+mŽãH®}s_À ! xè[ÞX‡Ãá_ä‡寯Úú´²,Q¹„€˜û¾º§¿ÌŒƒ8Ä%-Õ“bÐÓÓ]•Y]¬—™•U-!ñЀ""ÃàžŽ‰6[bþu–¥ßëÙÏÁgÅ×Å@úúåãÏ>ÏÓ‹(=0ºã;˜@„»Íî ùñ ^¿æOù³ÛÊü:“v‚Ìž?;<:~½¿ÿDxí®r½D»)€R g1‡-ì8µoßžàn=>G]Çeâ“b«ëŸ¾þ‡‹JDˆóv`ÿ_˜3ùq¾ËL úDÕÂ¥¾+/2Ì–\Š„Z`ñìÏìÌå5ôÜ`1Ü»êÅ€ÙDöÓB÷‹3"Ê2RôFC$$$$.ñ+XÊ,ÍÜZå'\p[‰ÙkΈÆe:˜Âü‡ªq.k2s+<Ñp§_‘Âö埃œ(Y!@¥”wxUþJ¥WÚ-rr@ÿ«/?Çø„Ëûüù¡°!îÝn]øæÌ^ ó.ÈdÒ¨_eîïï±²”h97>\.„ÓÜ2B ÌÛA1 Ê‹˜Ë_E9bÃý'Ý…ewz(¦Xùi˜œtár=3‘ü,zW…䉃"'ŠÒs¼GÕK-&º™˜ j¶ZsÙ¶ DEãÒJ@ãcHÈyWe%$$$~«Ðÿó?þ£ãx4RTîu*•RUÕ2Í }ß›L<ÓÐ5M³¬Õlêyž¦ëÃápcsƒÙDBœ³ŽØóüÝÝGàÞ´ÇŒÂè‹—/lÇN§Rº¾Ö«†PZ0 -ZUØnwñu0¦ÉJµÚëö!sEv¶QøÎÎ6(s0 Þ|>¹ïd UQ£(*‹Ð%JBlÌ¢üŸ¿|Ÿ¨•˜˜ÉöH¸8Æ-©t꯯×R»EQ8 hŸZ½ùQ&І^¶m£!D‚¨<‡k ;.ÀW¸óh×àíÝçí€|íõ{BþÃÈŒ¼^¯xøÔ±í»~C- o™†°Òæ"°…±¹±´($´C—x÷îBÓµ{T½Ôb:ž®®CÙ¥„Úјè-(¹Î-IA#6ÇÚ3}GM%$$$~ÃP_}븉f£ ÄP.—5M•'àZ"]×!ÿ.•\â>K¹âظ`2qF¤}‰E_‹«×hE«×]ÎÓºK;¡1 üÈÙŽ:D™³¥h {ॻ­XÐE|^_}g,dÌ/[Tÿu‰Åv{Ð(àOÊÎdÓ‹)Ã×ÌWW^Y1¸ ³X8o+q½Âδȫ-y§Çq]øë"ÍļR!dp¹™¸å=a±Å”Ë•KHÔU©TEF…X°ûøÑý4•ø ã¡AÑËÝyYÓ5dç;ÕršÕFaJ>çƒÅmh‰x¸Ìyb— žÅ8ü=⽋ºÌªâB–äW®lÑc,©ÿvSx¹ÚGô_ UcPla:'Z|K.!>!¤ÈüX”j¥‚4sÅAÐß(R¸A-C7H§õ Çë…ܯœOët ‰OK1€ˆF+ü ™©"¥Ñl%\gÇþØ¢~ê˜Lhãúþ`´Q*M§žeYaðË y{…„ÉFW‚0Œè8†`š¦mY´×ý T'nÇ-bo]<\¯ÝñÅ+ Œù@!Æ%²‡ Ì0 ȆÂUU™‹´RÁ =¦‘œðuÙåÿi&ç*´¾tF¿c⺎(Ä÷§ϧü.//6t]‡ïQçù(7ò‰`e+]oí[€‡ íþˆ%$$$nÇŠýTþL&c W”õOu´ýÕ±4R“‹®iüš÷»¡<´“óÇ#<·áâO1!þAÜ림‹~ˆ/qœLº0°Û¢+6±·ƒh!M3‚MßÈt0‚; ¹¨#-òdºÅ!Š‚nÆh<Á™z£•J%LcjÛþ¿EA”µº½>„;Íå2ø)á:äÓ«*ª€x¸6…~,Š„+AÿÕZc<ÎPP³ëÚ¥‚ ,MÀËSo,dQ5ñue›ˆ_цÂG7Ö{“ÓºÐõVŠø©ÁÊA;ÀÜÓ7•à{^¬Ä:@óÙ–´$$$>VYÄ(”˜‡fÓÐUõ6¯E„mç#òßÇ9û•ΉmÆäÑzžOû!r„œÚ[ÇbܬÍn§{ç€(–Fÿ(îöðsǽ8Vý ìu{Ýn¼QÊF£|>§\Ûʆùƒâ2`G0%Î4êuzb—Ý œ”hìû`JPí{„Iügª†2MBâ$üÎdûóéi>—{{rº³½ %~±V)(zL¡XR9ú=ëF­ÞÊeR VÅpHïoÄq:•D3‚ÔÀè‹~¼04AÿÃô˜Âo†ŽH³%ŠŽ§Yƒ!¾à²› ™5W!L Ƕaˆ6µL§ïû8ƒó¶ã¬Ù1Ö· W¶îÅ“k´:ÐÑó}ê7GákƒAÿ‹Ï_D©„ÜÒXBBâaõësbv¸¢ˆbÔø †½é~áGŠñN×)ö«0e~h¹E½‚~ ~7ýQ †gèÒíbr'Ý‚L:×Ô¥—$ŠìÈ»i1ÜÓ®J íVÇu“/h¶:žçu»]4.nÇq¯ß¿¸¸xv¸Ï/..• !À9 ÿÒFF•Z¶ÏÓA4ö&øÜpñ“ãÜæ2 &ƒ—Z÷;n"•Î:ŽS¯× …˜߳wüú$ù—ÿúoЛc°ÿÒéÔmÚQQÕM§>Úm4‚­Óét¥ÚØÞÚPµØM¸¸DŽÈg3š¦›&sçeWáÐä8ÅSµUjUШÞh‚é‹ùœë¸ª¦O˜GW¢\r<Ì,”„+ó¹ôh8Êf3Ü9u>9AS›†Y­Õ?Û}„Ž{{ `6wCœìBªGÕÐò¨Œ»pn^ÜŽ˜CÿP-‘LMƒ¾I™¶Ñê+éßÝÀ ƒ!¬¡ñxn~IHHHüêxлÅ»0Pa8 F…BNƒÁ-7q»ÝM&ŽSÉÄác€OüB¡sJW¿ß‡tQ©îï}&n\éM§Ñ†¥­Y¦ñ^Ÿ›=Ò¨ÝéÙ¶Ólµz½>;©`kÎh¿?wR]‰¿ûßW_}ù®¼yµX‘/]ÇiË¡ , çp;T®×jºaÁ€[Ýâ2 Q]¯?Êds‰DR#GV·—?¢øíÉÉtþéO¦¾ëØûO ù÷6È•&ìæ_Ào” ŸCÁZ½µ¹QÄT9‘u¥ Á¦IzÑÔŠÌGxÿ ÿ'{O’ ª °*TÍ@CÂfÂ×Û ±}Çq¡Î÷¯ŽökõF©X€~°ÚmòÂ[íÖËÏa^\\Æ–ÈÑÇ'™5$$$$>îo\Òÿ#i»ÛÖ5Ü ö§yažjåX©öð¼-Q‘ðøç³§‘1”÷Cpg>—Å™Ȉzý!hÅj*…Äá‘b¤.•6=?ŒM-¢Ð}Ünu@ÿµZõð`/p¬Ûƒ´bèLj©×ðÝÁŽ®ëb¸à<è¼×ë¡©:6¨¾Ýé¦RÉT*µH*DH:`ó\›"Û¸žÈ ¨Tk“ÉH°ã-þºØÚbÀûý‡ã­íG8‰Ò@? çׯ_£Øo¾ùæâ⛌777`¬€Ä{oo½˜8£ÑxêûP’x>¨KM$\ÛM€ÏJÅ|½"&Ž/–JÌÐÓ˜cM‹åhlL€þÁŒøÑ÷&mPÓ0r´b!an)W¢ŸàöV»ÛíõÊå­¿~û݋燧gçhs[eTAÿh‰•É­hjÏ÷P$*B-ètüÎÌÎÄó4~4!F<üîûW0¹@Ò0/”5ŒÛ²AöÛÛÛÃÑH¼]R2™ÝÛg _AÑV«9ª• aHHHH| Üsˆ™Ó?Ü‹J Þ$¨Ë²í( lËÀ<—Ûä¼Â¥©%^¿Å\àñq9Q#2Fs ô¸b<Ú.+7ëÔsÂ|ëÒÆ¦aX &Ô4t±-Ë…KJ7©œÃG#ž’÷ÀÊ·7O%„½|VyòFÀÁþ^­Þ0 ³ÑhÀ Àe¹l–¬ŠkS¼@#ÆÅ0ºý6:ú$ò¼>´ƒÙ‡› X¡PL&’?üpôìÙL\6óÞ&‚.€×OÆggg»»»hj4×ÖÖ6ø"½{wŽ“•J¥Ýn³%£«ÆãF³I_¼èÐ4®+Þ|x¿¹sÜß Œ&Z©ÖÁ4çï.Àª''?ƒ)¡Œ@c¨J$[›8·rj@Dò)Ï ¬¬ëFŽ—gv•Åq’˜ÏŸ‚ÛªÔ0,^P·2á½u‰/y›ÄO1X°ßœ€Bp>mdÈ™Rˆ»ßŽGÃá‚´àìÛŠbëLÝ*çR€QÐjtR*•@ÅТZ­‚ p!ÊTb:NWÅ~é­Í´zÐ3ãv°QPX-ŸÏÁ,€C '®Ì ¶È`8I¥³ü@Ôr¹Œ¢ðS­VƒH?þø#´‚AP(@ÛxzoO~züxg¥9r½?À ‚ °ÅK(’aèì©®ž@™¹œ Á(µê(«§Š #eŽí¢R…F–iMÈ<ÒÐÚ(Å&ŽÊo­ ¯¾°Šò3¢f´Ãí;[å£ã7™löOþËg»»­vóŸÿø\³Q*Ù7äØÇÔ±½XQ_¿yûøñãw5×u[­V¥rŽ}øtŸR óôì<4Ìt&óêÕÑ×ÿøÕˆšè=ùzl©†iC)´ j?88}î§Ÿ~'÷ööÐþÝN[Xx£ÑØ4úÍVKDbŠŠ7d%ýKHHü¸·@e³Õ#õî¢ Ÿ‰câWZÆ“©±J¡[ÃT˜YÃ(ºZ¡Ýî ß¶BD¥bþúÌî ÑééiD3ëI¸¡4µ0›{ð< p»Žì÷ûƒá°Vo²fììì uÀÜ­Vö uUøñzPLöšGïU"ÁjPÐyÙ÷&ívǧp‚kM´$ž‹J°|–«ÐšÀ%koÖÕÒïJ¥â÷?mn–_¿yóÇ?|vƒIzKújáÜLÿÙóßþÏw‡‡OkÕZ§ÓÚÙ.óšDJ:……v°¿wòÓ)ž+z ìh½æ?­ù|Àt› >ÌCnˆg:»˜–Zß}ÿC³Ùj6›EBFÌ:ó2ïŃòðÙíõyêÔçqXÅø¨_FV- C¦‡IDq—nãt2™˜x4} iF±Xr{åôðå MÓŠDQ¼]ax¹•ŽP‘›H²W¿¼xñNu±[¬‚ø1ÎbØÍd2¯_¿†€¯!Ç´»Ý.Ò§dÀÕéÜW«íiÕ¶lÔszz¦òZv°8èFضÝn³g¬Á4áØ拾$4¥¤°á ?ŽiÇ&^^/Òè×0äÙe£Q¯ƒW_??ýÛÉ è=–Œ¼›IÉMÀF ;N½^Û(йL:›Íˆ‡ƒÁTž#òÖÏ×ã(EØl¶ž¶Z-tŒB¡ÈÁŒ¨^¯ãd£Q‡èð4cLw?ªTª"\„ceœ ‰upO €â™†‘I'‡Cx:'Œb®ãZ\1€T2åÒŽ&–ª¬Þ•ß;¬ ¹Áh²¹¹Á!„ÓÂà¸ë†á:ŽØ§>.X‡ªŽbb³d ~'ÆS5c%ºw]âJØÑP nf§VÇè,¸„ͳ>›ï·T±·-ï<3{àìóósZ4OKøà»O"Þ%Rèã˜=LÃ!ýê~DùAµZO 3›Í~öÙ]ÓÓé´Oß²z½ÈÜë`%ð F_Ó2K ·@ašÆ•óöq/çj°ÆÐN½^§ÝéSÚ[÷ ŠPc:•ŒŠÞÛç—°ž#º ˆ6Vôj­ÎÖŒåÇ^&±g{{Û$ÃRk4šÃÑX'{%Kûà,d[ï‰Ã!zÈÙÙ;ôÓÓÓû×™x“ryãüüÝ‹çÏÐPæ Ó7°¼´Ü³}øæ­Û»víXZ^îQ&ßôõM…6ªwgnÞ¸Q,9_FŽRrñý÷ߣttØ€''9(˜Öc`ΉÜÜü<b€§‰xv>â_]½yóF§«p`¼ìïßbžàªúÙz¾Ë][©’ÉdÍ=MÁVžÜm’ÂYw¾œë¨º; *nöfnÜD,-.a í 0$ˆ{g¬ß½;‡éýÝÙÛ½}Î2Ô¶mCΧN-8ë8 öôä‘Chš 'Ÿ¯*ß_t¶z¬¹·cCðrƒôu+ˆ®:»JgKÎç…BOO¯Å¤Ü¹Ñiµ<;7[—/ÿ yÏÐ/ÿÕ«ß—J«W®|ƒüÀú4ž¹ÙÙ5gŽü £NHtäÈJ@.×ç¬ttÎ v=ÊAfî 2T¸:„:ÛÃpYä¶á ix:ü‡¦E»íÖÖV——sc茶µòêÆFeíÞ €ÎÑîî~þ{ -l€ÝçÎÀ[ûû¾ûþ;Ìe1n,,Îc"‹Ñ·oKT”åÁ‡¸ssñ¾+W¾r{ÿÞÀ|:‡ .ÌÍ/8tW«ËKKÈ06ä ã·oÞh;EgÇêŽíøôÇÁ¡òÚúwß~‹àPkhgåúúÆÎÁÁ­¹§Ÿ:8nË–ÐU©Ÿ¹« P î™wÜU=cÌëßÒï|ìß™3GuïÒª3 ¦í¥¨4”¨ÃÝ«OêQ—ßÓŠk>BS*÷=ú“­ ½÷ÞQ1a¸5|ÜèªùÊFÑËeù!¾ ¡·òÄý´„444(ã7³T©8:,/-nv¶\W–!³´–´ìåíŽpYY^¦ ¤Î ø FÝà£8FÎõµ’óí½ó%ºMCxRÜ5Z±R¸keïÚa>¹{†ÙðáßÚmwëæ«W¯­:Àul8—ñ¸¹3K÷V7gRX.;sÕ-}˜l€ïéI[·TEõÀcûæw.|yé+¨M óÎþöžî®'Ÿx|`pp~añ‘GröôU7 ÞËç­›+ŽýÅÝŽ¾î*@Nv¡µ@½ÊÆ ~¨×ǹ|ùÊòJqppÈ=¤¨oݽ3§kKßÒÒ"‚?õÓ'0ZY­p×ô37ëÎWìË( ò÷ mu6 ˆ€5EÕƒYqÎQp–äÁÓF÷FWW‡9Út9<4ðÃw~úäÚÜýÇŨ;]—ùù…mÛ†½÷¨æ_¸-"/Ï^´þŽŅÊÛ·––——ººœkœƒæòå{pÄ8ïn6tnãììØÒWp­|, ƒÁ¨|ú§ vOwÜÏðœ5[C4usNÖî…‚u¿àÇD…qù h·Ý¾‘GIïqŽ…¿·©À½«]8] G§òåóbiþ÷c–\:ÝSÝs†Ô³êœ«ä0ŸÎ6Ã|ÿÏ1 cÀîèìp Õ…hØzùOß`bûðC;_vuò¹ߣÎñH®M¢êÞ@bHà â͛̆;(nEölCÑŸ¾™Fi———1t;kÿâ/ž>8480Õ`hP;6ÇP@‚3W¯:çñuç kîþDíƒIóæPËØ ‘Й€PÔ0üƒŠ-[¶hEpÆ{Lâ+•;wˆÚ%‘ª"ø²Ôã&Š\K«P¯ „s Àš»ààcxç?ƒÁ¨|4粎ÜìÝ»®³juª¿%?u¤š¨ºÛ®»+¤¼êù¬j ÎôÎ&7QúàÔ}]tž{Kíº»Ü±iÃFôŸ=ýSèÎg–[ƒ&”ÏBÁ9ý°ï¶Ì›š ülÝJ;ØŸíºäªHYw.æqÎìÛÒ××í¹ôÈ\@òPu¾6DÎ+yç\¾\÷ýClèæP›Ø ‘Ðaσƒæ}sø!Û1†ø²ä,.¸Ë]‡Ì•È`0© wù«Ï ½}?ܹƒ ËíÛ?ìܹ³X\¡ëÉi¥ÓýF½“/) %TuϤY Íç‚„5Ú÷åîŸpW»êÝõSŠ+®.BÛ»\u£NPê6¤­šêžM 5£JŰ?44¶H‘dŒ$bÀ`0Yâ¾qýÿüÝ[o½õågã¹·°­Ñyc´0RÑox~Ì`0ñá3³ÿ—ý÷FçŠÁ`0 F}᣼õÖ[΃Á`0ŒúÂG U€æÛ' ƒÁH›oßo~ó›FgÁ`0ŒM@ à©g~ßþçþÿýoI}ôQ£³À`0 Ææ†éÃ÷f^`0 ƒ‘›o@Ãùó÷}t~ôhs}Î`0 Fsbskþµ!ßëÂ`0 Ë”5€§Ÿ}ñ‹ßÿÖì’jƒýyÕ.šU@°a€Á`0 âhÔñ[§q=1Î=ú6}ù÷ÔÔßçr¹HgÇFõßXf2yY6 ƒÁˆŠÍ½ Œó¡>´sæz«´Óõ‘‡æ’½yò ½jþ¢1 FË ² ­úªyŸ¬š7o(5,¹{cò Lý^ƒ¿ŠÃ‡:4êû*ÒH#}6j|ÒÝc¤Y©ò¥4g¼„šÁ`0é"€WðU‚TU3ðFh€w€ƒ)!9¿SbòðáóŸ~ê0h —îæy6½’¼ÓYÍl`ö¯þIÏ67æ©~  «ó|GY-õ àZºæ’†V™Á§dÉ2ƒÁ`$DGò(,¡ñôOuQ={ á˜rÕ”€zBΫ5Ð襺xý‹Ú¨¬Žvê8í; æøæ$4A©›]b$”aõ­3ƒÁ`Üh69Å—ÆÛ¨…R-ÿxÖþôöüßg Q¿f8$Fß~ûüáÃçß~Û6W†I¿æ!êpå;eÜ=Õ%´,‘"L’áP‹‹–(k ƒ‘ "Ûh„–ãtB¨s}_µÀSµßCµgw@*fºQaž7'Ìž\ iºÙ`eƒRñAl’] ƒÑHa-ä›]‚Þúîû ÝHøÑ 0uþGãÿÔ}~Þ~[üýß냖ù7ûìS[khàšº™ÞÍÎ3ƒÁ`´¢iAÓtïPmžÐGúÓŒ{ŸÐŽ¿OmCi¤w@²üèN[>aCoê³7¾k†M–9ŒTR¯g ÿÆ’Á`0›û<€£G㨾£~ o¾{ûƒþ Úd¿½Ë̇FZRKZ 9dm€Á`02ÃæÖDSŽæéo+¡}JÊ`0­‡M¯Ô±Gµ&딥&,)ƒÁ`0,¨üó?ÿs£óÆ`0 £^øQ¨T6Ôÿã¿ÿm£óæ³ÿûÿöåg7: ƒÁ`lnÜÓ:;;En#YTYà­·Þjt ƒÁhä.õy¡·oa~n½²ñüŸƒÁ`0Yàž°²²¼QÙxò©gƒÁ`0YàÞ*@Îù²Kðú:ƒÁ`0må^þ²‹Á`0Œ¶Á= `£RY)ƒÁ`0áÞ*Àz¥R,•þ¯ÿõŸÎƒÁ`0Œ,pOØØØ(Wñð›ßü¦ÑYb0 ƒQwH  Z^[£ç>ú¨Ñ¹j}üõ_ÿ5óló“ ˜çlÀSzŽIr©å§ï­ +VOKÏRTÔæ—Dxâe#RíÛsCfH–™I¨TÊ)TŽ(ƒŠ6ÃõŸT´3Ϫ5›yŽ*y¶µ8ãýÔyqþÈœû牳'dD Éjž^Q'h“é$ñ¨6¡ù§5„Ù¾²¼Mfóž´¦„6ž$hsž3C›ól`>Ê*À¡£{ÎU“™œœL÷T€ll›Œz ´ÊÒRZ É ZbˆmÔ Úä#›‚G ÕpSò"´ÏÙTól@´}è^õk@maÕ»Î굺ø®Åj3¼õ“‘=BëQܯ¤²þg_õÒgPó¶‘®„‹ˆ6yáÝ.“4f¢æÜÜÌc$g®ágÊž´hsžãµæ9E$Ò‚È2üÃÅ¡ïî­ÔKİ„aÕž“l‚3;zã7¬Ç[ žM@KŸ†‚Û³g~Ææ“Ï¡4Pa³w: “6Ác»¤æ94þTÀ<\Òׂ,7”2ŒàFš ˜çlÐ<‡k§N zuòäIz;::Z§üY’»©ë€±¹ÀÂÌ[6`ž³Akð¢] Ì`0 cS#DÈår˜èû¾§€.ƒÁ`0ŒÈÑ0ü™&'''&&š·-ƒÁ`0 /ÂÏÌåÞ z5::JJ@£KÁ`0 #Âw¾2>% ZÕ×Ò= ˆÁ`0 F–ׯ=ŒáJ@ñô…±K¥sá87=­ä/06Xh Fû \8vtTˆÉwŽ\è=~¤(DoiªX8´÷ÜñâÈáÑ7>î†CpîRÛAÈú^)ßF=Ï*HÞ î1r’$‡¡µ° ùìØ7Ñ ‹ͯâ%ÏE‹3Ò™-"½“V™gKž-ý3Ï y6¸XÝ è*% pÅÓïÎùÝìÿm‚\íRmÃy™ÚyfϾ ãlm‰TxHX® c¼2þ½¥Ž$ÏE‹Ó’Þ  ¾.Ìsê<§Þ™gß "@ž­4€¯ gÔ¿ðö±÷Þœ>?}°p|ʰ¼ˆP¦tÏfNAK#£©Ú–ê4 ’· )Š¡oöÒ¨I~h@3Kjðú5oBsåí^5 ¼Å“ s(›Y‘–ÉŒgÿ‚yΠ̳¡ÈÑN~m¤ðúôô±³”F. ?€ÁR”Õ¿6ÝÉÕ,ÆAq2š AÖ3_‰¤‡„=‚W~‚Ü}§×Þl˜ÅÏWDC9©zn¼ŒÝjQÕµKõmzñ’³iÅñÊ’œ† ÿ¡ä´ÏÉË›œœvàÙ§• `ÏÙÙ¹éiü›;wv|¨tæð™Ò«pŒ”­ìU?Fö²bù´ô,!•nµù%™ ÇËF¤ÚK~CfH–™I¨TÊ)TŽ(ƒŠ6ÃõŸu´3Ϫ5›yŽ*y¶µ8ãýÔyqþÈœû牳'dDõ`ÑJÐ&ÓIâQÿlBûPó áI`_YÞŽ&³yOZ SBO´9Ï™¡Íy60eàÐÑ=gªÉLNNÆ; ©æ:ŒTZ§i)­Š„ä-1Ĉ6jmò‘MÁ£†j¸©?yZçlª€y6 ÑíÀt/€ú5` £JèzL"Frø®©ûú‘ ØfÏQµôÔ¼mÄ/á"¢ E^ÈIIÆ+Ój¶£æÜ[/æš MÎ\ ÂÏ8”=i1Ðæ<ÇkÌsŠH¤‘åýÓ×Ñà_{n6K/ÆAT{N² Îìèß°ov‰ÐÒ§¡àö완±}¥Åsh TØìN¤MðØ.)‚y?0Ï—ô5€z Ëý¢ £àVœ ˜çlÐ<‡k§N zuòäIz;::/yKî65ÅŒKc<0oÙ€yέÁsˆt50ƒÁ`0ŒM —Ëa¢ïûj||œv6º ƒÁ`0"#DÀðd˜œœœ˜˜hþݶ ƒÁ`0¼?0—{3èÕèè().ƒÁ`0Œhß øÊø”€jU_ ˆwƒÁ`0Œf@¸0þëa ÷PЧ/Ž]*;ǹéií, £À«Z £}®;:*Ää;G.ô?R¢·4U,Ú{îxqäðèŸ wC@£KÁh } ë=¤Öæ0>Cü†PAC¸Á=FN’ä04 ¶!Ÿû&tñ£ùU¼äâ¹hqF:³E¤wÒ*ólɳ¥æ9!Ï«»]%À£á¡xúÝ9¿Ûm‹\íRmÃy™ÚyfϾ ãlm‰TxHX® c¼2þ½¥Ž$ÏE‹Ó’Þ  ¾.Ìsê<§Þ™gß "@ž­4€¯ gÔ¿ðö±÷Þœ>?}°p|ʰ¼ˆ0ÈEs×n0 Î[›¡m©NÓ)¯ £ EÐ7 {”ù Š<KjðúµoBsåí^5 ¼Å“ s(›Y‘–ÉŒgÿ‚yΠ̳¡ÈÑN~m¤ðúôô±³”F. ?@ÎÏÞk(›æÙëb0}0šAÖ3_‰¤‡„=‚W„‚Ü}§×Þl˜%ÐWJC9©Ölž‘Êëgêðm}ñ’³iÈñÊ’œ† ÿ¡ä´ÏÉË›œœvàÙ§• `ÏÙÙ¹éiü›;wv|¨tæð™Ò«p´ÏP’ò06‚¬XA>-=KH¥[m~IfÃñ²)‡öí¹!3$Ë̤NT*e*HGŠAE›á‰úw_í̳jÍfž£†JEžmmÎx?u^œ?2çþyâì ÑÄÄ„! œ©ˆl×2M…Pk}<êŸMh"j !·¯,oG“Ù¼'-…)¡' ÚœçÌÐæ<˜² pèèž³GÕd&''-OðnÁH^NFS!´ZÓRZ É ZbˆmÔ Úä#›‚G ÕpSò"´ÏÙTól@¢Ûé^õk@ïªy¹%t1&ë#ø®©ûú±Œ‰Zú jÞ6˜pц"/ä¤$ã•i5ÛQsî­sM…&g®ágÊž´hsžãµæ9E$Ò‚È2ü©¹<ûîÌJ=·ŒaDµç$›àÌŽÞø ëñ–ÂiÐÒ§¡àö완±‰¥Åsh TØìN¤MðØ.)‚y?0Ï—ô5€Ô‘åfQƒQ'pCÎÌs6h žÃ5€S§N½:yò$½‘¶%q›š_Fë2˜·lÀ>N;]ƒÁ`0‘¢`ø2LNNNLL4ÿn[ƒÁ`0^„Ÿ ˜Ë½ôjtt””€F—‚Á`0 F4„ï|e| J@µª¯XžÄ`0 £ ®ŒÿzÃ=”€âé …c—JçÂqnzZ; ˆÁhðªƒÁh„kÇŽŽ 1ùΑ ½Ç…è-M ‡öž;^9<úƧÂÝÐèR0šAÈúÞ)ßF=Ï*h7¸ÇÈI’†ÔÂ6ä³cßD ·{$¼øÃæÔŨ'3ž îhgž-ý3Ï y6¸XÝ è*% pÅÓïÎùÝÌh[äj—jÎËÔnÌ3{öEh¨gkK¤ÂCÂrã•ñðï-…tÌ ¹x.Zœ–ôñuažSç9õÈ<ûòl¥Üx}X8£þ…·½÷æÄðù郅ãS†Tµ Õ„s ¼aµW¾ž 10ˆÐ¶T§é”Wf„Qr¢F蛄½†¶ˆH,©Áë׼͕·{Õ0ðO*Ì¡lfEZ&3žý æ9+0φ"G;øµ‘ÂëÓÓÇÎ~P¹$lª…GÍ\õþ«á|;/Í¿×%4Fcd=ó•HzHØ#xe&ÈÝwzí͆Yä|Å2”“ »¼¾q¦ßæ/9›–¯,ÉhÈðJN;𜼼ÉÉiž qZÙöœ›žÆ¿©±sgLJJgŸ)½ G_ÏjJ ·gÏü Œm*-žC hÓö#%gϤMðØ.)‚y?0Ï—”5€ åÞQƒ‘¸åfæ9´ÏáÀ©S§‚^,œQÿÂÛÇÞ{sbøüôÁÂñ)CÂÚE„9^?AÁ½žUÿ¾ŽŒ"´-Õi:å•a”™¨ú&a/{jCFÉ·aIk\u~oBsåí^5 ¼Å“ s(›Y‘–ÉŒgÿ‚yΠ̳¡ÈÑN~m¤ðúôô±³”F. ?€o2Zs›°Á¿6ÊÕlÈÕ{£±²žùJ$=$ì‚dÉ Eªo6ÌÂæ+¡œTk6ÏH åõ3uø6´xÉÙ´ÙxeIÎ@C†ÿPrÚçäåMNN;ðlˆÓʰçììÜô4þM;;>T:søLéU8%oCOß[AV¬ Ÿ–ž%¤ä¤%Kñ²)‡öí¹!3$Ë̤NT*e*HGŠAE›á‰úÏ1Ú™gÕšÍmÎs¼Á<§ˆD€/SÞ? {ý|]|#Ñž›ÍöËÆAT{N² Îìèß°o)‡6-} nÏžùA[SZ<‡Ð@…ÍÞé$LÚí’"˜çÐøSólpIYÈ Yî e0ÉÁm60ÏÙ 5x×N:ôêäÉ“ôvtt4­ Y²¹©Iglj°ìÅó– ˜çlÐ<‡hAW3 ƒÁØÔÑr¹&ú¾¯ÆÇÇi'`£‹À`0 #2B4 ÿAf€ÉÉɉ‰‰æßmË`0 Ëð3s¹7ƒ^ŽŽ’ÐèR0 ƒÁˆ†ð€¯ŒA ¨Võµß³€ ƒÁ`l „kã¿Æp% xúBáØ¥Ò¹ƒpœ›žÖÎb0Z¼ªÅ`0ÚáÀ±££BL¾säBïñ#E!zKSÅ¡½çŽG¾ñ©p7HÏܶ3 'Bj‡ÔÚÆgˆß*H î1r’$‡¡µ° ùìØ7Ñ ‹ͯâ%ÏE‹3Ò™-"½“V™gKž-ý3Ï y6¸XÝ è*% pÅÓïÎùÝÌh[äj—jÎËÔnÌ3{öEh¨gkK¤ÂCÂrã•ñðï-…tÌ ¹x.Zœ–ôñuažSç9õÈ<ûòl¥Üx}X8£þ…·½÷æÄðù郅ãS†„½·J Í¿oæ¼þÍ1ðžÄ"´-Õi:å•a”“¨ú&a/oZ[ hfI ^?÷f 4WÞîUcÀÀ[<©0‡²™i™Ìxö/˜ç¬À<ŠíTà×F ¯OO;ûAiä’°X–$W³k.fÿ¡1Ä ž‘"‚¬g¾I {„ ù1HŽêÇ› 5 mPÙC¥Ý¾¼¾q¦߯/9›v¯,ÉhÈðJN;𜼼ÉÉiž qZÙöœ›žÆ¿©±sgLJJgŸ)½ Gs(;aÈ.Oß[AV¬ Ÿ–ž%¤´¨Í/‰üÄËF¤Ú·ç†Ì,3“:Q©”=R¨ QøY.½.uB;ó¬Z³™ç¨¡R‘g[€3ÞOç̹ž8{BF411‘„©æéòõƒ6™NúgZ€ZCží+ËÛÑd6ïIKaJhãI‚6ç93´9Ï棬:ºçìQ5™ÉÉIó©‘úýl ›Œ:!´ÖÒRZ É ZbˆmÔ Úä#›‚G ÕpSò"´ÏÙTól@¢Ûé^õk@iT1T¹ô)b þ½ÈÀ|İAhUŠû•€TÖÿìkßW2Õ°6–pц"/l–ÒR‡ÆLÔœ{ëÅ\S¡É™kAø‡²'-Úœçx-‚yN‰4€ ²Ô|k96ìõóu1÷ݺ•zqö0 ¢Ús’MpfGoü†õxKÙ³ héÓPp{öÌÂØ‚Òâ9´€*löN'aÒ&xl—Á<‡ÆŸ ˜gƒKú@öÈr7)ƒÁˆn§Ù€yέÁs¸pêÔ© W'Ož¤·£££¾"©9¡Ázc0RË[<0oÙ€yέÁsˆt50ƒÁ`0ŒM —Ëa¢ïûj||œv6º ƒÁ`0"#DÀðd˜œœœ˜˜hþݶ ƒÁ`0¼?0—{3èÕèè().ƒÁ`0Œhß øÊø”€jU_ 0ŸÄ`0 £™®ŒÿzÃ=”€âé …c—JçÂqnzZ; È ^ `l:°Ð2ŒöA¸pì訓ï¹Ð{üHQˆÞÒT±phï¹ãőão|*Ü .£)ô¬÷Z›Ãø ñB á÷9I’ÃЀZ؆|v웨á¸OóI 1’‹ç¢ÅéÌ‘ÞI«Ì³%Ï–þ™ç„<\¬ît•ŽP8„‡âéwçnf´'rµKµ çej7æ™=û"4TŒ³µ%Rá!a¹‚ŽñÊxø÷–B:f\<-NKzƒ‚øº0Ï©óœzdž}ƒˆy¶Òn¼>,œQÿÂÛÇÞ{sbøüôÁÂñ)CÂò"B_õOͧ7ˆ7”o̼±ámKušNyåD¥%j„"X€-cJÛ hfɦí$‡7¡¹òv¯ÞâI…9”ͬHËdƳÁÞPÒÅ`a4 AÖ3_‰¤‡„=‚WN‚Ü}eÌ› ³˜ùŠb('^9ÝÚ´´àÛÄâ%gÓZã•%9 þCÉiž“—799íÀ³!N+Àž³³sÓÓø75vîìøPéÌá3¥Wá˜$—Œ–D+ȧ¥g ©t«Í/Él8^6"åо=7d†d™™Ô‰J¥ì‘BéˆB1¨h3Rƒ‘ÜZ³óœ Zƒçp àÔ©SA¯Nž׎bò#z) Ñ[š*í=w¼8rxôO…»! Ñ¥`4‚>õRksŸ!~C¨ !Üà#'IrP ÛÏŽ} ºøÑü*^rñ\´8#Ù"Ò;i•y¶äÙÒ?óœgƒ‹ÕÝ€®àÀQ ‡ðP<ýîœßíÀŒ¶E®v©¶á¼LíÆ<³g_„†Šq¶¶D*<$,WÐ1^ÿÞRHÇ ’‹ç¢ÅiIoP_æ9užSo€Ì³o ÏVÀׇ…3ê_xûØ{oN ŸŸ>X8>eHX^D(SÕî(T=xš=b`4¡m©NÓ© y ’œ¨ú&a/Aò%5xýš€7¡¹òv¯ÞâI…9”ͬHËdƳÁˆ}ÄVs ÑXYÏ|%’ö^™ r÷^{³a9_± åÄWþ“ô¾q¦ßæ/9›–¯,ÉhÈðJN;𜼼ÉÉiž qZÙöœ›žÆ¿©±sgLJJgŸ)½ GË e¯ô1… +VOKÏRéV›_’Ùp¼lDÊ¡½ü7d†d™™Ô‰J¥ì‘BéˆB1¨h3q¤Ñùg0 ƒVûÞxå ×ñø©é¿??õöÑC.ƒÁ`0ŒÈˆ°ðÆ\iz¦4qiÏîÅï¯;câèžF—‚Á`0 F4Xi˜ëÏÎÍ ã¾ûÆøáKc33ï?Xˆ7O Ÿ<ñJ£ Â`0 #B4€WÏ|ˆß±£ã31uIÌΖO;ÛÆDéÍ“¯ &¦Ä‡Þ;~üøéÓ§³Ï}c_d0 có¤üý¹ ÃC{¾|ð؇s%wà/ Lô޼üæ{ÿëä+s%Q*9ÞJ³%Äæµˆtª3î™!èÆ?óéýÚqZ±oÂðF%üÎþ“ÉF„6!“…ï·ÎA?š_ÅK.ž‹g¤3[Dz'­2Ï–<[úgžòlp1Ý 8[*¼}ôЇN•&.¼96ò‡7FÅôö†f÷zýÌ{÷iä/•ŠZn´s- oýæj÷j‚¨gl¥"'2EsÒ6‘°Ðd=Vï¿"= Ñ’‹ç¢Å©þYU`ÈF¨ óœ:Ï6A˜çúÉs ðê™ß}cüÔÿœ|gèPiïÁwf /¿774<2;;×»wdzVLOß(–„%ä•©ÚŸjž¼~ÔLkžƒB©>ÕWAÁ±u¶”å4WkW1Š`ÑÒ$S(²$oöòŸ ?¡$h.feç¥5^íÙ·Ô"îLËÊfV¤e2ãÙ¿`ž³ól(rà* ÿ-}z£ðé‡ÓŸþøjFˆ¡áJô¯T*LeóÅý¦êýZÕF¤NÍÔxc–Ͼ2R‡ÁŠ• X/LfcdÎoå"4«¾òf#ÿQyh jS‰Êà'^ÌÉ‹™VœÉÉiž“—799íÀ³!Î@ Ãÿì¡Ñ™óÿ³02Ž?½þÆá‘ßbÄŸž™vmÅbihè¾Ä¼ÌÆë¸›°OdàÕÒòì %„ÊrÌÎM2¹šg¯2-ê6:fÐ]•HøÝïu©Ú™gíóœ½<jŸÎgf§ïý1vôü»†_=|òÃrØ;}á7ŽI€PKÏ›9F¢©Æã†¿ÑYˆûÊò®Öe6ïIK¢l,4uB›óœÚœgóû¦‡F&Ž í=(¦?tŒü#cgg†Ž¼22>:Røðô+¿~¥P*M™Z¶O^ÂÍ8£bT3ßg×ÀFhˆ?Kbg2êæ‰$›¹²é. ëPóœM0ÏÚÆ‡…€‰7FÇΈ¹ÏÏN_ÚÛ[x§XúéOG޽qrdïÞá9QÚ+ææL?}°p|Ê0Á÷O_jæÌÁ Þø½‘øfƒw2¦‚жT§éT8ÕxÔE°LZÆ&‚Å;*Kjðú‰®7¡¹òv¯ÞâI…9”ͬHËdƳÁ=}ì쥑KÂÏ %“ó˜ÅýFjͤ=xKItB5XTI °žùJ$=$ì‚$Ä ªo6Ì¢$ÃfN¼â»+ m2)·™ÄKΦÅÅ+Kr2ü‡’Ó<'/orrÚgCœV6€=gg禧ñojìÜÙñ¡Ò™ÃgJ¯Â1(yíOóŒJD¯Ù5'¡‰QY±‚|F­G)Ð&ÓIâQÿlBqjž!< ì+ËÛÑd6ïIKaJhãI‚6ç93´9Ï棬:ºçìQ5™ÉÉIßS‚ö2¤2¨¥JŬÊH¡ü§¥´*’ÔbD5ˆ6ùȦàQC5ÜÔŸ¼­Çs6UÀ<m€º@ýP[\ñ®³š­.¾ë²1 /"¤›ºS•€T*Ú¾¥Ï æm#* ㉷œ”d¼2­f;jνõb®©Ðä̵ üŒCÙ“mÎsZ>ó‰4_¦¢ºþô}õ`g³Y[†AT{N² Îìèß°ov‰ÐÒ§¡àö완±-¤Åsh TØìN¤MðØ.)‚y?0Ï—”5€M„,÷ 2 nqÙ€yέÁs¸pêÔ© W'Ož¤·£££.Ȱ¬M]mŒ‚%'˜·lÀûÍo~C¿¿øÅ/~ûÛßþò—¿\^^†®€’wuuutX-PWXöËT[¨¶Fç—±ÉÀI1|õÕWä¸{÷ndâàÁƒx†nw¼…7ÊÓçŸ.ÇûŸýìgˆ ÏŸ}öþ|øá‡‘.\®ºØ¿?~I¡8á_N1ABÁ‚# EHooÞ¼‰$D‰âmSõ¿›$|gžyFÔÔ[šjSuÀŸ˜˜À/\HÀHNàµižÍ5ëbØÅóÏ?¯ê²*¥½Á·ºUA5aÃ3µ%µåÓ5!”mU(²$ò5BÑëUe\¸™ºpZšMI?Õ”[¢å›o¾!Vµæ&ë…»çž{E³´÷h QSд)¸×]ú < ?JU)'ÔÏPpê‘4Ï–%ež™ç–ä¹ó_ÿ‡®îîâÊÊ"ÆÎ•âFµ:88Ô×××ÑÑÑÛÛ[,;;;à{çΈ%___G2ÈÍÞ½{áý8’(Ê™Ëåð{åÊÒY®_¿NLíÙ³çno÷o¿ýñ#l©T‚&þ¡(~‘oxƒ ü !d€>O¸îÀïƒ>(ãD($oˆv~~IÃ…ŒÀ‚㯠2Iý;Š–ç=Œiõæ1Ö¢*1RB$À­p…BòÝwßÁxó¨/¸ÌÌÌÀÄ`ÇŽx†P¡"Pe†$*.h\?pàÄ1 9ˆRÈÑ3U´¡ºá.U < 8Úd†b£vŽgÄI6HßEY?^!*”á?k.Ô€¼Ñ3¼!KЛQ„¢tE3É!rˆßË—/£M¡ŒÈØ_| £ÒW?ZsSë”Â?žñJ£ìQÁÁƒº<¤%„€èìP¹x‹Ö}ñâE¸£G£9\¾üòKˆ BÁ…B?@£ÎJBü wüIk”ŽnýÞ"çTM_ý5"„< *ø„CI™gæ¹õx6D&wÌ–PfôYˆjxñÅá®…HÆiyÀ M}á*MÔÓ©–atèÄ…«¤ NI"7PÈÿøÿÀ/©` êM%ñ Òw„ç-™ P?_zé%<€qT'RAYð‹8)!¢²Iæ^›¤fRM e&MÕòáªëË/¿LÏZW"›•¶R”„ú'I*št^Èjq¢rÍÕ­.LHaƒOˆ–4£i ;ÍÚ¡qãùùçŸGº݉‰ DŽf†DQJTM‚G£)>œÌd6hB9¤‚ j¹¢¶áFr.ÜnÌoZÓ#m¥&%O£ÈkïÑ¢%Y5$9 Hšd˵ÕCY5Zö4!”ëM7nÜ …Œú1²&ç¨5¼•W5uoI™gæ¹õx6}ÄO+ccc}1”Òz@r÷ú§C ­äkßJJNÕõ êgñ|×ÈZ o»k5¤YG)fZ‘qRHo” TèÀŸx@ÿ.Üå ¹(°ßEó˜^[Zû‘Ã!É(U-SQÕ“{hä‚&'%„êŽÚ'²bÑ*hàÆê¦ØTa#i$ýŒ_(ìpÄ/ž‘‚ÓŸ–™È?QÁY a) : ™1²ÚQSGÈ…˜iB9¤CÔQF4yÒû©i& û)Y/T­dñR¤¼\Û¬¤%D+54Í@œÔUKÒE3 õ³ŸýLeOBizÄ/ª¦¬l"à‚ à-ͨ"Oß’2ÏÌsKòle€ZAóä üò—¿ôÚ(+H!íƒ&U4`SnhH¦ É…UÒ‰ÔÍjåmq€ð€_ú“ˆ Šá¨š(æ| ð‰Ì#Ûd{ÅR ß:‰]»Ø&å/”U""¡Â/ÆN´¥¨]é‘d`XvAM²£º¥©ßWaGÌ”=lü©#rUѦ…Ê'(c²ã9÷ö®Àû@+Ž´úˆÌÓ "ò BС £%ÕG«9óÐ(Ò<Èòª Ñšõ3fPË'rTBz (vˆ•B‚‚õQÔúVÒ¡´¡ÿ%¥Í\Ræ™ynžMÍ×1õÇ JË HÜ766ä† š|K+(¾Ä ­àOšEѦ?2˜À ƒ‚ÝtAå¤}U4Ø«ŸjÈ(N”M‘Ö]é¢BªM5ëjÈ¡}v²²DsÚ¼ ‰¤&A"A2@žc)Mò†‘žšw×nPuS»õ ›A$Èn/\Û íQ•_²VJ*ˆL¿2cÔqÐÌCÔZ¸ŠF×Þ}õZP)´,"÷ÛÊÝ‹hn²C”= üSß'j?"YpD(¥EK(_ÛzLR¤l¤ eŽï¿ÿ>…RP4!Dr¤]Ѧ`d˜úAµ¿&S*õòT"Ú¡­•”yfž[•ç3}Â]§GξqABYè• ’ý@_/ÇfêûÈôAe c.ð vß´‡ A[‘_àÞ螥5˜â$*Qø+W®ˆÚ‡Ô­“¾¦ ^I¾4u‘òž…ÒaÉ´Ž •{ßd=’EËR÷W•b©ÊU'Ô/-B™«[wUa“¦?™mä"—{øÕ›R' ¤lH‚̵^Tú%ò;Øæ‘Ãríãô2²³ "P#Õê‹ÚYÝTÆ4ŠdÁ儯›fCòFH¿ˆÍ\Í^JýO¸ÆKÈj™öoÓ²£¨í”Ɖ ©k¾%ež™ç–äÙÿ[Ú•M_<òÈ#{÷îÝ·oßã?¾ÏE¡P(‹«««ê·péééÁ/ ³sçNÄ€€`ÏdM½sçÞÎÌÌÀeaaáÑGí¯rI“B2œ>ýôÓpDÄ?tHÊ€xèˆx¦8 ‘“J¥ׯ_‡¤RèSŠ ¯Ç+x¦KðÜÙÙÙT“°M ÔøDuÓ®TÚfbI*æççiUðå—_J‘ oŸ|òIªßЊ@l]]]¨nú I 5Þºu+ïÞ\…97\3„ÇPÝðI»ðh„ 1 ˆí»ï¾£hu !’±Aø“¦OÈ0~©°x@p< ~46ˆ.M#(cÔ¶!É´ã„€øG´M%‡TRúèù§Ïhÿð×_ ¼•õ…²à-*”–9TÆ4ŠäVgª;t[ô…Ž–dØ[䂨5|J²çBúuW‡¦lSÒÔeá÷‹/¾ånßê-iêUÃ<3ÏM³ÿ™€(gµZ¥/¬ÊʧÌŒ>¾ˆÀïÏþsôwÈœ\•: õïêñ/r{ ÔDmAW.¨ÐKÕ†/uŠJó,·%ªfdyb p­%òl"ú•™”[ Ò»6  ê4!¦Jôîó÷žDsb{¸WÆÔ¦¢¶¬n®î²çD ’FQÛ’"c“‡u¨ËOøS®\¨ë r™@f•ŠO)Ê)*õ ÑLrH[$9ý÷µI–õE.Té’a*šF‘Ü\Vöö†&¤F(™Ì{9‘ìy…‚ÈõJu7–”Fß×JšzÕ0ÏÌs“ðì£ìßÿ8}iM‹ýÞKÿà>77=~ñ҆† Ȭ¨±«G(¨±PN\Ѽ åTàüýËÉ’M-NÕ<+½©C…äZãK53’@.¡ÑŸZP[ËR¬Se*â~+ß ¦*AÕ-Ci§k±õ{ì”~ÔÍ·âþUHk9”õ¨ž$* î­Ü Æ4ŠÔ¨Õ9!CÈP¡ùQW¤‹ÖŸ‹#Z™gæ¹õxöÑ|ª¯¯þ~ÿûß“¥TüGÀŸ]]]ðsøðaZ¯Ó*ƒÁ`0Œ:Áç[€ÎÎNŒèã§ïÞ½gëÖ­(žcê¿~§ï]ý¯?T·l¹ö§éëׯþû‡|õ§?~{õêöÝ»ª•ê–¾-«««>ø`__ßàà d¸°°Í¿È ²Çùùù®®®ëׯÃyBŽ·½½½·oß.»w*àÏï¾ûn``€N[¤óˆ6—ËÑÉ© .è0EÒŒ-Ý… OrîÊÜiÀ¯š.Ýò&%F* êøüóϡϢ‚P‰333t/þ„È¢fQ)`U@—mÃjU¿cÇé™Î¢öÕ&Ýœ‘À/Æx$‡š}àPňMúDü_ý5ét@5jŸNß¼ví2@²GÒ¥JN£‰l´!šA"P o(’ª:yç‹”®j‹f¤itÏt¿…<¾—Lj$P]_~ùez†T–<…W[)ðMBÞ0)¢ãª´°ds‚;™¼Dí€^´è¿1ºè’4eÄC&RAMdãAÍdÿþýto§PnµnŽê®ìÙSIºÚ))yhwè @,˜'ÿš½GKˆ4{Y›åû/h–©Óé2Kjö(N²0 e½ 5Ž¼Ñµiˆ©“9 ¯Ðà­´¸ª©{KÊ<3ϭdzén@' rÛÿÝï‹?ìzè¿VrßßXú÷o0ÿ¿zé“ofgoÌÞ™•¯Lƒ~°†1˜zm¸€,ü’ù‚®)ijt—‘€Aºx‘kåè:dÒ†HÁ®ñIÀLD1Ó+Úø@Ü©éz¯3f¤b›ä¿jR] !‘£¼Y‹¦õšgè.`2þÓ=W†ëDiÁŒ¡ÜaJš­J ºÉ:è®Ë¶E¾v )Úº¨Ýt‘#Õ#]©,û)ªJy­"1,W§V¨OP["µS-!t¦dP¥*VÏ<—.BÙøI¡ Õ©‹8Z'NFZ)-¡zÂ+2€·ÔMÑ$òé[Ræ™ynIžC4€ü–üìryÛc=ÿϧsºÞw§Xéï&ßÛèÙíÕõjWWUÆH‹Á4»B¯Š_ü‰Á^.çË!AºÉg¹9@U^hýì HrUFò.c“—(P…i‘«.ŒtA¦0è…Ð@!Çd˜1´jj*h!hB¡žÕT49ˆ2‚PóUHWxÒâ§ë´¥Ìœ@>¯\¹‚ØH`X6TP+£]“¤…ã®çÖz=’aùKÝ¥Ö¨§¬« Qoe3 $£Ž ¥ÞéœW®d¥È|Bf0 <@6hš!j¢ˆBAHh:µo߾В2ÏÌsËð² €[†·ü×ÿ÷ÇŸþå1<[Ü_­þ°mõ©ryèÁ=ÃùNGéX]]µYºfêp¡­LLLPÖ)ò{BßÞ–”/ò£^É,!¯6¢{綸 ½”¢fûEç.MÐu&†²,‘LÞ£%ÝHd²H =¤¥’Þ&=‡¦t‘Þ Üz'Ãv½^¾26¨ñ;b€œ@2©•òA®ÍѶ\Ls0O:4ðh­GSªd·5ëBÔ6ó¢ d kÍ›\§£~VV E¸T» €ãûï¿O¡È€”W¶“gü"9š“‘Ì ÃHQí”É „’Qí å›W¡ )¤üRrRöHÉ'Z"Ab®êdgAZí%Öꋘ'#¬Õh©õrBãMH}+j’£F˜¯Ýó‰6®fOƒ:’YE<¨hH í߯3e€vJãzRx *)óÌ<·$Ï&@µZ­T*[66Jÿí¿=Eëè]]]pÄïO~ò8ÎåVdŸ|òI°@T"IÒ•úkW¤SÏûöí»xñ"Í)¸T d<EGC¹ö]£´(È¢ 2T‘”“¼{À€ :×dD}™ªV™èᱦE5úð™gž¡¯Eí“á~Ú ÖÄ ñÐZ¹ç•­¦ô¡ 5 Õ5¹HÙÃ/u”=ÙŠÍb³€”fÚA(40éÒ%ú´GÖ—ÜáA†ÐçŸAð‹¡‰ˆ\þT[®¬-!i½$ÁÀ¯!¹Ð&jÄ)C!?ê§\$H‚>ü‘†(ॗ^R'ywK)m³’ñW½%ež™çVåÙçvàŸýìÙx §§gqqê ‹E ùPè”À\.×ÑÑG2À"ê_|‘vFh¦]9õ§Â-…žIm¡I!Š766Fu#jv’rídƒríko2kPÌò[ï劶ž ww¡CýD­m!­U²Êäj–´ÄHÏÞ¤gƒyFîk•Š0-ÈQ¢ÂÕyÉ$ Ú~¤ÏríÄI’2ÁiYeãpyöž§”W®WµA‰OQ;{Q(+AZ ëEÔ>2$¤F(»‚¼çi5,+›¤{YÙ¬îÆ"2%W?Ù`ž™ç&á9PèëëCy Ðe€…BA#wccãÖ­[ÐH C}ùþÒêRVÎó‘Æ'Ÿ|B½3¦†ÒÈOË÷Ÿ,$-!’wC­Ó id QcÊÖJFZKhôgN–ñå ,õÜ'u€æSÔ¶Û”•s?´¬6šÂ¦€Êj¹v’h^ùâYÜ_¹Z¥Óƒ¡(+_"Ù$$#¤éÁòHW™Pº¡¤yØ­Ì3óÜz<›l?üðÃäääÂÂÂüü¼f<ïp|CQغuë /¼°cÇi›µ©UÛJWôÎS©ØðŽa΃Á`0ÚûH…yâ‰' ¬¬¬tuýè³Z­ wC~¡lß¾=ê@K: ­â§«Jª©FÙJ¥Õ„œ’»ä)ƒÁ`´/5€\.G`®gù cXGGÇúúúîÝ»ûúú0Šã7ÒxV×ÙysN²‹ÅâêêêÔÔÔc=6??ÿÐC5a& ƒÑ>Ô:;;{{{wìØ100 jë„udÃߺu«M2 `qq±§§ç·¿ýíSO=EÚ V ƒÑ j•îý)Dim­ì^¯ÒQ­æ66JÅb.—ûî»ïvíÚµ±±AŸ DM>­ÕquÏy¾†Fs«óÙÕÕµ°°°sçÎ?þø¯þê¯X È‘dCó,”ý§‚kŠÁ`´LçРÞ](`ø/vvή­Í»@®RÙZ­®—ËÅùy cþóŸŸ}öYÌncXõµo·âõ°òãéÒ„=u§‹ÅÅŇzèâÅ‹Ï=÷\‹)¾;öEßÈø}÷ÿ‡ŽèòS@õsPo(¯gú®—>#nBµ²ðý¬Cº •Pù6lÀŽä¢eIx6Hûn·V³!‚EWÔ¡…jº-Üžçz3,] žíKš.ÉÌs(Ïaw ¾öîÚÚ]!>¿~ý›Riuqq×ÊJßòòÓ»w—ççÑ3ÎÏÏ‹ÅxW;P˼téog@¹v?=S¿«¦¢àbppù|ä‘G~÷»ß½ð -£Èï;„26«ÃÁ{\ÔK2 ñ—•SòµC74’é¬'ZT/ÖÒÆNúþV¸]’ü´:^rtÀ³ú³‹*BšækWЧá²ûÓ¾ÕDWÔ> žMëij¼÷R(Ÿ†k]¿z¹‰e–²a8ÿ .šç¨%ež³ä9ì^€JeumíÛrùã……K×ËåΕ•B©ôÄ­[Å™™ÇvíªV«ˆt}}]öõ¾:ˆPš–PT™c:rA¦ëýSÓ_Ô´èp!:9ïÞ>lØ@är9h===;vìXYYy衇>þøã_üâ- PuÐÀùÕW_=÷Üs­Dª…Ï>ûŒÎ|øá‡éL@ºß¹ì¹aÓ?U4]‰AÕJŠ£ôæ9Ú­Ù@¢4`8‡Ž('÷B‘ò zÆ3’×XË„šD¢êÒÏèd1ü¹oß>ÙqÐù]¨/ÙP¼qã¿IU)ëB…S zoÐ’“7¥ÊËÁ½.ÈUòC¡4¢^ó èmÔÉâ™t;á%ó)³§Š.u¬^a®+ÏÔ•Ó©®e÷ºj¤¨'=ÓA–òŽ´P»Z çÝ;AèHм{¢k¹v ¨ôlYÒzË3ó¬ñÜù¯ÿCWwwqeeêÆJq£Zݽ{ÏÖ­[Q¼J¥rgii¡·÷OBü×ÀÀººf:;¸¿ÿ~¤PèZ\Þ²…Î |ðÁûúú0»-‹¥Riaaacc¿t!çççávvv’Á€ü`ðÃ/r‰f —ÞÞ^ø§o¨Hðyûömê;È®ê;H >\\»v MyF6àŽh½S/{ ÔÈr;00@»,ÁÉÐÐÝ?·pAÁñª™Œ9<Ó)OîIÒ$Ôí~÷Ýw( Šѧ˶gffð¡  á™NmöH@×£> á†Èíܹq¢®IÌÀžWäè€È+W®IIàæ ÿš„À'òi„7ò\q—½ Zȶ*Ÿtr¸pwMšoø½|ù2TRjJt&˜™ššá`ý~©øT/wîÜùöÛoñL'zÚBü‚7Ô¼y›$m3R“ûâ‹/?jùÀð‰Z¾xñ"Üѯ‘¶—/¿üƒPðC¡Ð o$B”%¨‰HuM†thH( ä‡>f†gêI¤èÂ? •W˜ëÊ3 Ž,F*ä ¯(ó$cDiÞ=&þé£bbYÉ]”Eö´RE«7Ãøîø“nµApÈ HÃ[jSÈÀ×_M»#*ø„CI™ç,y· dÓ‹‹b` gcchmm÷À@~uu ·w£RÁدÿéXDLòH¢#ùä±í¤z“ŽÌ‘:Ì•z^9ÉÓÔ%Ò’©ŒKk-´!:˜ŠM· à¹ò ˜®xÅ@GGäEFµmß¾“'ÔÊf·”k÷b½ÿþû #(]ý@š*—d•õòË/Ó3* ½0YÛä N†$ÈÄZ3*—4†ríæh´Mí…tÑDŸdƒŒ4­'óš&!åÚ½ Ò3R„Ö o¨)ºS˜ŒÏ?ÿ<©Õ›®²Ì ÞöïßOíT¸ç¡‚Uð€ÆK·(ɋԨËîÙÞ4öãá{ aᎎ½uáty¹šÙl¤<üWV@ÅŸ²‹Êé²dgµ9o£ÃØÉ?Ć.eîål$º(,eÛ+Ì)Öµ—gµåÚÞyú¬Pº¢‘f”Ut¹È*êˆükvµz3,×õÐFhΆ´èjZjDxÎñV¶Y5uoIë*Ï̳ÆsÈÝ€˜ãä;;‡víÚÛÓ³¯§ç§½½¯®¾ðÈ# míéñn¥¡Ë Hã@WK·À…n w4ZH?Ô¥ÒÅ…!è9ü¢×@Tø•aU+"•ü#›9Ptµ[oÀ†CÎò©÷D®èNˆû·ƒ€.ii^m\®Ý‹¶eW+KAüÓ!ÍÒfEËT40“»9 ’~z¦{ÿHTH“bCš¥*ròžªý.DÍpM¹õJˆ¼ƒ˜<#~¸Óµ›U]øAµ¶éjÊùÚ¦4:¢qQ‚1T .Je§F«xt{ †Xҟ䡟¤ÒÜÅK¸–]^’Wn•]˜tÊg Zšº(£våùÚÕ t³”¼Rº©¢KÛ¦H\½Â\?ž¡Ñ –Ò¢F²'=ÓíV”s’IÉ0‚áªØËEÒz3,”«Aóî x¡z’.ÝæEíՒòç-)óœ1Ï!Rîèøy©ôËååç¿ÿþÙ?ýiÿíÛ}?ü°±°P¨]¼& R¥yº üâO í²ã&¦ÐAÀ]ú¡yز ƒº$iÎ'me÷®$¢LÝõ£Î)Ë5ÔIÂ"¶M‹‹‹«««(KGGÇÜÜÜŽ;ÐEÒ2A£óåÚ5Vtݵy€¤ÊB AÂCV]€TŠ¥ØÐ𯊜Ú>É‘L¾ª¦¥IˆÚÉÛRíÊpH,4{’Ã&ªÔA+Ž´ÿQ¸*m°¥»e¯'ÉJ•(çúòm(ájrÔgÙÌÕMšyårʉú톴Ñýëò>7š-PæUÑ%Q´æ´x&à™\utQ!¥Ze˜ ¨ymª® Óš3|¢Ó¦m:Ô3âÖäé®<š¶îÛ·/´¤Ìs<‡¬ä;;‡;;;òùr¥Ò]©,ºk$ë}}ÛúûÑÄ·nݺêBÔZš MžÐÆ&&&(ë”?©ÑV,éGX·.Ù’UÒeÉ¥V¥ÞèÜTÀð®VVVnß¾ ÿð‡?PYð\(zè¡?þñ;w5¬® ©EÒ‚ê—¶Ü«rL·d­ԖZV®‘4ßÚ¬n#¥ 4i{ZfàSŠœÌ‰_¨lHAÒEk,“b±xëÖ-Ú‘>22BÇ*ƒÉC‡=ýôÓtWý¦Wä¨IõHSFùÍ=)ÝøEéh3¹p£dÑ Ý¢AuŠÞ‘” E Ôl¨"G»æ"…Íwö/Ï Á¥éX¾¢ñFŸ>¤U½ uDÙ<ñ ÕMtP/c.𲫒uD¸orêô]ë Dm$Flèd(oATÏ” ª þÉ@îdÕD—º#Z2Є¹®¯„ÉgepÚnBÉžl{æ>}”kþ ×B.Š’dY_KµkË¥R¸3wÚŠK›òî‡O¾M249tx…_éB[©­ …DպȪOy }Á”aÊ­ì¯EMƒ¤mŒ$ºHšSéW(Â\WžIQFn/]ºD%’<“Îw²}ª„ÃÒj%åV®tdÃ0õ̔ϗ^zI5‘ †¶³Éx„Ûê½%Í@ž™ggÓíÀïé3ªR©„?åšµ¸a­úÅ_¤Y‚fÚ•©²²#— ªQûvœŠ!§´›&Ž´‰CšúÅýëýröF¯h· ²húR ³²‘£þŸÿügô†]]]È9”§;wî@-xâ‰'PÁ }S*Kž{™½ûü½'åí6±ríD Uû&±‘â$7«Ë“"U!,×¾:Ñ$Dö²ùIUU“OËQ»OHUÒZV–ºÉO¾¶¹Q!Ãm^€*Õ‰&p³ô· %KKßPÀú)˜‘@ß•¾ð ««« ”^¿~®VBÏX(ð¼©Y5ùû—ÏÕÖBUãT`ò  i¢ªØ¨›hÊÊç=Rm§„hbúÉ'ŸhâÍ­•&Ÿ›º¦ $SKQO5”Ý·ºÅým\ž¼äK¸Mr¢Ö!ÈZ¦$´P²²û“ϱ´wiÏR å]êB™2Q„ZO«f;3†UÞT­Kí«}“«_kbžCyö±<õÔ_ìÝ»“TŒý/^Ä …(¼µ666VVVàÞ×ׇQm¯ :g#”kg"Ê Ÿ¥ž;`]A4Òqtô ô€«W¯Â}"¨~â‰'@àf7l 4§„´0˜p£9á3`cÞ¿¼¼ÒÛ»evveÛ¶— …5Ìõ…c£<~á@˘¼ÒÀO×ߥ˜9M#³ï2b¬@Nggçžé½!†ÿééidºÔÄÄÄ3Ï<U€V%Ûù:ß bH·Ù$¤µÁ„3MŸ{mm­TZ™ùaq±rëÖJ¹,Ö×o¢¯vå*[ åŽ\¥³Zîxµ^Ù¶mÆýÊ“Z¹FÔGĘÇXo¸+D«å²³zÒÙÙš×ÖV:;«•Ê*~Á%4ååù|>옦VA¹Lß‘„õ © i%¤UÁ„3Í  Óý¥¥RggïåË߯¯÷‹]dµ^[ýÕ®ÎÒ@çRïÆ †úb¹¼¼±±òÃÛ|£ÚtFÜ}"w?ùäcW(õ÷÷•Ý• 6-/¯¬¯;'¥OOÿ±PèíïOÿ»ØæÄÒÒ †ü{î¹_ˆæ8¶™Á`0Ú>òJ¥º²²¾¼Ü›Ë ÍÏ÷õô ttˆ…±{G%·²´£ZÞ²t·ùÖ‚»ÝwýV*•J @ne”‹MH½àîõpÆþ‡Þ‰éþîÝ;+ÎÅ PÖÖÖ…³ø²ÑÓÓ“Ëu´0 nÞ¼ ¼zõ6h©Ó± í#` ƒ>&£kk¹jµ³!ú*•-kk˜žíØ!:»6ð[èß6°6×·^(‹Žü– tÝÝ•Š ½‘ }PÔÂt­ % ÿù|®¿¿eKjÙÙ\¹¼NË"e‹ƒ›¤´ˆû·Â†Y^^¦­¬´Ç"(”ª.x¿h4[“G‡ÊÕ™ æcTŠ99zˆê¢eIx6H«Û­½¼šb½uG­à’dß|úVŠe–êͰt1xö•¨ºÒË<[òì¿q¯£#×Ù‰³·£c \èéØÚµQí¥‡+ÝK»û ù¥þÞ½}K·ç:†s˜¾æoäá_ÔZæ¥K—èl„Ö¶CØúûû0ûGÕìßÿ“Fg§)°´T¾ysÌØx.×Îȵ“æB' ØgŸ}F÷d˜w¨ú¨êØnÿôQ¨ tkç7ß|ƒ„|ƒøŠe €N¡“Åðç¾}ûdIçù€ÙcúVŠ$ÊÛ½‘–œz-xÙsQ8¹ KÔ]È[|ÔKZE­WA=>óÌ3ÔÉâ™î+®HæSfxG)ž{î9êXUQ‡M*ZÁµ‹­éäJõx8陎¤¤ƒëËÊ‘2AgldÀpÞ]¦³[òîɰåÚ- Ò³Ì½%mŒb¨½Ì³%Ïÿøú?tuwWV¡n¬7ªÕ;værÝKK«==Bôì¬n+XøjW×Ý-‹7¶¬ÍóCwsÛ¯,l¹½’[^+nìÞ±sp`ÀÙ0X*•666ðK‡‹Åùùù®®.üÙÙÙ‰?ñ@~®_¿Ž_º_.½½½ðŸËåˆeºùöíÛÔwtºPõ¤Eþñ•JeÁÝ‘@¿tå å~äA¤t?oÆp«§tóæõÝ»·åóÛ¶ eŸ‡fÃìì|¹\¹yóîîÝäóógpxçÎo¿ýÏä™nS„”“€yEŽìòåËt6 žIÀä'¬R¡(@hœC ø§¾AHŠ|¥ºr•.P(ü‚®xÌ ^¹r…šÒÔÔÔÎ;AÈÁ/Ù·RÀ{jŒÔNÁ°Ö–ñVKî‹/¾@üè°8Ÿ>øàÅ‹áŽ~Ì„pùòË/Ñq#üP(Ô2òFõKYúüóÏ‘(*2 ?译"PtšTûð\®Ý^øÉ'ŸÐYðF&—¾¾>¬+Ï(8²© {öìÁ+Ê<ÉQšw‰…<“”âYÉt£&“¤ßÔ•aü wºý™‚Cf@Þ"çÔ“ýõ×tú;¢ºvíÞÂñS ©ÓË<Ûóh ûÁ ”†ÁáŽB¹²}Wg¿(ö¡ìZÊm½»6ðÇë•BÿÚº÷þ¤c}ýÞÌ~bb‚´!d”x¤1›ToRÃéwr$3ÑJgµjêiI€TÆÉ'Ni~NѪáB·Í‚M÷"ЩÈðCw Щ‚õ¶VMØðO¸‹¥gúu¿ô£çtØ&!eQ¸Z<Ý5@ 5É’¦àÃ… $]::!‹¶à™Ú’*¢v÷ b~饗¨¹ÊËåòîQ6ZšÚ¾©A…±ÔN…{*ŠŠPLºI^¤F³"o¥Ð˜ Þîh¤èg—j·«m™.ûP“#}NšîÊž‹Âé—,42Ûê6R*.j‹8rÞF‡±“t t)»p/gÃ3òÂR¶¥ ](œîb—gµrï‚<}Vܽ5B¡[«”Ut¹È*êˆük2Yo†å9ß7nÜ 9Ò¢«iñ'51pŽ·Ò²M¥Së(3yfž5øzŽá?Ÿ[Û5TÞ³eaOïüöÎÙ=ýKùBN¬–VúwÍ.uÏ–·,»: ]K+¹žô¦j¥R–é‘n š. … Ý@'õ"ÓÒ™,è~¯¾úŠ.‘£{}~eXÕŠ(í-tÞ¢a㪉 ÷üQ„BêTä§~÷|dž[OË7nܾzõú7ß|‡_<Ã%ÅLªIXÆOLc‚¾¼¼‚ߥ¥üS×SÌžñ{÷î<=“ZJ)¨ýЂ]Ô!oìPŒFéB32щ¤‚vHU•¤‘ÒÚï¢ÆÞ’*™AI,Õív󌑯MJ£#]õ+\{8øG#’ ¥A•Ú@ ÝšJso[Ö’£ËKòÊÍ¢²»”.B¹0BÑ•¾²ïV»ò|íö?ºîO^ó¨Nݨ~©˜´A ý†tõé4´‚C%¢«‰º·PŽT Òqɸ¥_'Â}e²Þ ‹Ú+Ý>GÚ¡P3¸Ð5Kr8(g¸Á–y6óìo¨TDGµ²¶PÜ–_\/–7zó]¢cp ØU(¶.vw\›,å ‹K+[¶`–à˜ J¥²\‡³( í²g$¦h¨†»¼'ž.?}ŠðS—¤c¾vÛ7½El–èXrïn§yébx…?É)_[¨“=!ÆN –TŠþþ>šs§ù½á¿îÇ÷Ýî9kæø)Fqh øóàÁÇ„ åõL A¡yæÿgï]›£X²sáì[õUbÃ04°7/Ì00³Íœ±åáˆùàðÏp„ÿî|8/öyclÇ«8c4Þ{ËÈÚæ"À…¡»úRÝÕ}ž®‡Z³TUÝj±Õ’¹¤¨¨ÎÊëÊ•+W®Ì\ëö ×ÍŠyv.§ 9˜Æͦ97k’cƤ²Wœg›à´—P,©Ñì]H’.EhËá§8иwˆ)cŠ.ÑpFÜçi£ØN1ŒÎá&õXÖe¨¸’ïítßJr°Ë§v áìuÌêç“èl¼’Ó¹(—H5†ñµ˜‡Þźá <îI£b<¶¢ñ¬S ÉE1Š î+† yÈx#7¦_Pfå.[ñéJ÷Q_Áâ¹ ž;Ý0)Ï-VFß®sʼnГ¬3ôÅfþìš7´ZM¦ ٌۼ8émmyçÎ5“Éd«…ñœEµ8~ÐøÙÙYLç¡"Ñ7®Ä1=‹Ø2’wßðÔвG£-dé‡nèN§¦òü»ï1‰®¯o ŸÁ }ÿþÏ822ÄIªiÓV™I|õu!  éÞ9ý¿y³Šçüü¢¤Å$­—æŒO¿ØŒC‰dn‹¶óT`:¿uë7SÔa®«ŠŒ÷7® \ˆZh„›Á?Ç!hÚõýeù¹•8-}ôâ[Ž€ ÅÎÍÍÉH‹:ÂPsè¤ÊøTÍ#c'J·ôÑÀU0 Tб) ‰>¸©†Û)ˆ@µ…'ôÝŠ3¾ì¥î;þ)h†°ÆWÝ3•^îÈ!!Êj²fpƒûŠz À%€{‘dMä³è_† 9æ°W«Ñ†“=ÆâYf.–4BÃD~”&Ã(Žk_Ž#T˜3«ž©²&%È‘:ÝGý°,ž{ÁsG@*‘t+^¾”*&ÜÁVÅ+xŽI¹^Éqë9ã$vR¥ÔÒ“wçF6_¬ìäS…D3¯Ç•h?X¤øÓˆ8TÍÉ,ÎQJ­H0“}ü¤ÃbæÆn£¨Eá+$)AeщCÜàrs'fGHxá,îS[™Óy°‚ß 6žÏ`†. ”  i÷Vÿ°m/«ÿÅŧSS—|Ú-rJÖi××ÿ$g0ÿ7oÞùi!‘ Q†f…økkœ"ý ¾v}×ÿ/Kd`ß>dΘød>–™:¾w݃œ°5m8éY ¡¶ ´DŠ2Ó®¥55róH®pzÐ”É 9€~dK™#ÑŠÏÔvr}O'¸ÕÄÄ–wê¤ 9%Æ„i´Ç'ŸL„˜€xèü³5SÅR‹á)!22Ä¥3fPLÞKKm=<§Ø‡瑜³òÊÊ;È ˜h¯_Çú¦ˆ•7$`™¼|¹ŒiøûïÛ Ê >Jß!2•ö˜¡'&Fggÿ€$ˆ†ùÿîwÿù£Ü™™¯u‰ˆsÿþÏ_¾| ¡OÄçVdd‚ÊèäAd$ÄÄ/•DÒÊMH¿áîüüÓ[·Ð³gºhhäT­tŸëAç.>õ´HÎ †öB›~×»æ2¶eKšÊŠ•óð!õÃ' Üb㿎²¬§ÇQHûb‚Ã:fï7æ“]Ʊ þEåʾÅÕÚjŠÖp #öÏÐ|©ÅE‹"»„ôF½„žMp`EhRÒ‰ÓêN9 3‰œÈѧÞ¢y5WÃTÂKZ›mñ|”xŽ÷ ”LšLÖ©ï¿wšÉFòý†›2^©ØJ%©á‚©o™bÊÔk•óÃXf¶Ò&[ÈJ…\.W(´[nÒTA«–DÇ 7J*xØ¢D'î„0+É…×Hߘ@,yž|m-«‡…òüü÷œh1_î½ÁÒ>9ˆÙÓ-&i¼ã1ñtÚG.ƺçÏŽ\Þ£J€çö%¥Ÿð)ì9Û09Cû§Ó‹Œ†¡É€:©äNûèháãÐâìÝÄâÒ }Š…0£®áSBäE’k2“ŸÌV/õä=”DŸÓÑ\ภçp@¦:m35:6£ÃMw“Ù;ÆåìÈÜÜœŒeGí î[œ ‚t‹¥’V·•÷Øz4ä¸ð,d&¾•Z21çÕÕ>2 k¼i©+Ä«%~(äØéùóÄsŒÐjµ …ÜææÎÅ©ñݪWo¶2iÏswZT"™¨7L2›ôɬ“H¦Vs¨TLe2…b1›ÍRЉí sÀ-6k9F¡Wð²b;”²N€0GÊ|l>LE™’™´âkæw1ëc-½A Ï ú>xÚ™c9îS[=T(Í›6Qž1ÁŒŽwÄô§Ïn*n˜£‘ý¾Ú§’=£%¦O9ßÿÅ_üEhÝ&tÒïEù'MiZÔ;Þb›‹ 2ÁرÜ{q½×*6O]±hÍ{ 9F<ÇFî‘û†»W¦Çú.X<ï[\Œ€™–Vï×¶w+n¥Ööù± “ië Óð¼V³•L$RÉV.“*dÓƒ(@/ ëBÙÉ_Ál33œø9ËñÀ—/__¹rIŽ÷suΘã㣘ÔñÂÓyoÞ¬^¿~Õø3½œàá»[·n,.>EnX‘óbE 1݃hþê|WJÇO䌧Á?ßYÐê_WžÉ1å3•®äázC8âu›…ŸÉX¶`áÓ‚ ™L‚kŸ93Îæv«îÛš×l5¼f"‘h4[x¯yõVËÔÝÆƒ™Lrd¤˜Í¤ŠùìáZE=šeÜI.Öù¯ôã§?³ÖyÚîûïŸ2üÞ½ö¼™™¯!" ÎÎNùîÝ[œe××7Û“1± —Û€¦}²é< ¤Å'Ì5ä°ÊèÊëä(ÏRéçëë›RI­–øápÄë6  ŸÏX¶`áÓ‚xïÀ®ƒƒƒ&]Od›n9“Nºf*•h6[õ¦ÉÖꕚWk”ÿ¸Ö¼:Q¨·œ¡\Ö·ºŸé~¬vqq‘–´%&:b¢1E1‰ðq]-¥—Ù½SÝú ¼SGƒz æ°=çõö5æÊ?CËîØ¯&8c¨ ™éO+ûµµMß¡Ã;¦9Óc•KêA\=ú¦ùk‰Ï]çÀ´ÑŽ˜ð3á@ß⥥í±ãè›v¼€Èâr‡X ëue9Äb´ÿŽRœ}î^ bêÛÒ½„èþbVü*æØt¡Î=h|‹g‹çÓ‡ç  }Ö¯îye÷¿×wßí4j‰Ô½w·Ýæn#‘2é­TÒ¼-ß¹8N%’é”›h–w+©f£\®òéD"+m±NR1ÂOtÞJ‹ÊŽ2$ùÈo²rÚmS¸ŽæI·‰N`œ=ŠÙ†bh&,”ƒÔ-ê"¢À)Y{îáœÊ£õzòî™ ÿ”[ÈoìWêçÅé€1{d}i†¤O™êpýÿv|ÆúÐu$mÓn¶ë»õC4Z±¥1Ú—>ÐåÌÌŒï8ýóžºñG;¥OŽÍ$¾ ,‹u-X¤(Yê„&nPhât|¿ØÇ+ìŽ7YÃ7dÚÍÕfË$2ÍnÒ i-Ì9¤b ¤‚»á ™šš"ë@}˜*äš™£˜NVXħMÇ7©/‹ ËîßôÍï³Å³ÅóIÀsêïÿîoÓ™L¥\Þ†øP®4[­sç&L&—ÌŸ¾ÛõR©ïww«µdË ¦ë[•D½•2MÇ«ŽŸ)e­z­Q-ï$Œ{vx Ÿw T«Õ­­­f³‰'ÍV*•ÍÍÍt:½¼¼ŒpzÇ×|>ÿîÝ;×7П/^¼ôWÄßqð;üÄâ~||Œ·üƒø®o{x—E tÞè£üA³Ä¡Ì?”êLàÝu<úõ Ù¾v´±Ù:«_‚„ö.egR „wrÓ4*beÄŠ8âS"*&ã §ö2(L@œÜ8Þ£N`š”~Ì EÃäeÜ\>Eì¡!d‚T{DÑâ§¡‚è Å ü…j›çbÔ™S¦¢K°Ðf™üd¿ùN`ŸÕD˜ì¾ñû´*°x¶x> xŽ‘ªXà'“ÏßíÔ2¹·o6ÝVz×MÏŒ9{vòüÙ/&†/Œ•&Î5‰V[о"Øjµjµöš‰žZÀñÄOLö2+ã»èÕ˜¼Ë ^‹NÜ›vÀeWÆUGÀ˜›8Q ’VNèÈŽ:îÍA9àòýúõ«œS1 s–å‚óîððž´ói`bbÌŸH&Ÿ=û£ 64Ц¢!CúéÑqðŽLüøŠ§?ñ¿£b/ÈSfwH ¾=ÁI^Gäõ?T†nC™÷Dª`H¥]BÓK=žüÙû´*ªþXá]J$¥ñI¾ !& *_Šz‰¯KKKàÂD‚q£äÈPÚ 8Ê0Šoß¾M/àM}IÛÒ–(ZB„gé‚ßÑC/Íça I¥=58Êa+_@'ˆ‰îƒHÇ:ÐpñEÍkñlñ|*ñ{ Q­7=“Üܬ:©ÄÖN5™Ì¼÷.{&»^oäSÞ@>—÷*£¥/ž‡Ù¿m)À×P½ÉÓv>°ôaUX?ÑßÆÎ²NàyÝøŽ¢ˆ§LtpD¶.'À9냽â§( ¤\G™,%éºÔ­ ÎyïÞ½…7~þîwÿÞý©zOÌÁSS?â ¾^\Q@õþââ3D@L_ŠmŸxùòõÈÿ5"-ž-žO+žct­öyº„—HO g ig,gJÙÌÐà ÉäÆÏ&F‡‡Óîä¹sÙŒ“NdZ&Ñj"I«ÕúS!í‡pdÎßÔÖŠDYý‹CÃó1QÒRÁ+~C/,+-¾‰K¹,QÖX¥$ÖíèÝs©½¶Ö^X¯¬¬rîS[[ëŽé“4ôÓËÎõëW "à%ÖËRùëûU¼¬­m"‚Oèõ@{¿Ë{}Æ?a ¹îgé2ý3_\h‹&ô HÕ‚¯qÙäFC?Æm„ èr›»9<Ç+dênD ˜ÏéV|V¹ÁU`³W¤À°A[0ïÞ½+j@(‹3üšN„„¢DEêqdŠ[¼qš#—A#ÔØ.«"`X»Cµ‰Cjõ=^9‡«±B‹Ý"… Ò_£h7Êñ Ƹ®^”TtϲªÈì=ËóÛú*»’MLÛ€™™™pO^Ñ=>Ý‘[<[<ŸV<'ž|?ŸËÞ¯®.¿~ýöÝû†×üÉ—·ÎžË [z»ûêíöêû­ÝõÝ­­„×È;f [ÈÒCÙR*—®ï¸[åMog}|,scúG#Éd’[òl€¬rØêRø~‡^‚BuÁÙ7fïí|ÁµQNÇ]uºË‹ Q›\Ð _Ö^"â.!¢¥;;óós·n]VhÞ³/¦ÕùùE.¯¹)€iuqñõÿ𜚺äßxÍ:ß¾}ƒ¢fqúðMô¸<®ÿÝw‹ÁíÒ¶”àK ïèÀ´Õ§¼5Àão 0ñ1ÓÓŠ0r@><…Q`vöˆçÃ!ö3¹Gƒƒq8y±³ãÎÏ?½uën©t†ÚªXSµÒwò³ÓÓQþ‚…œœV G¸Lw#œ½6$Ä8„îÐÛ Æ7e¡IÝ ìêÍ–Û‰˜5q2¼Ô›’~·9!z3E*騭J9$ÅŸ‚¥N@÷à¾é {NÄœ‹`ÌU‡$ÜUÇ{õi,¡¢îñû¤´x¶x>!xŽ‘¾ú~:znbxt|m«º¾Y^Xx±¹¾¹ö~£åÕ1Áç²þ5›IšTë»Õr.›š8—ûêË«££C…BAŸŒˆNqÍ?-±Aß¾}[”üLèîµã(š Á{/ÝŠBV³´×pìaA¬à7³ìïÓ—µw>NÕ¾Ç^jŠ>¸åõ?xÙ Ýä%½Í௉?|5‡!-5,‡Û@È0ðGá¤W Ôw¡.‹} ˜½öƒ2å!”² ¢ÀRÄx§Ä ‘z,*d«Ët&æP„ã’XU"Ä l¦JcÂÝ:a©Ð=ØKA]Ð.©ö­«v|B”£3ß¿…©Å³ÅóIÀsŒpëÖOÇÏOœ-×Ëÿýf·ìþÇ£ÿÀÜ¿±¶^(a¾Â³îÖ!`4^*“,äœ3gŠÓצ°"è±c´´%RØq1¾#€N€6 L-½LöbªáFþºR+ã=vu4‘!ô×PH'«ÀŒ£«ôÃ=ýô.X°`Á‚…C‡x¿ÍF=ÑlÔ¶×KY³õ~}zêüÆÆæ¹‘/Ú²Æø™J¥R*µ·9}ûe™R±˜Ãó@“§n—–úéâ$C ¬Ž×¢Ónà¾9ô’¡V{D¿vhΫdÁ‚ > ˆ¹ Ðl6=Ï{óæM½îþó?ÿ.›M>|øÿŒÿýߎŒø\Xø7„S>{vpxx¨PÈ÷nÊ”{´ãƧ ,X°ðyBŒ€éŸ{ ß|óÍ7þøÇ?þêW¿Z[[ûË¿üË­­-<ß¿ïÞ½ÿüÏÿäNC¡PÈf³Ý][°`Á‚ NÄÌÙ< ÷êÕ«éééÙÙÙ_þò—¿ÿýïïß¿w>ïÞ½ûÿø¿øÅ/à(é}ÒÀú7oÞ­¯'Ž».'^¾\vÝ–0´`Á‚ G qÞ=O®„!ÇÉÆ$º÷Nì™Þ}Ä€ÎÊD\|®Ì‰¡ÌhÝB7qÌAŽ+÷ŽÉ.G¯:mör¡îÕ;h|‹g‹çS†ç  ÙlbjÇsddÿèè( ™íîîòâÙ³g···‘Ýëׯ[m{À®´_îGêkNýcpÑB{ÿzÄàŸçÏáÿåËw¾›àÍc¬Ì¡Cpñƒ_,ÿ&jÛô•-è˜ 4m{™ããçK¥AH½!^:B†#»Ö*LnÄ€orñO^:Ž ]'…2£ÓÖ8ðîD®,‡XŒv¨Ñ㙞hAìV}[º—ÝwrÃÈ(£ºˆPG4¾Å³ÅóéÃsÇ{™ÂçææØ¶©©©ÅÅEdñ“Ÿü„·ÌÓé4½¤›àÒ$"ÐÎËøþûï‘j¯+Û=W$µDf‚™d›D³~6˜`o©Í¨Ëš4:4??O«OtZx\Ü–íº{÷—˜þýê©ÙÁ¾çø••7##çž=[¢WZ¤.¸rejm­í%rvvöâÅ)„ø$¤®\¹  »F0º›¢< ¸wïž«,CHç:Á=ÝXàôOªf¿ÐÇF§Ë»´&fö·0Ê÷4ë¯ ¬“ñ±IŽÁBg€ÇK™! ‰ šµ%Zž={F¬Ò–ª6[&‘©,ß]EÌ9¤n ¤]0»§Ì 3¡mÔ'°yµÇ-8ù{ûömÖñi]Ôñ-²£e‰²o|¹Å³ÅóéÃsêïÿîoÓ™L¥\ÞÆlZ®4[­¡¡3…B!™LæóùJ¥244”J¥±P3ccc4©Ûh4è‰çüù󈌅,//#>$Ç7v†„Õjá‰D?›>à…æ¸µµÅw´¹¹‰„Ä/ýÇ&ïFÈ!Hµ´´„ªRuÁ ÏóðħÕÕUZI4î.:½_X8t`õ²Ù•§æßóZè‡ÝÝÊÇÿ69ùÅÐÐðÈÈèàà0÷ÜÙ)//¯ N>_|óæÝ¥K—²ºº6:z.•J_¾<µ¹¹…‰Âxìy>p^ŸžžÉ¡CA]B|g×w!„ƒ é„dƒ' S"9é¹…èó7å]Ð*òÇ'd…!€„!‰2²$ìDähR±Ü“@™¨!žOž<™œœDQ±G¡ÂÏŸ?ÇØw|O£ø¼¡æ¬°ô PŠøxǧŠ€=6\/%­PAHæ…ÎÅ× .<|øá`©\T daaü©‡©ÀpX12+ún!®á'Âéå™ÉÁ(ÀÇð5GröZ÷øb×ÜâÙâùTâ¹Ûé}šTÄj m¦Ñr:Yùúë¯9©ëÈ”žBnU‘Ås¥ÎE0ŽŸ´ÉLËÉĵóÁÖ숔b“påGûÆ,hÂWÄœ™™¡‚V‘Q:="°ÍÚíÒÑÅ´Sydree…bìýû÷јÎÅ!ˆNùíoË®A—¡;è£z¹^¨º¾ÉL:Þ%a ßQ.º»;0iN^"D‡v®Ú!AÓ¸7Ê¡ÎÎÎ"s 0 úd¡º”.DNµÁ ¡Ì’Q mdˆ6oìFÇÄ*ªî ©ÐjôuEl¸^…„ ×ÞÂ=´Sf)?¥kLÄ9:âà+HÂ|°bÙÎôIŒ| ¥S£É<»ÇçÍâÙâù´â9æ6 —e`ëwïÞÅäÊpÀ}—k‚_ʘP-ú2m—µmœ’3RAA,pú‡ „$xvJB' ¢­¥“x ,?ñnnüÍ Ù 7¹“£h=eÀ.z½ ŠDé½4™9ωÛ*ŸáÝ‹`PÈxìMM˜bQNü¦+8Êá$…bº¥¼Lÿ!:Dr.ñÅ–%ån°!ZM€LfÑ…ÈÅ{Ö ¤L'0h Ìðü/å9ö#W§¤_Ø­TDQ¤îG“Bq§ÆQ>E…~$Ä(+ULuëÖ-½§’–þßèˆÁD˜ì¾ñ÷%N‹g‹çOÏ=é Dp½B_g¿þõ¯£:€ÈÉñÎÂmTÙ¹ßõAp*©´ ›ˆ£ ã.‚œPªŠJRÓ‚h¥À#°Xi¶pèàú¨ðòEobJÃÀàÍ‘ØøìDCG㉹cIÓq…¢,Ð&~I…~ˆª?V`Gά)™~<5m‹8Ï|P%*':y”kwîî r7•§:õ¤?réÜÐ2@ÚEQ(‚´WÄ=íç´°‹™Ê¨}M2qÉJ#†`‡lÑ)¤4„þGz‰/j^‹g‹çS‰çn=aéi•»›È‚&ü¸7ŠOtoJH(«îÌf§ÊŒrõëFNxI¶VúÆ’Nô(™ˆ'juú@è•ó%¨EÆŒ z^2é×øC…jqºõ™©þˆžÚíDB¨ gÑÚxlYxÑý胋zŽ7óéBäÎ^8îüpU„NᶺŒk9½¨;W8 =˜ DQ$ §fY~邜àè1¥%­°‘V<`*½"«öDq”®xL&Ç„÷ŸÏϧÏÉîè3þ±IÔì™|1§v©:yf›,˜ ”B ¹-UÁA/vOBÆ"–––Lpí­¢‡¦;òµOZ& B©CßQé$‡¨TÇ‚¶œ}ãtˆ$:ò¾ …\^ä,„šÐ»€&T >ªQ7QýIµQCf®ýM;JÃÆy]ûôd¡"?i”Éš`U®!2›@+Ô_TÂqa¡1B‘4\(Ñ‚ô×h˜?yµ(aàëêE‰D÷2«Êã èežßÖ+³îñ{'N‹g‹çOÏñwhä‡7.]ºtþüù©©©k×®MùËå*•J­VÓwÂÃMÔÍÅx¹páÏg!ÂÖÖÞÇÆÆxøËó<¬“Øl”ÂÛ››ˆÐ%É;wˆ8|B¹]^^FDÃËÓÓÓàìø„˜«««Õjï©TêD-¹N ð²H™'ê¯_¿´ó$m6›EŸr²°°€n¢¢ˆ7H%ò¾]zH§Óèw•ã—m¼}ûVh !ÈùæÍ›]15¡9 ÈíÅ‹lrC B&¤Ã!ð“K„f³yùòe»îñyâäЯiX<[<Ÿ<Çx¾|yjppílµZ¼a媫ÌHžÎxþüç?çy= j×콜--.q½îú6Œ¯£`1Ð)‰Qø³nŒÃ­¹¢-†Ÿø©Gó¢}rÓNàîÙ @"Ë U&ä2½Gßвé®õiR¨ ¶Õ»€±DñÜø{:71Ö¢CÙ¹Ðû ²M U%åw'r ?!”©G±n`hвDûøÖ ¡HÎZ &™¶{A:CÁ¤1ç"Ø#Gb}$œG:Ø:}K´•Ýã÷B–ÏÏŸ.žc$€+W®ñ¦57û“ÉðNÂ766  Á_ýõ™3g È&ŠðAÙÖs€³w›@ ‚SL*±I„×Gã‹^%ôI—uøìéé}þ =Zº[ÕØ·£ÈÝìµyÙ…–B4¡JB¹u±L¥ðN9PÅNeêQì6S£P:·ÆB(ÒC2ÔwÝ êÒ’jßú„Ö$F¤Î<6~Ÿ:ÅâÙâù„à9F¸qã«B¡€¨ß~û-5¥bø€ŸétqîܹÃûT§òš» ,X°pŠ!æ.@*•ÂŒŽ9þÆïÞ½«ÕjžçéƒV«•H$xÖ‰ûÇÝ ,X°`ÁÂÁ æ.@2™ÄôŸÏçÇi4ÔEx êõ:âÈ lž®:î†X°`Á‚ ñö2™ $€ÑÑQLöô /*”Ëeš,~öìÙÄÄ/Rb8îæX°`Á‚ z‚ŽdÅoü}=»7š‰DâÉ“'?þñÓé4=(¸ëʱ ˆ‡I™ÎG«ÌIu©náSKQ,XøÌ¡›M@Nü´` ÖúŒ¿M@GI/_¾ÄË»wï~õ«_A,0êÞT~*—Çø®ïïi ±©zÉßÂÑC¿ïüÙ:zØ×rö¥ºÏb»Ò¨Û ¡’æŠÉ.°ª’‰Ž=n­«aöX¿ÄPÃz,¼w<÷ÃÒ¥zoñ|dxî&0ƒÿ4šè׫pÏýèG< °±±AAŽo™®»Üàô¿¶¶F“Š4žêøÎånß¾Ý)-Çp/ù[8b‘Î .Ó£§(2êéµ ‘÷•?Nþs÷)£;Õ}nÛ•b,A¢…˜Žx=‹i]Oé;Ó½„hbVü*7²HuÚ8«6ÀJBJ…îüm8-ž…®†‡X¹xÛ ÕÿØ1ììµÌÑoñ|”xÞO0í¡ßÎýåKdô9UwñtòN­ÑÂ_³ÙDx£Ñ1ò?½UIkB´Ÿ,·0¯Ó®r(­ŒØÞó?Ðs ?D¤£§,ÇwGa|ì”ï¾û}MÀ³³³ô_é®rµ‡ÍNEDå¿}/ï pú1Éøø8"ܺu 5Ù—ê>C |FŸËø955%,’FÑ_®²@‚ø+++ôvÈ®$8q;¢6BÅi§ÌnÄM3CP%vêÃT!"×£«2Y¼“DñUHΨµ>W#tCF©CL\ׇNÖŒ±J¼b *Jd$D•hq²½Ú`¡áï^@YÉ}ã›ý8€ÅsŸðcx||b``Ík«ú—WsN¾ö‡ÿh‹¯žþ×òòËÿõÿýïïŸþçó—/ÏŽŸky­b¡ˆÕÿ… Êår>Ÿ_ZZ¢­D¼£6‰D‚ø¢âwïÞ¹¾DxñâÅàà iHá¯^½š˜˜ÐiÅ‘Q*•Z]]­T*½äZCül™øˆ¬Z­Òµ.ðb@7ÑyR£¯Ñwè>m¿~ýýˆÈ£££x§­JÚ¢Ž®2———‘ŠUHî(w_2 w¾Ç“‰Ñˆo/Twܨ=j@7áùäÉ“ÉÉIÚ=EWâ8üæ›oˆ: QŽýòD0ÆæóçÏñN¯]À!!OZ>F4à<Ô5BÔoúŠaüDxhøiøÊ.Fà¼{|²‹C³,ž÷Åó~:ÇÙ]w›Ã_ÿ¿ß®½yó/³åwså·Wîb1W»yó«zb@Gw}C†œæ£‚åz@Â;m³ãµ„†:!¤…{ïÞ=ŠiZE³oþ€>‰í:å_tçà5(–Ò[.Þ!Šþö·¿å;⃠‹ÞÐNAAøFµ]È€SÒr-k“½½SÝçì²+W®p¹l|ñ=\aAWò½£ŠycöV0œûñ‚´ìzgF8ø,51¡®Á×Pq´i*ôàîuÓlVK³çRí‹tÄ¡žÉ{¢²ny bŒO†È¢—£.1$9½q£Y9‰ ©P4 ˜Ò1£^º‘ØL#¹vñr~èx†HD‡™D= jêE+Ä}%éV0LO6x S2¦Öºß6†h2Û7~ŸFœÅsw<ï#8Eg}×¹šýçÛxº\X­x¥Òm'_úÙO϶­tºšh5w0q‚Ù{¨˜!dèâ˜ìâ9+!"LõžÿgËÁHg xLè ðzãÓe'¡žCñ1„0ÁP+p ‰MÄÛÉ ãÃuP"åN~¥:9«øywyFÒø®Eñ¼ /@p=y²¯Ù‰²Ö—¯Ô±k”†F¨./ÚåyÐLJåÜ…5Ñ÷;XJ'\З|¿Ì²QEÅ$=µËެ1ý™ŸtÃ)Èâx¾èƒž]4Ýj ³¡2¦úŠa¾„†?* î%~vañÜW<ï³ €ŠÃÅ?üû~ù«Q3¼^ºÒj½©}åºg.L ;©"НÕjíÌ]ÿ6 y¼@ÿñF `»¬?™@jCqfÅ;uS  78½O`©uteMÿÑÜÓ¡²+äï1 $Nóâôï@•$Pýý¤©N‹áŸpU„NáA] gìJW˜Ùìq.—ÙÆ—jNü&ïTœ N~HGP…³¸ åÜüàÁ¦¢^Aæ{aÖrð[DC'ðI Ã¥sįä" |“þ‚æ˜Ã>¦m8™a,žC¢ªFˆ`˜ÈçL Çe™ÛW s¤sŒ›`øëɯ—ø <z¶xáyVwÈùg?»¼½ýzh(õ‹_|ù›ßüæ¯ÿú¯ÿê¯þêâÅ+çÎ MÞNrÐ—ã øâ4¯WÿŒ#ÎMF#?QEƒ$Xœ±”^òÿœWoÇ2³½ˆ^»{÷®t.…n<ÈÃäÆïGεÔPí{bCæo¬Æäº‹Ù ˜?¾¢ üYNT÷Ùž ­8ïéˆ-ê<ñê/.t0kÞ÷/ˆ ¬‡q(ë‹ÃSÝ5±Åéå{¨gM0#7ðImˆŽÌRЭˆOÃÉ^X=’O†“2%¤úüáxf£À¸Y‡ž©há.„&”{˜2èˆÃ#Àpìðç9yŠû½Äï’-ž{Ás7@«Õò›Íêÿø_qWŒæÿðüÑ®!ÓD¢¶µµeŸ%Gà…á)! °dpbÁv 'âuÜQ¨T*ÓÓÓoß¾ÇÒ_¤ „SÊÀÜ `ppðìÙ³Ý×Ü!Ùêпó·ðI€%ƒ ¶k,X8#Ð`êêêj"‘øýïãÆù—¹ÿþìì,Ÿ¿üå/>|øë_ÿš´1ž!tÏýØH;Êü-|`ÉàÄ‚í N&ÄÜÄôOeÝ“'O0ÍW«Õ¿ù›¿4 ÏF£ñ›ßüæÍ›7_|ñE¡PÐ×ó,X°`Á‚ ŸÄH®ëb¦õêÕôôôüüüµk×𜚚’çÕ«Wÿûß_ºt ÏZ­µ¦dÁ‚ ,X8ásðòå©¡¡!­VËøî•òù¼,‹Õju{{{sss}}ý§?ý)m­˜8+‰r 8z08öà"¡»ÆÐý‡î¡ûW ýƒXÌë@}õå w4iÉ¡Ù}vª’¦Òcñ%}’©Tðß‚´Ẋ"“Ñ´|9hˆ.1„XBìT½ƒÆ·x¶x>exŽ?J¥ðY[[¥‰AzÕDŽgÏž…€ì^¿~ )AJuÿÄúú„| £ßnÇ u&¼2Î&8O¤ïéF%€._-ô \e@{—î˜Q{ºs»!^:äÊl/rCˆXU¹¹Û{]'“JC£XŒq…®,‡XŒvÇÐã†`´ v«¾-ÝKHˆ3h"$bu¡Ž>h|‹g‹çÓ‡çŽöœà>oñÒÿàââ"²øÉO~BC=ét‚‚ @;leÃ.^¼ˆ$ÌŠ†Ã®\¹2??ÏÈ”'îÞ½+6ÝŒ?CtwÂÈF~÷Ýw4wLõƒô"½Ó™©ã;=QöI ÝMw2o¹ÔfgÑ4m"DÄ;ݹ2çC*Úè¦= ¡‚t´èb‰Ó?©šõ¤.Ž =òùBfAkbFQš(3¨ÖâˆÐÄ»ì0þà$‹®€–“F¥”Ïè+ÙW–Ÿ={&£X0&â8#Óœ" ª÷¢ï ¤ý;»Ï  ¢mñß"M„¬‰v!Ènà’•Ü7þ¾”iñlñüIã9õ÷÷·éL¦R.ocf-Wš­ÖÐЙB¡L&óù|¥RJ¥Rƒƒƒˆ=66”¡åFƒþ†ÏŸ?Èà㜘ÁmÁ(!Lþúõkäàø> '''ñ’÷Üyzz?‘œ<òòyôèÞ———oÞ¼™H$€8zò6IçÍÍM„ ª+[[[žçá‰O«««´Œˆø,°,h@G£_ÐûÕj€>æMàcûÅ‹ˆ€^@¿ÐÙ6©t9::ŠwÚªD‡v)Âóó:(†PMi‚NøN2èB 7q(‘î€ÉAÀ (æÆqN¿Úœ°ñBymAþø„¬Ð$D½ 3²$dVˆÆwDC•@ÛhR‰—„“C¥¨!žOž<ÁPEQ1ÆçÏŸcìË(ÞPsVXú(E|¼ãSEÀ®G BB0/t.¾^¸pááÇK¥ñT„,,,€T q˜ \‚#·ÑDˆŸ§Wb&ÓÃWÔÉÙkÝã Û±x¶x>•xîæ€&±ZB›éEƒ®2¾þúk„ƒµuJHqµ‡¬€´ZóPÚë™1Cž^©¨yã>Ѳ±ØQ¢–q€\üœ™™Á Ì¢n¨-½ °,íjÉBÿ€(÷F­¤ÙY4æQô·¿ý-ßi.ž3kÔrp§"ôO×7™ 2 Ð " Ot}wbÐÔŒ!œ½Dˆ ì\µC‚¦² åBþК*4…êRhxœæÁÀ£ÕTœ@*e úú3{­q»‰S±Šªû…ÒZM!/„¢¨¾'Tv.”£=>óIÍ¢T)ä]¡ì7­¬¬P #CéÔh2ÏîñŰ±Å³Åó©Äs7߀Ü#¹ÿþÝ»w1ÑòáQ\SÏÀ¢fdsz+BÜm ˆO¶ØÜxÏ0ê>ŽîÞn:îÄ 8¸ñ7,dSàŠ'G¹zê!4~d:ä<'žµèÅtÂð}3/ù¾|„rسŸœe1Å‚Þ8ñ›®Äà^¬Æç”—é±;ñ¤ë $ç_lÛQþà"`AObfB0 ©µpêt²‡bæR©˜&fÐFÚ𦗎k|>%ýÂn¥ $Š"Ýp78š*ˆ;52êµÍs ÑdÆTtæ+Ø !•´d ´Ïj"Lvßøû§Å³Åó§‹çžt"¸^A-‘ݯý먀MÅ ÷õñów¿û×UÄfëÞ9»‡ŒR60œÀÓ  BÉwIŽŠQ»$–|gMNÄÆ²…þûB{Ãì™¶bîÄXÒtÜ p½Nî$q š%QõÇ ì4ÜmeÕQâKPRq#€U¢r‚Æ!5rãîÀ=ÀDî&¢òÜ+E=é£c\œèNE¡Ò^]÷D´ŸÓNÀ.–'²¯"BY“@°C¶èRýUö¿¯^F-ž-žÏÝ$zÂÒŸ.׌s®T›Í¦ˆ¡ŒŽå]´úÈ„u÷žÞâ ¹¹|eK8ñSt/‡¢¿u”ç@¡£üÁô‰¤,„€ýÂyŽÝ­µjzÉ„„Ë!Á}R#G»r_ *äÁ!=µÛ‰8n)þ Åê¢tY²·Åm,2úàâ¹WqïÍ|¤bd\yå¡Kà¸{oO?-èn‹ Ë¸v‘Ó‹ÅÂ…Òƒ™twEÒpd(Ô*È Ž“Š3ÌPn¡|ðàSé ”¢8JW<2Œ “ã Â{‰Ï@‹g‹çÓŠçdwôÿØ$jö̾˜Î'ðÃMA˜¢æVÛ Ô¢Š¾ÖÅ0úöeˆCí`iiÉWØÊnh(Áˆ|í“fÉB,8‘v1Uë´åì§CtVt‹§{þ!Ê)î_IètzbÐó.O™€ªQ7QýIµI{N $” 6¬ K'a‹/N†¤bâ Ïñµe 9iTÊš`U®!'oØÊX¡þ¢BŽ ±Фá²@‰Ò!E3t‚ƒD`ºzˆPä?ã+/AèežßÖ+³îñ{'N‹g‹çOÏñwx*›7.]ºtþüù©©©k×®MùËå*•J­VÓw*>,,,,//¯®®B†º|ù²ã»Â;Bð²µµ5:: ü"¼_¸pAx:°À“–LÈÓR7oÞ¤(@ó4&>áù  üüÂËÓÓÓàæø„F¢ÄjµŠ÷T*u¢–Y§йÀ6°Í ot1{?›Ínnnr A—QÁλ‚ׯ_Gñ<ü¾¥¤Ói¡òxûö-ÞAXsóŽ È¦ 1 &OáQí@|ä€ ·/^ðR5O(™t‡|ÀO.šÍ&O6/HŽäŠÅã2‚ãØÆPâ‰_ H@|d{¢¨”-º0¸P^sàIéÇ#_¥¿xüÊm±Šä¨3ûC›÷wB †£]Àä†|À Èa˜J°%B^B_ãÓ;wXm äS°ëŸ'Nýš†Å³Åó Ás¼MÀÁÁA´³Õjñ†•«®2#=x:Õûxþüç?¿£îBNL¸¾¥WÝ¡tÛ "æh-±4ÁÖC)ð‹,2Kèĸ4e¹–-Æžø©G“~Øûìe®¿£çü£œž}ÅJnQÊ)ΰ5ă±DÔø{:71Öá¦{XmÙ¹Ðû ²M UeóCô̬´ s’¨”G9Z?'–þbˆøüÕ ¡HÎZ &™¶{A:CÁd,Kkc!"dÙ¯Ô§±DÑÚ=~/diñlñüéâ9F¸råoZs³?™ ï |ccrüõ×_Ÿ9sB€l¢hYÁÄÙ_4Êf 3Œ&ÔzÉGš*ï’‰`ÓÝ{ÜQ”!‡N[4HïóghèÑòqV¥£ÈÝìµy©É¦ 1˜½•”Ã.;5=3„rCl͵ÜÓcÅN•êQ,cVÀPçvÂXEzxFG}—‚ºtf)Ýë£w$Dsç.ñûÔ)ÏÏ'Ï1À_ …|>???OÕD(M«ÕJ$¹\îæÍ›£>ôc Ç‚ ,X°Ð?ˆ¹ J¥0£çr鯾ºº¾þºV+7›õFá™fÓÉåJ©T{#```BÀÙ³gOÂÚÅ‚ ,X°p ˆ‘’Éd"Ñ,sµZýÌ™l¹¼e¿ëºµš›É4qŠÅÁÁ‘½³X°`Á‚ N Äú¬§RDâýà W¯ÿG©Tk6ËÆÔ’I³²’½ví¶ãT††\Þ¯{^¦^/%“N*eå ,X°`á“X ËýµFÃY_ÿ¦P5f3™ÌåÖ¶¶ÜÑѧO¿½qãv¹Ü0&ïy&•*³[(œM§>˜`Nªûs § …Ò¢™X¶`ÁÂç1@½¾ƒ•ýû÷ßf2­Je1›-@&ð¼Z*UuœÖÄÄúææ¿zb¥œ¨VÍV~`àN½Þ8¯%9¨o· ,üpˆžé5ÁÕ^Ãëd8ö0ph÷*J®Ÿ3÷r­ÃÅžù¨sÝ]`($Ô¡&r@ºûqë^Ί[<Ÿ<ôø}ïUê7†%¤Kä}+mNŒE áál6ÛÈd6 …|±8844Q*•JÃ…ÂðàÀ`±0<cnàmU"KöÍœ¯(3޳Y* d2^±8ˆ¹?L¥SéL"ãd²Y7—ÍçSÕÌF­Z.'Þ¾÷Î_N$r´· äùóç¨Ê‹/ÆÆÆPï|>•J(ÉŠˆgtqfÁäñãÇdˆ +â¥MÍW¯^MLL@rJi¡„xÑà#///ããddd„™t"`ñÝò¾1O¹b„ç“'O&''i÷Hä¸G ~ |2ÁÂtuuÃ;]3žÁ“HC4 ùÝ»wœŸ¸ºâ²F÷èÑ#tXÞôô4b^¸pááǧ³G†,,,€q#•gE¢§ßP4«„É…bBÅqHŽï)e™`Ù„š#2*/_‘‰ÍDZ<_¿~M[ª´•nñüIã ÇDƒš°!¬'ís ¥ø„yZT€Ä0íÖÓîææ&ò>Cñ«¯ÆO„Óƒ9“/--{4Œ ÿȲ²B¶ÌüòåË ŸŒb¸‹oÀ¦ÿÙÁõÿý_€„pV0¿†ÙišDË´©ëƒ·VJ(ô˜D÷ktÂ‚è…Æé0†Îcôž‡ ²3P9­q™Àì.ÆäwPÝWRþiÝ»w~4! Õ(Iœ[’tãëú>¾„€ù"Ù‚€‘È„б=33sÊÈ•Ë+W® á(ÆËìì,ðIWÎÚ )Ç/ç$¼Ð!8ͪ#„ƒña˜SÃE € \| 'fÅ¥³´›f°Zš=—j‡\¤#¾¢×_œ¡¹{M´’;‰6È L>sìˆÎZ¢–­-ž?]<ë&H=ÅʯÙ뮩0ÌUb˜]žÃøÑ«ê~cX쩃×q²¨§ÄOŠ |eâLMMIV±îæðPhøÏm?dÓ˜œÿžõÓŒ¬1ý£*@ÆWgÑ5ž QTO¼­À(ÔŒøx¡j÷»ßÂ)ª9´8‹`P„q¢â<ò`©rRÇÀ²¤V~B£¬³ÅWæ#’øišþW‰€°º3á„$úÏSã Ý‚½ôº$&Ö¹GCŒio¢©´sêâþ‹¶|.!FÙ g*Hz÷P³rÇw,Â)â(Ì;}EQI2kzëÉmˆÐrB#D0LäsÆEVT(Š:¡¯Fq\6sñÃC£ZÈ *”«Á6£IHñV3ž×¾ëÿ¶¶ÓØ^Ϫ¦Üh¯øwýé×Wþï@(¨¿|¹¶›Hí–óF“ìUóD*:ØÍl9jC]‡–DÐ`¢Ä´`!¤.7G¹sÆY™D5ì‡1"€è9N¢ 9øE@f*©ÓL} d 9•džC1O ÈΰGm§¸ç&3âzN””‡ˆjÒ9â_Õìå¡Ui´8ž·ÐìR3 hD‘'€0U,ÁÈ9 »©øå"›Þ@$< úÊâ&&&À—ðDÈ¡+{,ž Ïlw[¤&Ú^݇(B˜H–ÉNèG€a½øáI¹-B _oÄP ¹´Fæ áq¨Pþ1wFGÏ ¹fs«Vklí–ËåV¹î•w›e¯Ù~¶šår³Ül–ëÍJ=‘p½ÒåOžÍçó,Rd(ô+*„ªT«U„p¯ëÂ… @z¥RY]]EµŸ§²¿úê+ä044tú«… –t:½µµ⡾‘! ­K—.áýêÕ« 4RçywîÜÉår %ŒÌPBãPI–—/_æ‰kÄÁð¦,Ϭ&''¹/ËlAÀdj(Tr;MÀËИËË˼  ÀƦ(#nÁ³‰p…¥£ž HЈŸƒƒƒXÅ>þc?›ÍÕ\¾„ŠC†|@´(Óþâ$”T£££¼I„w„€ó€4ºì…g³ñÅa±Açgø‰:ðh½|‡øˆ|¸|Éâù¸ðŒžüüø±Ô“åòVÅÂÂ÷ûu ‰a48ÁSŽî cAKüÙÇ'°8V›EG1ÌSŠàŠÑ–j ÇxþòËkÅbºoÍÏÿagk£Zs×2)¿ŸÏdûÙ2­Ý²›Íæ #¿üúÏ!P¥ªJ78ËJvI;n&bçHMœ>ͪ…¡#&Tæ»Á©~Êò\‘Ò„–d1$ E·FC4¡R3KÀn`€²ÿ铸Í)'r8Ùp:ŠÉè¹*~M°µ©—;Ì“·~>33C=J¨8½¢Š2 é'¸œª$Ó’_ %0¹t7÷Ju«i®SqýàKÏÇ…çhõõ.‡þD«ÁÊ&…Ä¥ºT¸ßòƒ¢útáGc8F¸yó«³gÏ‹½½½Q¯{ðÛh4³Ù|.7022600äWÄ…Ð+ã‡,QO§±æ€,t!t½­hè*kŒßÝÆªlø1²¦:~êDÀZ§gÔÝSúp“»×fªDu»÷B„«ÎW yrmnnŽ“Ù½{÷Æ}ÐÃíl,–/mØ5”\ì8¹îs¶]â:_²x>F‚ß7›µz}õz­VK$“…ÝÝÁÁQP—%, ,ô²¥}Ü9å`ñlá ïÈóÊ»»/êõ­÷ïçZ­Z³Y.—k†YYÉ^»v»\iÛ.N&T*“N—ü+X°`Á‚ Ÿ ÄJXý¯5Îúú7…–û›Éä`.·¶µåŽŽî<}úíÆä=ϤREcv …³étFÅé²ð™Ã¡PE§c†–Ø,X°pº!F¨×w“-WvkUóä雑‘ Ædûºÿ´¶¶V­VÄccÿʲpÒ R©ðº­¶ËÝl6ñªX\\‰¥Šh¨ê(i}¶ÄF&BµÚÏ2é«”¶kˆ@Á0ͦÒdʘx´8í@¼÷qÒJ_´ìqVUŠˆ%€(yh—åÑÌ-ž?ui]ÜøvOÅ© V$+++tîE3d‚«è¨—á,wßCÅiânÄ¥8C¦¦¦ØSÏž=“JšÀI«t(äÂÛ·oó^\”L`?‡þôä+ë€l¥¸PæÏŸ4žyK-"ÆXOšú##!º€Æ]eºG ò„´‰ýÆ0k‚øteDŒñÞ‡Ž,Ø7sB¼ XÌ8Îf©4ÉxÅâ æþt2•N¥3‰Œ“ÉfÝ\6ŸOU3µj¹œxûÞ;7~9‘ÈÑd±È xAÁ\ RñIaïÇOÈ€"‘¡yøD‘_ERÛÜÜ„˜¶¼¼Œøô¯ù|>*éà=ºÂ³p €äñãÇdˆccc Ðmj¾zõjbbBS…H» %Ä hÄI[Ôˆ%­çÏŸ#Û/^ >ˆJ²ÅW$Üò?ÏÝN¥a¸áùäÉ“ÉÉIÚ=9®Á߈Ÿ…Bv”¹0]]]Æh”ÀŒç;‘†h@ò»wï8?quÅe.îÑ£Gè °¼ééiļpáÂǾF¹ ! `ÜH%ÆYуè)ôzŠUÂdƒB1¡â‰8$Ç·S޲L°lBÍ•—¯ÈÄ€f"-ž¯_¿¦Qdnñü©ã Çš°!¬'ís ¥ø„yZT€Ä0š@~‚qV>Cñ«¯ÆO„‹_r$_ZZ"öh6þ‘!dd…l™ùåË—>Åpº3öšc`×ÿ÷j~ÀYÁüf§i-ñüÆ´“«y´“VÖéù‘Î P{ÔÍ ÄD—tÓ‚ÆßÉ"©â¹o„vB¦ÃV)ÅøŒ˜†0)nî^ûY>u ;£g WY¤S ŒÉUÜ»w~4¡ØI\H‹cK—_ôÂŽÉ–î…è“c{ffæ”Q‡Û•+Wè±HàªtvvV†°6hêú6h9'á…ΗiV™  |V¼ÙrÍÄ®À—âhÍFÔ„î^—â&`µ4“.ÕÖOÙ|E¯™À}ªP‘Q&Z‘->¹{Ýç &Ü'¡Ë8]‹çOϺ RO±òk”JhÄ0V‰av xã#D¯ªûaª%\ß W¼(‹zJü¤XbÀWQf ÎÔÔ”d‹áûRhøÏm?d³í¸ýžõÓLðE^ î‰eiOrd™øtp jÀOP6]±QD`ÀhñâŒæ!O] zÈø<™ÓSr?ýµsVîǺÂâùXð̽`[ê‰á, á-Q ‡"È ÝW €4yÔSr†EC¨2¬@¥¸_¸z1Á²'„áx  ÕjzM¯^¯6½Z­\ié?)·=ý»[µº©#^+P$Õb¦g“¢ÔY]Tì@ÒN^î"‰KühÝ_JaWiKKK}$-œaÀ'ÑOBôˆJÝ~(¡ àÞK”lé|™ŸJ‹ë\KÎÍÍab¨²™XšàÈ_“}7nš€­¸¾3ãhôˆÀ5ûHÏIû' G.ÃÔâˆ#(”‚À0•ÖÇ/32žä’Nà4šrj£ŽÑÉWÍÖå.äæÎâùÓÅ3K¡¸Ïzr‚-'4BÃD>çdE…¢¨úŠaÇ5=gO%/bc¹x¦ŠH°ÍhÅpŒLf<¯}×ÿmm§±½ž)TM¹Ñ^ñïúÓÿ®¯üßPPùrm7‘Ú-ç&Ù+wâ]ÿ˜4·(81CºAó j}‹hHÜàXµ ξŠô k2ªM€úa¤dK ùˆTuˆ4dá$ ½ÏÍQŠ´œ•A QªíqœDrðsˆJ!--¶Š>P²%óØp(æ©ò,¬Š€=j;ÀÊ,™OÉh¥zܼyeOOO?þ|ttÑVWWyJ3NeÍfçénä€D@´åååjµÊeÜåË—y,öÒ¥Kh$e4”‚Ìñ‚Rxw૯¾BrÄ<}ÜùsP HekkëÂ… T–2ýzÀûÕ«W5Uܹs'—Ë 02C ¿sƱAêÒBž]•EÀää$÷e…¤ÉÔP¨ävš€—¡1ú0ôx%€ +9PFÜ‚g% à J ¸9 ?±ŠÃÍf³@5—/¡âP!½Cùñ%ýÅ; H(©ÀXx ï/æit¸ Ïfã'ŠÃ:ŸPUüDx´^¾F‹C|D>\–bñ|\xFOþ?~üXêÉry«baaûýº†Ä0œà)G÷…± ¥G€aÞì@ãX«Í¢£æž ¸b´¥Ã1Þ¿üòZ±˜.ä[óóØÙÚ¨Ö\ãµLÊßïç3Ù~¶Lk·ìfóƒùÂÈ/¿þsH”@©H‘«Ò4Ù¦ŸrÔ .U‹ Äx‘£ÝT…ñà«>˧vA-Û·§R=û™ƒœÑÊ|78ÕOÚÐT!d ‹!I(º5!Ô(i‰œ®Ãµ²Š²ÿé“h°…Èac©Õ¼E»@› â×75ôr‡yrsá333Ô£„ŠÓ+*àÜ”W]ÎU’iɯ…˜\º›LI·šL©Sqý`)ÏÇ…çhÃ¥\†ˆoe]ÃÐl%wt§ôÃBrPTŸ.üh ÇH7o~uöì™b1ƒ¢··7êu¯~f6›ÏåFFƆœàÊ¿jˆÛÁfki"fU æ ÎüüüÔԔ㟓ÔõÖ .üiÍJÊÑeè*kŒßÝÆªlø1r”´Ä Jˆº4I›ÑžÌDm¦J„P¸{/DDÇ8Åzä977ÇÉìÞ½{ã>Çèn,–/mØ5”\/4!u‰è,ÅâùñÜiÊèÒ¢Ðl%“·î”#ð«,Ckjù8 ÇH·nýtlllttTÚÓÅNœ¡õÑ5ß!’… ŽÈÈdueu}‹g …ø»˜Ôóy'›-5;ž×öØh˜TÊi63¹\Éߤè/I‰diׂ…Sμmuý‹g ‚x  Ù¬û>‚ß7›µz}õz­VK$“…ÝÝÁÁQPW_ ë´jY-Xø ÁjòŽ,ž-â=y^yw÷E½¾õþý\«Uk6Ëår­Ñ0++Ùk×n—ËÃ##mÛÅɤ“JeÒé’ÿbgk ,X°`á“X «ÿµFÃY_ÿ¦PÀr3™ÌåÖ¶¶ÜÑѧO¿½qB@ؼç™TªhÌn¡p©´ÞÞ.ß-Äôûá™J¶,X°pÂ!F¨×wšiZæk! Ñ3½&¸ëÂ#ÐÚ:i÷„у«¡ûWNäágE„ÑÈ]nUhìe·ä‡Ç—ƒ†„:ÔDHw?nÝËYq‹çS€çƒ¿ï½Jýư„t‰¼o¢Í‰÷œÍ62™B!_, M”Jc¥Òp¡0<80X, œ)äŠùL¶\Ù­UÍ“§oFF.¬¯—Óéô‚xTü¸«@–ŸóµÐ @â*BºÙlâ½Z­...ŽŒŒÄR]4aÔôÚÚ2Ѥ 9n‰hß´†@ú*¥í"P0L³©4™r &-N;ûî=Dœ´Ò-{œU•"b JMh`5š¹Åó§Žgíw>ZOBÚ硞^ð|æ„¥‰¼ob1À˜L«…E1™ÜÎdrÆ4$6-/í5­¦×ªÕ\¯ÒØÜÞ©5w¶ŠÛÛ•JÖø÷øß4„épý±6Eàåm–ï¾ûîÊ•+Žo ÀØëþŸ=p$ÌÍÍ‘ÐéòÖ­[³³³7nÜ Y4MB'Ñ„øDÿÜY¬I&ônE³Özú×WTÜÀ:Ð)£F^Ä¥Cdã{sÁOZ7¾ÝS±Ej‚ÉÊÊ ÂMàúEpåv°¢ï¾‡Šèâ»9255Åžzöì™TÒ(—*ìPºZὸ(˜À~ýéÉWÖÙJq¡Ì-ž?i<‡üγž4õ-:FFBt-ºÊtä iûaÖñéã½Y*°oæ„x@±˜qœÍRi “ñŠÅAÌýéd*Jg'“ͺ¹l>Ÿªf6jÕr9ñö½wnüòÖV ù>~ü˜f ±xŠÊ ­ ÷U€PCQËóAhesssii)ŸÏ#!žý–-œ| !uáçØØmHÓ¦æ«W¯&&&@] Ñ C ñâÕ!9#///ãÎ×™ÉóçÏ‘í‹/ä'Ùâ+nù€ŸÆ§ØÓDŠ´ÕýäÉ“ÉÉIÚ=¹¶G ~ ÚQæÂtuu£QR3ÑÔäiˆ$¿{÷ŽóWWõº¸G¡ƒÀò¦§§óÂ… >D8̓2daaŒ©Ä8+z=…¾@O±J˜lP(&T²€ã»CY&X6¡æˆŒÊËWäFb@3‘Ïׯ_Ó¨2·xþÔñŒ†cÑš°!¬'ís ¥ø„yZT€Ä0š@~‚a’B>Âg(~õÃø‰pñKŽä˜%‰=š F€dYY![f~ùòe†€OF1ÜÙ;ð÷À\ÿßÿe|ÁpV0¿†ÙišDË6éSR*í3\D®¨è"ˆö#©0 wJdx§¯kâ”»¼ý–-œp ;£g WY¤S ŒI1#MãÓ÷îÝ#9Eº-a!*nIÒù¯ëûø¢Ë/za7¾ŸMfK÷Bôɱ=33ãž.“\î\¹r…Ûˆ®Jgggé„HU‘ë۠圄ð¦Yud‚p0>ðY*c¸(p+ð¥8Z³‘ o×·Jò®2€ªÙ‹Q.Ò¥ øŠ^3?R¡"£L´"[|r÷ºÏAM¸ ¾D—qº>ÏŸ:žu¤žbå×(•шa¬ÃìðÆGˆžúaª%\ß ×Õ(‹zJü¤XbÀWQf ¦ZÉ*ÃÉý±HI á?·ýͶwàö{Öò w` …®Ø@‘(O¼£ƒñîPipÕ7{Aö·;ŽïQüIT€ÈÁ«…STqh‰w`NðxbœÐI4}›½Ö|%!'uºÊÖDE?¡xG6ãOÿ’-¾2‘ÄOÓô/¸¢HD?ftgÂ1(úÏSã Ý’rtsÇ—ç 1¦I¼‰¦:TÐΩ‹«mù\BŒÚ4d*HzsP³rÇ¿Ï)â(Ì;}¥—62k<ûäpÜâùX𠑈Ž@uM´ÇZñÊpâ–Oz bµ‰a=õÃ&ØÜ;âÊ™j‹Å¨¾Òg4ý 2¾„D1ÜYÀ‰ß žÆ_ý;þÄ_„NÄÊo€Ry(´ÒÛX0Z zé­\ýs H³ybSç bZø|€ò%¤âÉ“‰ ³5åH:Nåy”PBî–™½–ÕwàO„¡lñSø(ó´žäŽ#wÑXîwb`rèÑ©¬Ÿ8ÇÕd”Î.ÂŽ ówˆG—6ìÜî@ßÐLe”^}§ï† C®ÕèO\ #&gôW¬óðqîß¿OíäHzqfñüIã™{ÿÀ¶ÔÃY4Â[¢Eù¨¯&i˜4©§¤€†P3d‚I“(¸_¸z1Á²'„áx  ÕjzM¯^¯6½Z­\ié?oÌz{úw·juSG¼V p_ì&8paÔ:̨“€r„rIZBÅ—5gm! 2 è$;ú Ò$‡=¢R·Jx R([:_gæ§’D¹*—œ››ƒ´.ÃfblâÈ_“ã]Ü4[q}'fÆŸVVVkö‘ž“ö-NŽ\†©ÅGP(<`*­‘•Eä’Nà4šrj£ŽÑÉWÍÖå.äæÎâùÓÅ3K¡¸Ïzr‚-'4BÃD¾ÌqT(Š:¡¯Fqœ7¹˜á¡Qò"6–ªPªˆÛŒ&!Q ÇHÉdÆóÚwýßÖvÛë™BÕ”íÿ®?ýïúÊÿõ—/×v©Ýr¾ÑhjERÝ!-gXrƒ OÔ²] ŸZ&¢øvˆTbá䃗ܥHËYÔ‚'I‹Ã˜¢7ÇI4!?‡¨D bP“«ñ‡:õ’íÒÒ ‡bž ϪØ£¶Ó ¬Ì’ñ$‘¬–(Õ¤¥F£‘[•Ž2´Ð©8ž·ÐCžý«à2OaªX‚‘'Oq%ÊsH\IƒH¸ }eqàÎx"äЕ=ÏÇ…g6Šú©‰v»ÇÓlQ„0!‘,sœ,ÐÃzñÓ"r[„6þŽ9_@-D‰dY áq¨Pþ1wFGÏ ¹fs«Vklí–ËåV¹î•w›e¯Ù~¶šår³Ül–ëÍJ=‘p½ÒåOg2¥¾pá5nnnŽ_¨JµZEñׯ_Ïçóø”J¥H¬Ðäääèè(ˆ"$‘H .//W*•!ÐI’" äô1_ ]”N§I]Ô1¤uéÒ%¼_½zEÉäwçÎ\.:ÁÈ %4þÖljêòåË.<#„'ÿ?~,õd¹¼U±°°Àý~]Cb Nð”£ûÂXÐÒ#À0ov Çñ ,ŽÕfÑQ sÏ\1ÚRáïÀ_~y­XLò­ùù?ìlmTk®ñZ&åï÷ó™l?[¦µ[v³ùÁ|aä—_ÿy.7 '*ù¤–R*wY¸¦gÁŽºÆ*ÒQª±6%ª…Ó§}µÐ¢Þ¢"tÂMir@7”PŒ?†èC×ÔLŠ„.áÓøËç4º`¡Á"‡¥fNðí}l‚Š_Œz½ÜažÜEøÌÌ õ(¡âôŠJ¶fiüQB\u9;TI¦%¿J`rénÍ…§OwŸ¦îyn¥RãÝ$ɽƱ*—Ý4uªÕº^¤.%Ž ÎQxDH& '¡³à0^HÓHûÞLÓ~µEý~¿dY~§Óh6çл¤c ‚£ ¸ÑGpr: Þã=%IÐé<¢öææý,ë§iý8Vkk•7þÓ33¹íbËrËeǶëúF@ >Œ•0ûߊc÷õë¿ù>¦û-ËjV«[ív87·ûóÏ?ܺ! VÊKU.×”êøþ¬mŸÁQ‚c7ú½&Ç’­@ |à#DÑn’8››?8NÖíþT©ø ’¤_.÷\7[\|Ýjý%‰kÝ ·”f^£ñM¥•ʬÙ!©dÐ+F÷ôªÁYn.Z'=<áèÆÕ¡óW£gÏUgÝ|È© µÿäÎï ×·”¿5dè…ª‘ Ò‡o·>Ê^q¡ó ó»n¿?z•NšÂ&äÈo­ÀhsÆ{®TbÇÙö}¯VkNM-Öëóõú´ïO7Íš?=ݸàWkžS º~O=úy}færšî½Ñ$Ih¸àx_¤à<£Ûíò¸-ø20MSÜ÷z½Ÿ~úiff†~<ߚжmÜ0]tkk ™<|øÐ8 ™4N D裶ègôUJÛ5$ ¡°ñì…7òNƒøhq£.ÅRtÎAÐTÕ1¶ŒvTã¤=’ 'Eçv»ÍY¥¡zÒ(âÐ>ÙQè| ¦‹çÑ>c"¿µc)<~€RN–aÒ_³¬Ç©*#‰m«,±“8ÎÒ$ë÷ä·vvûén»¶³³ÝéX˜‡=xð€f§§§iQí?¹xÈiË£ ”Ý­çüî߿ώ¾°°€>óõ×_÷Ýw·nÝ¢Y´b¯0ýd4!ѵ‰l¬™LVVVè׊ÖTLL3QpæAÔ™Swñ(9"+íÍ?i]\i»§Æ©ÌHÖÖÖèœfÈ ­Â» æK7g߇Šu)>rýúu¾©_~ùÅTR\ªð…ÒÕ ÏÅv5°ŸCzæ)ëp ɅΡ3OI E¤ëISßFÀÈHHö†ÂdCÆ Ï6ñ¤)Ìš >’báÀ‡Ž‰l*ðÖ̉ñ:€Z ̸U¯7'©Õšàý¶U¶Ë¶Sr\§R «Ï+÷œí~/J/7“‹ KiŠäØjµh ÂE<‚’ n aQúS åÕ«W¡6u„p>•bp?:{œpY^^æ€8??ïyú mj®®®...¢ç pHÚEàPBÜ ÿ@R6Ýìùó縧óufòäÉdûôéSÄGÇ3Ùâ)¶5ðSéÑí,õF|¡¸>zôèÒ¥K´{ "4›MÎ-0¾#?}ß§eNL766@1%E (“h W Ñ@d~é 8å*îÇÄ ÂwóæMļ|ùò÷ßpŒk”ÛòðáC ÜHeŒ³â âMá]àM±J`6( WÄapµ§T”¥Ó&Ô‘Qyó¹±3 ™H‹ë‹/hT™ ?v:£áà#¨ ÂzÒN0?d’À§ F8ž E`sÈÇŒ3¿N”Âø‰pã—É?~LêÑl0*ú#CÈ"È Ù2ó¥¥%†`œ¥ðÁÞ÷ÜCvõŸþ¥´`LìÛübµ›ªRFïÀäú˜“¡~¨%ë¦Òï¤ú€Â#ÊJ4’LB›‹lB¨?0"$\‚ ÊÂý¶±çÎèÙ",X¤S ôLèÆ—=çîÝ»ðG†[ÂF§ò‰ÎCíã‹.¿è±Zi?›Ì–î…è“ßö½{÷ÎXoägøùçŸók%8+ŧM$$‚™…Ú-yn–ÆÇ‹LŽã,•1üÒNp|S­Ù˜ïpœ“qF+ºQ):<5# ÞãÛ´á~­ÈÂýîsP.a´¡Ë¸b}„Î;‹M0õ4V~UA¥G2â3UIa¾Œ9Œâ¬ú¤)LµD¨Ý rVŒ²¨§ÄO²Nt<5Ê Ä¹~ýºÉj,…­·S‘’@¬¯;:¤•{Îï+:|sg ñvA8ôTºV£þÕ¥,<5Q!ôZ„€”¸r‰ ò/žr´õ•Aw„P÷{ŒýCðqêD~ZÆ;0<®è'¦ç ã©ýÖ|MB2uºÊFÏÄ•Z5ú Å=BÐÓ¨aSºû™lñ”ùIü,±C+ŠDôcFI Éè?‡5. Ð-)È‹®ø’à\£!Åø¥5ÕCÅìd]\)Z>7!ª`•™© ‹C¹«ÏÇ“r2 óƒžÒKkYÇË–„Τ3D":-ÖİSO2uŽ-†ÂôÄj“Â:¸:pÒVƒÅM G®öÂÀ ‹‹Q<¥ÏhúAe|2JáƒudüÉàªôìßÕŒß\Oö:+eÒ¢+ 5pZÌ.‹Œ³ué¡ÕDJËb”n0æv4”Ä”^ƒ,ƒ{ö¡cï%‚ޤâÊ^Änf\z›žCÇ©4â=”«ej¿eõÎüi>¡lñÓŒ#èÌgu‡ W¹úˆÆr½̉zz 5ó'ò’š¥ ç+(Ž Ì?`´8jûør}C3•*¬nòÝφP©ôd&gŠO13ÁOÄùöÛoé¯\ù$æBç‰Ð™kÿ ¶©'>g£±00cË(…‡"}¢&@4yÔSR@C¨RYJŒZ¼áìE ¦=C/dYš¤IõҤߺùZ@0`ÿØrÎþÃv?Râeû £j »,{ˆB_ň€¹¾*ÌÒLZâ0‰ÂÎÀ?~|BB¢àcù è${ô‘é9ôˆêTšøè%šlé|™ŸI‹ëœa”Äç i £ ›‰Ï7 &>a³6ÇE +¡vb¦ôw !8çà;*ò¤·g&Žœl S‹cA¡þùÏfª¢>ÆLE¨(â(éœæQÓÑZ¶Ñ™§,š­S§pCnî„Î/Y Å}Ö“ ~h:Q$ˆ¡0‰OÞ„¬¨P4ê„¥0Šãœž“nåXÄÆr²M‘¡6£™Q ‘,ËI’ü¬ÿËþn¼óÚñ{*ˆóG³ÿŽVþïB(ˆVV¶:¥r'ðâ85YÜAÍ›âžIµ7;-I,#:p¡r €ìÃsŒýCð±€ÌG)Ò’+£·à:­az:=¿“Ñ„üøù‰šT ²ßunÔšl!†rÛðPÌ3~†˜ñD×ìÌvt|€ÜId¾nÊC$5´TÀÉÈ¥J·`há â¸ß¢8Vðýà2Onaª±Æ\‘^7g¢U8-A'átpè)‹ÃÄ£3®ÜÉ$t>tf£¨o05)ºÝã¾õQ‚0!‰ÌWSœ Ÿ…‹“î1§EHa¥çؼAoA JäÅn‡ÊÌY€¹¹ ¾_MÓv¿·;AdA”4HÒüš¥AiDév7*90©/]»é8>KýôÓO{½ÃÝÚ n@ ùùyÜ·ÛmîÏDUæææšÍ&dÛ'OžpDF?‘÷I’|õÕW¸Až<ÑxçÎd555uöF^Áá@Ÿ±mçòåËT–2„ý ÷_|ñº>Jôœo¾ù¦Z­¢« ã %TzåŒßz’,--qÇ5â ‹R–gV—.]âº,³…<ÊA …šÜÎxzccãùóç< ‚ >=³¡Œ´Å˜U*•@+D¨€$øŠ92âgñK¯T* 5§/CÅ¡SˆÆ·Ã9⛼/žAB“ ƒ  á!‹¹A¯£÷fã'ŠÃ\PUüD¸µÞ<-ñùx‡¡ó¤èŒîü_^^6õd¹ö°°¿ò/}AÃR:ÜX,o~·aסäÅ©E±#ÿ؇¡óé|[9¤EÅýöª01(¾”S£pX° ]ì-¿Âc$€¯¿þÓüüüÜÜœiÏ!$vÇZ?úë)Ê\2ÅÎ$äK?ïŠñgÀÔ=Ï­Têq¼›$¹·À8Vå²›¦NµZ׋ÇÓ¥(¹pÞ/S|à¬B¾ôÓÐYðN/¤i¤}o¦i?ŠZˆ¢~¿_²,¿Ói4›sè]ïß±ÌBפ‰ Nò¥Ÿ„΂wÅxÏ@It:O£¨½¹y?ËúiA?ŽÕÚZåÆ?ÁôÌLn»Ø²ÜrÙ±íº¾IS ‚c%Ìþ·âØ}ýúo¾é~˲šÕêV»ÎÍíþüó·nAˆ•ò’D•Ë5¥:¾?‹TÅ¢zœÆnô{ÿLŽ%[@ øÀ1Fˆ¢Ý$q67pœ¬Ûý©RñÁÝ“¤_.÷\7[\|Ýjý%‰kÝ ·”f^£ñM¥¥R£x:BMÁ1btO¯œuáè¢uÒÃŽn\:厜!Ê^q¡ó ó»n¿?z•NšÂ&äÈo­ÀhsÆ{®TbÇÙö}¯VkNM-Öëóõú´ïO7Íš?=ݸàWkžS º~O=úy}fæòë×mÛ>4÷E Î3ºÝ.Ûò€/Ó4Å}¯×ûé§ŸfffÆöºÑ„£>¦·¶¶I±ëކLš§"ôQ[ô³jgß Ç= h(L³©4™òNƒøhqE‡àG1NZé‹–oœU5EŒí£Ý#Õ ÕÑÌ…Î;Ûí6Kd•†êI£@ˆCû<´Às:Ÿ…éây´Ï˜Èo­ÀX ß ”“e˜ô×,kÇqªJÅHbÛ*Kì$޳4Éúý0鯭Ý~ºÛ®íìlw»W7(šQTûe.¥OŒž³üÝç çüî߿ώN/‘_ýõwß}wëÖ-šE+vÓFâýs›ÈÆ:É„>«èy³ÈþÍDÁ˜Qgn€GÉéYio.øIëâJÛ=5¶HÕ`F²¶¶†p5pýbhUœ\7g߇Š3†QïæÑëׯóMýòË/¦’ªàR…/”®Vx.n´¨ýúÓ3OYdkŠÊ\èüQÓ™§$Ð"RŒõ¤©o£`d$Ä+0vëÝécgˆm4…YħCBRŒç>Š‘MÞš91^P«9®Ûª×Ž“ÔjMð~Û*ÛeÛ)9®S©„ÕŠç•{Îv¿¥—›ÉÅ…¥v»ïyÞêê* ù¾I R^QæjµZ¸Š²É«W¯Ø_.m Î!8‚,//s@œŸŸ§ÍiÚÔD¯[\\DOCà´‹À¡„¸AOƒ¤ŒäŒüüùsÜÓù:3yòä ²}úô)⣻šlñ Ûø©ôèvŒS–‰ƒ»=ztéÒ%Ú=šÍ&ç߈ŸøºiG™Ó PŒFIÊ$Á•DC4yè{ç´¦XÜ?þˆ„!ïæÍ›ˆyùòåï¿ÿá×(·!äáǸ‘ÊgÅě»À›b•ÀlP(*®ˆÃàj»ã(K ¦M¨9"£òæ)rcg@3‘×/^Ш2:ìtFÃÁƒP6„õ¤`~È$)O )Œ&pBçÎÅ&˜z+¿ª Ò#ñ™ƒª¤0_ ÆÆGHqV}Ò¦Z"Ôî9FYÔSâ'Åt<5Ê Ä¹~ýºÉj,…-õVPˆõuG‡´rïÀù}E‡ò04%ãí ÏÒ…%BÈþÑSWRÔ\ êD~ZÆ<®øNèHš¾ÆÕ~k¾&!™:]ecÜÁ•Z5ú Å=BðSæ4û7Ùâ)ó1’øYbÿ†V‰èÇŒîLÈŒþshPã Ý’‚¼áŠ/ Î5Rlô{*d'ëâúKÑò¹ Q«ÌL)°¸†XÊ]}>ž,âQ˜ô”Ãk\OÈ)¹Ðy"t†HDG ÅšÖcêI¦Î±ÅP˜ƒXmR˜CWNšÂj°¸‰áÈÕ^˜aÑb1*€§†á²>ÅQ ¬ ãOW¥gÿ®füþ@à–¬‚ 83`UZ’ÂØjvoŠBjÿ6W`, :HÅ•½‹ÝƸô·îhÐq*x%äj™ÚoY½3šp([ü4ã>¼³ª²âŠ#WÑX®w‚9QïB¤FÖ'!©9Pšp¾ܸ·aþCß{±8º´áË=ô ÍTª°ºÉwW<‚ 9W£?uŒÚ˜19ëP|Šy~"ηß~KíäÊ'1?:O„Î\ûµM=ñ9…[F)<Ápè¥0¢AÈ£ž’BBÍÈ T*`Ôâ g/j0í¢ðx ËÒ$M¢¨—&ý~ÐÍׂû÷ÀÕsö¶û‘Š/+(ø¦Q9ú$ ð¦Yuîþ0Ž„ß Þæ3 “ìÑG˜Hñs¢GTêö‡šøè%šlé|™ŸI‹ëœa”¼ÿ>¤%|Èl&>gÜ€˜×Ìö..š`X¡Ü¯ô÷q8çà;*ò¤·g&Žœl S‹cA¡þùÏfª¢>†ã2#ãÊQÒ8Í£¦‡#µ*l£3OY4[§ Ná†ÜÜ ?^:³Šû¬'üÐt¢HCaßð2*:áD)Œâ8§çd†›F9±±T…REd¨Íh&d”Âc$Ër’$?ëÿ²¿ï¼vüž â|ÆßÑì¿£•ÿ» ¢••­N©Ü ¼8NÍ[lªÑ°xã náàõ1¾uÁÙ;><.ŽR¤%WFÇ•ŠŸ1Eo~'£ ùñó5¨4Ý’…} ÉöñãÇÜ6<óÌ€_"fE žYË3ÛÑ1 p'‘™-Q"© ¤¥¦HF.UŽ~ï£Åq¿Eq áû-:ÀežÜÂTc;Œ¹"¼nÎD‘“'¥'£œ=eq‹‹‹qEȱ+{„Γ¢3E}ƒ©IÑí^¤1J&$‘ /3ôS pqòÃ"fó)¬ôÞ · %rÈb·C å?æ,ÀÜÜ߯¦i»ßÛ ² J‚N$i~ÍÒ Hƒ4 ¢t»•œF˜Ô—®Ýte yóóó Q»Ýæ>LÛ¶A”4MÍvÇV«…kµZ…Tûäɼ€J¥rùòe$çÆW`èKèHèTè'T–2½üÓO?Åý_|®OÉÝì›o¾ACw—9”Pé•3~½^I–––Øñ]—²<³ºté×e™-f]ÔPhñ\ë™Coll<þœG¢A@ôñ<Ïl(#m1f•J%Ð ê Fs@†ŒøÙl6G¿w<*˜Ò@4¾.#¾ Áûâ$4©æææx˜÷ÁXÌ Òx}|¸7?QÜþðm£Ø1Sj¨~A3B½»•;BïÝ»‡èÓ§:à >˜]¬Ee~8ØÕÏ>Æ^Çõ<£¥7“!“ÐèÖ¨ñcHqӵ麪à¼SééŽ{]°Ð` ‰ÃÆh¬¡Ûè+(n› âWíÔ@ó9ú½3“bqÅ•Yš¥ñGgU’i9^›žÀäæu»zÇV±Õ4wPq'±â#tžGnÊeˆñ­\¬áA¼¬øRNšÂ¦{˜¢ÅÝ…¿›Âc$€¯¾º3;{¡VsPôÎÎv%Ñ7ŽÓJÅ™ÇMñÀUXØÛÏi“ip80utÿþ}vî»wï.hœ½!Up,0ýª¸¬¨#`X°æÁø‡ÛX5 ~Œ\ü$Š]wÔpiQ§§ {tÏ eFm¦šC¯ Ü bt Ùfä9ú½›Ñàpc±¼ù݆]‡’;Ná~s¶‡Ä?^¶$tž,GþÖÂËŠ¯ìt(,C{Ëï£ð àë¯ÿ4???77gÚs‰Ýq†ÖòbŠÒÖIHà|ï§¡³à]1þ,™ú‰ÎÈ)³ðh€˜Î6ä{?ïûý³ø0K\“n¾@ 8qÈ÷~:: ÞG° (àÌA$@ Î#Dà €Ü?èìtvk;m¢d‚±5‹¢èõëmH/_m\º´Xóýf³yH|@ Gùl'ë/_~þù»;­ÅO.áê×êÇuÝ7kÏ2­ÐÊRŽçôQC6YYYmmo·¶[Iš_ ÁÑA>ûÛÊoív{íÅ3U²Ú­×n¥rŒ×áU Iâ8Ž:»;ÁM~"]›È±ÜØŽÁÆ«—ív«.4{Ý ã”M|@ ïòÙÝÝöNû“O>Ù~½13}l»^Ÿ:®«=Tdi• išï Œ‚n7ºqÇ÷<«lAFHÒ$Š¢,Ëå†büIM ‚ä³ý°μ»Óš›»¾»ÛÛ>Æ«=Z*W0›;:»àý+«ÏÀìqýêö­æTö­( ! âãGy]@ ¼ÈgU¾%0ök ³³¸°x¼B€}Hñùì_³ÿ•ÕÕååŸ=ÏûdqÁó½I“E ‚s4I,« öñâüièŠhk|÷þiÀvœ/o~A‘D ÁIÃ*—Ó~ÿ„t‡íÞ¢×,ÿ ®¿±¹…+C@ œŒBÀ±ë“'×`ÞÙÿÜì ® @p ÈuiBÀñ²ÿ·è€¦Æ·ÿþß-..\½rÙ÷}È“&ˆ@ ç'ª8lNfïû?îVVŸÍÎ̈@ ‚ÓÁ‰îx ;Ï ø B@Ðí...€ýûžœà4pªg’$´ «”妣0¯A–U«Õ(ŠËe»Fi†ç¹_ 87Æ@ð> Ÿÿo= @’$ý~ïõëíRÉj;¶v<þ쪵½ÝjµvP³Í­­·Æ@ptÏv:ݲmïî¶OVPÖÈ´¸ñbmÍË'ý¹Õ¿±5Ã쿳XV)MÄyk|@ Gù¬ã8V©Ô¨7ºÁîÜìl»µå×ÇuÝ“Àû«•j­V £¨ÛëãgÐí¦ÚàïØšáâ”2 Õ ‚®m;‡Ç@ptÏÚŽÝh40ßžššîõ‚zc*vëZzô÷UÏo·¶»ÝÞÚúËr~ô0çâ–e>¡§C \™ä­ñ@ à°®ëT«Õ©æTÕ«ú¾Ÿo Ï=¦ëžÀvœj¦®^½’$)ý @ ˜,0ÇvÛu+0Ó¶m'M“c»²Œ,MËe«ßï¡€,Í“nµ@ >\€3YV ³ÇLkã8Nsd“®×YkišÄ}üõz'‘ù›€‰F'™Ê¬’H@ 8¶[ŠÏôþ/ðŽ^¯¯ÙbzöØÇhKã$NüRY–Ï™ÕÅyªÊóg¶]M CLºãšÆÿ Ô U¯^m Öx‰v¹<éŠ àÃEµêÙŽ½pñbtÀÏ0ûj鋵õ4…U*Õ4+ÛeGK`ö™þrfŸ&)«×uÊV®K˜tS†±'¤D–ù^?+wÒÁ‡ ð?×u˶ém'g˜} µ4Š"½6蓮å8Se»†IØ»½ ÒD)K•Ò’ådª£2oúRW¼jrÀ¤›2 #di.½í°íßcü?Òæ€¢(¦ïçý|Ííx‹Áï†ßü¬šmçÊð|/Ù{±C-ív{•jumýõnß,©šßlÝx§¿wÓ,î©ÄJb+NÜ̲㨠Nµºñâó«“$±íΦþ›We•,;ßï`eYÖëuh¼Ý7!ŽÆh^A€7[²*å|_½áÙ“ij‡¢éúä…V´Ðäûž‘‚ ŒâèšàDá¸ËÊù¢•¯qçì³üä ÍÁœ{‘}ðf”¡Y¯ê‹1é•f"cþPKU>g.Ye'Mk•Šo»~k»÷j·þÛ«í8‚^GV§×uÜZœöo6c—Ûuªn©^ó£=Äló7?i“&ò±PcŸ°ŹiÿN'À+DI( t=?¿òM ÅO5j/gå~ýõɵkKN¼'¨qÜý€æÅøç æ÷­öNE¿®?½ví³(²€8¿þútqá"k"€@ | ÀÄq‘mc Ž5ë:œ¡ ˜VsÄÌC4D´C¸Ïi³yL”{ý(,•³PU\¿ï¨øzuêÓzh'•~²Ù*e­R'rûÛ¯*Ñ…v))eIœ°™`m¤€—Ïlm6“?âhdÿ䉠DˆN‘¿?†Õ5»PÒ“'OI÷«W® TÔreåC®_[•5R Ó¶[;¸ßØÜÂ#OËz޶ˆ›ÕÕgW´—a#õ ƒ››[¸>þõ óÇS„¯­­£ òÙØÜd?ÀÏf³˜xt¸Ð$‚SÆç,Ë^¿ÞÌ¿¼q£­•µÿXþù­ …ÈååG:N{qqá‡ÿû`qaayùg²ÉæT£È}&ÛÒ,÷‚“&A+±·¶bZÕmÇÉ|뵕©ZmÇ®mcV¥¥$MÍY4³Ýn?|øX×'‹ àeíö΋µuðµ;wnÅHqÎŒ{°Há)ÍX}ß»vm‰4$r± ŸÆï_(·9Äošmî-£ï×DQÍ÷~[Y½zõò¦fädÉd·àÇ(÷_ݾE—€E©¯ys+ñH˜¿Î Àµ«ºë  ÙjÀÚ‡„AÄäÇ1dƒ! yÊi0­i•~š?2šÉö@ 8ç  y{»ÕëõȶÁÀáÖÖ_1°‚û/ozÒ1΃¡`¾èû>D°„`œŸõgðC½á>“nkŽ4J¥J7êT­rT·ÁðÀoKM×é«tGÙad‡‰ÚÜñ®­,kïŒÀ³ki6§%ðÐ6HÑív7õ,·ÙlR>¤GB2bµ·t’‡µ)í(­Ì„\iöOáÉ„S‰‚˜`¾øùŸÿËÿÜ'•^½r9Iö‘ º¹ZFW.ŠlT oÕâSüC8Zòø×§¬^aWkjvvO)È 2òÌkgÛkëëHˆpD  „_ݹµ²²zóæ 5X\@‡@¥ÑÎ\ ì*Hˆ+è(7nä,7`"KØØ ‚Nð×ýÛìÌÌÊê3 éá.Ùöÿ&Õ`ë=^˜g‚-€ƒü§ÿørÖà8à ñ`ýÛpŸI·5Kân½Î‹Ä™ã^W:[IËÍúAÆj÷µÊÚQÜËü0ªÅI9KíLe¥½fª|‰Ìñ"ä¤;·oá ž‹†£›Ëò•ð~ðÄ­­+W.ûÊ#¿ÅììDžU'Ö¼IÀÉR§šMä ‰ŠüŒyê•…7áT¥ srð\Hæöô궃—×jµ¿¼ùDÔ ?‘)X>X/_@ _ Ø?Ø<"àŠ{öƒë×>C|„ à瞆'ŽÐT„#w<ÊõBQ‚{^¿¾ä#ÏCçX\¼¨´¡â½*Ù¹ä˜'Ìk5«Š(š @ L±Š5GØÇòíý Ã|>…5!7nå(m–È·y-^ÄØŽÙ0”ó…ó|мe¸Ïd¡õ§iÚïõZý°Ûïíö£,/jGV«ë´‚Z4zýÙR蕬J[YšÅÚ~eT׸÷õ¤\3Ù\%€kñà웡'Ø?ˆðÉâ÷€ýþ –ªµ m<mÁòA@.Á0 Áþ³­KQ£û”ÞÒ_¯ùù*ÎÍ/r‘A+%Ž”¸þªY>ù.å2mô`ïåQ)¡—æm­ÚÛ%À÷‡J,ëÚàº\Œˆco°'€ò‡Ò6˜ôŠˆm–. BPB½¹Ä<"@0YÄùÈ쬭¿É5ü«ÏîÜnbЦ¡L5Ú­=¤ç!êÐu}mŒÏÆÈöqõê•••UÃ}&Ф¤¢^°þ|eGÕ¶;ioG}Òê–ƒD¥x”g«R/+[å´µº¥~k;ì7l«ÂÄ\¼ÆßµkKà€¸â>w´T‹{Lß©Ïe£î˜P,(òß®ÞaÐeàà†Û&|ï阪Zzm}xÕ8üˆ¹8^äìÌ ×à5ËÎ7 â…äÒ™Ó8Êk ô§•ý6å>´–+\Å7³yöÄaL¦5ELiê ?A6œí؞[6Á¤aç'À«7o~1?—ïùb¿æÜJÍüðÃÿ#CÉ·¬½¤ö—!<Õe&~@¾öòË78Iåª9â´ZmÃ}&ÛÒr¹Ü¢™ 3[[ka»G¥ŠÍÙê‚•ÚvZ.—ÒR%Y)U=«»ûʲÓ^’äžwLú´¼GîȹLà{Avÿæ…žè;”¸Á‰»ãèõôhhlkíBy°ßÎ<Š 1‹öI¹§”«q>ûô 辸¨·$䪆gT4sÓ{ùváÙÌWO 2ž·eŠa;õ~ÞB$A¥q³¶¾þåÍ$pÌÎþ¦ž—t¯_û¬µ·Op`]ÀÞÌ(‚ÓGÎÆüj~h¾Tr0éœÍ9†zLjÁÔ÷ŠžÔCLrjÂsv¾luÃ>¦˜þÍÍδœv¾“l}½ÈÕ&…$‰,e={þx®>»þ|­·“Å¥•T9©J§¤Ý꥽^”¥¥~?L§/LOÕ“4oÍåù[wì<Ã8B¯][¢™, G@ ˜Í„F­–¯C#d6g3ù¶sÃPT¾’ïå2!ífóf~ çe`Šà< xóæ žTz´'C)rŸÉ"Œb×õ_µ‚O?ùÌIë‰c»Y”VÝz#õý:Úµ½¾ùª½›Õ쪗~²8¥q©TŽã$Ÿ²êÉ0ZʶDÍ&fÅùZ‰ïQ¥ïé-qÞÀ®ˆçì–Ìi@5à˜˜KþëiY¡ÙÜ“«xcp‡>îïܾ…^Kþþ êù›a>ýí7×±;Anˆ§/r Co;Tƒ#¶®±ÏS< 8zê@ Žûó¡xÐÄ+7|âÅ£‘lþ£€ú: ·5Êi@@ 8eÐRža¯^½ššjh€œ‹Í`N†Â„æÌº¯ùào, 0jÈpŸSó‡Zúå‡ý^ï§¿ÿ­¬¦ÓäÕŹ¯g•Re~ªžZžŸ©Ô*G/_&it¶mw¶Z‰\÷•Ëùö=»líÙ¾Ó lß÷iK7?F§÷ö“ëq÷}ѪÞE Q֜Ϝý7²‘Ù*Ç£†ÿX~Dk Wµa2ßÿú?þ÷ði@ªq\wóŒŸÒç˜û%Brt>jjÁÄËß哇ÈduõÙWZÜðf÷¿X¢yÖšåwº¸n®ö_ZY}ƃٳD;Š7W·Œ0(ì_ > ¬üÚÊÛ' Ø{3Ú7›¸÷XÌÀ: S­“A ²˜Uà!”Ëv¥Šº4ÒÔ‹ÂK;»íé™/§½Ìö/z^¨,+J¢Fsáõë ÛI:»¿¸îÍÍÍõù¹Û.{{ÆôlÓŠ7äÒ×÷ G ¸­!ãknŽ®‰kvš/»ky‚ë¹Ô€Ûƒ&åFõF³Y×gªGzÓn¾¹qêÂôA(°\¸p¡¨QŠ36y<047?Ϻ2áQ2ÁIÃqÜRîö>w”¦iµêU*Õ£³·Â¯Õ'ÝÄñ-ššÉÒøöož<ù¥¤fÃ0šj”lqö‚© ¯ÓíÍxÞ–çO©xz«Tʽ8ã·]#"\·Z«ÕÁÉÝ‹zun{-¤pÒ±ÙîI–Uâ|?÷˜û:7Æ–•Ökù¢H]7ûèÜÚ­ Q¥R¡¶DgU~Ÿ @pŒ(i9Y–•J ³Ûcg†ZêU1I‡¬ãzÕú³ç¿ëÙ«ÍŠÛÞÚöKV†Øˆ™$q…i÷º ÛŽ«} HœŠÆË{žíÞ>€ èd¹oÇRÙÞäi.‚t$ tvw03k9«ìc´¥ÌTÖéì†anå·lÙ`ž®SÎò¸iš•­Ü€URi%Ž3ÖFݯTsLº5opåÓÏsÃ;Ý,߀†åÇým»¤õ“®›@ >\”ôd7ËRî`ß;«ìclKSLšÓ4‰C< ÁESÕïOžh©¨”ìu>$ñ(—^¬¯Û¶T£¤1éŠ àCG6€Òlò ³÷ii…øÃ<{ÒÆ•²ûm¥Õîp·&šIWI Á‰ã¿ý÷ÿeÿåûM’T³ÿÔ¸.@p¶ñÿÍ—/:)·µIEND®B`‚analog-ce-6.0.17/how-to/startwin/run.005.png000066400000000000000000001065361406366436600203710ustar00rootroot00000000000000‰PNG  IHDRž®¶†‘ôtIMEÒ 8Ͻzç pHYs ð ðB¬4˜gAMA± üaŒíIDATxÚì]ùsÛÆ’@€ñÐAYåÛ±sØ©ŠŸ·’zµµûÃî³U[ûî›=âzoíÚÄ/‰Û’u›¤$^€$öën¢$K¦®ØªpŠÅ3Ý= `¾þz’úëßžÅb1UÕTUõ}_—q—q—q—«\tàzÊ´T.ƒÁàcÛ3.ã2.ã2.ã2.ç*ºðõv«íõÍ&}÷zgø?"áW?¶§+§¾D—rM¯˜Ó~ßrVçü!ž¾«ç|œËtõývYå‚<óI>}ºðu z½Ù-Uš »Ûîô4M‰iª¡«zLűzÐý×óû}:¾h“Fs÷ï…:©çXYñÙAõUø“lþ4g:õCf_²êó”Sš=Ôüc]‹Óë½°KóûyßìO{’y¿Í—nÒï2½ŸÏg-ºïûƒñuàúþe¥´ëìÕÚu3¥gÒFÆJ¦’zLEýA×í5nÓqm§×õ¾?Ê ŽŒçü“ïH®<•?íþ‡ÛŸÉæÓÈñϤwäñoó9”žËo£6>ñJRé'æä‘îôNkü™û{;ù"®ÈYnfõH÷Ó¸äŒC[ž|Nçç“ZŽjË9|ÞQ%_ ʪ§±ù½gõ±3†.G`íàëÀõ·›õÒŽc&Ô©\2—žÈNXÓy3‘LD}z^Ïnu4Å-ﺕ=»n÷;îˆkô£gdû#¶<ã}Ø´sBû9q}ÔÁ*£RþèªOý ^ÈS:úÔv1ÓÖA]g’éÜòÚOw ‘rîçèôÏÅ™ˆûE$6Nsê1Ý?ÐòXÏ ±çÉù]ÄCäÜòôÏÑè3Æehêqžþ<ó³rÎGø=Eí½Þ Ýé¯×7Kv:©êºÖ(ss³³…\"e¹}BïxLõºm»Ù¨×mµ_¯ÕìZ×n«ýæ+Ú©f豸3 2Àóz®×÷¼þ¨;ãqjPO|8/QïiÇkäô—ŸNË=èÆÃzýƒ½âì|t9Òñ_˜ÞÀEi¸(¸È Žx ã‰52 MÌ–ŸŽãoóIzGÈ9Æë_¨^u<ÎWÊœ4äñ¼q&½þ Í®òx/|ÞøDÆ+ÕúñcšžÒ–nåôô„ÒWÒ -ÓL­Ý¨ÇzES‹õÚÏ®GOÔ@‰kzü뎂7žÆ\Ö´LÊØ­n­Þ:-!%ø@w½žG Ô%9n_¹ÌÂ1©–1Ì•o—Ìx/ŠÁƒAxV~ºî~—#-U© Z¾e¶0žÏš2• ö¸#t„ê|6•Ï™ ÚWk­;~¬rÈ]ôÏû.İ{§po.Q}ªF»Zk‡‚. W,p¥n„¨£ÐÍÓí¿øWQ ÎJ“Á´ÅcÐå¤]Ûñ†ƒ’û„,î‡DÊ ¶6p„û¤=R½oXœäÔ‰áÔ~¡û9Ÿ Ÿ¯Zí\†{Çe\®Vy´sL­õz§¯Ûnò“4üä¶=0uíÛ»æ ËLôRIÃëT-SË$šýO¦â ó5vË=ÞÀ•ÙéÌà 8~±´É°íFgÁæÑ€p+$—uDaüå‚Ð>drT!ªñ  ˜ »Õzû(<0dšÂ¡1›‡#s¨Â³ä¨-G ÚÏNOf&~>GØSk=}öÖ ‘ ô¢×wº‰t\ߪ=ýßÕQ:~Ä"h=¢Kˆ]öÝë¸Rvÿð¼/Øöè‹kÅ…¬x釿®qzÃ;®=0JżRÙ†3aólÁ’Ô~²î(öŸ­@QaÆšI?ür–+Ô?—`y©ì %i†ÿ|.‰ãj­Cö¸£cI§ Eòø€ælFBµÀ°Àp_ áz-Ökzc£ø ÒhÔ_hÈ+SLsÌe—qùã”#Ð«156Дšöl­5ÑlõM½ÛUŸ|nþð[ïïï銖(çÛívÃöZEo§ÌtæÞÝëè]ÚiâsèxéÍ;f?‰ˆ<å3faz¢8—7(Hï‰ò€”{ý·¦'ûQYÞi`ž9ùYŽÊ(è+Ì~ø›«d3„E¡û‘Ž}%€p5Tùêóy6µWª4Óé°óÁÝY´|ùº´±U“Ñ¡oD€€èøðóy¨xù¦Œ˜}ûÆ4­¬î:¦K†éäð“æ‡,ÿåë2E-ZNAµl¹2ÛsùOúFùsá”ß>¾a¥Ë«»ˆ68Í #hfÑ´H4È•1±v¿ÄÆV½\±I8× §(„<)APòž¤PD føªŽš2ê„*!Ž*!G jÂ| ØÎBøí“8µ¼ºGÃwûG»q]jh®Ÿ¶~q •K¯+ ]ˆI´\~‹îžŒ.0•̓´@# ”Êõ­:Dç³+äRpÔqOšV¿{rv¾|U'K{@[°îß›!3^U@©²d?“ÑÑŠÄ0@ˆ~d¡„&¢%¬Hâʈš¹}‹[”X½þáÏ7€‘/~)­o666ë¢;{R„a A{û‡¿lXf\ü)Ùl‹Æ’~ôå,˜ôËW»ë›¸Ce(º Òœõ“k$ßKIÂmœfkÒÈÇ–~ÛYßhnl6èfŒ/ ê£aàg(g?³%Ò"r˜`¶ÆmÊ…´Í¸ÝQ\‚áбÜÛÆÐ]w¸ Å®L/—<ýŽË¸\V9 횦$u-3a¤ ÓÈ'†¶]ñ»J7¾hþû 矿¶*ö`>¥g2““¹ééüÆ»f«§c:ÈeÍ8 Î3Jøæ³xä”j½…G–æ <Ðfv&ðF3œ<öË1šAà·ßÜP•v¨”$ð%[ާ4"úÃËöRs(dÎîHQBäÇöU?¾‰ïòN“õ¶Q¦ cÈÚZ sbÜhIÀ§Y³? ½8Ÿƒ:t)ÓÌ« ãG_žÐƒ˜Ã¢ŒÅĬŒ½Ö*ï…b0µD|Lµ„âéÐH Ajµ–ËêD5B’&¾E—à«=ä †`t¡žçw#£l°¨,«Át94£ ¯}¢PdŠK‰o™‰ˆ(‡nÀ`Ì$‰T™=‡£Š¨#7#„ üðYà%õþÅ †Å…ABÄi0@»8ŸE%”Š]Ä!ÜÝ‹pè©‘aò-5* 0Œ˜rL‘Åù ¾oßÌÿßoA÷QùÝ“E¹» `±d€éFpH·MpqÅQÞ£„Úºù…‚â¡…žb¸NôÚ§Ž`ÃP ù¨)•é¢H~zévW–o¹ÎƒÏ¦!° @­†8G÷ÔåS¨,.dâÜðâtil’ºÿìðý#rô¼‡÷­çºÉ ž£ÈŒs-22ŽKSíà#†Åã=>…4¾×ì¡?Ü6õ "KDqNæ+aTØÍ €ö‚öºimB :| Èm^€nÆIôŠPUƒKÇÐ>.W·€vMSºš›Ð¦L³°`g̵VüÎ|ÒM$+%oêAzµÔ}0Tcz.—+&¯íµ­·»õ®ªªŠÅˆˆ Eé qSS°OH0ÀÑå”à´$½ñÔÇŹ܋¥-<]Û5T T Ò y3Á<5!“òý;×"9 Ð8@ˆ¸ZzýÃòÚÎíëÄ•9žP¸¥*Ǩ2ε6¶«AG3±ô¦zýýÓ׆ÑUÃÚœ,ö‹R©!71ÛvxuÌù‚ƒ"/m€£+k»÷ïRž°\iÂèŠê·d‚FÀ^Ÿü¬¬îÜ¿KyT<›Sj32´à,@ gyªmc¼ÏZçIS®,¢ÐòAý£à©¼cœ *ùº|ëÆÔ÷?¼‰È¢Ç{`Œ8ö»?Ý1J|r š+“8È«$iÉ5viÎtœî‹_·#¼œåu/Kœ ¾’o_—a?â,àÐ.´—(cAé ´äÐÄÝØªCˆ²ÂƒnŒšY§‚àI—2×a l[y»G·Ðs$„/Úã8GãüâZ±ÖYpo†»Û0ÙT´ALÇD#€ÙfÃ^üò®äÛ¢:šú•kÕa…ãƒ×iÈ`þòOÿxçÅÏ¥û÷¦i©žëi˜7'¡‹ º¾üÝypo2ARQS9² ÎD &†it)—mhDa™>9 rÀN ÝâBfùm•³îê#ÎÏ/£4 °_„Ãäº/gePl‘Ã=À$$àÔ#eÆ,½‚aÉ<1Ò¨{! í0»Èê H’Iœ3ðP#7ۃϦ¢ñËA²!Ü'½6¬âKCV 8n‚ª"›! 8…š½jÝ)»\,O‚Anæî¤qÿú–ÊÃÒû^gR·oå¢U‰Í¦ô… K/wqê?þk Í8±?.W·„vÕ7“~ÌW¯Í…l¶dÏX Í Uy1Síl·ü)­Ûq•Ä@×}Loà_˜v§£j.$»x'´t!È™Ër¢xºŠw®ÉcÏùv(+œ ˜‡6@ðûo^ú|Y¨˜Ýê öÌ"Òs 8¸u}ZHòöÀŸ”T˜º¶øÑNyóÅPÌñÙä –ãçâÂD©Üм#a*9í?‡ØÒU`AŽd89¾Ÿ¥ßvùIãú¸\árÚ }4üLÊÏÆÕwÍT*›jw’_]·´øÀÐ=僓ºS=MÓé/ÖÅèÕõzÌÝ“S’ Ž1fÓqt&]Í ¡]om24J ÷Ñè9> €ß0j€1|ž>_ùö›[Jˆy (4Œ #Ïrª’^B«àÛU(ÝØª~óèºläòê§Ù)il9ê¸UƒFaçÔñM ]$\ðÔ[OŸ­|ûXT§x,S¥¦ ‘,ÒÃ$`ÌãG‹N­„?ꄳ•l—ÞO‰èŹ|‘a[x §¥¥Î-΋œš-‘.ÎçŠsíhmbØávn3"åÄ׆ë û²Hè0˜±å$› ]<·RZ;kb¤9¾Lý€LÉ4@Ô‹_¶…÷[¦lËJ‰'xÇXR¾|U¶r¢—²ä8Ï UˆåÍ_¯Yt%]””¦ƒ»‚¤±[Ä~‹±¼¶Z£ÐÝX÷ï͈Ìéâ@IØw/–S²ÚLXéýW9ÂJ2U©Ø´ÐnôeW<¾‡×t¤H^º®ÜòÀï=/XAD—ïÿçmžƒ aç´£ —ÕQˆ’¸VÂd>qÊW€DZéÈÂl’–¼Xœö¨Ö2 ÑèNwƒuzºù$m/z¡#x5Ã}ßK%r cÿÒËð‡ocY}§DÈ|†8îVCnH‹×@…ŠбX‘È„ä#L)“ãF¤Z “Ï~%Ù AàòJ¢™¨kß¹•/P²])WxX,„oËEI6˜à'y€?¼¾´ oQ> ‰‹̶9j™äõ²â°¾Ù0h­Áƒh=˜ã2.W´Zk÷µ˜ßéøµNo·êÄÚM-­,«Ý̨¹2?k)=ç«ù UÕ—))­záì¸&|¼ç«Õ½VÚyy¯')hIÎã”$ÃéO°Œ©soéMIT>%u,ÓM g«É¡o« 0ûÛèæßTShQ>|yU îØ¥Ôk°Þß—uY̆/Õ”HÎÁ)‡^´*AØ­0ÝH÷¾wÉ`*h´¦­òŽ Â:¼›ï„2Üñ p::n$ò†6gô¤+»úpmûh”ˆ!ínaç!¼YGäŒVîÛÜÀ,ûÿe­WÈ£SÌÀb·nNFëдX¾B&¬]ᨂ2É 6Nàú-ÞRG—àÆâ¤âeÆfaÆJ¸ËoÄíèœNØß: ÔÜ=âLʽ»ý—¯*=¨²¡OTÈ+àâœ:¢ w²Nâ¤àpFC6‡ïÍØ|p,ddkÛÑ"öì©þ6Ø=øbÇUABÞJ{aÊÁ‹¼ñDd¹Ð}lAhAn¾I<±Ü ì kW˜ÊÓ …¼ ¸¼R¥µ¤ÍïÏOrËÁÑ÷An#ϬÝKÊòÇ(—o”ÂË ¯îkð Ú7¼9?)~àúñtãr…ËhWÕA×ÕüAkk«¨§š1µ™žH胔ª$gTÚyrÓJ%ü”ÞS•½Ínoá%áÖóAS–±¥ T[!<ãe3¦ãô"œK¯§ç3¸Êc“'Úz]v¡Ç\ Z†'ÉBµZ[^¨#NœN½pòØóŸÖeAôùOkAn9këC™ ‚²—xQ@lF}‰m–µj™j ÀŒ‡w8 ²R¶€#†* —íªD Àf q -Çt0ZqâUÙ‚ ‰ñèÕ;Øöì§uêËCìÉ;oÒË ÷´KB^Ú0œw40 \iÚGh¨¼ÎçÚy~—¡…Ç:â·R…¸²º7;CÞxñë6¤É€<›Ë;ßýáei\¨C3 1Œ”õlÙ31ü&Û° âÌr%X䎌)™TãpÊ„<éÒ»ø¼«1u(—+„P ì¡à#üsáÂv{8!x‰×æ#²5Ì>& ®¯ÂFoØ - ´ ^¶•0Þ*Ì›ød'`¤+Ú)It‘Û_߬K ´¸ÚNå ï'€Î{ƒ³z{òùÐ@:r? ç-"_E ù½ÐÃl|G Ó‘œàEš´‘1JÌ$©x6̸ÄÑF ‡wPržóÿbmÊãP@ò7îaÒ ÒŽ¬•Æb œ)Kû²O[Ã[4Š$ð- BË;ηtlNï«$¶tÓ‘áìUÛb¤¼b@wÎf“³/ãlü¸\íû·ýÝ0ª5g·ÚZZÞÙ«¹›eMóõ^ß5Ít²‘šŽ[¾–pM3éO¦F ðP½UÞm®®W¶*ÝzÓõ)=O9±Ýª½²¶ Òìáãír½Ý¥ãTÒ¿I+˜ºSµ3©N×G}ÃnÿøËšQ FîãÞ­Bf"™Ï¦T »ƒ(¡iw^¿­àì`à¿$ѽSuÐh½º¹WcnŠôÑ´Ý=çõÛrh€“Jþ6{v<ŽŽíÕ #NÁHH»Ëª's´ª¬fgymgÑ&™43¨Ç4-zLÝÙsª$§º¶±‡ôÊN$wH#…ÛåFv"%ƒˆþøó&¤A)KS³™$º§Hfk»ÔXÛ¨Æbª˜ ¥8——Ÿ˜¹~üy ƒ‚µ$-N‹½¤¥Ô@ûd2ŽSÿòMßÎÿ³wåßmÜHè“ÍK§meO¬LlOœ8“Ù·úþºogg÷íìÛÉ$q’q|Êv$[‡E‰wßèý€b·Z$%ñ’ä8¬(m²‰F…¾*Õ‘”ÌöÑQZÁ%µð¿ñɪã˜røŽb¤›-_mzÈM?3õ¹ Åhµ}°F‚ëе/Çt¤k®<¿On/ݾ¹ðéés{~´½Óx±YqBíU;ì¢$o¶ëÊ´jƒ)ºª©…÷Ý^ âRu—Ûè~üyiÞ¾mÂG44™ÉÁaW5DýÍV_9g(r–â­»;{-º_èÕòü=*¢¤äªMvOXI ²ºRºó{¹¢Œ§ðkíÐ¥ÝUxdçA£ ¢#˜¸‰d¨,±Hvv[dµà@5¨œöo¶§`Ô¥ ê ’r®Ví¬„Ÿì7›>àزÖÞ÷?îâ>Òƒ/ɼÑòŸ>?ÀÕõ s?ÛvvÛÕªtF¡9ïv[$g4:¼|@•ÑpÛïššDô€ 9¼½Ûm#MãøŠB¢:5©oq,ci•}§Ö¥}o¶¨¬Z20<· â`úêÕ½MФBn(WVxQÁàL¯®‘ÃOð¤¥Z–,Èp‹G @Y‘ÈÍðœCDžºOžÕšÍe@-vvPò$_pÒö•¿úôë›_ È®ªƒ1„–xj5WÙ4„ÿ“Ð~±Ñ¬/+Ùœïo‹/þ䇂S|ùzïéæÁ¿ýûO/iíxŽaÞ¾~}c£ðÕŸï­®-.®.UŠfÙËŤh£ã„qïï¿ÿùùþ_ÿçñ7¿¼kq£˜E—ËS[Mw3å4ÓÁkF'ÈÚ‘ddÁæòãLmm“ “ér8E£;>“j¤ùä"¾QT;Ú¤–uw²½ù^–‹P–=ÈzÑr,âžíÌæáMåÅæJbÈcQVzúôéßô`· «Wä´–Ë¿ÑW:5¤s:ê MÏJ(K.Wd©Ö©×’Ð\±¤Üh&§ôîv]…¬±áæ‰èáK*02­Óø'/ö_½©Ñùr–‹Ú6xø©ùa:c­¶1.¨Í†ËÈjqјýãѶ¬‹rã²ýÛÙSYÌíìWZÓí‰.'sjˆ,Y>ðßi`hQ…Oç6åêòÂÃk²æéó÷¡–Ц™žL Ó)¸©Ö›{ û‚èe‡ß²ƒéê4`H çrU>=š•­”WPr}‡ßŽ+ö×)€ªf˜mõ§µjšNå)ë~2·Þá7KEè…ÊŠ-ϹŽ’äÆ+·øB‰©.,ÝŠ˜ô%EÛÈÇ{—;ÌÓUö^†]«nN÷Oï_)oôöŸãºõ®¦³ÙC¨\²é>šc_“Ž×br^;Å`0dMf15þÇ»×Mu™×÷Õa0YßF. oŠßÙki¬ú °‘{›©"'M³adÐNÓØ}2öŽÊ0fèB8b¿÷ÍKÓÁv[nS½:–³š ¶¬Þ¶öì׬²Ó²…*bL*R‹j•Ð´Ž•$r‰Oõ,îJŽu ‡¥RØÇšŒÚl¾š54Þœy|Nò)²*¶×Ó+ІtÂNâ}ù(³ Ê¹%¥ê‘YsPå¾÷4ЬdQ9ÝæYËiX›-5y~ÒŒ£È6Ú‘å¥b9®Zª\N<¨ãǼTH>Ú^ð!]žÓœF¤þ5 CÇPÿ„;A{nÔ9j /JùîÖ$Qý$"I€ë»ûí£& _yºªœÆ)‡Íç[+aˇç–_H;Îð$¯A¿­—áyVAÑpœKúXOk¬àxÖÙÐ:Ép€oG-ÿõo/³ò§î°KŸ¥èc½ùy©&f Á—~ýëß6Ut£·m­~ßåœôf)ffÓ6û|ÿö8†|Ýкc¢0ga ún†á$훨>÷õ0ååŸAL,™O çɆèU8bnÉp}>÷9§¹ À9#=ìw¯Ï«ENŸUk^á+Ìç4§‹¥´†æŒåE熿Š6¯”5]wvÞuÛ–®ëÇýQý ˜ü°Þò –±´ é†å‡ç¾ùmþR×éÊ6£—º’ehÃÐ2ØÒ‚iIP5OuVO×RHÿ H?*wÅš<$µ¬ )õIÀtiÁ(9üœL®â¥®½p@%)–D¨xÉ‘µCó¬<ç/u™õd/u•zkâ* )Vä–a¡1òããùK]'ÉdþR×órù _êªk¬X0ÊÆe[c±i0ÇÖº.œó¸ãy2ÚÜÅ1¼[øøæb…ì$ã›ÀÓ(ëñã³2½GïŸSðrž€é©€áÇjm]ç¬*ãÐhì´×òö†$ü#p,Àûé‰Ï"!™*ûúvÓ …<:ÊŽ•œ ò„‘ÁÙB™ò7†'ž úO¯ÇèÀ3Z}'K9…œ“aãÑ|cõÇœ}S§Ä×É«ùäNµZ]ZZºjÙÿF)Žd0Ðn§%ë8âüÔíaÕî®'—RÂ09—ÙË2BuèÍpíï\uu/„¢B‚ˆv–d¿×! Ë2 ¶mú‡îCfÕ¸"üƒþŒª¢–úøÕHU$$å¸ ¹.sš’.³™®P%Fï8a$‚(iyqbœ® _yaRpMçG”½hë2ŠûtÁC‹ýÍÖ?¹H<æý¡ü%ì…  ©5;MùëÀõëׯ_»víÒ;§<É8ÕqÔi—45µ.—POÙØØ…bqmgwW&‘¤åö‚„êÃf³e`¬Z­Ï–äï°ßÌ  FQìù¾ëz]×;:jDjÊ#K™X¦ymuÉÊ¥¢a°݇A»};ƒµ}Æ4t~ztäPQWš„jæGéAÑqp‡‚Åâ³)ÅO¨ƒù#7•§I6&îg¼”v‹òu“cqÌã]»Ý´üãç6}½&Î× -ùdŦf¦ò&+Rfg7û |&¼&£;œ z­yQò®æ½-!÷,wEÒ9d¥2¿Qq C¬I–Àb!1Ø8va,½¹fèYIõ½÷:1D7nEuâ ¦áhüuàúúúú¥ vNy | Ój:õN[†Ð?míÊØD“ è°ƒ8„nR¯7:îËÍ×øôŽïûåR©#c}Ùk×d¸þ‹ëD34ħɊp½Ýœ¼½ý_¾»[†BWó"=KÈ.À*ÖÍ60Þõ|§`ÏÝÉ>Õòœ>çá{a‘ß©!Έ A}³Ñ’‘aS ï2æâ.c[ÛÛ÷îÝ5#£XœÄQš? ‡Ðˆ¨åcž={~ûÖ­0§ßãŽéy< «,¾ËF^<œ]¯i²E†Jö“Èa4,`CÀz-nœcŽP3½zõzcãÎÄÊЇÙT’AŸ ¯‰éÜŽƒþ \¯·â¶›¼Ù÷Ke{µ˜Ø|õ¤í‰(IöŽ"7 ’¤ è=ka„z&jçš“¡â*4¤\¢2,4 ¦›Œq¢EBsýØõEÛ“¯NHxqÑ]L¹AìG±ŸÃ_¤Æ,Cg–ÅÔ[ê.SPsš†¤ )IjWouÁéŒE,O4 ;²èº®ïß~÷hqqé?þò_þú«·ÑÐëÅ‹ÍêÂÂ_þó¿~ù Ý,W«Õ¬‹å{¦F˜i’3 ñAwkðÊfaÓg¸³fgï½4nüÉÙ7-ZA¹©é:ú÷Q½¹²¼ NÄÈ¥0¥dòx¡š¨Ÿ •ÕñRxµ}ÿçÖYh±@¶gZ$Xø ŽxÎPzúøN»Í•ðé§Ç?GJ²++Ëîý»w¿ôÃÆÆZí°Ù„áx,åqõ`0À r& ßÝ݇‚nm¿ÅþôÙó¯ÿô`þ‹/>ǵµë£3Êã UFù?ݸ³µõö믆͖™¾¬EéÌp¡e-ž]¯>^y…f)¤åÓÐÚ¤ ¤ýû7ßÂÐÉ䀜å#iziC¤˜ E¨û<}öRj4[ Õ dFùb² ¦À4ÊЇÙ$|½}k}W£Ù„4( ›zš!Å"ivâF7Þüųí’!JE£hʑIJ¸$•’n隥%:`Û aHº£«£ënÝ1¦„L„,䤻¦3¡ÇÜñ…ÕòußOv›¢qØm†±@÷«Ë¶àºaZÎÃ(ñ»È"“Ò5Œ[¼è$¶Íç›Þ=¤lÇþ:p=[;ï£0 äÛv…<ÈNð¼³»×jµ·Þî¬,/ÿïÿ}sïîgr±9Œö÷ìBñ»G?}ñྜÃO’……jö :~¤—}y:‡ä C|ÐݼÎĦ—›CaãAí°Üä\/–Làz©T‚Ë~ttd)Z_¿IG[Û­V£ÕAw’Ñ)¡Î¾ê†Ñƒõ“¨<"Ñ1Úv»[­–yÂÜ Âuõ^¥/¹£O-ש¨qI/øûI¾Óvfš'8ÄW5 ì4ÔWý1 G‘„F$ÃðJÓældÌçf„†U«•H½=¿Öj5\›ÍV£ÑDæø Žøê(Fc)üP¨ð §Ra„Ï`GPAK ¸6ÖSt²§VéÃXÖâ Üð*E…AV/)·l.!ý5+OVò×!¡L°ìeKéñ,î¸jXÇSΘ=S­‚Dkk7P`°ÀG9e8È‚îÔQÈv)ìñÄuP;”¶Œ!8%»»{T€U¶ÜÇ rPöÐñJÍXŠwAä‡IÓwâ#_lpQ)š×ª–Ú4'à#‘yÑAu ½>ó\1¶;ð°˜ï³J™WËlÑaÁ?wÝ™ËxÌ •@TŽ‚rÛ/¾=ŠáÝÇœÕ1Œüå%­í Í)pxùA”-êâ°Î ãA›_¿ŽÁƒ_µÑ3§ ]Û÷ýzãˆÈèf¶L†§rCúN§ƒgê–]xüó“ß­­}ûÝèM•Jå—­mü¿À¶¼¼ø/_ÿ©Õ’ðA£Öæ«×4×8è Zöy÷#»f¾ ‰^,g9½±ŽLðAw«ïó MÏ4>ôeuŽ £8Âã†PKiÇ‘nq FÀ{¦®®¬X¦ ,õüŠ~ ÖÐy³ÕIäK&-M Ë%'Ž{“v²!ÒÓ1QÔ›V¡mörÛJîJŽx×õ€Ö®çœ¢Phî4@¸ŽFâ…"U+e”¹\*b^\¨ÀÓ·-š2LÝúéuK€Ýl³ÞZ¯ùìù Ø€Må÷8‚ê›´ûoÕü<Ê–‰ˆI‹‹íîíÑêÛH#Å…“±¦é h!4Ñš¨Àý>þ™xA>Òâµ×l¾zõ†®ºP¡ŠãÙ«†ö¸Ñ‰wš½N œp] ÖÐL¢?Þé&Í–PÆŸeJ0~³•,-ð¨Ä– Lo2fsÓaÜþs·=±Úî†/k~W«rÙmÉÚÜÁ@•Ð 5 8~' 5±WO,[îг¬ä &cD—ŠpèC~êFŠ+”ØœÎ&šÿƒE‹‚º xáLžg>ux§Ùø/7 ÛÛooÞ¼¹»»»±q?iº~ëÖ­ÍÍg•R©\æ %özóLJvÛ¶nÚP &rÔ2¢>G+sÞÈ¡•;rQò.ô*Jgi8­t%åMpvÒÝÂP‰? kô >ã©LdÓ3éìÉq»/«³˜v¼ª˜}úÍ›×pÅä@¼€î€Ò÷BDår‰¦ßi&ƒ Ö <9¸ÙÛ¶P3ô:ßwá>£×£X(G_5 ®µ zÁå :â¥&öi«Žó‚k:l <ű©öHªãx¢Óu-Ó"^\•¸ƒ‰EÓ*}ÏŃ‘zÕ$, pŸÍdG‚¦IWš½¡9X\irBÇ ¿µývue9³±ò—¡ëÒî0 r£Æ#ß=Miܾ½îŒ°œ' èˆlŸÊÅûõÌRyöìŽ{ŸQù¡Ö÷Õgòã{}É‘.¬ôSsý¸rƒz¡¤ß­ÝøȰ/t T\‡ •ßRy`!ÈaÄà)ÅC2òhI]å:£ÌH™• —UpeeEVsäR“¬Ò@žø£]{[ÏesP‘€²`F0ãèÎß¿ùöSen3¶¸ýâÁ'`ÍÒ9ºÍWo²;ÈÓí.K^©‚‘MIÃRÃÕ€p¨â_>ø\Ž—»úÞG0êýP´Û"”;Ýzï*‰ƒ¿.=jõò=îºv­¡ÕjÆî;~繬Ÿ[çéÞm³Òjbê¼ìsç÷r-_3¹m'~"Ü-ß3›uvÑš;J¶wüÿÙ»²æ6Ž$]Õ]}ƒ/˲MÙ–c푯°÷ebŸ7ö‡ïÛDLÌì†×3–¼#Q$ž¸úîÚ/+R4!iDÚF†ÝUÕudæ—•™¥,p˜†ÎGz4­†‰~VˆÍMÍç¥û>ý3ŽýbAN°ÎÊ¢½í·•ÌÏj ‡ÀZY!ÃÒÆ´ÿþ»o¯ÈŒ§ `0£¢°ì:vžÒïïÿð?»wï²ô÷äôi«<~Þïõÿþ¿ÿýùƒo\¯Y”V]µ0Sp€Eð€Uo˜„ª! V˜6¸éÈ’ À¢™?˜ÇiQ£¤ZçZj¸ÅŽ3#\›LÂü»ÖéÅ Æ,õ ¢®†%@M6íj<¢%¦i’$ îž‹Þ8Å YšBøR œãB#Gºž‡‹ ·á']åY6Q ìt"i6ÎGã Ä-ä·q¾³ñgo£{6œ m¨7IRKZi–£—ðàééyïU•­_J:Î…Co Šû>ו$1/µ‚ØÖèGq™å•'áá°ñø©*¦@ r³'š™å[-=8ÓÃÙÄ4s°è¥Ýª)’XËÔŠ§®UnxÅALl N«ÀµÇêEöD½Î*‘$âùXgMAÖ?)wº2Ú‘a€h¯YÈ L?tlhâ »îšn–Øs+‚äqžcÝõ à5r4v™"OS‘—všÉ$irÇóãƒ'wûÝÌ)S9Ýêo|þY·i;!$ЍkjIǶVÜñøáÑo{AŠ`°n–Ü¿ÿ)8d Q ëïí}ÄðƒÁ´n!„4h¹·÷!mð-ªàçá0 ”þ¬‘ Ê©ëe>Œ2/)êJmÞ(ÁXL²¥ 7 Æe,ꜗ ò{2¦„wæ^Ùs=ß÷ª2އÚŒ`i­G“\Jx£Ñ˜ŒGÍfˆŒ¢V–(íù‹­¨YѾF ôí¸þøä¿BQ (Oùlss ¬Ùhv\úä44ƒ¨Ùoãºè›`Û°ÙO“­­Édì{îéÙ°®ý-¡v5§jx®L¶ÇbhÁn1®KºY­ì¾~f|Ù0бÙ\).°SªƒQTdòYí½œzwªÈ{Á¤Û!¹¨Åö³aœ®«ÙŽ/WzØ]§ßØxõðÑ€'=ðlð¼6ª¿ìLÇ—ká·fýëd±¸|hñÜ~.Dô6ŒyŸÆN¾ýVæÀ5ß ÍxíªësïYžNõ±:¿Ò{—ä*úöF`=ͪáHŸŒË^«ô=*=dî?žMã¬,Ç_T`­YP&à4äûuÀu¤q×”Và>§3vi[ÂvEi{ʉ<{·ïÇÏ­GÏRAÞ¼i׳Âe¡KlI¶:ð ,h ¦¼³+7û²Jß9É;ÜåÝœ04f$– ÅM÷Üš.'@= ÐýûŸ°\Wæ;®€u\êß…,*ÊM?Àƒÿvïc¦£ý'c/xøüÛ÷û“³O?ÙO,¿j7èûöàðéÝ»-ÇU®@d‚;Ã@Ö‹àÖëÖ¨šMÙÀå Q Ô™?  °SÄg0gns6¥Up§un9 Ÿ€^f·´¨Ó³ÏÅ¢®î@ãÙ®ŒY>Ûß߇ÀŃãñ˜3Fu»Ý““a¬Üž+=ïïîî¸XŒÚB-vD›îJY”Cü…,‹ÒÀt2´™ó´-·• ÉÞßÜ4é±¥"¹n¢(Kª"÷È,Ë (àf((EAó€¤çºöŸlt;t±çã)¨iqE•ž 'ìKÿ¦¢]™9„Ñ…–„‘€¦&Ì ¹|N@œã;z³Cûþû+DÄ)E)ê±T‹:5÷¥2“›vnqçç[ƒ«ºÑ±ÿTBHr03ö’ηÿÙ³aÿnÏlÀþðÅ¿àA|bm˜å¤–$ñJývfVÀÌ%ÞlO·Zom°,ÜÛûȼ,y)ÖZE` 1-~ |©ûµòvyÙþÊáÀ}VoWUG¸ñ:*Ç86¦žY“B3ÃóD“€Íf ãkT½Ôc<Íð8Ëñqý‚Fi  z«S°–Ãí\õeß.y®ÕnØ»;áQ?=ËÃ&0ƒè4mðàÑ8“jp’©¸š¸ªåxBOôp¬£¡ð<¥² 7"ÑÅD”RT–†ÐÖŽ²Ý†ÓÈ-¯ßsQþøxªÙ}ÏI‹Ì’Ó´œä2N]¯h5ŠÓ©åÌ >ôÉñÞš¥·eSš7ƒXBÜl­é âEÁØü{‹G ,˸é¿ •e õÉÓ§z}ÁîÜév:Gûk³ëOª§÷¾ìïOÎî}òyèEX¼®8rÛÚ²Ò¬ˆ¡ÿèÙžWa4ì½¹n-Œ¨~öìy Qÿ2³AøÑbmüå+ł㵀Ë\„[¨ˆ'Í0$b55h!†³ VèCe“=?j^fy¡¹X”¥-dÄ·Žnït:`nžëMweä‰aˆôÕPz/ÛÚÜ$‡ƒFÈFrtÀ=8ïûbEÙó±âçtÑ^Z(ŶßO“„6Ô¥ñ¡#éO[õÆúYÍëÂÐC™w×Cq–Y¿–%Í.@ZjSNG¼2$?É æ‘Zt¥eÀsÞ¯ÃF¤‚Mã?ÐNŒ ¯mg¦Œ&ÈÞ¸ˆá$l1 Ïh‡›e0êB¥fsúˆ¶ Ià­äFJb;oÅ=Ú5`ƒà}9€¼ÉŠŸ=£Nq?Y«µ}Åíÿ¨#ìΆÅpÿþ§âJÃÝu_7››Å÷|Azý`±‘Ü0òiƒ×¨úb‰ðÒzÀCÃ÷ðÆûª[ ¨[¶ªßÒ»Ûá‹£øñ‹,t$¹²åhªÓ„pµ~ŽšVã=1 têÃ1= 6°Ñ—­P„…¶";n ò‰ÔJgY%¶µô´å;Žt; eBQp©×Èü‹¾p=p鎨ªdÓ–…Õà[à¢#$ÂP˜½’ˆù2ù$šY½Fí·–ü¼Æ¨As´âé7½àã×ücDxr¢ebÿðŸ¡UYÉ4tåßþ=jv?ûôc'êŠäðV”3}"6vA¬q¬5“Vy®[?Þ¿wï#®‚Y7‡È Ã$kOã=k­hðÉ€¡N}Víï¿ûWð‰º˜Ã´(èœNÀÀvÁÆÔëió‹´ëhT¬é`C“‡®äô’€ìæDˆ’Om¶-+Ï’ªôÈÆÄ¡yž--ÛuÝ,'48™L(K`žU¥ -¡ÙñÚRSˆpÏ÷|4¸Èé r ÕRÇ7Ææ+”êJÛtÞƒ­+›÷ÚñF¤ ˜º’47æ4Ú6)+él7ÜÃaõx÷ME;»Jf›£ùÊ7_= ±üî[65cÎñöɪì•o†B°˜‡},¡=1òãë æ8òJÌ-·×¯ˆ žjµ#ÞkÇ' Â¥ö··=cÓæÛøûJy.öOz~Y~/n ¿ ·J°0ÕÛQ,Ô §rÖ¿…6sØ[ÝW|¿0¼à³û¨Ôl¥­f¾^l¼˜/žºI¬U4 ®”ÉvèFb®Ç¬TõÅ߈ëb» º…]iðëë½é[',×З¹WePÐŽ“ŸŸg`æ<®*É«®R®ju=¯P²!õÙ™>bÌ ƒÉxÞÙ¡^*lO$/4¤» Ä8¥nÇVã4ñÎRy<Î ]Þi;/ÈÛ!{z’‡Öa;tÃfs,Ëmõ^YµÕÑD‡z`Žx‘”›7YºH´NÞü«¡×5¬?H¤ŽëÊ4ézn˜ê„Ûú駇»ÂNòF߉«T¸iœçÕŽåĪr¤ h®G~6Æï˜æ„‘¸5x D 9-ÌÇOžQz½¯ý%$À–v|'¹>G&çÑÎK¸µ„£øòË{ôs­Ócºc3]GÜhw¡Xø›ý “=>Ï&ùÜm~iVgê ê½íÑz0]§Æ} <±e÷6:iÛÆs¥Û‰,Kµ[Íét" ô§SuI SDºM‘oex§§'f7ÜMpœ‘ÐŒÙP7NuÕh¡®¨’ââû( ÚJ€º€·h·£4™¢4Ôþ樾¾”jõVhÅÈF•:D{¥Ì!4kÍ—Å€–(ä“5/‡ÇoÑ$þ¦×Åw™UU++ íçrȨ¥×“~3³6ª÷‡ê×Yº“ïáö´Î¥µ9×fºuþY·Ÿõè#Á¼ß^#‘ËÅÆ/6)œ•.5rq`8ÂëÍ„ËfÚòq]u" N¤Å±v·!e0À½XbÃmxù¨¦iQæ6Ãy'¢¦nVÇ«(z= ôfOÇ)Ì#G6CÈ`*mR4„Ý#wmQü[®‡gâx$VÍàÃ>å¢é‹ƒq6™V›ê~?Ì6[NSø~­¿²zY5‰¥çа!×òõ<¼ µ¦ëÓª£†;£FÜ×M²$ÃaÇü±ˆ³áY&·º…ú Œd4"[©³³Q£¿ñi–ùZ¸{{-ö¾T§+=ºÒžC†^´G€_@Ç»·ÌØ—ÐÎE¸Å8J\rŒŸèbMKD˜ÃɦөñË.½-Ž“„4Çs'˜1AP5Ÿ}ùÅþŸþ¼#ôÏú“¿½ÝÑúôÅ1äá™õÚô»îYúBê"IäÎÖ^UpFRX” ÑHé{,êñ‹W– W½;Cf‘Ö?] “.­+@Ž0zÆk$ 4žtñbûèøÔdtÕ«ºXeQ+:88ȳ|2™Ø¶:<:Väj:ÂÛXàµeç("Ž6Õ4¤¼ßáVI ˲ ¤e[eéÔ¢ó&*üŠÛ«k™rþK:—/á¢ðYäôTÒ½õ˺P>ë-Qä JÐ&INQ•F¯gµ_"ÚiÞà šdŸðÞØh¿¦5½cºñß]áØæüVOYQ`6-FÎZmŽl7)ee¤Wä¾^U3@mœeæG½B$‹ú`8K–J#U UéJÕôí0plÇ:‰ÉÍæn×o‡rÃsø(9íV¢¡_Qìšn;™Hèää䟇/ž—€Š¯ˆNÄD¤`ÆSÞ'^ü ’¯Ùnçýþ½o¾züç¿ì¤Yòð'¨ïmöáÞwßz»Ûí ÇýXëÄq|¥B×éH ‰æ4›—ÔuMÍ~^û%Hà ÝýU8ê-¢¾Zº‡¸—vªŒü¤xñ,sl9x~ˆÛh‹Ûóðé¹â眜ú·”B‚DúÌ€¿x¥vÊ3 a+ÖÊm¥->Û\—•,i¯Ý¢0þ\ºíe](Ú”g+«.Ù͇ \Â}871ç­5Kž"`ßJ÷­iMï†nμêÂ!;›¼ 0ÏÄí5n±mÙðì-_‹xœå§“‚ôKD¾×îú :"öåò¿~±çª0G_8à&g–&ï²o×TSže“É8ާOžìF#súËå¹i :û•Ð!yd;Ê^q‡vvÄÆûwN„øà_¿ÛÿëùFûÞý/ènskËòœJç¼W£ì@J¨†¿åm–î¶Ñ¼?ENk¤UŽíVeðÞÎæ‹Ãc|á|Ã[h¥——»W^‘òÕùƒˆo\øu–~A!»ô¶ÙOê—Šö¢( ©œýÚGÙ¬iM¿+ºÁ…ŽՠCd¾]VÚœgQJu_RîKË7PÐmËTiE"/Ê0 ,Ûª®Hu¶¦&mÄ@Ƥi6c²õêËÇ‚³’A®·Z­F£ <º8ÈZŠîûw¦Ap/jf&“ÕV«eµZAoCÍÃGWÄQd5>®!rU–MrãW~àû~äñÊWìƒÜ:'Ú)ß^QbÆ|X¤ãUí,#­°öÎ_ÓšÖTS'¶r²<ÏòâfNUB™Ðž*óÂ-[Hھ䅓W²|3¯ þ°ÑíŒFgRè4ž¾›÷ZÓa²MÆãF0*Gé+u,ÌàuÈuAVå<)ó²<·7OÞbQ”+¥#ã€æ8n$Z«Ìœ:¸¦9ñ¡«äL—%yžfil4*}kuÜs¢]ã‹É[¯èÐ:㘠è¬:iÉ5p_Óš–ɦÝ|ÏóLèª*(kÄ -¨8âÿS ÷|¼“×ím;ahÒÒ¯]pn†l-ÂF„y†Ï¢øeék€;%=_Ïu%5TÀ—cgN(~3úÅr~çÄ)´žçûètÂÞvK%ãj'Åd:Á«êäÞo’`|MkúmSQÔ‰ª ‚§xÖßàÂ1v:ÁúÊt:aw¼5ý*¨(*ÌÑx:*KöY›`ûtN´Û†úýMßs³,½é¶­iM·  ßU <ÝÞÞ"Cø5€Ô¯Ž­s¹éæ¬ieÒ³³¼«™sõš~ëtN´kJVG˜Ú±Ks¼ §ë·Öì°¦K‰´+ÊŒHž>}åY¿gzþ*)…¡–%})×^)kZÓšnšÎ‰vËàÙ¾„¾EçC—& OE¿«ÕBe~í¤)¥_eNï™9JpÖ?EYMŠ k?¸H×,äÍ©,JA Î4G¼àóR+ÜRkßYóÞq3´IÙQQÒP—Ê|U_]=”¥9à×m›Zi>³ú»Þ„^ÓšÖtô„ÚÍ6Œ9‹Ž¸Z%LÞW|߻馾#2{Qšr<Fµ¡|"&þ¡*Þ9Êö)®ñòt(´ùjÎÔtâ&Áú§’NȹŸÑŸÊ¶¯xmrEaÌs†)üíºîÿ³wíOm\KzFI3z?@€1˜‡Ÿ1){“{Sµµ[»ÿz~¸•ÚëÜõ¦Ûàø…ÍC€„¤ÍhF£yì×Ý@ ƒñæn9Ñ1Q@hÎéÓçÐ_wŸ>Ýœ°ðLWž7ÔôìþôÔÔp8 Ü„gÅ2MÊÚÓÂ9Ÿ"—BJeÒTõñŸà­‘ž],sŒï…kš–Ni Îñ k‡Yð7 éR„âxÓÓR&H7zUåô¼.âÕG–\r=Wn±g2”òê®BöI“\Ò’“òzk!Ÿ¨§×îgÒ&mÒ¾ 6ÆÂ8ºÏ§ªžçJ–üäŸFjF\$€ Ývúš!ÇJágßdÒT#(kå2%LÅfÖ(•‚Êô$Óé#‘oMøCß·»TÈ»®W)—”«¥U‘#²!]¯ Уg2Þ` º@ À¦Î=+d‰2R¨çÎGM1-.6[=Ux$—3 yè‚+®æºªS€t=J|J§¥v-›æè @ Ïç .™v&)¯2^©èálj‰ŽÀÊJ„gC.oÜw)¿J³ÕÎç³)mH`œI_Ê+YÊ®ÙÃ›Ø à1¯ƒ?N·‡Õ<8Ø_]¹…MsmhʇÄy®Þ”HœÜ¦ÅvQÒ)3ROÓü©ÓˆÇÎU'mÒ&íÖÆA;ÇÊp‚;’þ)Ê„ñ±£G1Ī(Ê?Ç&ø=\ |Èt³ç`5¡Ñ –ìý¾ÛëY‡‡‡àÆÝÛ«ÞÀ›©×•læk¦äŸžž är9ºÙLbšn£6›Í^ÏY_ßXZ¼‰ë3ÓÙËÐ]pÝq\ÛqšÍý½½7æÐ¡ç“ÊÕívîß»Ž@ I-ÎÇÀ\çàt‡„¦þÀnZ6Óu£ïBiP1sË´LÓ(NOUúý~¥RVÆQ( ì*=–T)a‹»¾T¯¨²®'µT§c ¥N§ ²¼œµ¬ìl¨ATßÅ€ªâUá² cXÄ)BgÕv´ã:p+è˜$Ù£°À`(eñbòW•øLÐ=±Ñ£cáq©ß³€Z&º³_4GasIMÀØlqR$ ÒPݳ\O§Ó…ñ‡6>ž. ){Ñ-nPÊåòòòJ©Xr»Ón±E8¼€ž3¸^©V7^þzûöh/Ö×ïܽ÷Ã?|ûí¿¸nÿ“bÈÅ… J{Íf+ÅȬ†b²x‚±tÝnG‰¡˜ù|îÜÙMCö:ðü‡Š ( ËÃ|ó…¢i9P˜ËN' †­VóöÊ’®gN+1ÒIײ±S{`¯Ôºd@¦‚Éý¾Û¦:WúÎöö_ÿò vÔI¹'±z1ØëÀu°kvnžCÛ2èÚÆëׯ±v?þøc£Ñxn½> U†‚®ŒÄà‰7lmmƒ*tH…¡²Yvi*U}ˆÓ÷RJòÐý˜øÈ÷o¹jµÆPUÑo 'aŸïî6æf뇇mí¸ˆµ<³gsùØéãó§Ãø¥Â4‡h ¡A4» ˆB)w=i“6iàvMh?Áu .ä2L%`d\™tJ ]L=ÃÐSR<è¬Iq°?¢D$û†l™ %BJáz…ƒßî˜ø0ȘŸ›Q.F÷«Œ%áðNßM&S€q]XÞþ&×ãFå0Ð’ê«×ok5rùŽ5»Ã p8ðíÝ»w‡‡‡ÀKpãÆ D¬Dí6}l¬/w×1Öƒ_‰-›Íåž>}zÿþýŸþev¦nšV1Ÿ¿"Vä5-Û #J’Úív1G—ü. P8”É Ì§SÚ«WojÕʹ9Ò!´ª¦Òé©©:Œcà(˜Ón·A5 Y*†Ð¨,œ‹Ž©rtòl³8:RÕ8V.‹Nx¤P(PMâ a'œÿþýíÕUx¨’¹SŒ’Øo•$9à:«Õj¢g¼yól®7›Mð+ÎÚZèÓ^ ®ÃþžJ---9¤ñ ¹‡®îܹó~ó ó°Ý­r\­)Ç$Òn•²²ãJGËãà ÈÇ®ÓÒúÞÞž€º(%ÐlÖ_¬ïìîà/gk{ûßþõ;@ûôÔÔI'¢¥¡“n·ðªt]T2Ø+Œñ´±m< XcH]ÙÇ3i“6i_h»>´k!>öö›Ä;» Àåææ‡D’nÆËµ`ˆ³l.;[ŸÆ{c½ôâTPÌ–7 •bUjïœÖäDvÿ Eø0œ¼ !Hò â,“Þ;hÝ9ˆzüaÿ¥cÉå6¹ç@…Ä|óóób#BÔ¤ÅpWØÕŒ±@ÏX³aRÕýý}ˆZàœ¨;Àuô†ž;}Øj^$dùðØÅìÞoí”ËàúÚÚZ©T‚ѦC|÷ÝwßÿýÝ»w+r&rE¬Š%U«?E‡àÀ{jj ´a: Xˆ:N_‰õÑ9FT[Œ¸tg¨HÁàž­V«èPQ žÛíŽc÷¬^+w.À›mN”$5Ò'04ôžBá(—5z0MSÐf3>Öhì¦RçËN ¶ÁdÏJ¼ËÔ™™1 ÐÉË—/±pXMP`Æ–|·ùþæÍ)d£MB%ÞØ¿‚øä3Ú–¯Ö`dG×Ö66ÖW–aXWk¨±XËì¶Û¢oÕªUôS:‹ëtß/A3>Œ…å  _®ËCOâóˆ~¡PDçªkÿóÓÏÿùÿ~ŽìL:“5²33sÐ5ÅQ‘á&j(ÈÆ:’Wc;Ù÷¡]Q=«I ݤMÚ¾]ÚÉj¥a±ÛØ$»!¡&$‘!ä?̇„–R¸FÞ¹Z³bIw:¦XãP‚ šªUE‹.à‰ûößÑ›Çf“ÂáBºaX6ä`J`¨W‹&–`éXTŠ%fOu•E3ÌJ9må*€G áIqLãC¨ä"<‘!§³³•JEà†ª\èHÑÐ:¬Tªoßn>xp@\Wø.϶íGýôÓOËËËÀªé©Ú®b_ŽUŒìŠ„a‹AŒ¹±@ C Æn¡ïÙvÄ'Áçúº€0ÈMË)ïÎΠâMqNˆõOÇÀQ|Qø…šPÛ ùŒ@âd¹T­2’£wáæÝ;«F£\*Ö‡DS¡x@rt«:ÇÖÖ:»Èß⺩tŠÎ#Ø!Å­.`¹ººªP–xW¬jtŽ¡gôßj5——Wž¿x~{eéà •ÏÑ,ž½XÒcÏÔ¨Uÿú—oN»U$’_í®8}/yìNÇÇä F<‘gÏžø_¿y»²| o–ŠgÊxÐýdÝvº&ßïëõz@Õç$—NRB+À L™²Lr¿OÚ¤ý9ÚgµãÕ´zßë³è¦#'ÙEÒäÊÔaÔ±©p^¦ˆ'<98 O~"¡ÕjSºž޳¬>ƒÇåè€#‘t¥“‘´$ŽŽŒlNêóÄ׋Mv>»µmAˆééiHjü ¶²à 3L+•pé"æÞÙbôÃú—“Zd¯ç_RëP‘ pºwïì9à.ú¤s_ʃ;lmíá«__ÖªåàÊ@E¥ÉøŽx* 5EÙÚÚ–¸-Q0 úït:r‘dfõ ‡6fŸÈ% — ºƒGJÞ‹/ð#𠓺‹™Ûwœ? ð¦ûÛ„5ªžÏ 'fi˜âÛeˆ])¥RË÷õÚWÙœ‘5~Ó`äRÔ¾ÝF#—Ëã‹wÅQzèd š&!ß«W¯’ÌF >%¦]ÔG˜¿]hšèº øWÉA-Óšž®¯oüz{uIî­-ÜœßÛÛ/¾WÎÃÓ}H jóðlwp[N‹†Üä4ª^YYY__¿½º¢pš¼s´%“Ô L³>3 z‚ãIqHc›=Ëa ¿Õ<Àäg=i“6i_t»&´K¦°b!çPüN2Š©b ¡@sˆ0±Úó¹¼aèJÚ2>«6W½L™ì¾W¯O³¹vd…Ÿ‹ì˜Ú°l ]˃s›x4t“DÏåa&±Ô8Œ•ècQÚ2•BÿXÆÆ<İT*ç … 9êö•ñ`F'èE°#±+NÑýý}Haô)ü2ö&¨ÊrÖ¸uëVµVÍféÈ:ÁÁÁ‡ïuA :,‹s³³ä¿Zl”* ÉøvxßÑamKl €AŽ!8kå†Kq°ßÓyÌNŽ0 E¨Œ~@߃uè¼Mæ5Þ¤#ØÓø$`ª Jú‘@q>@Qñf¥RN§´R±xnR’¸8N³“>É'5tòe¯P20 ¼ÎÌÌ€Z]Ok`–vùÎǼ 7ôû‡‘d$2C4,«0JüÞ|ïŽâó}ýö«ûw“lI¯=|ðò××÷îÞ¦Ýkœq¨Äœ[“7M+VTO·¸‰Î þC˜››ƒÕ>;;F¡‘-Œ&&R8K.þ±;jÚ°Cð,S »8«„™X ·ok“ºI›´?G»6´'D˜NOU} ±¦ d7oÞ”ú³‰‘¦ÂáÉÎlø$- º¡«JÌéÕÎëÀo¨³õé„–â¬gd»¸Ô¼ÆÞ„DÞÒò­e¡¯8ºÎXjB¢8<Ðq!²!¯!(E'ˆ9Ò¢£â•φõÔŰÀ"Žh |£êd,9½4ŒŸ3’©À5 …ˆó¨Èm °!—Í¢CÊ—ºjl”ÆYÈçLËVtÈ ýÓ„º€9ŠuÛh4(Hžº-,Ü$îïœPY&&H²Šc?ʱ.Ñ<.»P‚*åR³ÝQ‘íö,Ç„:–—ð¬sàwÌΆ¤£îD¥¥{"Ðïô]At±•Olw Úææ&wèa@ù¼pÕFVÁFÁp8ð\˜Ò|€¢:޽°°EaaaAV„\è4ÙÖBªt=³p³jY±×¡~ñý6¢Ü•Še:¶a_‘hxS6>†Ó Øí÷W¾}œÉ¤ ãü™KR£ÐW¤h'±~OŸ>…±ŽÝòõ×_}L™ÐMÚ¤ýIÚõ¡]ÀßÏÏÍØŽ«¥ÒtáXKÀN—Lé$î€ÃxÔÁ~º“t"EgÞdm+GÞÔQ«]eãŒ]ñ*;oãHÃW­Zp‡YC±ñ‰£Â…×Kã‚¶ùœqÐêPó8‚%—ã–3KˆZ D'×-QîÜYÍÁ²‘¶1QŽC¢Ä‚=*áßP€ðN꣮Qš²–ôRγdràz"ôaúCRÆ\ ²ó³F‘˜ÏG_´g•óÛPü™ÕíÚ¶Óí’“ycclL3UÀõÝÝÝr¥8\á·tÜ>óLã @Øüü<”à:T€ úÁDü%Z* ‹³Ïv­®?P<ÝÀ_YZ¶JÀj€"º²í%€ #mdŽX5hX„`h÷(\¯'`ÆGà-, 4!¼‰ß¼yƒOÂо{÷~]µÑƈ¶š`û°i‡TkS`ã¼: ¹­½ajjÊìv¸$6©X|0íë0wè´ Q±'E|9’]@€Ühïšæ¹pdŸÃf¹¾=´½Û€„‰ø^»Ýß$ôáñãÇØ-`ÑáaëJÛ“6i“öå·ëkñ§Ñ½X*zž_*æ› ƒò™øT»¨å(cö1$³ïñcñŽòÛÀ“ÿ¯ÕjtÛ'ÁEmÂá¨fpű(WÁ;ìåØ2MϘœ3ä$£­ËNcXó0›K0¥ó¹j¥\  ßçys}@ª‹DQµZÀ@.ƒÔR©$aYÀ Îä{aãDcþaÛ ÃØ´zt agpa ¾··JÂ`È]Ÿ M¢Ì0Ó¬A÷×ašÛk42ºþäÉÉÙžJ¥çço8¶“©Uöšõú”í8™S–®xª;Ý…Á‡ä6|RÒËUÀÀ L|tb,"uÌY{lͤӮï•K¹­æÛw ziÐá=ë8•z”5t'Ò-ÊV“~L®ÅÊÀª «E—Â÷Ї°jûû{Iò3iPÅ*åR>Ÿ»Šý hÄò-/ß’[—˜I“›L¢ÛÅÅE924}þü9Ô…ð8óñXD?½CðßîÎŽë º¦EA¦a(Þø€Óøcú&mB[quuöz­VÍœuÈË1M ºD@)îI-“Ý…eì­­a9ð+ÇíÓU¼OÙ*“6i“öå¶ÏrÐý†îì=†!R|Xt®ÈØ%Mîž}<+§cìžáj¥±Žß\Šë—ŽÅsÑ CËÅB¯gw»·ïX=[¤­ [&Tà: ²ÇÖjÕêh¾‚=oÐnw=Ÿð}B¶bDy°®»Ífsè>ŽÊ­p@Ò¸Ói;}rkC¥IàmQ9¼`ÖŒÄW:9>Ý3ÁD`.¿ÿðÞ²L]ÏX=³X ›èÙ\ÞÎß¼ÑjÂð;}û¾R.ŸŽÀ?ñTƒ$JsKçë}Î…’,—Šà$/›Íöl›ÎRþƒSÏŽ3¡`>›ÅDî/ÝÎ5vRÉäööÐŒ‚Q D‡ÕÎIñÒÙS[â0’ÿÛÞýÄlRÕ ¯§iè†F™«õ^d体8Ζ.Mt7KØ9;ÙiÒ݉“Ì“YÈ–wV’¸"îh6Wo&{ ^ѨñŽ"4tK7`÷3õ<Õç=çOU:ï÷Bž®·žS¿sªžúU:Uuì½ìÎ_¼üêí§ïè[ý7¿þõµ}ƒxÝzw3÷éÓ·ÝpÃæ >pº?ÝþŠ:ä÷oÀûë±Í~u\ýkßþï¾{ùõ×õ±ßõÛßþv¼Á}÷Œ…÷ßÿ·7ÿ¼»Sï½÷N t ì‚tñ{>û·?ûÅ«÷Ý{Ï~ÀÊña|Ãð6¹þ¸¤ßÌ~ý›ßÜwß=}ûýçƒ/õí õ4 [H¿!½}á­~-ìž–øá0ºÝíï]ùÜ}÷îßtëð Àö8¢6+eùïoèú`?>h78çÄM¾}ÁÝ÷W£»kWwÝú^ðâ>|ÚÌæÚµ:GO~|™›ýyÑñþlü÷¿û]¿›¾áX·Ï¾Ûc»»ß··Ür²ÿП¯÷yýŽ;NßyçÖóÈ!üåÒÅþŒ¶ß“îCw×]ÛríÊåwûÝq0+9ãüýJè3e†ùÊî2Ÿúä÷oøýþŠì•áÍlQw*_? »íTæø¹{?ûö]ïüüåWúã³wÞ~çæÝUèãÿñþûn?}úíw.~æ3ŸêOÄûÃ(íþ†¡§ºíýßÿn÷FÔcÇ®îðþpÁx»ï¦¿téá¶>'êî¤ýòö±ýËâúìÞ/ââÅ¿Üôé›~ùÚ¯Nº­Ïvý‘QMäñÐì Ùßöf-aÓiõë½÷ÞýÚk¿êƒNŸ¾cÿ(ž[þº˜vüÔ-ýÁÁ©[n~ðó÷ß~ûíÖµf54ìxù¥K»C½÷v}ì'.^|§o†¡“gxjáûïï.äÿåâ®<˜>‡˜/]¼ôwŸùÔ/^yuxHÃðzøý+m¯õÙ"ôÇ+}aÿðCÃtfo|?ç›»ã‰ú#‹ãÊB?x©þƒ÷oºq÷ø„~k¼aÿŒ¦ØMÀJÙGw§×>|mö±ïvØ¡£{÷è—nÿº¸ÉŸÿÑB;oO~B™7î‡ý÷EõéíÍ·ÞzåÕÿÛ/¤Ï^ÝæØ‰>9?ÞŸEý»;ïèÏ×û aMWÃkuÞøÓû©>ß¿áøÕkÃ;F¯¿g½_JŸðvûYoVî3Ä_¯^½÷ž¿Ûbí.W_Ý?â~ßÂÛ›n:Ñ/e[ù·ß~›yåx?¯·*>|a—POíjÚŸ ßzëß÷ ¹võZ*ÙŸŸ]ݨÆÖo÷Üý·ÃÀî~¹výþòýCÛ·½—ïêîuò7ö Õ'f×åíýÀoºñÄ­7ßúÆo~î¾{~þóWúĶ{Hê{Çúóõ>¢¿ù÷w8q“ëààØ¾+¥¯æ}÷Þ}ñâ¥_þëëïïÇ<öÇ{»ëë׺/~á;Nß~Çî™?§Írüm¥®ÙÝHà »g¶÷+bwçÛîàr;\ÙïFò[Þ)`©rÄÐuŸúÔxçâÅO|âoÞ½|y31÷»×þ\pÿØø[]{ð~‡{²OÉ÷ÞíÙáJvµýOôôêUÏ‹º‡ƒƒ}‚·ôuïîàÞ½ž·»ÚYÆ:ÜxÝñÝmQû'±ìÞP²/ðĉݻS/_¹òŸ¾ðùk»Þ…ã}œê"®÷TŸ¸idà}¦ž U}5ûÂ;ï8Ý·üC_üü¥¿¼ÛíŸ|r¾îÊëc]úÿß~ÛmûeÿÒ­_è8Ôè›`x"}¿âNÝr‹u­Ûj\³ý©öçîû¬uÍÆ¦Ï!ŒÛöß—¤ÝgjíCm:[Øm!ÁÛô…k@6¯½òÓ“7ßòç7ÞèOXþô§?ßu×]—/¿{ü†c—.]RÚþÞæŽ±Ktì_Õ¹€ëÓ@†'ªö'µÇ½§eæ­„¥%Û/z÷èžvcw§¤Ö;ÐüµØ__ßUO¤u¹ý’‡CîÃùI΃հcך°­‚kvêu B‡Rûo¼ùñÝÃ×.߸»‘æÒ0ÇþÆîþ„&÷mè˜ÓµÝòëOÝ?ýwŽ7í®m 1‡ÎŇG—¿ûîå'NŒƒ·+¹afxÈõûÉ®±çÀîzjß_0ÝþãOþÏ™3g– ¤³\Aÿù¿üÓÒQ9ýà‡?Z:ª¶¾ÁqçÏŸ_:êåLí>ôåþÿçÎûÆ×¾ºtºçŸ~騔﬽æžùÑO÷Üsÿõõ×_?88˜-–•Ò!?dëŸýóO–~ç{ß»ó{^ÿ¹}úƒÇOþã÷¯œ<Ù}ç;ßyñÅ_~ùå>»G•¹YÃóÈ„Aæ×e‘ÖXp¤-zÛ €#bÝ×Ú7›ÿñØÓŸøÊA÷Ôc»¼øðæñ—.ÿ>¯_¹ÒÝ}÷ÝÃlÖÔ¾Q^gçÙ) g›²Ž‡^CÒÇP1cvÍ ýÉZµ‰V¼ëopPE§öþ”}8_?t‚~øafõ»Ãt³× ¦>¯?ýôë=ö‰ÍãÝöÅú)/uÏ<|óße÷+Wv×Ú?ùÉ“Ï=÷œñ݈õ8çR»xm¡«H3þ£%k“nÜï^|ÀŠ8k7s¼5뻎 Ô”oèñ­o½õØÁWïOØ_º~‰ý ëžÚuÎyýÊ•?X¿èJãtÿ™ñð§qóT;Ëôϯþssý ôÔ¥Åæ `xŸ5}jKw}][®¿¦ÁUæ™sl%­Ýüí[ëºt*Œs&¬/˜Ù|òZòÖþ›ÝŸxâ‰ÿöÀ…ƒ§®Û>½;kïúɓ݅ WNžž”ÿLL§}Kí„ï?kÿ´–ð‡?üáÅn~éÅ>xøáîáÿøÇýÄo~ódwððKÝ?¼õä×òºç4]›!vWn=ÉÎÌU ¿Ë!¸¸„ýõõ÷‘h õ_nÏlÉ`c@¢ÏÚý'ß±Ôƒƒ¡g^]§üÏþ?õÔ‹wOu/ôéü›Ï|e7õ {©{¦Ïëݾ7¾ÔYûDC·ò3¨5_×2Ÿ¹OÞc¦«êB9µxÆ5°^>ê"Yºkž¨šš3k$ãשׂÀZ× 9òqpŒ˜°.ë~ÐlŸÝûÿ_¸p¡Ïçýÿ.\x]Þ¿UŒS¬³ù§h…˜S\ókã³<ó[Pç×§Å#Yºµ@ÿ‚ü˲Îl–¬¬§A$ñHÖ…§ýµeyÖY@=ÖýÈšñDš¸gÏ'Þ†£SSX‘Rûw¿ûÝ)ŠMNW湉Bšº¦QåWØì°gj?wîÜÒ±‰<ùä“K‡@Eœ©ý_ûêÒ±Ù}ÿýÏŸÿË?-•ZY‡ü™3g–€ªm^{å§'o¾åí·Þèÿñƒþhéx@–C©ýÁ‡¾¼t< Ë¡y®a°vë~d ÐÚhÊ¡y†Ñ°vúÍoçÏŸ_:$Îr_ûóÏ?¿tT ×Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦ýÂf³yõÕW—Ûéþûïßn·KGÀb¢ÏÚû¼Þ§Ï¥Ã¶ë;{öìÒQ°¤”ù:³;y€.ùZ{mÙ¼À úZû¨ªìN^`žÚصÍfüçõý”á³úaœg˜hΣ~w˜_Á:}øÆÒÍ@-ro~3“zgäõ1 ‡®³©óSÌé ‡@•Ö~ýÃfcÿ«vÖ>¦gmúG'îjAãqkÊv»áŒEnjh§Îê?µ3ïàt½Ï]ÍåÚ”ý?ÍìÀQV¬C^ý }Ï˵¬NONÏäuTe4kpi×ÅÍCNrÉÜñgmü˜öòÚØ:ÏxËׯ“zm>ëØ›üõ0cwµkÓ@ŽÜÔîñnþ_KóuzÂÒ9&@Uf„|çñîú¬N‘&uG'» *–ڻÃéºN¿Ýœn>¥ÎŽËꈕ¿ù­SúÛ‡ümí„7“ý!ZÚ×–§|SvTe®µ{F¼[ïYW¯Íwé™›ßÐävÈ»úÕÕs꙽ùº×ù¹ó⼕y†¼96ÞzFn}Ý‹ö§„¥“Ý•FHØ‘ï}YºeX¥©ž!o^xõ5æÅwëãlåy}ãžuûQT¾â¶úP€ç¯ ñÄ–Prÿ§RKY»Ê[i o¢H¦.?-˜ÅC²îjh"¨ªÚz—ǵŖHíf/¼–~D­½¯Ýzl  ij¾.ª[¾¯mðw»½þfQÒU LX£®xr š‡ Å´jõ·’ÉÇS—Ÿ‰úÓ«áЪ«&m@SÏÖ[C<®óÒbÃè EùÑgÏH{óµ±­P.àíŦ±f¬aJ%Ö ³•&:›º¾uòÄVsØ8²V´YN–ÚSsIp¤½çÙò²¸Â_'ÂŽÇH–a2[‰¼~DbLëÚb ¥ö˜÷¾tŽïæÿµ4?™ø–¹ ëZ©V•‚T®’V2/­«üüÀªŠ U©më­-žA±gÈÇòŒx7?«SòGÈk¹­gÞS\Ÿ‡§#a½•*.¡•f>eÏßGL]þDª õ¨d´Ú‚ñåžµO•)ê{:¼¹jëé† ST+ÑYkü5MyÖžóL™yŸGc&éaJÎM¾ŸGýbò¡ƒk辫@´þûÄÆ)ÁÛ £–’CñV²Ò¹'¹·"X`°s Q7àüòÓêbFlvsb‘H´yJݘäZ„g»•ÿÉ_¬0ò‰*¸,õCHØKt‘¿Žü çù5ÉÄešatþek/n Žw7ç1¿`ÞNOš4$’{«ÌyäÇ’`’£um¬’»>Ô‘çÚç)b(ÛJòöJØ~(9Â.´qŽ)pP¼|­µ:ÖÓIÚ†áù5Ù<Úͳë÷üÉUšõ"\_5Tì†ð‡Ðž’„Ûäl¿Ö®Äª N±*—Ú…ï}±>ÖóðXíæ÷ñŸ]èb’65 Q‡æ-XEv—’ÔíøÃ0ãVsº ¶’«ŽæA Ûµ…z"ô´d~ùf´®? OV¬­é¡sgŽ.”)ÓZuº† þ6“±í)\’Ö›í×Ú•[5 ’›Ú£8žžöy;á=5ž€ß/Çb¤-7¸ÁÅ%”:ªÐþU»â'‚ÓµÒœä¦[Ö"ÉJy6¤„cÜÚÄžÉäÿJµ†'€E~­Ér¤h‡üp>­ aצl6ÎÃÏŸÔµ»ß– ¿xSjqò™åy+'ZO·ál™;gÑe³û"J]B–T\Ø\3D"Ÿ-sË\Šš{Ò:rbg[iC ë»`]òWMŽ’©]½]»ž®Ï7fhõkÖ?i¹|Ê}îÐÄÚ/jŠîñ©ùOLë?ž"†Ø¯$Œr÷³•2^A˜aÿå3’äà—ŽÂÛÒ! &9žVÖm²¶ §S楮Ýᜫ]X?Äz?{ç˜ÇóÏ'îÛ‰ï󞹇ּ FÁh·î[×=Èo%W}µ*L´iY‹½ÆÑX$íYo3ÎöCp-]²M.älʼÔU·1žWlCÝnK—xˆäG%ÿáUòûn¸3 8Z6†à¢3ÞóôÖ“Së‰díÌ–¬¡%¿ÿuÉš·Ézì'Uì‘5ã‡mÞ3Þô‹÷¹…Uo¢H.§Í¦ÚF›¨•æÜSX{M9í¨'LÁ<Á•Üêùë<1·ÉŃœAþ#k5šùYý?ÒÙþïtªáD$(­•fkXµ gX¡ïÃ挤yÕ¶¡X0#Ö³‡ñ´gí\\zj¿ÿþûÏž=»tü×ÝË/ǵÉne¯f߆žN?uz“”ïÚú‹G+ìЛ¿Å¢ZIRZÙðäÁoÏÃJ•`jˆ¤þƒÅäêË眴¡ä?ÀRfp›œ3Èe·áÄùªòz——ڧεêç„eÅ~%çX5?ÚüŠLC‘V’ÌYá©Zù¥î–DP…‡)ùk|ÛL…¿Ö|)©½¶¼>È?q/rÝÝz™g|:•ÿ»òޝ`9ÂkK9ÑJ¤5iÙŠ·’?6×_ÕÅE(‰\+3§ü¨ÕŒ$‡õö¤àµÞ$ÜÆ9~.ØPù£JåÛLAQÛäÔ¿Ö·áèÔ^g^$g÷²ƒé¬sú»ñÕ[°’óúVÑ){äñy`Á»ùËþ8猡H+yòèX‚kz°@MÍÈ­ ˜\¾«¬S$‘X צç§1ó&ê_DÚŸ¬õM‹mÒ†Ú¸y‚þ¦hÏà69ó¯µÔªIXkÑ×Ú+?R>sæLÚgÈîþÙ26x:žmæ÷ÅcpRª•.9â8k$ªêp#ÎÚÀ"óÔØeÕ™#ý÷y.œkÔ×Í–_µG•U˜×Õ»È<3`Y®µ@j€¬"5®"H˜¸Ö@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4…Ô@SHí4åxì6›6e»Ý.]‹Zô“ÓcÛº ÎPpqQËʬxlxß„ÓåÑjµ©»Z`Š–¿èÔ>ì§Ô;¯±2KÛÖÚ¤®|–­g .¾N=áÿ”Ln¨æº³¶‰'Ú¨é0©òýp-»°Ø8£æÊ…Uµ˜¶cóú0ÿt5R Wc“L÷TSû“Vey p¾ 6\k¯‘™„Šç‰Ê³N©ð¦èä€ÊEwÈû©'pjGh'¸j~W>äâôðY^¾¼ëªm°«\û¢INƒk…XWAæÌ ̺=ä×})’N~,¨@jW¯qvIW@Í™­Ÿµòµäa½8­ÍU~ìgÏWmf-+Éu¹®c¯´ºŒC–‚áËŸbsu‡˜zœø¾Ö.¤õÖZç)²C”t×O-yAE®y«í˜°á…­ÌIO'ZÑ®Š×v!€#hÚòž‹¬Û ÉéÇ–L–o½éÙZAižr< Û¶òƱ>ž%³XOÅÕqÁUžK“7x0¨_úÓè¬c³;cWè:õÔú`]CðÆ¿j;nu~ëw=AšÃ¸ÌòÍù]= j=×_Õ¹ú‚m«ýÉu3B°YÌU ’ôx†ÅßuµŒ§o?'<É–æl.uδdÏQ€y$>.êOÁ.Jë.Ï?\N2˜Nþ-a ÁÙüãõ¢æÔ&&DìOþ«<~­¾òü´ðük<¡Fò2%_'¯˜¬ ) £3Šs6sD°ê`‹_ºâX«¦F‡<M!µÐR;M!µДÜat™Oá˜â!ë}0Èto;õ<þÅ:³ðI2±ïµ†1ÑÓÝ]®Éœ.l.É‚§~ÁŒçY=ËO{Ptñ%<ëËgìô`åÏbJ^ï v–ÿb–[ï>y½–!?˜â])K½¥HäÁ·…&³>1&*ß[s=c.6Œ‚• æ3×›îäÓƒË ¾Wøä|Ö-ªÈRüu>AyŠ×ßP;=X;ÉV¹Þý q &„kÁc+xE5ÊÊêWhš`†—v,.ùu3Ä–°ÿ³3ß‚SªRþ¾„اÐo/#–,KÒV’Gë—j¨þ:.»ÏY¿9ë]RåäõÞ%¯‹•üôJ­Ê²?sq­‰ îÁùÙOAþèܵ«­F5Ÿ¡VÊš¤C^=›w½¿K›œ®Íc~Å_ˆÿÊŸ:O°×Wü‘˜u‘/Ô³hkƒבµœI_‘"l؉–;©",;ÇF[rìV=O5­?vÉËŠª2Åõ¦„Sö"éBcP¢vÝtËÏ)=µk¯DÓv æ%+Ï5µõ³úÁü¢õ³ëò’ä»Ör´MÖ‰öu³e\AjµîÜ;×lÚÎZ~™ÐZNpÕw“í\ü ›¶\³yÓ¦çÈo+sÏ(¹0ì)ÊüœÙΙyÝšÑcë¸lò0SÿF&*Ǻý›ëH¾ëÆÌÊŸµ»ÍrFñø¯YCJ(Çœ_pÂ_=þã_ÍÙ„Wû´àµr¢.¿M—Ý“[Ïߪfc§×úU)6?žÁ-s†òMýÓ(X²$¯wŽ—YË7ÎÑ—’•Úc÷ž}¥Ú mnU± L¢ÈY”µ®Â«êZžEÍ_ªᜱ…»Nþb§·Í:0ÐóWלãÔÍS‚ðXÊUÚÑYSùã“ÛÊ\Gò]7攘Ú®ý¤mL«Û½ú^Wu¦8ú±ÊÙ605a;{ve;Ò­³­å7•/ÿ¢{N^=@?:ë¥6 Œ÷ÜRbJÊÑ.¿(‰ÇÍÞ5³k¹ Q¹Z¦žŸÊ<ƒÂ‰ÂY—;Ýo†•ež9å^ólÕÅë(?)—èÊÚ‡QÓ3㩊«­TÁ=ªöÏØ]7f}ÖîqÓ^®0݇Ûë'd½"î¿ðÓîÿq]V^@r-²îŠÄì†2ÊÕçé±ÒÙ:¸ÔJ¹>[ך5`ÿ >³-‚©ÚSŽdÕt^fþf—O—,«sôFZ׈d[5—ÕíéZõQ[µ)³ÇÕú]ÏþA¾i ãŒn]œ¹™MWd½ ‡‹•ä]×U[Gò]·Ù\Õý´!:µ{ú™ýÓ®—§-Ë3‚¯lá’ k5Î_rT½üÅÆÆ¬Åë]2§dû,µ,a i‹–WM2ƒp«N(Y¸\×ÄØj¦ý5gí'ocù›\f»%¬ß„í¤Ô®É*zd Çq`]¸ ´LªŠÔžvQsê:YÏÌ Âì.Üu×¶{? –|=̨µ^aHޏÚöK9—Ø0©*ÎÚ@)¤všBj )¤všBj )¤všBj )Ñ÷µŸ;wn阀StjÿÆ×¾ºtÌÀ):µ?øÐ——Ž8q­€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©€¦Úh ©¤6›ÍÒ!a¤v:{ö,Ùõ#µ@„óçÏ“ÝQ9R;Ä!»£r¤vˆðÈ#tdwÔÔ)Èî¨VÔ¾1¨Zº‚*Ûk¯;¿áĽ#»£VÇs¾pÔÝQ•¬yŒè‘Ž”^xáÑGÕ&²@%RÎÚ…§®MÜ5BÍ:Í3MXŽd¶"‡ÛZ!jõ=UÓF[ ¹é<5õ7…¿==#( ¶-P•!¯÷¿ñþd½ÛÿØGK‡ìdnÇæðºaG?þÔý¾g,ž5“ ˱R¿>–„\ 6”5È` ¸Ú$ù‹’¦ð·§kÁø™3æõsçÎ=òÈ#tÅ£B Ü×.N?ôkÉ“Š¿sâtÕ)U¾Ù’6‰ýbl¨þþF³4ò:Ú3äõ¥£|æKíQY$*Ë™º¯ÌšÝ3|ò}“Þ°`mOvs8:Ξ=;nðgΜáÄu*?Œ.Ø#]ê7\Îwá›×º5Œ©)Þc•ë¯;€­«uÖîÊâÚ5Wíǰ5¤-=¿œáÜ:ç·j[é/?³)VZk 'î¨SÊY»üImÕÚ„îËϱ®ö)Þ㸼¥kÌä…^X:àåïk/Õs+/§l2[uÏsÁ¦X× PJâΖÚ$vÈ'›ORß´ÇØÉ¿X°)’电ÀÓèÀt–!USûö+CGgí4…ÔŽ,êh;NÙ tÈ#ªÂY;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µДã9_Þl6ÛíVýçða˜¨ýURšuzT!½s›s®?ÙžÉm0wÌ}œ±UÎ\´kYꊘ3¤LãŠs­¦à Â¥˜_·Nô0*¾E%TÇœ(¬Ë0›°îæûoÅ~·ž†‚צd–›q¬Â¤K\éoÓÞLÍõÚ+?ýío~ù³þIÿßÙ³g}ôÑ­L·ÏãgóŸê”¨ÕïÆÒ;Û ~.B‹-¡Ê9‹v-˳^V¡_MÖ5åšž_xlÉ“nTÉõòü3¶Aäu¯¤úiñ»¦¤{”›±žø+ümnj®Äyÿ¹àv%§‰9̘³Ö[÷ùúöð¡ÕBÍSÿé~ÎA´yò7]ðSD{¢©Î_ÕYѲŽx3Îð+¨3*Iùf¯Ã<ÍUàZûÐý›Ÿç¬_I(ÇõS)ørÙT˜J+ )ÈÜôWÔcY‰yv¬”"hÆ:³ûâ\;®š+åZ»ðò­6vY:m¹f i×’‡fU}XæôäkÕÚȃ±(óHH2§9«Í­GZfQ[e<„믒‚ñ›±uåHÖãðY›Óübg\þ?ûðâ I^mžäFsEUwW-ÌÖV¯â»þ*™!Øžfl™ Õy7íhFO3fÆÙ…~GÖÖòÛ´6KÔ´ü®®µwñטÕy‚ó[gˆ*aäºjk~P¯x¯…¸Âë_ðÞã:Û`ëœÖy¶¡QfIBÒ Îp•™—Í\—¬‚ëÑui38§+BmAÖ¯Œ1{6­`¶²+sÂí\‹*¡îfÊ+®-(8ƒ¤Ø¨°µug]‰ÁÖ†qDšÑ?Qò۔ǹ ýެë7Þ ¿MÏ Âaîú<Á«S&¹ùm£˜¢üꡜvÈcN—Z³;|檶ÀÖÈ|fs¹æTËŒŠÇ?¿gA¬±yjš&8¦Ýµ]òû?û<Ãø‡ÿÔeY7­œ*ÄF;.±H Õ÷ÿFÌŠ˜'¯þ<‘gPÿSÿd]#ÂÚµfônØò8£^ãoÓS¦6ƒ ªÿœ$µo•3¼)Ê_õ-Î!÷Ƕg0»Œm £þ;ñÆŸ±äê¾u¿ìJËöhþ¢êÞ%OylØS£'ShE¿Í‰Z&ë¾öÁ°ã®¯]жš[Ø“çœ?¶XQ×Õ Q÷¥vÖóïô+ÉÖk¯Ô K,²ˆöV·ë¡žšZGi$´Ì‘{«×¥Sú:$í(?!–Ÿ7甥ÎcÍ»ã tnSÆÄ–Ö 9Éè2j,9gfs¬Mçîò V!êÄÎUZ°`ݵJ¹F? öZYbpkwԚѼ/ö·§P%¿ÍØû}†¿ººä-³y핟ž¼ù–·ßz£ÿÇ~ø£óçÏ?ÿüó᯹sÆH›A2BÞÜû«sF÷?jªÔyO•Ígóÿôü©s 87¿ëjd³|-¤±ËÁ’u-gÆæiXë*sãµ®G×øäq6ë Öb%¿+Ï j³4á(\ë×ÇMû®§Ybën® ×oÊœ-ØìÁ™=Û€5lÉÖ%ܨ‚µó¬ôæ›ÑZˆµ£bóo¨þäžµ9óoÓÕnÁqïfEükо+K{]·¶gœÕóè¢V­h›)»1¬kÓZW´Õ†][-1±C~;Ëø,4cEC1Ú»à×|Ýk »¶xÚV‰ò׿¼žýµ_©›‚`²>B§NSŒÚ[˦µÒ‹µ…][v~ϱŠpíÇKåd®Ä!¼á?ÿ¨2ç9Ψ„°¦ÉkÊÓžž­kéVY+šE¸ö¨‰òZ·†pg-ß7ÅÆc=¥3²¬=$Ö¢ÔH$]j®yÌ!¬÷2¡e¬G\C?’SlÚjóÿЉ+rkÕ †TÉ*öÿî‚Md!y#vÂM’TIû§Fî?e§Ý$¬õÍßéUÛ’žÒR^êªë“ŒtµŽv Ièñ(¬d°¯Ò­6[pªåÅ5xÒÕ†Ã?ýƒ'­£‚1xßµÍZ³×»›gWÀÁ6ô  5—Xç*ö4‘+0sMió­*ù‰uޭˬ£9Ýš«\óWÕþ’—öW“ºÖ¦gÏ,ö(´›¿ÌΑ$;½uµd¸=sFÈC®†‡-ƒ|iåÁ·aÛhÿ4µÛ‚O䬪%y= V`Îq‘VŠÅ(¥C±„½ Çì÷±þŸk «ø(£ýÓ4Ón±]î0ϲ$Hí4…yšBj )¤všBj )ÑÏw=g ˆ—üºUJ‰Níãƒx´Gð,]‘*Âëó:Ù°¬òK½¢C¸ÐÂS˲ûü­À€kí4¥ÀûÚ=/Pñ¿sÅ|Ô¾ÿÕæ{/$*“„õXÿÎxµƒ6Ýò€¥§vOþ¶^ç¶¾cÊúÙõ-í À]Þx”`^§÷PíhÀ—žÚµ<­²¾1×úòZ—à› †çy×»uzð¨€åvÈ[ó\~Ú3Kðt˜ÏÕZÓ0ºñŒyé@¨×´7¿ »ë;å¶kæ¨E$„g½Òï 3ˆ~©«ëÅÛæp÷Î;¾Ýü¢9±óŽ™÷¿ 7*¼¨òÁHXÐ2ïk¯mZÙxH퀭éZû*×ËZ µ».«/¥`<äuÀâ <.VU]ñeã!¯G‡<M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M!µÐR;M9žöµÍfãŸa»Ý.]5LeXûÃ*V?j~Ö¾ýùÙ:ðhàÈZ]˨«xê¤Õ8«kI˜BJjïw Öºkú Î»©“¤ü:[f ÂÖVg 6NÔÌp¤¤vuª¦ó±‡v-{Ø©C]QS$×K^GáœQÖj @ŽÄkíãUØñ¼JÍãlÚ®Yû–ù­@ëµ^×Õù‡žÜ`â/ÙúY+_]ºÙ2žkØÁsSOQ트k~×c“¨°¤5´F n6þ™=+ËӌЀ©FÈkg󿉾6qdžúoöÔùÇÏãôq—­ÎlÍZƒ+MjK –ÜyË,ߌV[„«(‹YS3¥†Y;k‹pÔÚ×VY°5´Ù‚›fëô4#4#+µ›grã)”uºY‚9QÍLÚNÜ5[°Lk±Â‘Â!cÁ*[¿ä‹’ÚÉ'Ê›]°äTÞsÐl ÿf#,3¶q`íÊwÈ««®½ªÿŽ)ëþÚüŠ5?åã³ì·÷WY~™¹st0¸Z,ö¶°=3¯aûWqZáÁÍ&X¾¼Xµòòþýæ¸o•wóZ;Wµ ¦aH³yW È[/ªÅ$Ç%ÁöŒ Ø5¿<àâeNT¬Ezj÷÷$«ƒ›´NQev‡¯¬»d-Jª?*ë_]%›U6K°â3‡˜É[L­Vw{ZËôµZ%­1N÷—/œÙÞpˆÕ° YO£ówoº°ul—ËV<øÙ3³§ Ö# ³aÉf5ÍŽ'ÍæWüEÉ£ÕfˆšßlOÀÁ㪄ÖèÜ×õƒeŽcäÛ ´'1µ³ˆäsB±Ár„3O†§š±-ÕÛŸ?æÎ?%6°`ù™œ9¡ŽÐ’õ½fº+è4`e©]½L>n œ¯à·²³vàGj )¤všBj )¤všBj )¤všBj )¤všBj )¤všBj )¤všBj )¤všBj )¤všBj )¤všBj )ÿl2†LG±®HIEND®B`‚analog-ce-6.0.17/how-to/startwin/zip.content.001.png000066400000000000000000000543301406366436600220260ustar00rootroot00000000000000‰PNG  IHDRŸŸ–b.ÂtIMEÒ#F¯s pHYs  ÒÝ~ügAMA± üaXgIDATxÚí½_ŒdË}ßWmAcÝ0lC–é&m8sE@œ‰±zàmQ°7‚‰]åAwáü†2K™ÒŒR3ðõ5f(Fž‘q7A ;yH°7æn`spa’Í}z¤@Ù!êŒèª-KL/`Ý )ö1` SÝg÷lMý¯:§êœîþ~î²y¦ºNÕ¯~U§~çWU]Uûö7`U¸ÿÙÏ}€þßþØO”- àÍ7ߤŸHÿøÃoý~Ùò þRÙ `>ÀþñŸþÜÿæ—Êl¦ÿ¾&Ü`ŠÀÇ7EpÌB"oÑYPŠ™x0‹bKñ2a×,fF‚TÄLŸBÙ-V’CeêÚ2 y'º9šS¨‡Ž„jN7RØ;yg1Ó§Pv‹5ß^=¾ýÍÿ8»þ€Í ñÿ<ÿÿ¹[vA AiÝ9‹^« ¯]³ <€µb6û¯ì#¿úê«ßøÆ7œâ?yò_{ä’ÞÅ"·îÔ´¿ÿ¥çæü#Ÿ™QÓþí?½?#ä;äý?›ÿ# {`ݰ\‡þåwÞõ‹Ÿç® ‰uOMûG>õ¦¦fþ£?Âûî¿ñÏf«mà§ÿú7éçÆ_ÿ¥²°ô|ôcW}bãåÈüûïüìúúoo|õ g3q þ4ÉÿàߨU\ßÿÁ=H/¤Ùýàý/q!üÈgÒ@zQx±#3ý“SöÏ¿¶?ü7'\È[þÍ?Ýø‘hL9ùÓ_Ï®ë?ò+ÏÿìxøWÿ{C ßùâ<Ú®l%¾°obˆˆÒºg¾;ùîû¿ðãï§ïÿwÿå<åSÙõçß2&<³ô+`×YXžšöÌÌÓ7¿ý§6 ¦¦=5êôšþ£¶<5í©Q§×ôŸÞÀî@¤öXãÓgwÑ8ô_z»i'–kæ !óÝÓ‹Œ~ä†ÕgøÌwÿÁÿö[>ü‹¶™ÿÇ—wµ?»ù-6ÂÆ"¼‡(ŒÆßüö—ŸþÉoÜHêC{öÚõ—yÝ4íÓ?ÿYÿ‘˜<¿ø•̨gÎ:‹Þ–'öÅ‘øs™ïž^0_}Þ¾8‘øìOã-Ö»Ù|wî¾ä©ò{v>#–—ÄÿÈýÔ®ÿàý—Æ^ïµS£žÚuÎØkø`û¤ÿÈM»Nzj×§/©EOÿ‘›¶œ¼œ€ÿåÔ®OÿõodŸúeúÏR˜ÔG cìçòÍ< Ï’zí„™Î8ñõ¿ú¹ôŸ*5jÔS»ž|çלÄŽÌ¢[NÒ›|wjÔv}qý®)µ9™ç,½ùFßyÖØðÃÿàÆWŒï®‡³èÅòÜ­ŸÕ¸Aøü¦#ói Ô´g¤¼ÆÆ¨™ãž Ñë‘[÷÷Ÿ‘ùÿŽñfR?^Ož¹ö…C/ÙB(5í/w™O=x©ãδ¿|9,?ýÓ— ëÒayrs ˜vX%عvv^ƒÜºÿgÇ76èãVÈÿwÿ«|7>jÔE‹¾°ô¶»÷­Ø2º”tÁ<7+/5í™ãžÚøÔ´ÓÏlêj’[IGìä³@˜v( qA\ˆß¶qËè¸Ev*$Öûýzºi¸›MØ%u¢¥ÏFà-WÕQ¯ºì6ƒóíÏR÷]åµSŸž~•N´“«êè' áÖÉoÿÐ5ðÙâÄ•ób¸%é »Ì›_˜ùç/RúÅekëÄóÙt;VÕ@±—ÇK­¸ÿÈ< 5ö³™äîD¶m:&/^fmÝüâÅÐÀ‹ó5ù2º›öKå_ÞÒΦák/B>›}»Á^ ëäÙÅ5¯l=ÑÆgóî/C´¶œ›}§î{6–Âyêâ²yé€|(z휇QKœ<õn½³uO}÷Ù‹càR3ŸýI¿]սꌰF}aékÜ®5/¾rø¥€Š£Úüµ¨øyîʰú½»è¸g!3ÓᯅàáµG@ü-ÜRòN|Õ8€yõÕWƒÆÏs‹•uc€Š#žÆVÍ\¬æÝ#”Eqúÿ__þ/Ë–y±Þ‰K¬;°jÀº«¬;°jxZw¿íô@  ¨0X÷t«úì)Ψ°ÑK¿•^‚-`é"q‰ÃŠpÅü{wnkÜÈ;åFÈ‘=iÇòÜÜøJì±Ú«Ž…³™gédð²D8ËÊ&•yÇF#p¹»ÊÃ'ËN“xh‘4¢ŠéHs°æ˜­»Æ~xx½š\ôƒÒ¼¸œ2ph² -’8¯QuQU`ep™ç¨Ú¬p-œ‡HRï¼jªPYœGæ9¼SÖhe¹!ýBU¾H)€êSØïÝ|È–%{o×ëéa½ö«««øÃï½÷^êy[¾µÐâ§Q…“¢¢Raà`ép°îÜJºl:›`¦ŸƒÁÀ2µœ·s°Ã×~)PÒá}¿eê옼8wÎŽ ØÚvšf»Ý¦’ÐW ªŸt²Ü²PY¾l;>o|Q ¼¸d/Cr¯ÎPξ{ŠÔ*Ø„§19Ï2%3¨6CôYŽœïî$h˜‰bqœÑºsÙÜyºÆÍ^îÏl)@·ÛµÔ01Í»S?>½6¦“øÔÆÓ²\^^v:ì“~K‹i/€ÐøX÷l˜Üô¼¬×ÇÓ½h²t²Dìß2ÒÑxÂøî–>.gŹ@V`=ÙJ‚ÌÎqþº“<쟬`®Î±fÞýüüœÚfKUgÞù`0H_VXOíW/ˆ€ç>óRÓn?*ž™v÷îݳtÜwvvÒõé²pßÓ)j£<ÔîÒÈÔ0·Z­øÃl²)–ËÔé3J›þ“ 9Y`/Y̵çyÝ!/fÙß~ûí‹‹‹, qM™Zñn·›xÖw§ŸD6  ,ãrɦØ3oÞãÅ…SKúZÀ¦f)7ÜM ¯×s€µ¸i¡^ýõtº=Ÿ·/Wê¾³>óàé5Ú@uð±î?öÎúÙR¯=³|wïÞµ4í¬Ùf2$ÇÒ<"¨wZ¦®JG³cŒŠl0<…šOjà]wª—Š”½jؼpˆ"±žÖ*‚³ug½d²ÅY9É)† qº= ±_¦Nnšö4¿ÅäÜ]Toý~ßÒÀg¦·XXÏŠ‡ÕòP)ܬ;uÎòøg9o/<‘lqœ7E½¾ˆ¤–ÕÆÀµµ©0çPeŠ™w_ yimY£j¤ÚbPá¹f•ÖX5`Ý€UÖX5`Ý€UÖX5ø_Ľùæ›e‹€\ܰîo¼ñFÙò /7¬û~ë÷Ë–yÁ¼;°jÜðÝ¿üλeËgÞxã vž_U÷äÉ“²%€~ë‹\ˆä™o|ãeË ÀZóꫯVü1Œ,aõ@N¸Fî´ îþg?'ÊψÃò:àÍþØO ýä!› «¬#KX}…° ý¤œ¶%›{U¿cÇ ° 0h}òä |,°ž ýƒÂÉó¦ˆ5óÀª±dÖ¾[V€eç£û8÷'b/685›pm ­‚ÕÈ|ÚÚ¾ýÍßËþÌ®c’ÍL`fk¹Ûû§ñ^“mre5¿•5œn‹MY-BmZ IЪAá,Ù¼ûÏ}êg¨]‡û¾>ˆ]:Á<ˆV¤X}ºší µY7ÂêH–§öckÝ¥ïøÙ;iÎþ)u×Hއ™Ûiîûr‘µŸì3 †8 ϶.¶ï6p5Bdsþ,¸¤lj3Pa¥’pùFhcDÓX.ÒVaoàsùîâ iÖ4Ù‹¢â¨ãž^À}_ ĆÁ…°‘Å7Kû{AkÈY•rª+vð\ÕQdD›yÑ´Q˜ mL¯øú€ƒmo–­ÂÁº‹C´UNÒ-rá¾/ÅNñ˜p_4–#¿õR¹Â¥”ÔÃóöîâ —€ ±µØô¥þ¾»SG³OÇÑ´@>M±pý…Ÿz¹eRă7ï.Ü;hQm¬ð·(°VøµC7ëÎÍÏyàç½ÁG_ Â­Ž†¥Ï‰F‡ê-|œ&&ª5FKZ°¶øûîö–^5ÕÖ±aäiTù_=×ͯ³X}æf3)Ö‹¸ê6N¡‘„ÓÞÜbÃbÛ˜Nȉ•uWש~Z£¹kˆæWmƼiáÇr¨”Vˆ2‚æ«ÂëNš ¾˜âuµØë$„ZÀú°d¿wÖÕñ0–È­»t:F>ñ‰O´Ÿ‚¨¾#KX}… ýƒœdçÉ“'9“’X÷W_}µì‚%&£dÃÈV_!)hÿÀ¶‘?ø­/Úßh{¾;N0JÄ~Ó6œï,y~ n¶î§ç×ÒðÑõðäàvÙe•ï¾wgS Ü?~úìê­­²‹€8ŒÌ?›$ÃQ2¸ÑëÍÍý|}{«{öl°s«ìRà%VÖúèãɸÙhÒOúçã½Þv?éŽFçggÛ„7î”]<Ç`Ýïžöégw§7ª“«k2'ÛÃù4|—$‡G÷úàŠô/Î÷÷÷ONNlò«Õj³Ù¬ðbø%HÈI)½“*St°ËˆÎºúáE³ÑÚyms·?IF=i´í×Ï¿rtg’$™GKÆIÙ¥€†U)hu¤i¥d²ªÈy2òáÒdÃâ¹Æ/½z щkîªôÙ?#èÇXÑⷥצGéTª„Go¹’ü%Íwã¤þÖÎV¿• .»í÷ö:dø^«Þ·¶îŸžS›žZõ$™–] PiÒ¾#…í_2¸øÒ@¿ŒüB¸4eÉ?Ý¢W4éGÓ‰±PÒo«P›Nhª^%|5 ò£ôÝïžöïõŽß¾|ÔØJZõG£ú£óI£Ù'ÍV{øôj8|ÖnKÖÓY:iSc–*~ö^)^ØäËYÎcÈ£m¶®5m&OFú»lúqVÈJõû–>YèÇÁ˜~ßÑ#‹¢jS3ve,Ñô¨N…Ò¼êq=¤4#£0â —p%È>ód±tŽšöþf'yú¬þ´?|úò«!f^$é¿$©×_~+öŪ·Hc|§–!ÞÅÞkó~B#í8üú\1AUF~â­'ì³Sìüˆ*ýR¦–¥ùÚÙ[-šÞIBo·NÖWª›nPÌH/Œ1Aà„tsY'”ÖšöñVgtöv½Ý£îÞßÛn¿ü–ZóáhÒ\ ÍO§I£ñò+'GÇÍ»X ¤¯t$@Ô´K9Í%ºòªiæŒÆUåréˆáqì½Ê°ÙÙ[-6m ;±y¬TËŠz ÑEÅ7¾ñt3ZËO1¥u:šŽÆÃçtwÎ_4ïnõGi@kx±··›ùîÙ]ú÷Êé5$ZGðÚ-6Ækr³A¸¦ T] ÍÅAÕ›[FÖ,Œ·Y3ï” Çíz‘Œé©PNä‘»~]B!9†P‹eHN…¨ú=›þÐf ˆ&c¡ò7~àM@ß, <ý¼wïô„ln½^Ÿ_gŸiXÙzè€ÿ$eIÕRåu@QôÝ3=ÚÛßß/»¤`¤,©Zâü¬ š©­a}÷ Ë=䟾ûéùµ4|t=<9¸]¶€U#’ï¾wgS Ü?~úìê­­²•¬1|÷Œg“d8J×ó…ò››-úùúöV÷ìÙ`ç–}"ÐÉw§>úx2n6šô“,¶ ßî'ÝÑèüìl›ÃãæÑÁ²U¬Á}÷»§}2߈¶7ª“«k2'Û‹ƒÞ»$9<º×hÔW¤q¾¿¿¯Zyçý›X[JéÊp,Suë»úáE³ÑÚyms·?IF=i´í×Ï¿rtg’<ÿ|2Nˆ‰BªmeyÑœ€I„ßÌ{:™_—¦t[7ËÝUãü:ÙCH"Ó¼MYÊ£I_Œçé¶ÜÊMÕ0ò«%NéTâÏîÕ!à>ó”qRkg«ß¿J‡Ýö{{2|¯UoŒ[[÷OÏ©MO­z’˜·›GÓYg²-¹½*3¸øÒ@¿ŒüB¸4eÉ¿( » )*Y´ ª ²¯Uúª½Nƒb¬h›†‘G-Ј§*þ*í´¿Jä÷Ý•Öýîi?=âýQc+im>Õ_;Ÿ4šíñx²ÑjÇd8|6•9íµpªo¥ñõ‘¹¯T·ƒŠ§»¡C!¹îNª²‚ûΊҪºþB„ñH?ŽïèšE"q-VÚ†U­ZÓ©ß³— ¿QHUÑÄÔ€®¾»˜‚rd>5íýÍNòôYýiøôåW#BÍùî³Ù °uf/ZýP÷­þ©“÷4®…9ç „ &;Wͣ֌ù˜&4–4½Ð<;ΈéÏÊ;äI•ïLq‹8ƒà¡MW¦ ‘^K"•æU°é3ÅŒôÂNœw§¦}¼Õ½]o÷蟻÷÷¶Û/¿¥Ö|8š4¾ûtš4/¿Ò¿¬©ÄÊÖ$[ÑA{„ ¦]êŽèßP+辈ƃõ½¸q]}Ó×Ä Ý¨ ›Ê¦²ñ½ÕbÓò·ñTë3Šz ÑŸEÀ5óOGÓÑxøüîÎÙã‹æÝí£þóSáZ˽½ÝÌwÏî2¾WJ×Ô”õ¢í™àµkZx!ñãc ‰þ Âé{Eû8ÅJBÔ;úó 8ï>l´»íFk“ ûó÷v÷Á¨qûN»×i×û'w^¿S¯7¦æåtVHß%ÁÊ õ“âdç.KϬÜþÎIçÑØj±Y©ÿªâ½“¾€ÑT »^çÝ{Íùàü`¯Ó=%“þÙxxÝÚ¨?š&¯¼ÒÞÝ;j·ZÍ IZd2¹q—~RüÖi«Ä¹:nÝ™jŽ“MÂudÛ˜‘4kͲ8éŒ#Q7B×øª—ôÖœ ±Y¢IÇX¨üxv¯:jàéç½{§'„dsëõúü:ûLÃÊÖ@ü')Kª–SÕahÒŠðÛx´š!æ–´~jÑ·ÛÒ1Š§Ù ²je±|w»ãØ’mlÉíU™ÁÅ—úeäÂ¥i,KžøEiØ>Sé·šhy*ÂX/ñ{ý9.FµhÚmЈ§jèÌ«I,ß6”ô™¤—‹Ordûþ+îB¬ñx˜ Í€ƒe!OÅI”V¥\È.¡â·Æî;04~w©W‹MyÅ߻֤§¹»Þ± é)ª65cWÆ$§côe1*d&ÛÞIxœï€;‘|÷yÅÍf—‹)öçux¨Œ¬òÒlÞÖ5NUÙªÀ™jïA £7ó°¸Ê’ªWS"ã·Þ$½—•'­»È /$;?µhÆ®4!Ä4Ôä'žëa»FQÑQ‡ ’ïþÂuï¤ÑÚ|"ã<@ çàJà Ϩ𻤯šKqåY©4cl–.¾‡>¥÷ròˆq¢¦G 6'¹Ù+PšoÎ8ùÅS­ÏÐ]z)DóÝçæ|0¸Lÿ"DgÚñD"½½Ëµ…Wð‰¨à(E„™x¶"TÓ!jʦWŒÓsrõnTH4Á€H~ßÝʺ§\·Û=:: 3ü¸ ™É Qœ»,=³hý£~¹_|Ó®ÑOéïªå„®©U«w‡gÄ¥pÍ¢Ó騬ÍÉI‰£š X¤‹n²?¥1Ù Ú3’f­Y¦ÄÎ,²!z`¿@õr³ÚÒâ¨Êëš‚K«î*щ¢Ë1i½2‘¥ÔË?»¹ Î[øÖå#ÒqNˆ³Y–Üw3¿¼¨^-#«Z”þ+¿=n׋dL¿œ2õÓR yôª „wÛóÒ¦ {Nñ+›% štô…2 FÐQ‡$†ï~yyYb ½@¼()Kª– öŠiÙ î»’RA[ ?xޤ,©ZB‹í‘¾Óø°!øšù™eëX‚ÿÞ]À+w 'Ƽ»Ê„_^^RÛKþywÿ`ÉÂðë{¸RæùîÝn·V«â'@DÚ«NJºž®â›ÖáͰŒ”Òwu2,:Þü”é»W4£¥€;ºªv}ä<y‡pi:‰ç?œ¶õê•ÖH~±U¹ÿŒ©}cA"ˆš§tª2jšDÙ²žXç»Óº7B € n[Vý©ÙW~v…ËÈ/„KÓX–<ñá´Ÿ«N“Æ;)d—P4YIðÖ+b4áql¼1 1üäTõl6=•&¦S·¦z›áv–5  ¾öb¯~t¹9‰4ï>¯¦Ùìr1Åþ¼ÆÔ[Øe[ܰ^~æ dá5á`A6D¯4G}îhmU€ó¼ßºŒuêg-bú‘¡Ñ«7ô+¯Ñt¥uW–ÂUƒ.ÒÀBeÓ/I[µØ+Ö´G²Úì:pbµ†Sb錸Ôu'¤“þEkóEˆ„r(Lxe©Ýñéú™QòqÔ´gÎ} K%/8ZæùîÎ|cÚÃÃÃZôŸó«D™¾;uÓk‹ó‹oÙ¦uy|÷¢üþÚ‚B’€)¥+CÿY"¥ùîÔ¨g¿;\̵ׄæJWÍlA¹b)µpJ_ÈTáy‡piÚ‹çTÒh ·ùÖI'–h” fM3öJsm*åbllš'®lÙAñ¾»õ^uìÚºãcê²w»]ö{n½lÛÈ®5­%ýÊ£Ç3ò áÒ4–Å»¤1®ÿ–‹¦OÁI€• ‘û ½iÏÙTª€F$•ð0í¡ð5óvgÄq¿‹“mqöÕk;[ K§ÍéUÔ˜/(…< èÞijÖ/#ý]6iÖ*¶QW~cœ‡BÞâk&¨1{E§ršOß`Âéh(iÞ]pÜÓ%u,l—âBn5˜õãYˆ(”ømv­¿”ç1x¿{IÛ*#?ñr³¨’(†M䢄4š®´î*èþê¥ÊÄv•ﮉÇì¹5£K¬2ñ|÷÷‚tL^ƒÍKeQþ´˜ÎL8à¾{E`ëeÆPxÕ5í©Àb«ãâ„ö¸,r*SZY]ÓSS)³1…?§Ò"¨*Z*¤*Y×§W´y¬¤Ý#q¯ešH¾»jLž:îßýîwÙ¯l¦s œò±ìŽ Ò6ð'š—Ák_‡ ËÂG¼ì»…9ºŽÃkjÖÏ´Çì-%ñSˆFlß]?&‡švíL6xey#ˆ€Øwª‹˜òÒî8BóÎBo±âH(m 1íŠMSÔˆTq+hÓ7–-#°%†ï®“çwb·(C‡i4¦&Ægg°Ø™x6(qHVU/NmÀ##iÖšaölÜ’‹¬Ý•&^ Kj_"ͺ"N+ÉË¿-€_‚·ëE2¦ï«H~)äÞ/ýœŠÊŸEΦbŸrá½¢Mô¯V~åá¸Ïüç?ÿù* eÃó ?ðƤ,©ZÐ+®açÝg.*aèôXðIYRµDèuË."¨Òùî(„°óîd1ttt$ýª×ëu»]¼åÅö|w 5íÒ¯.//ƒÁ’N\•%ÆïÝkµCÕWN'5ðeëXbüÞýN¯K ülÆÏw»Ý²‹¬ ÁçÝ)½×›Ô”S?=¹¨ï^'7iàd8œÍf———…#Âð~„ƒ= (J™ô¬æ±LëIðywÊîN‡ËG·/6öoO ÙH®¦õ­ÖÃýi{»³÷”,&àËÖƒñT%P ⮂ì·úíêòdäÂ¥)î_¦Ï5~dTÊg߀õ”'SÕîu¥?¤¥¨%NÄåî lˆ´ÏüÂÀÏ™øú½˜ž<¦î{ÙÅ7ƒ&[²]g²cͤ»kùUœ˜‘_—¦±,yâ—‚¨üLNcíx Ñyut_-qŠ¡jŠ•ªé÷îÏî7ÉÜ¢_¼µ{~8hž 7ëûWªÈÜ9†5UM¸x»þœD.>wW¹µµ¶äé ÅnHÚ¢òdäº;©^ÈÊöûzù-Ç!â °j Ý+Ú`3.%~£šþ¹jooËE¼3âRîµë“d¸ûàQr²¥Š£ñÒ4!ÄäT©â°ˆñ9©Ê®¯u‡;Ãû•Ëè WgšpÆœ^hoZ‘©¥:: ª– ½¢¾Ò83‹Ãvmº_.Ž^6àD$ßýÖƒñd8¤ÿ®ºôÉéöir—J#[6/8ÓëÛ•°ã‡…7ƒ ¦µÖl >ÙJBK•¯1-AÅ 7M‰* ª–8½¢ÍcU…pÜ9©H#_âùîÔ–ßÚ9i?ºšùƒƒi[´ywÃûÝÍK‹àµ£õ† VÉ™øb‹Vz¯(ŽÃg9’oVƒ«W‰ñ‰ñ{÷—líÜz°“ý5[ü"® ¿z¯Úøà+(P•Åçf–¨ZJ»n3î•RKE°‡/•|E‹OìywqŸyé¸%‡*Ž8C)ÆÔÏbÚäJ¡Æ@´õhl93’fÍÝÅ%HnŽ7ê'Œ¹øœw·ÔIÐ5qÊÒR8µ„îíõ¬iç\"Ä®ûå∹ÃÒ{×w·C´÷âµ*ŽÔ`§l ÓäÈÅ/pÐ x#Õ¿¦—ׇH«Û)#›»ìo׋dL¿\ "G1¼tE…SKè^ÑF`äÞ#©X ®%ûîp}w®šŸÅ‚^nˆá»«¾:::J¿ít:JèÚ|ÑÜ«Mè^.ΰ Ð|ŸyÕñ¯Dð}ækµuÐ¥_õz=qUrÜw§¦]å¾_^^¦‡»ÃÀ’ßw7¯ª«ÕU_u:ÔÀ—­`uˆ±fþN¯+5ðÝ. ¯Ua7`•ˆ±f¾÷z“šrjà§'õÝëäá& œ ‡é^u…#Âð>ûów¨8¥LzÖ¢ïÀˆ¹]ÁçÝÉóÃÝ/ݾ˜îNÈFr5­oµîOÛÛ½§d1_¶”¤M ¨t¸ÍˆÄ ¹4‘ódä¥ɼ¡Ï5~dTÊg߀õ”'Siv¤½|)j‰S1Bœ¡#$¾ÂĘw'Ï üœ¹¯ÏÏ~ž<¦î{ÙÅ7ƒVUj²sÒØó¬¸øÞgiˆù…piË’'~)ˆÊÏä4ÖŽWG'ñÕ§ª¦X©*‘öª{v¿Iæýâ­ÝóÃAól¸Yß¿REæ¶&–îl¬ÙÓ[SLPŸ{íævßú­•APòt…b7¤Ù+»]B=Òd%©l¿¯—ßr"¾«¡–н¢ 6ãR¢á× ©¹‹ M¡joxÕ!ö>ó÷ÚõûÃá'ík¢ðÝÅ¡6›é5¢‰/MA*(iyTq8×ÏZ„°1ÜpE±‰{ã:7Q83樒²•C-A{E}¤ÅÌ&,_m¥YÛëÄX4 Éw¿õ`œë~Õ}ø ×HN·O“»4PÙæ¥ÒãÅ,;µ›'G…¯jÚg²ºŒ=i¥F¡¥ÊWÙ†ë³ÑcÖØ”¨¢ j‰Ó+ÚqÒÈU+àZiŸù…Ÿ37ðõ-2?ëýñDql¥@ë¬5Ù9iìyV\|i _F~!\šÆ²ä‰_ ¢ò39µãFçÕÑI|µÄ)B†ª)jö-»4kM¤}æŸÝo’¹E¿xk÷üpÐ<nÖ÷¯T‘¹}Œ¥;köôVÅÔçÎm÷­ßZ%O7!vCš½² Ù%Ô#MV’eìõÛæG(Q5ÝÄÕºW´Áf\Š5üÜãF„^Ô¯»fCªözW)âžGȽv}’ w'UÙõµîÔd·x¤cô†ý¬E3«Þ)2ÄÔçF`Vö™1‘Õ´WÔAgærØn–»^`›îZ/<`‰ä»ßz0ž ‡ôßU÷áƒ^#9Ý>Mî¦çÀŠX6/8ÓëFíæ©PáÆ«ƒšö™ì„.͵êÌK•¯1-AÅ 7M‰* ª–8½¢ÍcU…pÜ¡ U‘§ úÄóÝçǺÝNÍüÁÁ´jm^Íðú¶†DóÒ"xíh½!¨Ur&¾Ø¢•Þ+ŠãðYŽï+6³/„X½Z.œ¿wÉÖέ;Ù_³Å/âªð«÷ªï±‚UYÌyn–a‰Z ¥´q UÕUJ-Áu>‚l+ùW8±çÝ9Ä}æ¥ã–ª8â ¥S?‹i“;(…ÑÖ£± äÌHš5w— ¹9œ¨j~Òø³êÍ»[ê$hŽš8ei)œZB÷ŠözÖ´s.BÙt×¢x°ô*âúîvˆö^¼VÅ‘ìô‚m1š¹ø~ƒN X¤ú×ôòúiu;eds—ýíz‘Œé—‚k¡Bä(†—®¨pj Ý+Ú¬‘\óàˆ·çé®K¯â%¢dß=®ïÎUó“ X*ÛËUV°e$†ï~||¬úêèè(ý¶Óé*¡k+A«¬6¡{9ïô Ø)Á÷™Wÿ €@ßg¾V«Q]úU¯×WÕ 'Á}wjÚUîûååez¸; <P ù}wóªºZíPõU§ÓI |ÙzV‡kæïôºRßíÒðZv³V‰kæ{¯7©)§~zrQß½NnÒÀÉp˜îUWH10¼,¥ôŠ‘3Eϯ!ø¼;y~¸ûå£ÛóÃÝ ÙH®¦õ­ÖÃýi{»³÷”,&àËÖ¨:Üîâ†\šÈy2òáÒäÞЋç?2Rå«„,ªÿUé¼:»ù–¢–EF°)N5˸>Ęw'Ï üœ¹¯ÏÏ~ž<¦î{ÙÅËAMvNw¼‹÷YbF~!\šÆ²ä‰_ œòUB%°FçÕÑI|µD(‹kq`ÚË%Ò^uÏî7ÉÜ¢_¼µ{~8hž 7ëûWªÈÜVÃÒ5{z«bŠ j²¶Ì½ÊOé*‘§›»!Mõ…ØLÃ&MV’eìmF,‚RM7±@µ„î‹*kø¹Ç-»vL_̪½ÞUŠØûÌßk×¾ž´¯‰Âw‡ÚlB¤×\ˆ&¾}îbš Rå{ô•Æá\ï.¸pà W›¸7ÆÚÐæ6SKutT-A{E›"ä)Ù¾kÕ ôDòÝo=§Çº_u>è5’ÓíÓä. ”F¶y©„뼆°6;~Xx3jÚg²ºŒ=i¥F¡Uʯ ˲>:œä¦Ù(QEAÕ§W´y¬ ¬e¿BUä)¨>ñ|÷¹-¿:#g·'‹?d•4 ²h6ž1¼ç5$Ú;{¯}%[¯8Bë¡™B¨”{WˆZªÓ+XË–sÉfUL*6lSAâž·µCm|ú,ꆵë%²JìJ"öª,æ€üò¾¤J‡sËêj«cË+¥–¢ŠÀ–[œe_›Ÿ’ÏwO÷™gg3ü¨Š#ÎPŠ1³˜Æi§ê ®ܳ­©GcÈ™‘4kM×#A$êÆÅ¯à¼»«娊S––©%t¯¨/‹Mq,gÇõ³JQºšÎEbYÝ~ zÜ®ɘ~)Øk (ámª»tE…SKè^Q#˜&}q¸¥sš `NÏ` ~F\é„ð{ªæK€=•íÁ*+Ø2Ãw?>>V}utt”~Ûét•Щ•XFFË,/¡{°Që<þ†ö9ŮލRáÙ?E!‡àêÉwÏÎÊ®Ë.8X&¤ç¤±çYqñ½Û˜˜‘_—¦±,yâ—U#RgšÏ)¶Q YHutb#6©¼?ªy¬TuZñ­-±}÷ Mç«ñÒT.Q¸tÄÂÍÒxú˜Õô¨V’<æ\L®c*dŸKãN´Æî;ܶúÝeh!õÕ$RßÑF윯;š^Ñòä¢íTõ¥“ ƽsëGrê±ì:‘ö™Ïªçòòr:ínl l"³ip!D60h ÛŠ¦éèc¢Í•‚´ãð¨ãpnÌÃâVƒ/»ìPüÍñ"§M¯hÓOzX_i‰Øc4RD‡ \‰±fž,ꌒšö^ÐOÍÛkíqT`Ÿ‘8ìGBÂ9¸áÆ«ƒšöT`®…kn”ƯA«ƒË…óíÈMcSA-¢›6¿ØÔ£h‹Ý¬‚5¸¤DwOM;­;úùõ¯Ëc²S;ÊŸµc›Ù˜ö7‚BˆöRÁkwmá1Ÿˆå¥š3ñÅÍè(‡n'\;gs,$_ô«|¯º”´¶66ý>­?B?ê§Ê.:÷*j“,èàj ÚÎ@ÌyýiQ¹Ä!t_¬ê[[µÄ˜]Íé*[«@ìywÚN¨×NM»ªþì_½Å˜únºNú­æ^,©+n[Swš/$#iÖÆµŸ¢-×,øpŠ_ œ–Z*0}‘*ÌÄÛˆ-Ö¯›6¬Š£¯cdi5²D¤ã(2Öyû|÷5jŽ#ý“²Y`¥±ÿ^{‰Hµ­é\ô!®Õê” ÇíÄ¥MV×B…H_ /]QáÔbÓ†Uq42ØüšI“ޱPù?ð&¸ït¯Y8Ðà zÎu ¬ï~pp`3 ä-=š&¸ºç,6}ôó~_3?3Q¶€U#Æ^u§ç×ÒðÑõðäàvÙVHkæ÷îlŠûÇÃOŸ]½µ³U¶€•"êšùg“d8J×#z½¹Ù¢Ÿ¯oouÏž vn•­`uˆä»S}<7MúIÿ|¼×Ûî'ÝÑèüìl›ÃãæÑÁ²U¬Á}÷»§}úÙÝéêäꚌÇÉöp> ß%ÉáѽF£>¸"ý‹óýýý““K¡õG¿‚ÖXâÀòRJ_„°:„õÝ?ýð¢Ùhí¼¶¹ÛŸ$ £ž4Úƒök‡ç_9º3IH’Ì£%ã¤Â„nXh¸%¢9“ïsùwI#Ú½’lB¸4¥»k^Râ‡Àé¬0ØdÍÞ®JŸý3‚~,·r ¡–è+ðè+HØ3âÆIý­­~ÿ*\vÛïíuÈð½V½1nmÝ?=§6=µêI2-[ Ò°'dpG„IWéýcK1#¿.McYòĦpœ®:Ñ#Ö¬&ý˜{¹+:gS©šÇJ%|5 þÞýîiÿñ^ïøíËG­¤µùhTí|Òh¶ÇãÉF«=“áðÙTæ´sçÖT1¹ÈªtØOöàBMÿÅ}ËÝeLB·@ì†4-ª]B=Ò´Ù¾»RDs”gvçÅ‘'EçQ…±W4ö“bˆSÇe3.UÙ·–5$àïÝSÓÞßì$OŸÕŸö‡O_~5"¤Ñ¬Ó‹$ý—$õúËoÅ¡6éà›qTP¼f¹iï ‘Ä2P,úJ·Ç8œ»æ«.fÚÓDÊ*&;?+õ̽BèǦW´é'g7eÑ 5ÙpeüJpÞšöñVgtöv½Ý£îÞßÛn¿ü–ZóáhÒ\øîÓiÒh¼ü*Ü«âR#¾œ‰á…gTø]RçFsc)ÎÊ<°ØoC)æËYéë; ÿ˜Û›ö™Å9–ö™GÍc¥ZK_5®™:šŽÆÃçtwÎ_4ïnõGi@kx±··›ùîÙ]ú÷J°¶Dë;"xí®-¼jO„Ôð—.d‡ÒÕk·Y^甩f1Bˆãð6j¥pÞ}ØhvÛÖ&öçïíîƒQãöv¯Ó®÷Oî¼~§^oL«·œ®"(`ûŽ@Õs@Þµ;.½)¤ÊA,W-6Ö7–^›*95Õ”¨8ïÞkÎç{î)™ôÏÆÃëÖFýÑ4yå•öîÞQ»ÕjNHÒ"“É»ìG®ô1õ‡~”;Õ·æpëÎ4õË…»Ž…3’f­YÇ.–fC4–À)~<NÈb@›Ôâ<žúõâ·¢HBÚ´aU}6Fv*>›:ÉÒ 8ï~r§½NöχÝvã^oï:y6OÛ­&¹5n$ÍIšöúHr£jh‹0­“ûJúÀÓ±¼pŠ6©V5‹>DZ³NÙÜe»^$cú°\CHlûÔô2ÄÔ‰_ãñËZß;éÉÐsZ ¬_âQ(”°{ÕQO?ïÝ;=!$›[¯×ç×Ùgæ'}áÞ9@ ¼1)Kªôœë@Œ}æ=ÚÛßß!=š&qÀ³&eIÕRî ˆC¤3âì÷@N‚ûîÇÇÇšoÊÖ°jÄðÝU&üòò’Ú~x XþÞÝjÚõÎ=\ ø{w#Ýn7½8<<Ä*  (ÊôÝÓ­Bƒëú«‚îÂ(e(–Rú+t’Õ¡Lß½p–ô·§ÀîºâášÈy2òáҔß̦¤0fj2ØÒ{U:¼Õ¹SÝ©äôÐI\ë ¯`qÖœX¾»Å!ĨÈ"ãvÊÌàâKý2ò áÒ4–Å»¤Ðçh)d±¹{5:Ù“xÔ]h“BÐÔšJøjÄòÝiCIŸIz¹ø$Gº_ÜÄ»*‹,}ÙgÏ6f¿Rmûl³£2ˆCýKÏ·V¥\È.¡â·ÆîO<Õ´",‹OGN×h5GÆyMAÚ†-O^ ¾›æUëQ—¢Í¬<‘|÷yÕÏf—‹)öç­àPYãp/Œâ;¦æeŸÜ|ز¯4ïÑË^C8Sí=d¬Ù˜‡ÅIÓ)ª¤Ñ…Ì#6woZS¬Z²ø†DŸ¯eݹJnÓ+ûIq¨É¨yUÙn6²þ%‘|÷®{'ý‹¶Š!ÂõbhˆK ÷r& /<£Âï’¾RH=ÕÆtôÆA44œ6á6-Á)#§†a¼]/’1ý@[¨ü¹ÛTwEåT‹·„N½™>œ(^5Œ‘5£o¬ 1|÷ËËË@ÒWЧ`%7&eIÕ‚žsî»’`mšh÷dàq²¤j‰ó³P.Á×ÌÏì([ÀêcÍ|¶ªHú €b î»§óRÇÇÇÒOx pÂîU—™pãgÙzV‡{Õ±?cã>Ã-§Ö–H{Õ‹æäøÂ@)¥?Œ2,º}ñö™ÏΪþiW ‚pGWÕn¢œ'#ï.M'ñ\ã—‚´øÒ:ÊŸ¾F-𸥫E¥„ Ö&'­JBÍTª²³”D;#.ê~R`ÅÐ&¢ÚüÜ##¿.McYòÄ/ãg9Ŷ1íY-WD'Ä®î*%°ˆñ éuÙR ±}w›×y—¦IVz¯45Õ… ª\@Pòô†¢{§iQ~¹îNª²Ê]¿½9KắmEL¦qßYo9mzEc?)†8ubªç9ç­æ2ÊåÔ!KSÀo¯TÄöÝ///§ÓîÆÆÀ&rÍúŒd¶¦Ùoýˆšp€±æO}¥Ûcl~µ¼ÎmCUtá̘b5“³ÝÚôŠ6ý¤Ø+J¥%vN¼±r émŠD¢úî©iïõý¬i'C{ÆYS³¯ùÄ}˜Ù ¯Ž ¦=˜káúY†ê©ª#hÿ›msÉ› j‰S‹_»õõôU/žèídCbÞùŠrõÛ|õ‰ê»÷û5jÚi}Ñ¿¾þuyÌZõ¦sØI\¶C!Ëà7¬ ÑÞÓ#xí®-¼jOD˜Ýê¹t6½bœžS‡—†çgÅj°¢úîƒ~nÚéçOýT9fG‡ŒƒTÜš?APľ#Pÿs@Þµ;®²Ñ’ðVùm,Ëõ6¦˜ð.\Õšä$ö¼;m'Ôk§¦]U…öV61¹1K¥pwq)ä™îÞpãØššåÂ=†@õI³Ö ³gã–\dUûq_ œ®:qM_ÂQ…™x£Zò÷H®qô2#K ¨—_c¤s_õàãµ@JŒóÝY^4/séŸÜâM÷'ÆÑ$hM*ÖÉ® ªžÂ2²±E¹fäÔ$l–kD2¦_ 9u’?}ixéŠr­kï”mú:›>P4óšÈúÕ!ú@Ù5à~¾{нfáF€+è9×°¾ûÁÁÍ€’·ôhšàJèž3~Ï [ Üw‡Ò€ÈĘw?=¿–†®‡'·ËÖ°j÷ÝSöîlŠûÇÃOŸ]½µ³U¶€•"êšùg“d8J×#z½¹Ù¢Ÿ¯oouÏž vn•­`uˆä»S}<7MúIÿ|¼×Ûî'ÝÑèüìl›ÃãæÑÁ²U¬Á}÷»§}úÙÝéêäꚌÇÉöp> ß%ÉáѽF£>¸"ý‹óýýý“““bˆƒ@kK)]Žeªa}÷O?¼h6Z;¯mîö'ɨ'ö`£ýÚáùWŽîL’$óhÉ8‰SZ´•åEµc ¨Šœ'#ï.Mîà ½x®ñC`#¤Qy63¦/Fˆ Ÿüj©òoÍõ•Fxt­$ì>óã¤þÖÎV¿• .»í÷ö:dø^«Þ·¶îŸžS›žZõ$™–­PiÒ¾CuÖ–t÷+o‹ÂeäÂ¥i,KžøÑ. ‰ÏÅñÀX/1÷rϯ–RjÓ Íc¥¾šù÷™WZ÷»§ýÇ{½ã·/5¶’Öæ£QýµóI£Ù'­öpL†ÃgS™ÓÎýÇ/XcÆ×$•…p_á¨ÁŠ“Ç-»!± åÌÈu'Z½Õ÷lµ<ΜxoÐììÑgTU§gsjª&¦S¿g3.53äj aÿ¬ì;ÐRpÞ=5íýÍNòôYýiøôåW#BÍ:½HÒIR¯¿üVj«ÉÎv4ž*!MJܯXš8¨&5Ù¹jµfÎÅ4¡±¤é…¦¼ÅÎdÙƒ\Ö™1š|Ežy£B´]™&Dz-}ˆì‹@¬ûL}w- cL8pÞšöñVgtöv½Ý£îÞßÛn¿ü–ZóáhÒ\øîÓiÒh¼üÊÕ£BƒXØŠÚ#5íRwDÿ†ß}1f*>k å¡O齜E‘º$¼½×6§·F'µØ´üíÄæ±R- )ê1D^}÷§£éh<|þGwçìñEóîöQ”´†{{»™ïžÝ¥¯‰ùTƒ‰öÌGðÚZ¸GüBX !YVxΦWtí9óKB,iD^ ù}wå¼û°Ñì¶­M2ìÏÞÛÝ£Æí;í^§]ïŸÜyýN½Þ˜´œNú. V±ïTË1ä]»ãRŒVE„ÔdS-ªÅ=qr/½€ÑT »^}÷^s>8?ØëtOɤ6^·6ê¦É+¯´w÷ŽÚ­VsB’™LnÜ¥¿ušÄ*q®ä„[w¦™¿äÂ]G¶I³Ö,‹“Î8u#tTáÒL5`GѽçÝ-u®º+œ¢ôb؈í§›6¬Š£—Á©€Änùg6›.fdTˆ˜»87, 8ï~r§½NöχÝvã^oï:y6OÛ­&¹5n$ÍIšöúHr£~¹¬±Ë“NÍŠª 4£ ¢²1–‘5-Êfm¶S‚·ëE2¦ˆb •?w›ê.}Ù|8µØ´aUýú{mÖ/çTºß »W5ðôóÞ½ÓB²¹õz}~}¦aöçYˆ ðþ“”%U zÑu Æ>óííïï%1š#ñÁs'eIÕçgÕLm}ˆtF\á{È@EpßýøøXóíÁÁAÙV¾»Ê„_^^RÛKÀß»Û@M»Þ¹€+aψÓÓívkµÚááá*m”NÀ3⌤Û 6ÐÕÒãÍDJéÅ#—Hø£Lß{4'`Úyé‘w—¦“x®ñ‹Ò°e ø•´:rŠ­ªYU„ö@ßêHM¥\< ˜…—-;àÉï»[ý"ŽV>)âàN°žÔd'kwÎòèqj¦ã2-C¸4eÉ¿( [J¿zÈ)¶Q3µ’ÎŒ±?ðÔ£©T§f×eK $ÄòÝi; -`ñÒ÷¼Eé;r}Û•¾oê_BÁ‘§Ý;MÃ(d—P4kÛwEjJ=vµy÷²Ñ†«<Ëb)½…ÔŒ]©âhÂýúF›a¥›Ø; _{±Å8úíœDšwŸWÓlv¹˜b^c‡Êȳ°^¾ê iÕ]µÇTð™Þpƒ÷«›±EùY‹jÚŠ*HZA~šä츉ºwâùKäÔê¤rºJnÓ+J[5ÛÚô6t81ŠŠî:‘öªK]wB:é_´6_„X—8@nv%ÜPp±BPÓ.}¥Ð{É¥´eµ×€÷à¹8,Ê£ŠÎBøµ:Q ~S…ÄÉ_@.ܦ /…H¿w_T< .Ó¿q3íx­Ѽ´^»k{ŽßþÙ«ðÜÙÈ“u·%Þ«ôm N?)ŽÃÛ×KÒZiÞ=}äºÝîÑÑÑ`0˜ ?„s¥â0(ãRµpŹËÒ3+·´­µ/QQRESK-ßÚÃÈÒ^ÀŠ 8b­™Þì:Žq'{%ôè)ªÿ œàÖqsxÒ˜~íǘ‘4kͲ8vf‘ Ñ·ûøª×i^_SAFüîÍî :2¯,S±É×5Ž^*§Z ?»ùÓoá¹t€+‘æÝí‘Ö¥ôAb/¸Á"îf~Ù±lªpéd°ñ+¿=n׋dL¿ì•éW¨pòèUMQ–Jð–Ц «âh¤²Y¢IG_.£`ÝuHbœï~yyYJÙ¼]¼()Kª– öiÙ î»’’@+ (ð4IYRµ„Û#}§ñ9`CpßÕD&¸ï^«ÕŽŽŽ¤_õz½n· óKpßšöƒƒéW———ƒÁ`I'®€Êã÷rê½Ó餾l=«CŒß»ßéu©ŸÍøñùn·[vñ€$ÆïÝ{¯7©)§~zrQß½NnÒÀÉp8›ÍÄË•8PaψC)}iäL1±«!5Ø–Ÿ÷?û¹¿õE.³ußÝérùèöÅÆþí)!ÉÕ´¾Õz¸?mowöž’0?ˆw=ú­¤âp?‡åfsôÛÕåÉÈ;„KSºK«~kîBŠ W•~ž£YV@-¤UI¨Ù R¹‚e\+¤ãí"o¾ù¦4Üj¯:jà“ÓùÅÜÀŸÌ/¦'©û~+L‘òZ *…ô|-ãÎYë9ÄŒüB¸4eÉ¿ ¸ê¤Àô+«“j ñ éµkR Ò!wK¬N‘yv¿Iæýâ­ÝóÃAól¸Yß¿RE{&L“ãë[UAL'¨¢yº ®!¡äÏÈuwR½ËØ'–¾;ÊÒYJWÄ>ÐØOjÂ5€kqÄSãÄŽšílõ‹‚鋉óD‚â¶Ïü½výþp¸ûàëIûš ‡Ò8/MúÂîô.¬yå¬`ï8¤Õ—gc,U›ñ³!lLžãX"zå ›~„3c‚Ší*¹M¯¨r¬õãRi‰oÙà¹È*EÁôƒÐXùî·Œ'Ã!ýwÕ}ø ×HN·O“»4Ð2½wîñ –î•.£ðªjÚSíG›jÌñØoä¬Òb˜~ö'¹i6*¨"VlïÚ´Qf~…ÛýGu£·ë²ÚÝèÊS3-U —Qœ»–½}jä/ÄÖ†N?¾Zª‰T`v ¼DU/ûÚ”r ¹Ñ´7ë. Ýg>ŠagªT8Òo5#E! A¸å6l=І߾ýxd$Íš»‹KÜlR±Uñ5%­"³²8ÕÑ’eãqJÇ5Ž^W=kÚ9—ˆG¡ô!ìäKíæ$:sXsncÚ‰ëª:#6çêÿ4†H/[ˆØ´ M¸¦ÁÛ’k‚·ëE2¦_B‹mSÝTTQj±iê8¤^bü ª4P¼ÝI0§g è¡Fý£û¸¥i'…[÷Ô,…ÀªRÙ>°²‚­ ö¦ØX÷ããcÕWGGGé·N'ZñÐnëLéû{#ºô@¬»êøWTƒu¯ÕjÔA—~Õëõ¤«êP.ëNM»Ê}¿¼¼Lw‡ŠEu<Œ%æywéáî)N(–ûŸý\Îjßþæïeg¿ùwîS?Sv¡àkÊŸ™Ö§ôÏg½aïSü¤Í½òÿïßþÛù9«?ôCÍìâC?üW rùö™Êâ}èדFÒ"­&iNÉtB&ã[ã³éÙW†_ù¿ò›ú{©io·ÛÛÛÛôz<ÓëÉdòÞ{ïõûýÿæïþÅʉywÀŠ_ü[¿ZoÔ7Éæ-r‹þ£¾AͤÙh6žµžýìü¼æ^jÚ©]o6›\8 év»¿ù¥ß)VTOëþÑ}¼X9œ¤‘Ùø… 4Y"âiðP5~åCÿ¤^¯S‹N÷m²Ý&mjÚ7ÈýªžÐoêÓÖôï~í¤÷þÁ7ÿˆzêlHjæ§Ói£Ñ [[[_øõß.PZùÈ<û¸:9'¦ã}{&—›fžô…. 6p¶SÚÞ\Û¡Øæ¹M¦ñÀ4‚JT½TéuQXgÞù¾6jŒ¨EÏB’ÐÓdJ¯æL¨‘'×ÃëÿãþùÏÿøÏ²÷þ«÷¿óC?tÃeç3î“ÉdžN’|ï{Súr@¯ßýÚïþÌ'ÒC¼l+› ‰u¯‚ŲìA éYŠíª(–ÌÜÕ8¥ÆO| l²‹ðrÒøªÁ62s“~³O}LÆuR§ŸôzBÿKÏ?æf¾AúW}κ‡Ãn·K^õjÚÓ?ç7.>[­Ö`0ð°îÔ´¿ùæ›Ü"\ÛUuOš —:ÜC(Fv"KS|òõÂøeDd=,׳ ˆˆª¥©Ú!KQÞv! ^KKÌyçN÷`Éh:ª'õ¹yo$#2ÚH6¦dššôét~A¦skOšdx=äïX»NòéEê¸ÿû“ÔÆÓ˜®‚¥¦] —XwöQÑX5brØŒ‘̼qpR%Œ+Nã!@ÄèjÛ´[n¸[A'ĨŠì÷~,¦†÷l“ñd<Ÿbo’æ¤I}÷ y>¨žšöùÅ„šû¹wOzîÞt>³èé©]ÿ÷ÿþ¹óÿýïßCªÌ´‹¿ž•ûîNc_ör„^}úý=ë°Œ=Q °ÁæAc_ÜEßW5å½öoÏR7݌̃œl 7È&IÆÉxc\ŸÖçké¦$–§¦}>8ÿ,!cÒ îÞçÎý‚ì‚3íßûÞ÷èK€¸¢^kÚ­æÝ¥2óú¡’}”U¿!±œ“e\"ìŸ6ƒ~݈FTŒœÂ¹5¾u=¹ž¯™Ÿ4'õù$5Õóß¼/LûdnÚ“aÒn´¹{766F£Ñ_þË/­~f×éujÚç/ ãqº~Þδ‹óîοˆ[:'^:/èe¯5º ²hžãXGúPµ’Î& ý“åíå åµ×’§sûMmðt47çãÑübül<Mæ^ûh>,O&äµîkܽ[[[ƒÁàûߟdÿ(©Ëžyí4Yú.¾3"šv1Ž|Í|vMéIg­Äp.$û“R#s¨rÔ ].`LAŸ‘Íš M1ÕB y”lÆ®¥mžó°£=€Dû*l#j"]ô#¾¯àa~|êG?ùøŸ=¾&פIê¤>_¿™Ÿ[ôñ®ÓËQ²ÕØúÔOò[Ò~â'üâââÏÿüϹðÔeO'ï©oµZ4¦Q©içÝk´­³G¾¯ö¾Öùë0ÜB³ÂÏcþixb"NfòKŸšÜštrõ“Ÿ'×-¡†Ü{7:¢6í†ywzQ¶ÒÏ#›w_ Òy÷¾û2€UÏ#À›5ZU¬ sß]:!€%¥ö‰O|¢lP$ÿ?§>.*ân$IEND®B`‚analog-ce-6.0.17/how-to/startwin/zip.content.002.png000066400000000000000000000154621406366436600220320ustar00rootroot00000000000000‰PNG  IHDR´&Dv-™,tEXtCreation TimeSat 24 Aug 2002 15:37:23 +1000(ð”tIMEÒ&6ÕT´4tg5µCA@]pu'¥i«H¨mQ%ÀpV[j’#µ‰R°ÁöÙ@|Æwï»ïÏíìÎûÎÍÍÎÌÎî»ûî÷ùp~™wwßÝ™Ùï>3³óì³ÖÒk7A á»oqû  BÂñï îCÄP ÇŸLðñ–b~DzCXûöìÚ Ò§”èÿžáÅ´sÒftttÿÞ×ÓÎâRb©»6Ü‘vfl1vì‚â@” 8’eÍÚ›ÓÎBtò$RÑôO¿4Df4_‹A°8ô磗'ƒŒºéŸáp”Þ%¥îwÁHîdPeð¢Kx•° èB¶ pª¾úÕ})¤û‘1ûˆƒ¯_U=¦{2øÒ´°C!çÂ6Ld²á7`Òc©ò™}B[Ùzv2%B–¤¶¡H8›•PdJ‚ ì~WÅ@×!¥•Å:¤1^¬_iÞµz¾Iœƒx÷Y`9T½ªX0wKsÅÚ/Á¨~ÈcHµ«¸ÑKB7+Bù{y2¤ûò9‘nãï'F8aª}.Ï:qD.'é=yºCê'/"ËK>ò-$QÚÍÊèèhÚ9A2G[è|…üÉý•¨ƒà]îX=4œv~¬°uëVòY¢ µh?ž Q¡»Ïñï?x…¥·lÙÂMž¹ о=¨ª‚0”}؃$Çḛ́ Y?*¤À˜ÞçØ¾}û¶mÛ¼¯¶Á@}y³Â¢ Ò ³AÒõF¤ã:°f5S“ø½ASäXüºDÙç ­ Q†eYÕZÕ®Ø\Ö‡ù„ªÿ‘…fŠ@A¿3”ù5{mÏÊÒå‚%œpQ;iheœlÁ’Êì\¨ùåcœw¢=÷æ÷ÒíóaŸV «&áH÷bü™ãP}×mPHkBÚû8vù|ùã™ÙÏüú)¼  Æó/¼899iì&HÚ‘Úû^ƒrÊ5Ž]­TçΗÉ_ÚA’ÂXí®Æ)¨Ÿ€æÙF½Qž-—gíòlÅtHÞ0}nźdCÚYEz‘86oÚí¬"…M@” 8%(D‰¼Ï!LÇóÓ(ЙIÑOÉ" 0ìÓðÆÖøF€uES`Åç`ÜçwÄsé ÆûòLL8n„ýíUëÜ8¢˜;;K&$eè2DZQE“'XBé”–ƒ*¢Ç™÷% ®F¼ô8ÛrbbD±œ0[@¢ž`IÔv@³B,„g9Ú² ÔßßÞ|÷ 4NYîßôO^{+ðš@ƒ|iý…„…®Pæu—#âòcÄ/ø&±óÊ8ñ4f uÖj’¿»¶$lEÎÅ«úÓ¹£Pž`¦ Ââ4Þþc×±£5S«CÍ=±¢š 7Zkræ Æž²—®¦m ¸“²ßhL—®|¸ô¹¿k¼µQsU¨‡‡ª$úæ×ZÄK-èÀ¨‡t°ÔÎ¥8ˆ2ø˜ ;/ºÎÕU34)$rqP›!Ä\à 6.q0÷Ï.ûùûT«È§jmo(©nÅëc.\t« M³BËÆRS5‘ë4ãðÕ¢©¾€&…5©í”t¾!¾˜ Ûÿåv²xÛ6wå–-[ˆD4äôü%‡Éi6¬4ÿ®’¨mõ£ ²˜ °0lmùÈNã-P7K“MóŸl¹ð~‰°6¿øËå/`Z…UVšBݳß>p‰ç~¾ŽX ª èDôì‡üQIV*jf-yÕóz—.÷ÿÄÿü@ "ä_Õ|¨Ò*ü{îµ8X̰„˜¤ä“2¨© ií¨r/%®fŠP= ?RëË®½Øs«‹¹ƒlµT4Ê`5(tÇ’8DNéR[aqûÒÞ¨uÉëŠ?³®~†-¡½ÿüA’®V«•re®"æpmD¼e^O€Âê¹åøî+›¤#f-Êå²ONg9„a;K3¡øûþ±oEU?Ì8ãX)†…¶s=ÖØØt^ãµïëþ‰·Gî½’ “´\)~fð½÷Þ·m7Øào¼QÕ!ErÊž¿§í F=}Tž`>&)µW]ueÚE@GéìÃÃÇ$µ½˜µh-úà){!&)Ò?‹Dß"Šƒy!ˆ©'¾#¡1‡ÞÚ÷²•´sŽ$ŽE_îGF+ªØçB@0?hHŠGû>‡tÿºá‰  2Ù bHÆc‚)ý9x¿ ˲¾lÅÿä;>ÿN+ý©6€Žh„¨FúÝJÓ]búvH«t‰sîÅ._¶W¦sJþÞIçßU«©ñp-ù¼Ø½Åî¼óû®Dì¹p¯LP…ó¿Ö0×±Â{L°1 ûd1ñìÚ5i]³Þ90ø²æšêY1|E ¹˜`ªÚî’€·C 0e8E·|þ·ÆÆÆ¬Uc?Ûµ2òËV¤beË 9‹ ¦ZAgb,ùxiýä¥4}é­Ç»¯ $,½Ž ¦ZaÛ•¹ò|«Ñš» y~)ŸKö§)‰¾ ¬)åÃKª^CŒ¿ô$awKÒÞ(?Kú_¾å×H¢unÙg¿ 0Ù}Xº'õ–ò÷vÈÀ;¤$gÔ[Œâ¥ŒÜRltwHy„W¿Ž¹XkÖ¢>ŠÑÄ›`Ð<ãú(>QÞÔÔÑŠ…1ãŠM”È>0¯´Eßñ†(Aq JPˆIŸƒ¼Fúþñ6‰8ToØ@úþFhI¿ég¨#‚øÁ)¢Å(Aq JPˆ’ë9Òç¤i9b÷ö+ÒÓSY(EÄYÙ°ÅëÆÅ-ãÏ vY-Ý8~&]ü¤ÄQø‡ ¢¹ZR©Ï-‡´„4!”Ó¿Üÿ˜ôWùzBN•OÁ ß°8=(~Râð{™«žuó§ý¥ÍŹ瑩X:SBOÐrøO´÷×÷*› =yÄM §ÍŠªT‘ dõ•© .FT¸õ¦ø=_6Uëêiþ‡©$ñ>”Öƒâ'8ZŠ¡zÖÍ¿\X’â#_±#<”ñÒ?ñ†ô!ô‰7œ[A” ³¢-¢Å(Aq JPˆtöA”ÜräâÎifIJú Îö¦?J—ÂhtR’²Oô–pBûÏàmì´èÅÄ›žEêÏ!õÿ†{69Vd"M~„RžÍÊFWUÉÅšßgrþDÒŸ÷[`ît¦ì¥.qþÆÞüèO”éˆCJ,×bŒþDHjCYM5–«MH÷$ëìcÞ6ëÃ^K=bõ'êç0Ü töA$ ³:û JÐr JPˆ¢Å(AgD †·F€á­%Þ1o‚!J°CŠ(Á¡,¢Å(1òçXísÙ߯.}…ÒrPW"‹Õ2×)¶« Œ®Ya² vÂò>YBØ)$Jq°1 •ÓÐËèà† …ß ‰€ÆîÆø¼`dJ–eéG³Ä<¸ÃºIìÛÓνæg&Š„¢Ï–BúĆa@ãØëGÞ!¥íµ ¬{Áß-£9ÞßYkÒ?M(6~Ž0)…a1ýaIÓ‰Cjymù³în[Š5E¯ÿ§Pk9èêv÷“õC}›!ÅC7Z¡ t¬H[DÏ-Ø ÂhÉ ò)ëH²9¶<= ¹å:5ú^.Š z‚!J‚çVÜVãk-7µ·Óûü1ùg¡Á(<âp•ñ–:ÎWÖŽ\nÁgÍZÔGÁÑ5+_¸ôûÎ@  Ö_:®2ιiwIêÇY=„]Ñ"£|¨irí¯üæÊom]“ߨYp\›A>Iz&ÿ~×_­üæV‰lÖe25Øéqf²î ¦Y÷Ç*ù&ÀzxßY –x6cà4 ÿÒñGÈÚg×-Ö[˜ ‹±*.ìžý?ïÍTVBž`<ÇL‹ƒØƒËÁyyåö¿…ÒÍИœÜµþÞ[a±ÛšÀLþó®Ç–®ß ¥‡`Ñ5Ð"¯ßóŸIW«Ÿ.«@Þ: ’ó usä}Ž‹Á!ªYìÑ)¸uùzxฟžÙøÆñG~8ÕXìm£)§4©ê%üË·#U©¯ƒù®üS€½1서ûÓú]Å+q¹å8Ö'ÁYðÆÊícÌx¬¿•¬" j6ž€²Á¢ð‡ÔÇ®7·Ò¸³Âk4»ÒXø„¬trž`ñæ“QÒL¼Yža™ïyx³+¬·q`ÝÀ@ÐÄ›ÊMP_0ÃëUèØpWiñV´pÐØ=Á’@Ù!¥NÅ-€Ã+·=%Òˆ8Sž¦aë5ð‡`ѵa}¤.[ÂI±´‘w•Í[8m%ѧVÞçhvþêÞ׭ߣtm¬zgÃòn¦é…h–kU‘-AêãIsbŸ•[2ú ckÀ©{:økhÝpocñJÒ¸ÀؼvG$j¨¢)ßi`K4»: ¼Ó9MGöÉNÈ™;9O0i=t20þƒkyà"p–\ð‹Ó¿Ý^ñsßÛc eØÞÍÒ§ÀzbÏÅU}HFŒONù8€ Q@™4+W|,¼óнÓ*•Á*£2úÝRrâ‰ý Öå7ÜA‰Û»ø¡Ó â˜xÒ¦ 2ŠMÀ¬,=ýD"|7áI4ýQd*…ýÓdû§OìI;ËH¯@O0DI”w¼­Y;Lûö`8Û"£ÇŽó=͛ؽ¹a¦ >ed¢Œñû‡`Õ^÷Ë!k»Å䪚@‰ùã¼ÍB If—ŒDãè2«il¡Ð›`Êfe|Ü3'õ3P;Õ#P{ªï@õ(ù´n<¶y“« M³"KÔ›`EY¦ž`†?1AÛ!mÎ@ã4ÔOBýÔ¦i¢î,犗-›‘qzà /jq´*ÐøÀDí4¦¡A”q²K*³s±gÂ$œ—>h§p³lŸ2LÙ§ù!Ô§­‹ï®Œ1 „Ô„êÃTêãXú}3Ò~%ê –jËQ›¶>ñå—^zéöÛoç15*Á¶íjuÿþýÝW}B>tÅ(ˆ'˜Û eб.ûl4šK–,™™™ùôe—‘ ~+Æ*‹—,X‹„J”rL0ë’ Òå­–;=K$B>=Úl5bÌMÿ˜\ ·›7í&ƒUi¶š®,š ×{ðÚk¯ýéOß”îAðøòò’.T] š`Ò=î¶Ç$ç &­ØîQz‚ÑÂð ýœ[¾|Ù‰'V¬XqðÀA»jßtÓM©}$.<Áxèó´­–+#¢ òÙôìÇ «n  ¤ÌʾüòËl¬K)³ssd”âþgÛ$C–Ó§O§]$)Â[›tå°M)*–O|?ƒž`ˆ¢_WŽ( í&H²4Rl”ÍŠë&¸Æ'Ú ²0ÐO̼«Ë˜`ôôMll/ÙÜY521¿ebBéÔÄÒú,= É•:ñç¿îß+_®8F³«¡4AÉŸ'˜î5^ß!õ³?xëäçè‚Ï_q yâ#×±´qʪ¿c5g~òšé”½ê¢‘ú>õ™öÓ¯&Ê Ÿ_¸üµÃgn!‰·¦W]ñ›®2šg­–m×–¨~ÊëIX[T’Ž {†uâ Ê°ÓVýôõŸü‡C•|=tîw¯¿h;´fìj«^«êëBZì~¦o‡„ø„ô8dË&ZUª ÂõËž²ê§ª•2QF­¿³1¢!+ž`«5CzÄZЯDàxr ʨV+ eKz‰Ž~{‹Îr¼ùo¿×I>}á°«ÓCsد“Ç xBE¾Ê)=ˆ /JO0Upqéµ›VU$!‡Ô¸s¦s¤GônVU•;pÊQ‚â@” 8%èìƒ(AË(Aq JºÇšµÃ,8–\z‚1@Á{T#‹ooì‡[¨Éy‚ñ_c{;¤ÆÙ‡º‘ºÎ÷)°dZMÐÿ–5$9O°„j[i9ün¤0;ÞÅN'[!bÆiyõ­3X^=Áüî¢Ëbz!Ã`ÓëyñTT Ì£:÷«yÆrNžò\ÂΔ®yŠ®š·Ö€'ð½…§(1Á<.\¾€üAýÄSМaÊ(¿ñÅSÑ«†ÿÚ‡MId²å V;ÛÎÁâ,¾ú1š¶ÿw¨fwå–DŒ"$v,‡Óœ©MgÉÄ–T÷ÜdW*õðâ𷸪¸^E•Kq<ÁÜqìøxýƒOPïóÒÕß" ëoþ‚])WËsvenú½³¤ÏQÔÙçx‚Q˜éÔ¸Û¦ìýŸ´sô8,+äh)JqÐP¤H?ƒ³²ˆtöA” å@” 8%ºÈ>†`ˆ°¢bÙGî¾x׆;L6F2ûvHŠ6²¡Y†ú9¨…ÚÏ >ÓNO²¬2(lÚÉüU’¹f,ž` ]‡Zqøm}qí]°Bý¤õ鯅­Õ‹ ùJÑ,7y•$dUÅòó·&û”߀úûW=<5aÁº'u‡ýnHÚ,^÷0}³"ëge´æ.¼ê¡ÿ~&ÙzT‘M«Ð㲫´åoj»A{LÚµ÷-¿j$P†/òéÃý÷Cx±„j;¨YñM.[ýø®¿‰’cé[»©…ÀWIfÍÆ$ê –„>äž`;vÞ<1aº‹±±1¼ V0tž`›7í|1í")£lVÐ 8+‹(AgD ZD ŠQ"ï†1gíŽ š›`cÆ;1ßÉgŸ±Øa¶©ØN!Y÷S­ðh6›åryvvvppPSx–ޱœ&÷೩ªy‚Áœ;„Á—Kªk¦lÛ&úÐä5‰Ó­â²@î<Á´£•fêehTÈçÖ­[…%?þxÙ#TEЊÂìhàè\~¶\Ø’í'ÞúŠ¡°ÒÌ$ O°E÷m}–hâfïO²„(£R ¨CLóöáh…ÏšQ)–'Àè訰äÑG%‚ ]=ŠÃOàů¶CO‘b‚Iúç-ûðà²M_ðQ†¦Ï¶¾4IÝ¥˜`Ú>Ç /¼PñP#l{¯Ùžwx®ž=ùâùƒ¥á ¶°‡á]ïyòÙ'Ù½åð{‚é·"ƒ¯Ý¥RPµÜþÏY¸UÀÓKO°XJ-÷#‡îs¯D sss´«qþüyÖíÉÎ @bz‚™N¼Õj5zWƒŽP¨Íˆ0ZAr„²YA?¤DDà¿SŽÍèÏh@q JJ[Ž«jz¨›qPeøo¢Ó{bd-ê£À úmPeìßû:ù¤L«‡ðí…ŨÏAÔ@MH*R ‡Ö´nùES(²*õ"›vH‰© &Ä0Ç´læë7 ¢,€•bÕŠ,Š] ´ÂÉZ“: UÛæèÄAÖžrë´,`v’h»C‹g’œø@Ø)§H‹L6`WmÁ¥•#è lm¢ìÒ’ƒA°i–usX“ă/]BeGÓª"!¼Ô¸kO(;_!|Z³+ðj;ÆÜÊÅÁ+Czx6Š!˜œB6Þ¡Û³ý³Ã± ho—®2Üy^ e¤à¯ðÎ:_!Båô2Ã:Ë!¨X€*öö¡…÷7l¡IN½_#RÝ 5ã¯XxMRü:‹¥8¨Ziü÷9@¡˜Pu$µ–¼Qéæ™E%øšáOJBEwLP®´ëÐMÑöÅ_GzSÄßyS¥ Œßœ$‡RÂUËŸ?“1-éHO˜Ðåd1Ið ³ ^=ªt‰vuñ•£ßsì]4£fÅ¿„i‹êq S[+Œƒø©ðµªÒÙD(£Y(¦P¾r¤…õ×g,ÈÝiYhJ¤KâÍ ’Úã¤Î>t`¬HºBHîsP)øMbÚ9GG.©Pý†Òr yqòŽÒ íÞèm·Ý–vNÌñÿxyÛëXÄ¡IEND®B`‚analog-ce-6.0.17/how-to/startwin/zip.content.003.png000066400000000000000000001060461406366436600220320ustar00rootroot00000000000000‰PNG  IHDRè?¯£ŠtIMEÒ/RB-< pHYs ð ðB¬4˜gAMA± üa‹µIDATxÚìùwÛ¶–ǹJ"µZr"§¶³Mê&m“tÞy=ó÷Ïyg~i3oº¥Ù“6±˵,ká¾Í€­È¶,QÖâ¥÷[—¡Hà ¨./@B~öÛÿªª*ËŠ,ËI’H$‰Dº ƒÀõ<Ûv4PÛ0 2WÇç]0‰D" —“؉ìì65ák;¶„q·Ç–ax1ñ-/æ0ÉT»Ï¹ð³SŠ_¬Û³s:ó9 WñòšóE2‰ùKw’H×d]—“ĵí®m9šðµƒ(n÷¼Æ_ÝNÏsÜpÚs1 ºM`#egj ³¶`|?Üœ.ÄC³3øÉMXÂdôæÖw¤©É*>‹R%3¯àHkS}³òY œša>ßé´—îED¼i(¥’šÍzq8®«%IÇq·ë€Úÿúá]c×j¶IÎHzv='À¤Îž>%Kœþ‹Q»IŽéå1Y'8SWmXí’Ô)'8ÊëÓTm¢¯#…©dX¾É*O@d²Ëc¸áô_Gª‚H<áe–ŒK0¾nCR&§íMïèœÅ%ú¼7£+™Œ’/èXb}ô‰Â0ðcËö’„¥4ÍìD¹ ­VU~«†Ç‘v°;Šák7šÖ»­6Ø=ÉÉ=­’ò4'e2`¥åšœêšHWÏ î4¿—Ú„JÙ6LxA'£“¥nºs>®ãîô-Vrú;¼vÒñË2íA'ü~S_É ã*8±û%Ú™æÚKî4`9Q…t÷d)]òÓ’ 1^Èë•%½.Ëš¦ªš:bpœã(ŠÛg¯åù¾œÉd–k¹‰rµÛrænvp,–þÜa;nØÜw@í­FïÔJ¥¹èSatøw™œÁԿá¦Æ8ViÛ’iOT2ÆÎ"NT2©Ù¨ä<.ƒãÛæV»‰~/3¸8§>QÉD¦æv¢’ÉìÌåDÕ몙W¾Ü¨Ü¸‘¹¶¬ÇQ„A„¶ãà_$ÐtÝ4 ]g]‰­Vkëc´÷æïWUEûrcéÆ ]ä:­Äaõsu{ålVrl=( €[(£k3{}YÖuë>+E/Ý"¬ô“ñ½*Jƒul?¶7¥¨Ó!‘H¤ó’®+å²j¯¯J++’ëx¶cwÚ]Evl›œMÓ¸K墢¨ÙŒ»³³S(zQìW*&¨½¾*/×BDZZf ˜×u‰ñ0[àn+rogç/äjï»ðìû‡>nµR6õl.ofðѲýVÛÒÁ£“É€x¬÷l¿mŸ¹™ 7b#ÞÙŒH$Òy Ë›*¼fP{mUë´ãíF»§î}üøN·Äz{¹l\*•u-ªT¢\Ö L©PD®z]jîúÂCî9rá£Ê?Ê|èPä²ôH‘?ûæGÀ7³hÖV¯å9”7?µZmûÅ›m|„ßÍRðÛ‡úrñúréáýU¬coc·»³Ûâ´!pŸa-ÈC}B¸êKeïÁŒ¼nl~ÚÇŸÏ]ïóþ:H$)•ØàŽ( Ã8bËêáïí›7X‚rÀàîî_¾ï~÷ø‘"ËžçBaF ‰\1VËGâ§OŸÖ˵jßãÞmîâ·oß²ƒ\8Êàq€œÍæ²×—‹Kå<¨í!€‹œ¼Y^L¶X»±Äÿ*XÙjû˜†ïܳ|ah†{Îà &–"À"¶À©¿Î€"2Âþt¾ý¼¿‰DšJhkÛ¶ÁèÓ$¼Ø••:Øý¢ùº\*âc»ÓµïÞ¹ÝOpRÇcܹ\Ôp[m+Ã! ˜–8£nìª/—$Žopöá}ð}ñ¦ñÕÔ föù›ÆÝ›Ë¿>ÛB^lc¾T1-ËC‰ûãØ+L §~í fù¡ç]†Ç»I$Òå [*•66¾,m7šÍ½››¦iÞ½s †W+9îÐ\ØÛ”¤Z­úöÉ¿_¾|…-0òý?ÿ!vµ»Ý¡¹†ã¾6𠧸R6-Û¬ÁÙúrQJX¿¥ˆœˆ°ÆÛ÷»‚ 9Òc[òùlÁȶÚŒÀ[¿~­ˆ¿ÍûõkEX{ûç.£â°£k*²`#ÅIH$Òå•®ëp™Ã pçÃæø ¯¹ÆTOóÇû#5äÚÞnÀïÞn0èÇÙ^Mžñä&P[Ôo¶ß½ßmìváYÍwn.3G;‘»Ýnæ xB²Ç,¹cΨ Ïzg·×»R2>X…3ÜÖb˜ À”¯"ÄDü/¤ÎI‰ty¥sÙŽ£išq˜¦þb ?wh–ÇTÚæVƒÝ¢s+ëk«ØXU51¼ä¤†€[DH„—½Tfié¾aûNw;¶ð?D1 ‰E¤[?jG ´,Ÿ‡¶Ó?dO"‘H]+õ:–d ùià–ø,›Í=xÜ_mÜ“xŒ[|»†ê¸Ð0öà2ÙbH wsà­O-*á;Òçñ× »H€õÍOûpÉ3¼GUOÒ³½­Oû•²¹Ï:3Cž€íöý©s’D"]Ô#$à;:¥à$\lð}}}UŒ*Yá£J°ñöí[Á)N­vÔJäôìB ¹¾\âË"P 'šé>蜔xï"½vc©gZ7刑2У_Ÿ}|ø@ÊYà¸õ±%±Á…û@v}¹$,ƒ¿>ߺ{s¹Àû?©s’D"].ÅqF‘çúŽ£¸.s}/ˆ“DUZ±‚= ®³ëz^F"ØljÈWÙ÷ƒÕÕ/°¢kši26Ú¶](ñ‘9Ò|ÔàÉùpƒ¼µ¼·›ûýpĈìx°<»~ñß¾ßí绑žµÅÇú~$:-‡†‚È/Þìˆ-ÂÏhÚæÇ}q,êœ$‘H—Ha¸žÔjíg3®$EžÇÆÒN×àî°àµlsjïï·-Ëâ}×s[­r¡ÛëõÄóñ<%CF!{¹€÷z–ÈuŒÝÇB%üëV×ï?òά¶ØÅR}~ŸÇ¬YðD`ýÐ~ÄsEyvìCpG‡Ã½ž•÷EÇæá‹®ˆÚ$éòÈ÷ãVËÙú¨íììT*‘ë2p³Ü|·Äžb5Ôà5ƒ¿;;Q§#{žGÞÖGk0×P æŠ#5N>¿JðxŒ.óÎî ^2uÝžî%S$‰tQeÛþÞ^üão E?—õÂðd<úàQDøË€9øÛnkŽY™ðÇÞŠÞ)¹¤“¹à'ÉçÁàÖ4ÅÈiµŠÑYö‡Y ×ºž<"½Ö5Miéµ®CsÒk]O9ô¥z­k.+é™À*í}×Ò£cO¥SÌsWùàöì¡ä&ʵT)T*9ÃTtMö‚CpëªR*dëµ<ÊZ*d&©0M¤0N4‘Bªó3eÕh"šHa´…ÙO¤ Ë‘¢¨ªʲ6ø¨Ó' ¼æ8fE‰'ÊjׯgÊ%@|Üp·«åÜ=¾ÑéùŽ^”™ô&ÂñL yê[çSå‰.è™”jÁ’9ܦÆ|†3®MX Ž8çÉÉ8£Þ0—bæuœU§(Øì.à)ešJ©¤är~")=»ïqkÌãNâ|µb\ É‚îÅ茅?ýçqA <_-¨[¼fTøÅ]'ûl/tŽÖIÓÙdÁqÙ6«H?Æ­*Ф)ÆT¶I$‰47õ,%¸•©M‘H$i¡"p“H$Ò%›D"‘.™Ü$‰tÉDà&‘H¤K&7‰D"]2iÓ› ‘H¤yKÌÀk;Žx‹ÓygöÓ˜™†!fÒ“ø¼KK"‘Hãj;®×ëYEu&“™Þæ›·Ñ’$Îf³Q‹…Ù€ûX[7QË@"‘HÓ üµö2NÐÍ4Í$9‡GŠg®8‰=×kµZ²,g2úwªš*fT¡´àfoowþ¢Y6£¥iZ8Hí€ß¼`)6¦úÉ\g³C"‘®¶@øÚ ö;wÁ¸kËËq|Þ໇½VëãÇOÞ¿÷}ß²¬J¥<6W*p jÿöû31'q­V5Mccãžp¾EøOç“æ¤÷±\g³C"‘®¶Bv¿Á×µ%67˜|E<î( {{»gYï;®›&‚ŸÒãù˜ûr¥^7̃·šØ¶-VšÍ=${ûî6奦—ÊE,²Î0/&Ÿ—'6†›…_>ln®¯­‰é± ™µ5O:ÜÏÎ1Î LÎ8‰ô7T&“1M¾6¨½¶úEøÓÛ[Y¹þi»ÄÀ1r½xùšyÖap÷ÎmfEÓ¶ ‰{Цi IÀ©„‹ý‹½¢‘À&„lAb1g1<ýrPÂ!DJb7‰DJ¯EöÕÍ».iÁ-BÏoßý)Â<ÀÍZ-`Ôæ4Vn¬pÚ²]pÌE}n¬Ô?|ØÄÞŸ~þõ›¯ïØÜúæëpÏâŸ~þee¥Žôëk«ÒÑšEÙÂ.î’W±nn˵êbN ‰DºJZd_ݼë2™Ç †âŸ;pœy¼~18‡Zb4Ü/Öƒƒ¹áC‡Ý’¦i¾xùªÉC"@üöö–¸)uãÔ"ך>p8M„¶y3ˆ¥8ÝÇZH‰DJ£EöÕÍ›Q“yÜíNHEÝÂRq°&ÒaÏ!iø/<¼kØm6…7]hë$ŽàϹxšÃ0+Œ<õcÙŽä̵þ$éo¢EöÕÍ[©Àz¡.—Š"L‚b C³Æܽs·r©„Ê”y„Ó´ÏÆ9ÌuìB †,ØåðÆŠc} Õî7bô×tœ8“v°§›ŸA p“H¤‰µ°¾º áq 'ÈÜÞfý„(" Š ì‹CæbecãKq¿° —ÖQ‰7w¬wè.•D…a{aðÛ¯4÷öîܹÅB+ ¹ òÈ…ó›¢s2h4X FÓwy¼›ØM"‘&Õ"ûêæªTà•^û½±ýÛTCÜbˆ°ö×?bËZµ¿EŒE˜Õ·ØbÔØ–Ú½~…ÑÄaï7ß<'nþçĦQ£ÎI‰t&-¸¯n~JéqëâÉùÁñýÇa¤£3 ³j—¯ù)°—…;†‹h¢VhúŽõ’~l$MY<ûnô'´GÀ!‘H¤‰´°¾ºy+-¸»Ç½÷dhFVŸYLF’H¤™k‘}us¯ËyŸL‰DZ„ÙWw!:'I$é²kÁ}us›DºâšÕÜ1C^î!3)ŠÊÿ•Ïf6 Ã$‰?P+ƒ¡‰Ùj‘}uóÖ˜ss…aÄþ¹/Q$‘®¶TEUøHÁT‰½iÚ¹cN›¢EP¿X?Ã{VÁ•(Š\׋¢tM+¸ÙW7W·çù¶ãBøúïÅ‹D"Aª¦æ²Ù|>/+j6£KìÍÕÉ”sÇŒ˜¢EPÛ0 Âã.&-0ÜmËv£XzÿáãJ}9Ž4´ £ ÃüÈ(t”®ÂcÕ¬"ž'œãô¹Æ€æ@íÆÎ®e;hYÑ2Ø…D"Iü-¦ìE¦Q$VF'Æ/µË~¸¾Îº¬àÁ”sÇŒ˜¢EDJðàû<å¨8ŒˆÒ°71ñ8ƒ;xž×é´wvþ‚Ù^Ï,ó#, /š&äoâö<÷¼¿ŸÔÞßo£úðŒ“Ôžñxí¨Ýjíã¾ ¡¡¤zÏ7‰Dš^q$b 7À›Œˆ#ÍÒøAP­.ác6ו`ʹcFLÑ"JbmL<º=À^ÑèEž®kqÌHÛawôŒWƒJ8ò…Ô´x‚ÂT*•«áq㫵ÑtÜÙ¬Ž[Š4¹Æ›ÈØë½eåÖ­Û¥Riiié¼kJ"ý]…ì×g[]ÎïpD¿SxWŒƒ®‡ÄÇz OÎ#ð“•ÐQÂ@¶B%ÑâDOL#ÖõXÓbô-|fƒhg\9³A»ÝÁòí»?Ĉiñ§ÃiܱÓÀCÇ¡P)8þ < 3øÌåUÌn‰˜ #gš9#—ÓRÊÇÇ=p‹¥p_ÔÆ—W.—{½žÏïŒp5 ,û“üb{¿ëë"¥èiL<ïs#;:6âèøØ_JôŒé ®.xmõòŠ¢Ž#âȶãȲ_TUU±Y]à#sÇX~d+qSow×U-´¦¬™‘‘“rFläB@R?Ä÷Ù¦hé«?É€(äúúÁ:Û¶ûÜH#8é øÁ~Ô¾ÏHWa²`wSðµAí¥J%ŸÏ§yö2åÛ5CQ;€Û0 \`¢ÄQÃÇÒ?T† {‘FÝ >µEâ3ôkO¤WÿèâÐýƒ¢ 8;¢HóþJH¤iä{.ÀÝí@¶ÕëJ§Ç‘9éàwšË‹ÊÈx&øïØJo3×ÛÎì=)µ]í¥¢×âØŒ¾ýÚÂO¹VõŠÅÀ4c]Ÿx0ÂàÐCép䜈ko7àõӧϾڸ·Ýé¬Ôë"MJ!oFß=~hÁÝvÝ”s3^Å Ú˸T]ª¤yür‚žF@yooÔ{þü¹4ÌÇ‘ÕjK|aÏž={ðàðÇ[­Ö“'OÍ:ïß¿í‚Ýs= (ÌàÑëüá(õçŸFñPÈï¿ÿ¾ïw“HY¢÷OæœGù` 1ôkìø„ÐQí@¶_™ÿîh½žºkw«Q^ÕýA­-EÊݶRU3×]ÝŒ¥IØÍk N·G] Ã\¶Ú ‚œQb3ÖëÛxÜXÖªÕ—¯^o|y/=»A›b± j*nû§~a58L~|âôvACx¯þùçúú:¨‡Æà{óæÍ£Gt|gX ¸ƒã}‰%T~ùå$†AR‰7b¥ÏPшuQÁØ‹X[ÄÇ~$$3 *é],%öXÔ €Ž…l<úGp[@"¥Q¹ŽíyÞ~»5øMÿ×îùl°5Üb µƒ@ñ¥øÃfnOK`eÏ—,/~ý“^å‡ßêÖÓhs_.|»ïª‘©ûIjp‹i ;[nó÷ß #‡?LcÞ¹}Ï÷·LÓøïýÏÝ;·þï§_þó»G?>ù÷÷ÿüG³¹W€o¦¢ð™Ga_IMæq‹¨±p·Agl„ Jâ !>bÙO†uPRà $åF£!¼ï¾YlÄ$îTí‡ËÅD8 ‰±Q˜á¡>jEßéàÑûqaeèï=ytaMd!v“.”Ĭ‰Í½=Û¶Å ÚYÿ@T5ý4„,rûë^uEϯ»_t’Ÿ~)å}+c݈^É7׌f+ÑŸ—¢Z 8Qd¦\Œòt:×m¾zõ|ýæV¯·šûö®ý©cK·æ!1’’Ø€1øCÖ›ÄUIíÞü¶µÿõýaoªœ¤|ã\¿í 8€ 6Âh$ÍHš‡öë>R{,’` ý™Z=Ý£™î¯OŸîsÎÀkÖø~}ãÁÕé{{ÅÍkWGŸ½øeæÚ­ß=üfù~ÅÔÔ䥔Ï=·X÷äÊÈŽÄX¢BÈÝøœ››[__¿~ý:‘ ØV’&²á+Pê£GÀźe N¤PŒ*ÄŠÒ@²øŠ2C`§!)t-1/œ£ ©Ša­ñ™Ô2´‰ñ‘îskk wˆ;!}yy™‰ÑeeeQ Ž4`((œÞã§Ï¶¶¶×76Éh{zj2ŸÏAzíÉöŰ‚p}2õ »šeì½x<|Õ÷qËÿ Y9S ½jļz÷ebPq«¥'OŸ×½'OìÁÁí ÈÄbÿHÄsoÿ¡k™;¯âñÌææ«éé»ÿöß?®®®ÍÏw­-9 óús‹^íþoM#Åa0)éµqÎe-Ùœ ®þü9NˆyAèt-(’ÔÐH‡‚XýõW©}f‚|A²$ƒUIyÎÅZ~ûí7$Ò央¡òQ×·ß~+«¦ÚIØ'6¯àB|ÖF]¨Å¢^ˆâæQ ʉîQPøâ »05ø¬½SØËŽ‚-[QWºíˆÙH&Cü¡ÔÒèȵ°š\üOgõÅ•ÆMmxE¯/7†«U‹n5°+žt£Í 70àLMÍŒŒ¾O§~L¥–K÷ÍøÃzí{?¼¿U­={þ<·öæÙ­Åïm»4;;ã·âtDÿæõçǰû?>q“:˜$Y¹ÐGâ08—µ˜¤`$"¥3A ”™ !Íi0¤"»•ªÝ~Á¼Ü ¥·¡å@ª—$n1>bH@~*“ò`€!‰›¨yìÇ%ºß¥¤ pfHŠâ óÄÚ†8çš_Ë:ž+!ϯ„FÃHîùɬި—Øúuv-£•}Ïôë®ðB0JwEùšæ6fvì5kÜýjò™S¹?9õ‡S¹—œxèT–b±‡ï·ïêúÚÂüý•Õ7û¯]ÇMvy«ý›×Ÿ[ôj÷Ïz"n¹ÖIë{tUFãH¢4k ¿¬¥}’â‚(Ùº‘g£‹„ lØqùÏ?ÿLé)ÒP³ÖX]ä=´‹\¦Ë¯@è´RJ‘UHqûK¿M…Ï`‚&ùúÿ'óâåëÅ…ùL&ƒz­Þ³¨A[P^ÿû…70¾–k7ÙìbjUK\5j?§½ü¿7´zãùÛù«Ó]j3 ÃJ§½ÁԽܕãc?¥g”ËŸŽOžÜ3¾zöæÍ„¦»_ß᮫nÌã¶»ŒõÕ“yýÅBOvÿ„ˆ›Hжmâ8­¤¦ý±–é -ôþÀ­²ÁÔ$k“ ›Vi; }Œ2>T.K¶øDïV£v4,²-D=RP ÕžÏç©j\HÐøAS¥¥¥ç˜Åår¤1—:w…óŠá¦¶íAbp7‰áÇ n\U®8_Í\}øde÷îÒ„>Î÷5÷~½UøsjxøŸÿ\¾u-« Ý‰; “ɤì%Á×÷ÓéOÇdêï%û~<±62<†ÙOv¯áéɼþb¡'»BÄM¢ëÍ›7£û¸I)¼µµEjn¢`&tßHœ®¢p’?‚FeQ ÊååeR³€ñQš$tbX™™‰DL ¥ý½<‘Õ¥[ÐpŽ[µ¨G|ÄÔGþÃ? Xp7Æ!Pî-Þ¹ùâéÓ§KK‹¯_½Lçÿøcñæ±Z-—kµ.µËe³TyXz5ÃØßS:~Ü{ðq÷^µº ©œ62žÈ¯è û ;?‹ Ñ_É,bVrŽB—‘¦˜ä_¹(™Q²s4¥Í:Qª’¥Æ™4'L°?ÙÅÈ%JÐ4Q6m\a­…P*Š®Ú/Go#ªFo»+ÈŒˆµF 9~(…óˆ`"4¹ï8ŽÏ-o^}iºuüžœæSP˜ÜÈ0¸›ÍL…¿<øpûöÄ/ÀÚ9°öÈpÒÐkaWd†®g ÃtÊ÷’é‡ÛïîC¾ŽÁÚñĦ›DÇêÆÒ‰ƒX»h—|ÁݬlHÄzï“j)~<7sDÜ,¢ë8"OÔjæÀ¯¢Ç¨É"R¾ûî;¹‡$êØ¤-s—hSŽvW ç>ß%VýøqÇïyCö;5Ý:—]×{Ú*åîskOþ5³pc¨ÅÚÝkÏ… §¡i£oßíúþd:½†SšöéY¬­–® v¯Ú>AkÛ¶½²ºFæKø·¸0ê›gIŠ_]]›1}ã´-<;?>ÝÐ5M3cšÐ0õÓq^.D]n­78¯ŒTÊb§T£‚Âù‡ÇwÊ–]×ÙØØ,•JbÈÁÛà|îDÐáAËøÚ“!}J;&ô<ÈJm=s sÛt&ÖjµÁÚ]†hôZό޹uW8ÿ¶ î˜ÎZïæ±Võ3Ck ³¥¸ÃX;ŸËaî"b[[Ûïgg¯m[f£(”¤K!÷Xr˜!9µ‚LFSìb ™|v\–<õ_׸uGBÂLÂã,M×Niû¤!´Ú‡©Ë´[SA¡Wø¾yéÃήˆ èrO$‡¸"ÁW k°v&“I¥ø„5j^ØMì²²ñ؆4$`mù­+~»í•ˆ¸é4ƒ¸'-ÎÈ‚©‘‚ó¶”Âî.Ê„8/´%§>ŸèPðT*6bù¡!îï»æÚÅÝÓ¾'‚çÕ«n%7žµâÃ٣庘ªrC H‰aàII?±cŽÑB» *NÕ¶‹`±Öx3ÍCׇ8!z%ùQjxp÷)CJ-S&3ªÍçsâ~<òóøé3üÜäq©ëë›ss3++kÙì(þX_¸% !ƒOOOîvñó_¼|EZ¾/ShÌOõ'Ht n+ZÓ‡†G4MÃÄBEPP8KÄbÚÀ—XÝ|!ß÷觺 ü¨°ÏØ1G„hA±ÜP;d uœT»³±ŒBjx4MèÈ÷ixNŸ¶) áúJ>·¾¾‘|òôÙììLѶÁÚø84”AÊÜìÌÊêÚÛ·ðôÀì/^½Âññ“gùüD¡°‹ó¦—Ú³2 ê@ܘÝðXÑ¡ÓÌZÕñê—Êy¹‚Â…€®1=a²D·†µÁÚÌ7÷;æ°-ä!)ÿ¹þ–›üU*Lj%Ö!ÙÀÚp“ú7màACܶídgPp3Eàë;·vDŠã¸8Á?è~,›EføË—¯‘.þ¹Ëð Љ¸5Ÿ—Š:z™¬•.+š±áE 2vB±c Ñ‚‰8Ɖ|n¬\NŽzÃÇ‹%F°v:Âørz…OÄZ"hÚqšÊ"R|¿ÛÚ&KTü´Gœ¬AЖe e­Öm–øüÀ0¦¦&]ÇÍfGAôbàí–éT ¹pW+„ ';fˆŒ¦¡‡‘Luc¨}hÉ"Ä XûT%îÖÍs í>òM&ù=±?ÐYg2<ñ8&9}gX°,\è êß)HŽoq-׉ol¢¾¼) 9½_Ñ|b§]‚‚—ÅéÅŽ¡Í`]ÙÐâ!i«å>îééIœ/,ÜXߨ`b3›ÍŽe¹ÁXÙó=!PƒÊy¨L±8 i…àªo–—p2  öbq×1_zW‰‚‚‚Âå€)¤iœ|}û–´œÄÑÊò}C·oA§€ä…‘Äsü»s‡ûÑC$Òæ¿èU”‚«ˆâéªÓþ-}U5ü§xô,<ᘆÿ~±]íE¹Øÿº÷»zØï±áØ>:%³w…‹j!àn´a£Ùf bae"kºðä%š¹ bb6+i}Ê ®¢”LËNçlÚa¿ÄM[ EP%Ÿ†röUlmÕ<³}…³Áþ×–ë~¶yl8¶‡nŠ:ÊÃZ£;Ê_*xq_Ä-7®‹`x~V(†æ_¼|ÝÜöxçÖ˜í+œ ö¿nˆ$ ó$•ÈOÄ¡¢ÂÙ`ÿë¦I"Òw Ê#=6ÈW¿µõÞuù6X2-“¥æ)TJå5ŒŒ#ߤŠTÔÖÖ6÷2a¿µèOúJÀ#b¸/­!ÚkùïW:–‹i^cOÆŸçǰûï@Ü¡ù—‘Aí4µS3 ½^«£‹í©;iM’YbK£YhnYçúþýþLì.L§Q8E;^Ð<…>¡k:÷Ldš±˜Ø¶ø[àÎ0÷½nvǼz Þôê ‚Ó‘r%ŸíÊÆ =B´­äÐ~,r#ªËf³¤y£¢vDá®ûinS0LÒ¢“߉häP¬}QpˆyýeÀ1ìþ;w„àmÆ÷lÆh—%z8:;Å"Í=zþãÝIôHFùüºçnוæü‹ 7p9Ä¥õ t›¹Ùtòt*­éz¤¡xûÌž€'6¸yUL¼Ð£ÛMÛëfÄæ®Ý_Et)„e.‰£10.SpœÈÆ;3{i‡†2ÑVAu…!\Ý£<~úŒŠBÉhW¸·1==µ¾¾1;;³µ½½Èn/7”Ãõ*޳¾±y`ãÖý~nöšÒ±\ôo^nq »ÿÄA¬N!=ÚNt›KeÒ©°AN ü•Õ74åR˜Ë„kC·X䎲^¾|uçÎ-2ç_YY[X˜G ú.C/ºys±Žë«5næ(3Ÿ³ž=8#ñÄÄxx†¦mlÕöº‰»ÉO&IÙ¿þöÌ Ñxzjéß}{Õÿþè_ÈùYcX]CN°ðA£h cÙ,µ ¤Këaá"Ãj)²yQ$wƒÍ‘ÂۘШØÅRѶ‘ˆÌd¸üâåëééÉÆ”Ù‚)‰ûâ óús‹cØýw–¸™ðt3šY[dõ®Å jÕ1Ë& ]ÿÍòËûŒ+z­e9s~ÒŸ {£#¡SåÉåÈÈh/Q;N x;ºn÷öb±æêèüm¯›Äjò“ÉÄd aÛžŒ„o‡¦ÎÚ˲1;‡ëC8¸›Aµ–!( …s®·©êhQ¢R.ése‹Øâ’\]]C‹)ãÈ£œøþa ¾ü9_ú (t‹1¯?·èÕî¿qs‹wLŸyŸ|? xì$ôî€5´Ö´š–-Ú¬Þr@N ¹óìì ™óË-\è<ë뛾¼z¥y^ ¬¡TÜg¯^ ´@¼eFo¹ã%Ÿ½nÃìÞ«ŽhŸXÛJZI."7M¨©UÌÍÍÐ k.!à“ž’ÜK›ä¦k˜é¹òÛ!“(K?m Oì„ñ¿€'…>pRæõç=ÙýwGçb5—µ?™ð]lè\hâ2ÕÚ_e0Þ©2Ô½qü&y·(d+aíâÂ<¤Ï·oܨ×ë™ÁtpVNlÚàyuM3„¹Î ôr£¯»Íùƒ·½—k QWúv°‹%nÌÝôd¾YŽ6†¦o²d›žšâ…øöìì þ}’"´Æ|KUPQblÈpõH¦©ñ‹¥\üw³¼"º7ÌçpÉ uñý*[jqRá¢"öêùV²ê:è½QR&”+:v©\Éår¾W·¬D4ã8MK6±—€–òi±ˆ E$íÁ’»²X$kmüR[¹¿ Ž~¿mØÿºÛÂfK dO¯žü?°ËËÆ@9YkK5™Ñ³V³¡üRÅAUD]Ip¼¥Ninl)1zWìó†ÇZÛ•%ÂÅ:l±Xz³¾Ù—5ú¨áœìr‹îþÊç"âÀ×ÍZÎÚ<6°–o‡(½2±Éo¿on2ceõ/ÁZ IV$ï*zoÑ»jkxmU((\8ôKÜìóÖßìfCª?\Bhgx".C&Ðnª8°)*_ —*™‚‚‚ƒ"n… EÜ  Џ.Tè2…®p ŸH…A÷.*ýw´?3áOÀ0tMàKÿ4…“Þo­VwÜ*ày^¨œË(œtCH$R©TLÓq“ÅX—®MÿÊ8>qe£3WñW­Ö…õDÜ4€D<‘ˆ+ú¾LÀØ ÖÞ~¿SqÜ ´˜fœDDTr„#ùgèÆK׺°#ê^ày~ũ׹㫠ìLÃ4õ¸i¤’èÍFÜìùù4]b™^X{¨îOOóH¾Z'• ìØÄ ÊS»nÕqÜŠÃy¨?àŒŽ §RI‹áµkè‘7'ÅófÝÉæ$¹ãHéýSÿþ)·Ùޏ È8žHu—xhžÁÚ?îa6›H$¬“xVèÝÔrüÀ×¹[ön{ì\oæ~9 êaèiÚ3-­iqM?`ã¹[õ>÷;6ާÆ.,RÉÄÈPrb,ƒ#úH¯—‡pãω›»/;ÂQ@ò«"Èdtt!ò1v× wF õKé×È÷}<.¯Žf¦áDzæ9 Ç'n°v¹\y·õçr¹,%œøAÈmâŸ9æ'Ö†$Ò`Üõ6ˆÙLû&J—¤AÜ*ÞN,v˜Â«KŠo+°AŽW„ïï@¤aÒ6%ƒÆÕýÅG„Í)/¦]»6“ÉdFFFú/–ÜáïììŒá³µsr!š*X»VÛåmÖ+S¢i‚µÍDb”s·ÖÎÝï ¥wŸ®>ÛØv¶wê'ûüϹ±D %––禮ŒLd{½<ðy;q*%ÑÑü#¢sàÉBg¹Õ2ÍÈÄÚþïñãb:&B<.ÓÐO…¸›êNÇk—Êe„07AFkœÐyõOaZÈa¨ø ßãþšyÏÑ5}p0:5ŒX”.¹<‹•ËN&“Ž5bÆáo¨KŠo+Px‘åƒG¥â¦m»‚Û(•*##Càmãr5ˆ“ž·&dm°öÄÄÄøøxÿe¢ëÖëõœˆVÇ{Šzk»îÛ0Lîî>ŒÇy·ÒuP¼>4t—±ŠÉÂ1=Äp-.=ÞÐ’»v#ŒYU¿Róã©$J7í­~†*©èµ#3œãâ¦^³#î$™Òñ+’©áññÜWùá^oÀ÷êé’Bÿ^ cá!ªÇuÁÂï¶¶¤Ø'&Äß±¶•L¿‡—H‚¡«âT!Gþ¹þ6Ÿ ƒÎNIÜÕZ½Â]ñ–xåJ>•´Ò邯M3G½ R„`%*‚.ÁÚét:¦éIk X,fÒ)ô‰çô¦ Lšð†8Gè¦W¯Å¼ù"U•Ó<J4Ç©¦R|Bg† é[=š™1 }6Bî{särÅå&¦›hÈF"l”u#^«:û«£U8UH©ì™a–¦AÖkONNö_ æj8noo“¢mœÆ…øš-¬TÀ×>| '•J"œ!7_:DìZí£ïîí=ÿÆjº®\µ’´íLæ6Ú,xüÿÙ»榱,-Y/K±e;qçAx&ݦ»é)¦gkf«¶¶æŸwmÕÎÌvQ½Õлš&4ı,ëy%íwî±…p„b`s†¾#]݇bIßýî¹çž“Ó+§H@7§=ŒV;ÕÌ&^%Ý,lR“Ž8I³<ˆmUÄý WÁ]>,v릩›VÙ;` ,ÎÙ3ä³E&>·8{휨¿¢Õžë~1¿¼üÎÃsGø­ž xú,T¼ÆýgM-<¼Qõ:ü­kJðÞ7´ù)JÇž×ßÞ~NÁ}|ÇmμµÊQ€hˆùf¿¶íƒkµç-“¢6àÃÈ)™ Ô¶m'MãêRCFʯKžDJ‘Ûu ®ä-/Fú ,>"¤¨„3†Tª¡‘ƒ`M!¸d,&Dvu“Âñh¤û #\#'-ˆV(™$ét'„ÔqŒS¤©¼ƒ»SøÉTÓœÔêœÊû ³Ê?PEFí0 Á‘3;;Ë!ÅÒ¸‘¸…ðÁ¸Áµ›Í…<ß°mŒ ¡®Bm6üLZ½ÞúO…è÷=Ž…V-<†¦%cáÊ÷)'ÒMÚðýv»5øN]¯tçº Š®Y«Ñ£¥f³±_«s*ï/‰dOLœq|xì~§ŠŒÚOž<ÁK˸y æc<î3gÎ(ã Ÿâ­>ŠãÝZ-²¬H–ÅÐ1âø7Ë¢Û0êxÐl’D7oþtíÚ¿ùþ¸%Õ%5Åã§=E*%Üß®-ßZߪnK$•ÅFãD¹’‰«†Q²~úz“±B£,Ì9|ZjBØ …RISª½s Ù~áuZNƒg’JÜ¢²÷Ò¿®ñî–$ûEZ”öŽ|ö¦Uw`)>`Bíü0îà¹MiÝèƒúÓ•(¢ õŽd˜*'·‡W#AÏ÷özRK;vO oÿ0ˆšÍf¡Ô0oŶi˜Y>D†Aw¶cšdãÙëõ0ƒðý!ж õ'Ožb‚%i«ÝÁ â}×uAç' ãs(g—VMsz_1¤`Üî´ÚdꯀôèOt7x#m×1AhuL î5­gû™Ê‰1n–V«¥Hõçž‘b/™¸B¼$‘Œ_Ñž¢hyÞ—*ïPÉÞY­À.I£ÝBîžø¾>4ƒ=¼‰¼ÀÒ ”dTe2ræ»Í¡T\”7¤FN™"µ€¿¬`Ái¯Owˆ*²M m Ö\˜…UçHAç9l”½—™¸ÆkÜ]5nd¢wnÍ<’à„„Ê(£|ŠïÔq¦ïSwb,)3÷{šweDFP8õøt¸_wiZràwÆëÞé´ Ã £¸Û픩¬‹PuSÍ´¬„4ÈE©ŠV& ®"ŒBüI¢“Æ?B^˜yTª3ãD4˜_NÓõ¹¹9´ƒ|¤šþò'Cþ™0t¢ÏȃOn*\TG^†Âuº–PÕšª½Ú]A·ó±™ØÝi·’$6cËÉ©Tåd·ÂlCJY¾LËê<pªª¦ëžÇÀmY…¡©J‘’ ^¢¡"tAD#ÜߨŒi±¤Es“}Ö/_Y¥Ûc˜Þxø‚/ ƒèy¶Õ¹ÿð90¸|ýÛ ¥öY!–‹¤ªž¹µ¾ÉŠ à5€—þôíydâÒÆÃç@Û•óÝg/ÀeôõÓ­‡LœËÞY ÂhŽKÌÄq ¨¾Ð;šE±[RŽ;DÅ•ó_€æ׫ÎAˆ€Ú?þû?~Äéýÿú×Á%`÷t}'àÆÇ.]ºhˆp—§Ugî%??ïGdÜuËTUpµCº£nÛ¼jWZÈ´Ú ×"+vÜ(ãJªV'Mw\·ê±œáRÅyf‚þ€Ë›1EnÑiÂùí¶K® dS*MT(R'ºŽc• ?’8œ(¬Œ†Ò¯+…F”©¼®áîºÐÈÄMvùJw iŠ<×m¢—FÃùüÌþ§.'øË*xW××בâù‚+€G­­­…!…4{þü9¦ðhÐu•ÝÝ>^gUµ5-êZ®d5…H]Q=̾âôE6è‡Aé–Ç ¯¨&™ó2X Àb¾Ä|–5ÑÊH³a-t]¤%\2È6“3QÀ ŽK€lI™GÖ~Èij~cFT{—‹¢[hœÛä2Àn¤’Â[’Œ 9~ €à ùLjÚ, ÛøïÞ½Ô~±³Û›ÅñâÂÐððÖ÷B8²9nbÚÉHIå)ø`@ÁJG±î¼þt»ïy;;»\Q>A]†Ð›N ¯#7Å×iäaË? a¹"  6ø©Üp“•KylÔi×-Ï(Ò ³Ùlàí+ra´ÝÁÀ Æî´]À±]ºÖé¸Q8°"n¶…Ï¥ÙpXENÕ3¨â6gß7ñN6œ( p…¹²sB]þ'Iv « Rƒ\%àãT«Ýu÷kèb8 „-×EƒJñù,d$rbŒ[“k 5×-S[6cë@4˜¦þââE!šQ´n[«v=2µBS3ÅœÚS²v– O®óøöÝÝvW…›$b¢;¹ZHÚg@¡L¶0Á?Bí·t'|Y!>ßmòÿËu—×!YuÔæƒr¨öÎ*uVšW[N¥• ÆfëŒû@mð÷’¶‹¤ÒhŒ?2Æ 6R#gqq!MÅ{÷ptáٰءà×¼Xšâtnn9z%féÎî.˜.É(Õ)Çel¹MN•ih½8´vR«:½…]™;$qœ6½Š u0Ggj»ÝÒ ú„Àz³,Å“ üÕt"½d$œZ hª×­BQY•‰8‹K5Í(srŒn`¨°Ü¦J×^) eÒn „ZÉ7æ½nÓA±,ËÚ­&­&-ȼÚHcI·1ºX’­çr›åçcöÿ1ȉ1n2…’Œ›wNrõê±2 êõFQDµZjœ$i¼mé8K¸‡ôŽBC¥ð ó³0ŽAZc!òrå:•¨ Ld®½¹µ§ŒV, d‡#œÕ˜3¼>{áµI»Í ƒØ›uX¡UJy ¢ŒßþŸÿ½Í7L«©¶ Æ Ò½±ñ;®"ßm5W.]TdtÓO ¸•—‹E¥Í&›ì·‹ñžÉ—Uð ‰kã ϬJ-“ïz®ÕÔŒvç@½*uÐ`Æ™ˆ¼<E¾TEA&«pY’sj¤ñ ë 4B~'Èé•Âd .â½çB*" é6RE•šT¦`œÝNãp¢;²7Ôå_@zŸB•« 'üx>{9ÆÍ+˜˜7¤LX•ÐF_IK}7†ø0Ìçʳ­¿+¹.O ](C¡à¢Ošî$Žz~û¹Wáƒöì¬@ysÌ^‹ù_iCÂ@ÌÝ EÅàÊêÁ´ÄM¶ÞûËõ•ù®›Ž¶,¬Hôª>“ÀÊšëêAÙÝDïÜõžô£‚^þó§¸ÓrؘäŸ?ÝÇmÜZß¼t¾‹á ]79>. ÈÆÙŽ-Æà(Áœô q2åM4¼êxã÷jf¿ïáö=ÚõF/.,ÜýõÞ対 hË!Á<æ @päßßx€1‰Xù‰k½ßcÄcCM‚iÖkçÊÈÐr²Ka¸×¥œsH—‚SMÕH½¬‘MiÆOù9Á4ý+KJú«ÒââHÃ~`á±Ñ¾´ -¢ò6y”ÁQA•ÔâÀî”цú±…Ì)v«œ ãÖÆÒï÷ñá!°ã®n›TèEÅäÓ¸ºÈì½ÝÃÁ®ˆco8ƒp¦äE&QV³fÜ¥Bï¶Û ¶ÝÐL3”@ÄúÀ1+%¸M¹é\g`(ºe¥oFWÈCˆ ‹S^œ”|9Aɲpi)²ÌúkE*ÐËÕ˲;î¨<å®Ð8þÿú•ñ-pï|?8æ{ãc¾ûÎ.JªÂöò)N¦ Oõº½_›K+²(ŽYtMç³’ jýÜÙ—{€=¦¡ï Ç[ÏžRë È–ªïPT¸¹ }("¦u'çï=Uaø>¼ß€×”]#òyNj¬~øÂÕ*ãZÕt²…S¨þpr2Œ› œ9s†¥z‰›év™©i¦®74­Ûl\»w/ôöÔ0ŠÈ'­ŒSIYD¥šžÌÏw;åf³# “¬ÇŒ;Ûb³ŒtÖ2“5Î%n*ãíŽ ddmJÓ= Ù¬çÉË1€­ý â²»²£j×Êhsξg¥Â=VÆšw.#û:úrŽ  ¥Q¯·‡ôÅóm²ìMfÖ@í½½þЧ¥©iMgY™Sê¸q*ß 2t¾té"мÛó<¶–˜Ê(Ó×1Êÿg91Æm–.ä@^ú*d—¾JªU@º§“¸ÉwüwÏÛMÉq;òÎ59£ý\§ Þu;Ýîâ0R‚ÄøÒ¾öw>Œ ÇâZÆOMCoKóýåÍÖq~¶û»÷ç!ähæ%˜¡â‰€M?yúÔø±Üâ˜gYMÓ&RÌa‡ÃРhÒV‰ãÜõóV6;¶ \^\X°+V%­­@†Òþ CŽãŒ–RiÅrŒïÞt28fÃ’) è)pŸÊ4åÄtÜ%vó.×u•W¸÷U!Ÿ­½ÓhœcUåîʪj…] ’—+/j·ò¥…­eò<‘›0­fæ…Y¯ÏàÀ8¨;³¸@‘œŒx¾Û|Úû>Ô>»ÔÁ°q´½ïä‰cêöv'ÞÀ’g™ Ïqq<‘ !4”Íf³^¯Ÿ0RwŽ 8¶1øÊÓ¹ÙÙ $¢}ã.ÊÿøÝ·xÄÈáb¬ÇñÊ¥‹Œþ'yÛ,§À}*Ó”“´ã~׊ ë¥ßA6÷.yÛû?ך‘çÙßþº²µmüV*ú šiDZZ«ÙªŠÁ¢ ø~§ñi*2ÖÛ¸G³ ”>æ´ÕÕ/·žn.--ùƒ¾3Ó †ƒSß÷š&¹jùVžÜr%7ÕÅåË_Jm‰2å)Ü™úQ,@ð¯ÿp# ¨7“œ;»ŒzS1)QNûT¦+'iÇýžA±Q±Óé€QXQ¯enC¢©gO·~)Š8ÏÚ o)϶¬¯¾ºf˜Úܬnš¹Œ¡ÃÁt(ªÎD;<´¤Ij˜•]×ãÓCn5:B”'gi¢ÃBä/-DÐÛÉù*O,¸)*,Ýš—³êÜ¥(h5x}fùì^ãÜ 0z~þ‹×¥aà·Z!К…'ܬÚNÓ—[¬ËSZ±iÃ$«P\‰ìreR€wcÆ).}bpªr,øTÞG>fÆý®5-×5®]Só߬­)JŸöÇ»ž—œ?ãïìl^^킽9Žže±4aΧ­ëÎDSìJ%I´ «§‡qY>ÑBY¥ÜÓ_Ýô_VèjˆZI’ÍÔk¦®&I$ÛIx£)Úá¥Ýqû 7NÖd8¤Q³† ð^\:ãõ{³¯|¿¿¸°ø†´;7Eiê' zŒªfî7òpÿ¹uút7¾Ÿ >•iÊ'ĸßZQ?ˆ;;?F†·-ËÉóDbtdšÅâb¯ßÿ13a F¡šv³y=Mófs©Úº,öz½G;w€ÈXyûöí«W¯âê!µöWIÆbŽ¥ZÞ¸qƒ 🹺ºzóæMœâRG rpº¾¾ÎŘk¯Ñ(¥à*78rnA’°»ÑhßzýÝF³…òúÇd¶±_ö3ô)Êû ¦xÁa4ð‡¹ŒâXÓjí–+DýÀ`ÁÊk\)AÈVJŽœ˜Œ¦*ãüRÍT^öv*Ç&!q>rÅLæSÕ¬^w³ŽÓª|“ãX¤q’äº*ã%ùv´GñÍ×¾û›ªúU,fz  DG ‹ ‘8Å1oš`ÐåpT ª3Úîîîâêìì,ß0ÁzÙrY…y4F œ"åfÔŒé<Š”ýr1Fàø÷ßb|cìÜ⨔ôÝOv&o‹ '÷‚~O!¢(<–7ðÂû†Žq÷PHAÈž½8´]õ{ ƒgÛ;9¹“8HZF.ô⌃«ê~'¨ºR,õ*/½¹§ìá…Ó~:(¯ž÷ç$!q>rEiá Š=S« 0ù uÑu¥ÈôLà³Ì LQ³Pô~œûÞÌ`°gYݲ¦Û`+P)š·w‚‘ƒK@aV\p>KyÊèÉ(¿µµ…»ÅA鯠®...–ßQY¥ è‹w™îÿ3y\á_€¾ír?êbÜd`Dž×Š‹‘C—¾/\¸`è5<ô"OU¼·ùKÒÍfí}Ï{±³kKÃunü%ÚHÙ¿b ÐöÒ;¿þÚ›CÉVËEB|Ï«n^*Í'Ëm¾ÓZá=•#ËGHœßZ‘­JªÎ»«)H“Ü^‰yt"ÿ6[*±ÄnÌ-M¡ø¹¢û¶èŽVoÞ¼É`ŠcFR¼Ø«««¬²@æÕ«WÂ¬ÂæSV€€esøá‡µµ5JA›"™œK,–NI ŽÂ¨Âm²VÃsçk×®U‡RØ%"ÌèÙáb‰Ýˆqƒ!â·}øèÉÿµ÷u¿m${vEvó£)‹´>lql+¶d[¶¯gì™|wcÁ`³oyÈS²Hþ‚<ò ˜»@ìã>쟑‡ ¸› @î݇x7koözv|Ç–ÇöÌ•<#Ùú")~7ÉœªC–Û$E‘”ØlIuÆèiuWW›ÍÓ§Uu~òåóà‡¾û‚‚†²äk;NÏû~&" Ÿ,8·—‡è†ÖÆ:ne|ñØu÷ÎZ½673Õm;^ă´•,˜rÿ^¿þ>™Lb™PƒÛqGf³9lÁR…Pd“PLR¼e,é×åº9õF'!—ÍO¢ÆT ?V8¦ŠK+ÑK‰ÍÍMÜ}Íy:Zk9! ª2Bì-^`š³ꯪd—üSó Þ ¥=à `^°-JBP뀵 ”äX’”q"²9¤·&wNf¼ëÅ¡<Ây… …StëžI12ÅMkæôÜìÞ^bºz¶ÏÜŒÇP·`6°¶Lá;øž>Yp½VW‡0´6Xû‡äl"™wõâù…GÂLw “SnW?´©,»ô0´|ÝÕµ7‹ —¹,*ç\Pöó•´\¸±t]¨y«kkPÛ‹ W°1eXûXáØ)nž0¹0+ÑËlvovv6³ûÜ [RM×[¶7eÅÚ9ÅÚ•ÝŒˆ2IVS­îÀ'ƒ·Y¬P>ƒ=_¾|É'P×sEG¥õ>¾ÆF4ÎŰ wéNMb·gç8î)îF£±­zMZð÷“ýØÁVÓqeªƒ)îá@¹½²òÂQò9™šÄ:gw‚·l:}^% ’R=“ÉBãÛ·oÑkñÕ«ï—–®aËüü%”}ßNÝj¯bp;Å­ìŒq«$–2¿YµR 5Êeù.X•Êš¬í(­•l¹*¤îi|(¹uÿáÝ»wEë9ˆbá 4c¢%й ’àÝaHæÅ.´“}ŒÜŠÇQø“=œìN8ªïÕ«WŒPD§ÓiïéPLS3ö¢fó6LcDŠ›é 9Â`ødÁÕn±Œë‘ÿùçŸñ)'·m™!Ax’SAZa ÎGŠÍU¤»ËÀFÀ±,ª„oìÕTÔÿ½AÐLWŸŸ¿˜L*#ã1Ø 㨸±Öî–ÁòL­–¨Vì­­¢›Û‰$J¢àJ}W¬W’=pyuuu;²òG¦_øðä\¡ø‘Ý’d[Üí«««¤r0,—Ø‚ßÎòò2–ø““؈u=Žc±¾­@Š'çâO¬`/ûq¢û÷ïã$q¯ô¡ &ô€÷ÏNœÔqÜÂðÉ‚S©FÜqsÙÌ?º|¹R©ò—Ö>wn¶æÊ~çü^V' fœÄu]êîjk,`¢™ˆ³¸e×j˽Å3!U:+.´¼Ù‰cÁÚ««o Ä÷s4,Æ.œtædIJõ†S.–öŠ4_­Ë¨HH±¶¥âÚÒ'¯ÖE&cN"{o'Ëð¬žîÈÈ »DÆ ØV´ÆÿqÝû'Çöñ(=K{ðàϲ¸¸È9ë(ã=„ƒI¼»t«x¼v"’®R±x<—ÝÇàehêý–;Ûïbqg{{Ó¶¬j·€AW Ÿ,Xö䋸â-ÛJÏÍqäˆÔÚn{hƒ©““©3™,Óxåa§ðó•*Û´èJ&'3«)§UWšvÑ( 9‰õYeJ%µ×âúúÆÒÒõW¯¿Ç®ÅÅ+ø3>?îëi0Žâîq mŸ7ON~úõ×·—uJ劌b[âý2,— †ÖŽI«‹éxü½E‘î{ôR¹^×}•M'Â¥êÆèÙ÷èí*äMÇm³49ÚÏ{HÛGëÚªÞÉd³-¯Å;U·zcéävÕÍÞ¸~]>’æmë8!€Âyè•…÷tµZ»s÷‹\n·‡%·ëÖ¡µÁÚÓÓç4#wò&×)«µ¸î~fÊýؼ÷QŠ»CÅb žÏg±ÜËe–ն„°{÷îG\Ìïøý…tZư-c’Ñ›,زB`éè™Ézk²f~/«Œ‹]ï, éÉ"í Æg7Cî-NM­]Éé¯È!(ä—Zþœƒÿæ/]äp@¡Ü±å†rbÔà Ž(œ‡>PåͶ©ÕÂõº ÚR^%’ÐÊ+^ݪÇcøÙG üê9e§J¥dY1×­Ú¶ô¼m[æ÷ö@?þ¸Ž_znobÍwŸ8l²`•XàáÙ;YpWÅ–—í|èF"ZþŠìiÔù–˜o*›}›än(̜㉠çÃ1ã8ÑpØN&SªÃ7'ý¸c¡£ü¸O Sï@YÍoqw-õ¶½µÉŒŽSS)>™ßo_ð)Yp§ƒ"×S©îö‰ÂÌ£9 púÀZ ú$ô¦ZÍnm=¦w¡P­K?î»…ÂÔôô9 émY[úqc¥»wWóUp$gW8BZÌí7ÎOÚÔeÐz½Qï?o­Á’xLá¬ÁteÌ[ÆŒ:YåÄÄ„NVɱ°õz¥\ÞvÝüÎÎß'³Ê;K?îÙÙ½ï¾ûí­[àn¼:µ´ù„ùDbƶÛɱ‡ùªŸ_Ê@WµóºÉ‰ ®›ÍfT6ôîÃEŠÅS7Ôj†@ƒÉ€c0NP8{A*‹:áäôô4W°‘|m%‘·ÏÜMÖ~ùò%­·‡8õñÊò~LaˆÛ`œ¸â&kÿøãTÜ(Œ?™n˜Š›óq¢Íò#ñãÖž|Ún[—ïgK›g÷~ÞÞùñB=Ÿ¸«G…û=QŽK–÷c CÜãDð7‘J¥‰Çã¬D–Éd¼©ßGäÇÍç´{åd¯w?[ˆÞÞÚÌDÛžp`¸^¶UHc©®×ð¸dy?Ö8 WÊ›÷²~ú^¸¬°eÙ I+hq¬®@À7'‘ᕬ Ý%ÝSé3Skujðùqooos %Tȩ́ ¸õfBxòä ízhxª¥g7‰ªl5]-¼É¬…µ‹7gÕwVˆ‹@ï΋v\²¼kœ„dÁLìP(â÷Ubµo§;,ÛŠÇbø9…ÂV,Q¯XaÀ· 3_äiÏ@õÝ‘7íœÈ¤ØKïìÅÅEÚpë-X>~üKúkÓyŠ.Û$ý›7o²XW ï‡2?–ô6ÁM… QI× _¾|¹¼¼ÜõÉw\²¼kœ„dÁxld:žÍ|Av"…CaûÔ¼sá ''E½JuW»Ÿ\qëC .™,,&”ÈÅá4%~÷î]2™7HêôcBYÈr£w †2Ú_;ÚJ]FÏnj&aØÏ›=¢:å#'XîW!*Õ}ºK–÷c ÿ’Óc›S®šŠ#8}Æ­20_fÁÚ;;»xOÅ+ªsjî€H(\ukéTJZÇ„q鎓ÜÇAq‹VGÄ)ÿ¤9¶8j GŽÎ[[;õÓHf±¡½?)=»ÙxýgW oíà*<}Ú°»­BÊí®-1î€>À¿dÁ:ádU&Jp9»]Ù¥6p½Ñ@Ræ„—/_üÑé¨O> <ðêõªã$ʥ¸[30‚¯¸¥FQŠ7˜eY¼?9LP3×Hý¸©p¡æ4Ȥz Ô´×_›æ®Ïž=ÃÇùê?{[xëLíS-ô¨°«·e–w#H º¼qóf<.ÕGµZÙÚÜ´,»3Y0Yû›ß}«ܸ33²[ãÆÒµ#É\¯7ÂJkƒµÏŸ?OtШ×ð–S-Ë1UÕJøØÝúWÜ`jé…ƒ¹.\©¨=Ée o\vèîV¼{$~ÜÌÒK®*~óæMz«²sRo¹ÿ>¶hm–:¦[7þD1þ¹Ÿ…7ýcyÒt:ÍÑ&ûUˆe× h·8l²`ÉÚ7nâË>{ö¬Pæsçç*åîõ¶dÁ kõ_5–¿™´úå`ð~r ¥ÇE·ÙóÍO±p-k_¼xqÜÖ'TÊ%|¸õÇÝaÛlÅmµÉdÚÆqS€ëi“bd~ܹÁNH­ˆÛ ¸»nÁo[¨ßu¶?Û,¼µˆfìb쥳B=¥Fqû€Ã& †ÖÆ÷wùòeÆûT„|­æò¹¶dÁ ì‚LñžS^P6-[B&wg.›Þ¹€…Ê›Cf76&'WÜ,À<“m}q¸ AÙ”ÛÜ2"?nþÉÐÚ[p÷ØÒæÙÝ…·Fד8Ç(npØdÁñ¸­íÈ€µ¼è¶eÙ–|Þ é_òA²`Ñt´SIy³Bheú1{}ým:}þÀ\ÀÔéëÙ·‹ —MbɃà+îÖ¬Èæ€WíU‚;S{•°ðˆü¸{´°Ó€{PKîQXxÅí|6ÇÌ“¯^ÿÐtÓ†è.6“˜ x}}ŒÏ7†µO ®¸ a1FHø¦ØUl?nÂ(npØdÁáp¨R.ו-£Pß™J|SWÓÞ' &¨¸ç/]Äÿ®€ …2ëé'p*•Ô•Œû¢®¸=Ðøq £¸}Áa“om¾›;¾XȇÔh²v±°gY¶7Y°³¨ÐŠÍôïwõÌÌ„8&‡û CÀ÷@úàÇ=^«î>a·8‚dÁårAˆ³LrAÖÆºÝï“ æœtftÎìÌ ˆÝo.àY5‚иO‚)œ5‚æÇÝ¿U÷)Þ(npÉ‚x|/·ÛJìBkËñ‚É‚å`>•Xgæ–>sÏ_º¢Ï¬›ÎÉ… g/‚æÇÍ•ôá¾ýZ>Æl FqûŸ’ ÎnW)€™/Xoùìî'¢\ÀB ä´ÃÚ'WÜAóã›c/vнGéiñ³ˆ]™¡Ó¯•+^¯í#$w£¸}€OÉ‚ÅAù‚Ì,>œ€cp2|Å(?nP6Šmooƒ µY¶ö„"sÎKÒbPÿdö3ïFmû™k£¸}€OÉ‚ÅAù‚ N'®¸ƒæÇÍYïBq7͵¹k~~b/*$k´ö~t¤»!­´©¯Y½¶QOWsí!`·8´‹©ZÎe¯àVä¸Àce m0FhWR1¸pöçÀCûqWD]-Á鑊ÈVû÷ãÆëXí‚£ÁÎhöÍ›7ÙrN‚ÇJ:~üø1,ØþÅ’Yhìǰ8Š1…êdÊÆÐé‚¢=­*îB~Ü} kc)3*$ÎÈ|fa“º¬_œßjKeoˆ„ÂêAR«”Kãn‘O¨V+ŒM…B¡q·e\qëC‚ãÇÍs#—!üI?n]•ÎQÉ  ªÕÎÚøGQÚ³6fW01îc„“@ÜVXfINŠª[K$œ°®«d‡»C-Œ»9#à1n}H ü¸¹NK?¡(þáÇme´Sçg‚Ùµ³6{YG×WdbÜ>à$w8š˜˜¨7BéTª^¯VËÅãë–7(¨µ!pðSQÇ,H|Å(?n}ºˆœºÜ M‚ÖüÎzð‹ÀdäšNR^gmœÂkð­ŸG£¸}ÀI n™'7l¥ÎNáŽqœÄ©vB¡®æ:Õq\qÍ›• `lÕBG EÖÚÛ¡m¬ß»w+÷ïßÇQ¨ôÖùàÁ²¼¼¬í¼Áã½G…£¸}ÀI îPHÈ<¹u7Ž”K…jå´ä-k}ü’ÚœªzÌ4KÀwÐü¸µî¦½ªVâôÑFÆs°]¨¹Õj•“|VígÞ­G‹ Œâö'‚¸å r¡º¤¥Þ<…_?ƒ$Í˜Ç WÜAóãæºŽ“´=x À)½)É…'ÞÂJóî#œ€c·8 ÄÝQ~j:$O‚¯¸ƒìÇ­¾æÓH«õ¶JºbfÜÂ(n_p0q+­!mW«•r­æâ­kÜm682‹%ËŽ¸.Xià–.9 Ùû—ÙÝ­7¥ÒñË#nÐÐÚJÊ!àøçˆ<àŠ{ ÇèÇ(Ÿn£¸}ÀÄ =†ŸòùóçB¡0~Ôj°° %ŸÔë hmP6XDÔ]ÿ‰;˜ÂYã¸øqÑĵFqû€ˆ[ 1ª×ðÖjt1W08ö¨‰ºœq)Y{ ÃÀ(œ?¸8ÇÄ»Ÿn`·8ˆ¸Õ[´-ÍÿŽåŒjƒ~ÐðÀçS\q?n”§ ÇŠÑ›n÷€QÜ>à žF3ÒÎ`”¾â 7–ã|pÞŽ£8Í}Ô¦Û=`·0CD Ɖ€+î`úqS\G",ùè¾íœòŽJhøhî{÷îé±Þ#ýNâö§kv¸AÐ`ü¸½èÓ›'âÈjí¾íØ‹2ØòèÑ#TõðáCmÃýòåKñ¡ƒàˆ`ü¸}€QÜãDÀ·>$h~ÜüÓ;±l=õ@ž3m¸Ea|¤0ŠÛâ6'ãևʻÿOÊDe´ážžžö§sÒĸ}€!nƒq"øŠ;€~Ü´~e‚`á1ƒõÚžÐSÛpc®£†QÜ>``âVÜëÊÝB:@w-cÉ™ñ!i“RÖ}ÇͲÎÀ7\qÓ› á-L`Æ—lç¬ÓûÁƒÚ†{yy™î(£þNâöÃw¹\)K€êRo'eË–‰Äðœ…-i“=މÔÇWÜÁ÷ãæP?~>ô!¨m¸Öt»Œâö7´6X{ãíf¾ §“…Ca;òA%øÚ’“¢Þ¥ÎN‰º[zxUA Ve—M$b''¢pTŸ‡þ:>x˜š{W5܉xT¡PÄgÇuÀÇÇ¥H$œC6õø"àŠ;ø~Üìl¤HgæµévÅí†QÜÐÚ`í] Ç ÂÍP]¥"ošF½Ž/`zZ& …#Ln Z¬Éæ\ÅÝØBÚJæ”¶Ôy\> q˜ÊÛØÙ»E-]ð¯wo k~v.3Õw¡žÓIÜÁWÜÇ»üŸþn·œ¸ °ð _¾|%™LòiÏñÿ2*×h¤Î&Uì/Q.ôdíl6ûêõ÷Zq/.\Á ¸û¨h‹”ŠS¤ÓsnS} ɉ¬juíÍü¥‹š›O·JÖ^ߨðî=°B>·Ð<|ðç+ßa‰õÛ·oE\;Á‡Ì)CÀ÷qñãŒâöÃŒ*©×aebÇA7 ìa‡ÁwöâÅÊüüçøæäl®Ê{XhLrVznÎu%qÛ¶?o\¿ÎœýÅ¥Pzÿ5wµ¾QlázäÃø ŸäSVµµµ½º¶†Ê•(~_•78ã•À<‹·ZnÇ•+¬¬ æ™™†zùá)¼5tF„°¥X(>ñbvffsk;•Jf²YlDÏ-›PƒÌôùà9©z<àŠ{ÐÇåÇ(Åí†hGl¾!J~ÕKöÁÊ7ß|sfB*GÈìòÒL£Si»Ü…ü ò’”z"÷©bØ[ô‚³Õù—U9 G(²ÕÝ–f4Kpwf.«)OÇ”œ ¬Ïâ$Ýàb¡Ó@yÀŸ \ÖL2Õ*«øšeP Eåòs)RN´®veìl"á E,QV\7§?, èÔ¥Žy4)8¸âèÀùqë="'~ÜÜ‚7`=¦Ç±zþŽ8ŠP¸QÜ>`øqÜ4Ÿ|úôégŸ}F›‡ª.”2Þ;Ë»­¾dr’žúi}ô•!”ÜÌô4E+ô,„:WV¾›™™Öñì½ý³[¨…â_ñÓß}Ë]ó—.â¼™L–{$áD Ôä_è¸üêÕ÷‹‹W¾yúíÇ·oaÊc·äÇ\ߨÈf$ã vK4Ÿ.U%ØßàX.ñ)$wË _°7–ä+>®θ¸pS'‘µEP…³Fü¸õ–^Û~Üü“s&q×î÷IYLOÎìÇ‹êÀ¤ Fqû€Cy•àûÞÞÞþÕ¯~õòåË_þò—BiØåå剉3ͬ•ñŠBÒ[jdµÄŸÏç’µI»àßd2 b…ÝÚÚÚ”ÿÀ¼[j]˜ihõOJ‚Æÿq¸® t)<òÅsõœ¨âìú_V¬ V™@Fr7 ©žå³ä ÖN¦&S©$øKTˆ- µ{c8XòXFidkÝ*<ï?ì«ïñF²òþŒk¢p?y¸W‰öãÖ–Üô㸑œÎÂÚo¡Åâ·õú®ë®×j9ËÊD£.ý¸÷r½µùëõ³úûÿ½»ó&“y×6%’Šç ]J(@¾øK­‹Û€íme¸…Ž%Ø.ö™{IÖÆ¯øñãÇÏž={òä‰W}w…žÛÉÑŠŒW‰8ÔÌIоuÈ hmþ¾øâ‹¹¹ós鹺Ûï ]”bØPhw}}C’/ĵ+YµP(â + †€ïœbñõë–®_[yñÝÂÂeì-¦qvþŠ*ž.TÔ»¨jØÚjV•R1k'á0JƒuHcî2¸‘Åá z!G¤Èø5¶SƒƒOçç/¢m­Á$r‰ó¦’“(ðéÝOEAùÍfô£Øa\¿pècÕƒl0„9–úÃ2@ßvFáôy9®¸ƒàÇ­ƒÞÉ“âCÇíNŸn½O į¬M•Ó–¾ƒóóó*ŽoÞ¼ÉKçu-ïhµ«W¯jiÏ]?îûdT¸â‚79Q(—mªcR-šAÕ¼ª >ôéÖ[pÚ ’}üø1dÖñÁ©´ôÜzT’N§9™^‡°Q £™Æsت'Ož *µ¶üécïÖÖæÄDâÆÒ÷ììy£¸G‰Û Ëí ÛªS;wîïû…+ XNMO}ÀÚB&« µe;㈎\öŽã¦»¥ªÉ¢b@ªop1J:jôŧw?¡U#¾¥>EI­‘UUª]³“båöÏ’àî™™ÙØ`Uÿì–¤l*‘Äê=Ëmõ$K²°³¢åjª`teÐ TòüÅ‹ùK—@èhF3öâV±L¦ä˜tlüí“ØÚÚºŠuTm¾UÈÇ€ÃúãO§çæ°ü4ñIF½U¨{UÝÀÃiõ Îxãúuùr<™b$àŠ[wËßµ¬¸;+ú÷ã]bì©&tÖÆ®‡‚ˆ±Î (†-Bùt?xð€[ £Å SÈO+  ŽÕ½‘7oÞÄ–Ä:5¾Žtc#ЦïÞ½ËÌ à}õF8ÏD— }œˆ¶à8|ssóÚµ?ÜÝÝþèÖÏŒâ&nð2^»êP:•²íP,jáå‘Ê¥îVð~D­íºU•þ}ÃHkXXOÏœäX7EÊ’Ž%뵆iÛÙK’ñAjRP«hˆ.ÉQ(²R= À¹\!§«!(_žUôÊ3êH…·=Þ³°Á³jÎKÏ5e/ãã WT{oùs4uV5ŒOýéRJP£ÙLŽO#y Û…`g#yöÔòç¬þÒE=èGa ¸[x†žH\qëCÆèÇ­S”mooÓe›Á ®S†wút{G¤à@’òýû÷y,%³žLuZVᤠ_Ú›ð}B´ÂëàeR6շιƒbÚòÅp\–r©$_vó{&Æ=" LÜÒó/l¥ÎÊí шŠ}xï~ mìUîu/q ÅV '»éïñWI“¾[Q3–äÀêdkb‹.Ó¶|ßw×Ù‰ç4çò°ª6w”®g!¼zRL³ɈìElï¦ßH³1*0ò R_u9âÏÛÔø­óêÖ¶Õïm¡h½ ˆ“>'øŠ[ŒÛdJZªË‘gÇÆÇ‹A|ºAд£Ò#¾ÈïdpfA£B÷>ÏØ5H¬ ÏK‡ª8óL­-¿©ÍqY&“I·Z9;5mÆqw($¤ç_Ý …#åR¡Z w+RR»®B„ïoOP×¹ÝVMý”<¤“TöˆTJM«ñÛz2ÉÎOèñ¢ã}«8¼ïÕÉCð÷Øý¸JöâæÊÔÔ“ïçÓ-Z#p8¶sÉÌA¬›­U6*ij ‰Sc/øå)ÕÁÑÐÝh!΋Ât°Ò–߯^½ÂQÐ,¶e%&§¡¸Í8îapâ‡EH¨—RJïw­$ÁÞSèé*5²k+åìŒÂñ$!àŠ;~ÜŒJ“¦!·A©B±<(rJ¡«O7·°¶´¨–ŠûL ìidÜ ÊÙ*q05x™Ùs ·9QƒKªor=[{ÿþ}iíPÈ'“ÉRq/1‘6Š{D|T‰bdíÔjІèøSˆ€+î øq3ØMRÆo6íʽßÎT X‚‚IÖú,<D ­‡¯èub,£;oúÇ’ÁùÔ¶àXž?w.µ''ÏÅ=:˜ÔeãDÀw4~ÜŠÙÏ•{¿-¢eä­Y•»Ú&¬·å¦ôFð;žn›>DÿÉ‘¶Çv×­Ú–%µöä¤QÜ#‚!nƒq"øŠ»5+rl~ÜLgsTèz¯šfï¨î‰Õ¬Ýy¡ö»tuÙPî³gÒ(îá`ˆÛ`œ¸â>~Üm’Ðw@`ˆÛ`œ¸âôÀàÇ=S·Á¸úCÜãDÀ÷@ŽÔ{?gíMVý‡QÜ>`˜œ“€ëÊ_}Ÿ¡~VØ ‡CrªNH <}# úD0…³Fpü¸9 hÅ]‰~Œ0ŠÛ CÜår¥P,Êa§”-[š™à¶…-9U'$NáPnƒ>@áì…öãÖ.€ôãÆ 6’¯uÿ¤öãŽDÅâ·±XBŸ˖UŠFô㮹ÅB¨T ÕÎääçøMN~ÔÆÂôà^]]åHmŽfyøð!'.Ò‡ÄÛ—ˆ%MVÂÝFqû€‰Z¬½ñv3_ws8¶?Lÿˆï,9)êPê씨»á°¥}·åxÔž!zv¯'ádµÿy†‡ T <™Ò8…½Ï³WÜÁñãÞÞÞÆ·:یljž˜ãý˜â(R‘ £¸}À0ŠZ¬½³³+BáX,æ„›3w+É€zOÎéiif G8ÁR´XÛ›ã‘64鎨uÃWxh÷@èÌ뺒Î-=m>K¸ÌTsÜ5tzxƒþ|Å?nð2ٹ͕›3_ôtïØÁ>S‘9Œâöƒw£[AÞ¬¡ðåËW’É$o Z…ÉIºFêlRMN”K} Y›é…J©~céþLÈäŠÒ†;âÚ‰D‚¬ÍL}r7“½~ý½®¤sË~Çêg Zµ¸pEe’”Ƴ·oßê} Á‘ àŠ;P~ÜD›+÷üü<Èš¾}´{åïQ{dÓô•3õýùNâöÃŒ*©×ÐÒáPêÔvîÜ9ÞµïÞ½ÃMüâÅÊüüçøò¤ò­„õ—QPéÄÀ‰i凉åúÆÛdr2£âÁ NJ¹™½L±ªèðl ¹d39ÂJè »¾þ§ØÜÚF=ÚØO¨§Åûu%¨™výù ™àåS©$ó™éª]ÉipìóWÜ"0~ÜÞy]¹™auu•zœÈð§öȦ£Hÿ&‚‡‡QÜ>`Èá€vÄæ}lÛ6MÀtXùæ›oÎLH•ê¨0mGQomm«”íÙôÜùM¹Qù$§ *Á ÖmµE¨¸³²KuSÉI.YO[Èek{çbžFו‰Õ·¶d¢ulù(-:x­æè¤*M½]™:YÁÝ;›Py °Üj&ÌéQ€®Ù­ßôÈ6Ü}H\qëCÆîÇ­Ÿ m®ÜŒ†3­0ݱÛ<²Û¦³û£¸}Àðã¸Ù÷ýôéÓÏ>ûŒ÷ÐÇ•1B9íNgÌ6z-6SɬÅ›Cí®¼ønfZfEx¾òÝìÌ4–¤ìdj’éÄH—:äÂ(¹’¿6e2¶lnmÉLcªßÿ§uÙ°ç+/X2_=3r¨2[â«ko.s‰%w‹úÀK×…z­®­át8V%Æ4¬}X_q‹`øq“¸›D+7³Þ豃$hJrzdÓØÏÏÎI£¸}@ø0ƒ¸ñüÿÕ¯~…×±_þò—BÝXxq›˜8Óù„§35(o}cBûù‹2{±™[Ëož~ Žul—y²YQIϵA¸ iJloÈur—¢þ-,¹Ïð/ïò••ÌÀ«K2Ÿ¢¥šÓéóê…@žBe)«~pà«ï!ê±evfFåÀ\­_‘Áa õ¯$'€ŸÒ›C¹Eënéôãæ²ÑhúqËpw¡X.—Ê;¥²[*o—ʶZ–Z~ܵ†h´5Lûq÷ïßç õ2M´µsˆð¸rkç?íä§·rñ†È}“¨€µ;àèp¨™“ìì¶, }J˜/¾øbnîü\z®îvùI0æpãúu™Òq@£ÐÝj^Z{éú5ºP’l6'CÞ…fߦ+³¹:uC.Ì8ì*Ð%§+è!Y°^Yùu2®Â2’ …7öÝÊDCù/Å»Ê_£dòbð8|~þ¢J#évɶc0 ®¸åÇN§øöºrc#š¤·é°Šå³gÏX„MQ|ûNâöÃ7ízq[<}ú”I£¿üòËy‰KàÜRq¯­<{AŽ`g)l Š"Õèiü Öæ¸ˆYf×=’' ÜŽ,,\©ƒv³*!o¢(3öjr—É×<‰([­µ½êQ†`íÕÕ7·oßrÜ> <Æ?î`…K¯+w§ã6çìè\À^ç?`bÜ>`â¶l)CÀ}sçÏA_øòŸ~ýäë;wïLMMƒµcшšwP÷¦x—mG^oü03-cÜ’76R)ÉÑ `ÆÏ>½CÖ†dvT\E´ÆhÛ’Z9°D6˜+ìüÄ…SÉÉÙ™,·<¢ŽÊÕ‹S0–­Bop.p1ãBu3Fª. pÆMReø™F3¼®¯o,-]Ç£»¯àÏtúü¸¿»“€€+îàøq댑m®Ü¢›ã¶Pan†+ýŸ€c·˜¸­°œÑžœU§vîÜ9Þ W°œšžÓµE+e°—»©¸Ós矯|Wu«™lú¤¬z#«ó—.a Èñ·O¾V]ͼ½¯^ÿ Žµ±QëbÅÑÖrìàÆÆ¥køý\º$#X_ߨÈfr`çÈ7™üôî'%´¡î±Náì$œVöa™c ÔL»N,¡¯%ÿ4á=ðN…Ê!·«nöÆõë2´’4÷Ùa|Å?îþUs´•׿¿¦`·½xöuÜI”Š\µj¥|àår¥\©æö ©T*11»ðš“Qkã›Ã÷—ßËÕjXmvˆ· ã³[ìì… ^W«›[ÛÐÝÏW^p0Éü¥‹:å®èÈá}®Ê²^T±ìÕÚœÁkoIÑÒìrªN¡9rœ´Ýæ¤M—ƒÿôØØ9ðT åÞËÖ×ßîf÷ÜZýÎO!B/^¼xøjÛºøâ߈¥Ò^6»S(l÷ïǃ‘#„+'%ÕÀÚÑXl Åű쓈N'ð3Ìdr?¬¾XqKÏ¿°•:+g´;N"¢bÞ;B›=ËF];Lµ’ O‚ 5{ W —2ê­†b׌ Yà òµòÔ»Þz’öû€dg·j·‚לDƒ-m%=±ìˆ:µÍžF²<—¬ÊÛTR¿0pŽW܃xü¸£¸}ÀàYÞCBzþÕÝP8R.ª•p·2!&yW/˜ï¿Œýéz‡å¥RÍÁy È{©Ï9F»í#LÈÛ¿••Á(ð÷@•÷ Â’›o-νò_ïeaošž~ÎbbÜ>`pâ‡EU‹îQû=$dîzm8OW-„ ¥žlS8kŒÅ{ˆkèõï9N[VyóÓþ[Û¤àƒÓëŠÇ²›´ÇYŒâöƒ*QŒ¬ZG#„O (œ½ðß{P8ÓýÊkÕÝûPóãÇIÓMxçÎ>Õ8±îÙ³g¤òÅÅEN£ÇïñÕ«WËËË¢gç§QÜ>À¤.3'®¸ÇâÇí SèØ…ðÌkç.]F«ã6«n]-™](%D±L/O”ç„x,õ“ é>8??¿¾¾žN§¿þúk<=zDUÞÕÜ £¸}€!nƒq"øŠÛO?n‚nS´Û)ëð…h…›9p[—ÁCˆK,Ëw†8ȶz¤ 6´òŽûžššÒÕê3ê%*§E¸8È*À(n`ˆÛ`œ¸âöÙ[´‚>ÔvÛàÖ—/_â¤85ÚÌ9“( !Ì2ÐË$hŠe|4~.Ë:WWW5q3ÐÁÞHòjܼy“ª\·‡<îMÂÐgÝ(np(“)ƒC‚D0œpöçÀCûqWD]-Á鑊ÈV{øq{í¶Q9DîãÇÁª r°6MKÀ×dg]æÉ“'ô›Õ!ð8–=BUX2Ù–|ºpÜ-k»wïž²©˜gD[‡_Ú®gÒÓ¾êÀ‹FÅ]Èï»dm, ù\"q¦^«©!}Á(nƒq"àŠ[⃷hes§›¶¶ÛfžI(enaž¶„[¨µé¾í qàOð¦ÔÑãO@Ĩ*[´"'dí#cn·0Äm0N<Æ­ñÁ[´*àeº¶i»mE‘p+­´î–܃^=Px:Eu_(ž^*ïÿ"›·’¸ÿëû–ùꫯž>ù¿ãþ€Fð7ý¸!±i¸Ÿ7«*•š~Ü¡†ôã–“B‹µ¥µã¢åÇ]oô Tj»mz•h¯Wï,ù6Kno(ƒñ lÔ&‚Þ³À³gÏxtº÷²í^«#ÝFqû€á÷o~ó›{ÿâÏÿlÜÍà àŠÛ?nàæÍ› Tá±Û­€ݺ»ZrCs;;6by÷î]voB’¯¯¯sØ_µZåYIg|UAãshÊââ"ŽbXÖy,è=ÁÂ(np¨Pɯýëýví§µ?þô¿ùíßì÷gŸØï¨ÎíÃÕoஸýôãЏ©¬———½vÛ`UH]Ð%¶Ü»wO¨Hw›%7ÇŸp;‡êOJ¥ æEyÔ¯3¢²™a‡#¾©Ð… ûàÃz½9ÂDxìÂ{\4£¸}ÀÑǸiT2º.>I¸âŽúèÇ­OÇQzºZm«í€ÓiÉ-Zá†Â¹‘ý–º‹¤OÕì=‘>VÇFXsWGï>ƒK ü^6‹CMƒ—{,cq'³»s&*¥bT 4è GLÜmÉ z#øŠ»5+rä~Ü„Ž)wÕ¿‡”þ¤Tè:“µs[ðz¿õØÕ h縓ØËe&Î$‹Åü™É4uçÒIœÙÙÞ”O²ÍM˶DÈŒNî‡%n¯¾>$kCJc©Õ4ÿônñ–äÆýÊèí[¼vmz·Áûç­í<…A'®¸ a1FH˜p£k¸m:w¦V ×ënÿ~Ü£¾¼¤`ßì¿ñ(ò¡PºÛ²m0xز:—ÙìÎ^>_ȶw3éó³¸Ô¶e¸»/â&wkÖ.NâåbÒ¢—ÛèÏ[²³LÛú~{{?ÚÊ´m9°µUtEÀ÷ Ê»‡¦öá°…$2ØÜ¶#mËPȪTªoß•J¥3 '1aÚäö”àhB%‡dmÑÒ°XvjØ#A?µu¥òáêïü8]pÅ=ÐGåÇ=„¿v'­ÄëÐ-'ÏIŠ—CÐÝB††ºgÖÆÕÙUŽ ÅâŒêïⓞN–¸¯µ5Ú¤ëÑRÞ!Ç®Èàõ·}ƒ®¦pÖ‹÷þÚ]?fÿ•´yp‹Ö˜¯QÉ@&ˆ*–´Pßo¸ˆëºµzMù½4ê#vŠ>a8ÅMîöFº‡`p­OG=¤oÔdê •î>Î^øïÇ­S¬®®ÎÏϳ/qêȤ›¬íõà†âæHANÿôí/ åry7³Ã\²ÜÅd³ Ç)Wª*A¥Ìq8ÜYN-Ž&Tâeê_üâàîýØJwëé?Û¶ëPrÎÉΪ¼eÚNÑgm6µÏ’mí7¬ÝWÜcñãÆ‰@£h¡wBc[ƒ…½ÙÅÚ¶P>cÉ©7^öoËIÆÊµA?vqêM›ûv¥#]²wø PÆ)2Ól½Vs›×¶P,f3¹­ím&æf&Âõ<°,c¹1$†¿pñç¶ß,›ßüæ7 ­ýtw"´Ø~‡t \ô®¼kµÖßÿ º"øŠÛO?nÊmJ™æ×zµöÈæìÇ6Kn¯õ6gÍÐ ¬ÍIêzŠ·Œ†hn’oTù€cݽuÒ2‚Çb—®“Ä­#-Ѩm[ø'둊ºZýæwß®¯o¬®½qU6ÂùKÓé¹{ËŸ›èÈÐ’¸¿úê«ývÑÆÜÝCwWÜ>ûqSn·mAS¡²Ä qS %7šD ™,Zª\׆cQ,N³Ú¢Ì½{÷ø ózp _ Ÿ `,9ןóéµA v¡fÒyøð!Ê Isç϶?¾}KEDäô"0õë×߃µ7·¶gg¦ñÖ‚-ªFq‰!/\o÷¨/¾øâ¯þꯨ» wô@À·8?î–¿kYqwVôðã¦Ü÷Q2Ó}[»£ÌÏÏCÕb‰àn®¿|ù’¤¹¼¼ŒuN·¡? ?#¨+(óèÑ£«W¯>~ü,Âå±^ÖÖŸŽÌ®¯ØŸs,iiÂ|f¨m@#™Ž2ªržñÍàÎ''Mÿ–J©€uøÒÒ5²¶­Ö±%á8õQN±>ÙíÏp·Ao\qëC|ðã®´Ò‰ñO¶]NLLèÀ4Ã–ÜØB}ÍOÄh5V@ÓÞ2¨íÉ“'4ïöNy'ð¹P-x™&à쥤r­Á'ÂÓƒJëWÊš¢èvr*¿­šúúÿ(ù|å»K×p¹°„ŽWŽ‘ßa'£"nŠna¸Û '‚¯¸…_~ÜdCæf4C´Ü딢m»u&èhÑÍ’›ÝŒÚ½„ŸõS†ó£éÊé8¨—4Ô(m~X\aWjg(\CrwBrw6;IqS†â~Ę wì‡à+nßü¸YÔëÝ»wuX)C>ëÎI=’-áŸôzeÈB§‘¼zõ*û…"÷©ÈÂŒÆ0cƒžnCA”a…¼/<=’D›}óO”×ʽR­Ø[fý‰„Yë§QocXƒ1BâÖ¢[î6ØWÜþûq“a…âJR0 ‘}Œ,Cf¿wï»"þ&)s Í]™Xy£åétZA™ååeÝÉLf<èªU¡<–~ß^“nºËb¹¾¾Îò¿(dvžW±hôlꌜ_ãV\9€ûý«U6—Åb©T.£P½n‚݃Á¿^]ÃݸâöÓ›+ÚðšÜŠ^qj´–±jdìÓ nDk(ˆ×ŒK0oW#om´Mªz|ÀušI⣭lñ(r×&ÝÞ6ðð²týžvù|¡Tªd3;µzÍ­v‰€µww3ù½®áH½ OFHÜÛø.Û6î>ÖÀ¯«®~ˆnµR)—zvU +¶Õ-‡w£Ž7ë©©T¥RŠF¢Öé÷ºe…fggêµZ*9éÝ#-G$i‡d…ª’zÝ®T¬XôÖóg·— •°±^—áºh.CrÙ|>K„ÄD8- ¸J .[ÂÂa+,‡<ÛV8;{6ÇΟ;79y&wb±h2™¬×뉄“Íf±ë±x\[¥ž+Ø"ž«-a9¤ZÕ‰%G.ê2¨' Ù2ƒA{Q¡PDý5·æ$ÔÆdý±X©T®\®>5uVÈçƒæ¸ŒÕHÄVùöðæÍšãÄs¹œoß®¹j÷~ÓÙ¡µÁÚa\Ù j[–ÉòÞ/FEÜdmüιbÈúd@w“N@Ënhe”(É÷àr½ÑÀ/¿üP<ÖY¿êmnnÎÎÎV%Uõ{Cús`Hòš<­h¸±½³3MXÔ KBTöÓ$&Û‰Ÿ­LT?þäŸäövÝýý¸AeôãN&Ï‚wwvêÁ^ŽF#äJy:\:Ûš:{×úþý?ŒÅ”!k³ Y›ë\&'Ï´m K„ô²³ žÀXâ\ 0n,Öv,³"Hí˜ÔõñØLÛ—˜pš+h[±TüƒŸÿ|o/‡CVW_Äs X¬7êû©iu3¹áp×wˆœ´cÐFBÜš¬ÿôOÿô«¯¾2A’’v!ŸËïMä²N_•ÉpÄýöÝæ… é‰DŒÓYž'Éïe ¸ª•bŸ-ñù@håhÄÂçf$kK¥Ý™×JÅrT*•z-Ö¨»Q{ZÔ÷M»ÎY…Ðû5×Íìn@Ûn¼}{õêµ½\&ýÑfkÔK[¾Èø Þrì˜ÌæÝëÃ2¿—;‰b!vÒó¯ë—ŽÏîºn6»S)—_¾|5=•ŠÚás³Ó½Ý£P´öädòŒšáÙ0ÙËúÃHˆÛHì“ åT§£ý[£Ñý—Vu](îµµ7XN$ ¨œýʃu8e ðÀA-°¡HëÙÜÚ›7åreý§7.^"/{—…üÞ™ÉI½lÛëÃ2‹ƒÁCR¯[=¾t|p¼àdõíH ïDÂaD¥7 ÕÄ„ãİR5Ä݆$nÎkïŠ_( §Åѽª ÇktTƒžo59R ¿—-«eö>UÝ*§8Û‘H¡PØ|÷6›Íä …³g“%¶ˆ%ö·f>àUÚËíesÙ>úhwgszê:sìi¹=q& Ý­ýµñmŠ¿nïÇa„Z¬}nv¦Ÿë‰ÆðT°lÛ;þÄ †WÜàâ®Û!·±ë/þüÏÆýÑ‚ÜÞòÖW~iÇ…¸… û¢eµ ÖÆ/µ ‡- Ne–}k-«e¼UkÓöÖ̧¼JåJתvvvñÀœèþ/“Åb¬Ê ¾Ä²¤^ä´Èj|ãäî÷þÚêµlÜW÷$ãP¡’_ÿú×ûíÒf&ÿâŸÿ³6ÑÝÕÖõèôqíó¨Ñ½X9nýׯ¿_X¸q¥Ñ刚1 0\í ÆË;({uí ~®X~ü³[ÉÔ¤m‡!´Õ²·|U’”A¼JB9œ€ ù\z.=v¦n[BqŸ™Lá¹IÌ/q7³“Íä¾ùÝ·ó—.F”ÛgBz¾t3¶o´ði·ž‰ÓFgGHA‹ÃØžµµ7›[Ûrú¯ãèJ|wÿRT‘Z[±öêÚÚÊÊwŽã|”žsÎák>U¨×já°Ö>þ\˜ºSq {a9j°ù¶T­º[ÛÛëëPKKׄòÿ;VÚãØc`âÞËÖ×ß^¹|éOþä_>zôèÂ… /^ô¨”Kxäž›»øv}Ͷ£¹½½?¼w÷oÿæÿ¬­­ý›ý¯"¶ý—ÿó¥Õ¼5¼Xý—ÿüÕßÿök¾_+ë^—£eñã/ªWoÈR¹K۬ª)_ÍPâîýýû÷oÿû/ÿeæ/]Âv¦ØêŠ_°‚ªX ¬o¼µmû?ýÇÿ€³£é¹óm'ò²gÛ.GŠ ;•LªµËf åQɶ<“ͪ9¾ÍªÈÎús½zý=–[[Û`º¢jÏ’­æ¼Ä§ë”á”@U² ÿúoiµ|céÚ~³- öƒäÄr9øŠÛ¶›÷žz`è¯_ßÿQ2›L˜¶­â–Ù­c±xù‡oßúæé·X²Íø'¶äeYߨÀÃO¨ôW85ãmj@<¼unmm--]ZP…•ç+ßi«en1ÇNq õÕë/7wÕ<°}DøðUôª÷c8”pâ““SSgϦ’ 'Ѧ©[]i&9GÖ~ú»oñ<ñéȘ`OX%eR©ä+åË^P¾š¬áÕëÀì k²68’–ÿdO`ÕÕ§ o)ºÄº|08–¸Qå%/ŠØåm ƒèAÓŠd#XB>ƒÊQϦü·¥ZçI·øXÒmÆçŸX¢6T»¸p™÷z[p Ðz[8KQ}„qß0€/PÙxÒjÙXãr"w˜ºm‰V%gøtÑmÆ­¿ô*Z´wÁ“‘ÿÌ”©£x§ ævÛoÛm*~Æse2ÙE£ø.+¦±¼¡ìØyj³[a_$‘ý$ W8D '‚…êøÖà<…ŧw?a›qì¦z„àD:èQ,|Ѐª|ÞäXƒ·Î¢‚âˆÀ½&%r÷ÿñÏãÆm›ð€8vŠ›?jüâð+YRþÚIõzjàüÓGò÷¬r6›ãÐ1²•P=rm…¯Ù W@X§ 2üTa„TrÒiñfsø°RÜà;©ëªøIuØñÂòĶÍt¢è@¤ë68x_(:ªÝæÓ‚-—ÿW3§±lnQíê™ÑÞf·—jŽ´Dk—:íÀéYmµŒu¼.¬®½™™žZ#ƒcãÆWŒ/?¶Q%Æ_Û7 ó³”õL$¦çP›MOµZáð/ÝÕÙG±¢Mò’”$S>;ìä#ÿJÒL8 ÊM¯ÀfÝ^{Ã^/Ʊ]V% MÞI(fdÜœý–(‰}­‹ W„ŠE BêYž‚d:;3ƒåiQ$·Kµž!ÊvÝ’øûó:²§ŠCƒ»-Û°D³o߾Ÿž433EÝf¬xOàt(ƒGŽn  ØíŸÝBã½uªlO¶wüI@@«eütÑ`\Ÿ`62à8vŠ›_ñ½åϹNÖ÷U<]˜¸­°Å j«n _XØ ·´çNï4 ‚ƒ`R‹…¢rü .TèãÕ븴%Ôm±¾±††<ÿôî'Lª„?eÄ !ïŽî§jx‰ŒŸHÎu8j…}B ÞP§¨êSà1€]—.]ob'’Ž nÇ:˜hFuiv¶¡yÞHë©j²8#KêOÊîÄÙ™mlD%ºÍøSŸ.›‘1ë”JâmÀÒÒu¡â*˜þ¾NùY‚ñó¨ÕêUÕ»5´Õr½ÑˆÇãø–eCvÕmµÌgr[y‚W WW&ÈŠÛIœÉfwB!«P( ©øŠñEãw?ÛüµföÍÑB©—TC/ž}w¥b¡ÏÉår_Rn¯J¥ÉÉ÷A‚Z¿PéÉ»—“Ó£Õo•Šš‘_v*R3ö½²òzM¨¡¢Ûp@’ãˆ54®ªCrpH&Ç@¹ŒL¨’Þဠîb±ø|å¸ê—rƒÔm'Ò‡³µmmP/ rtîcÆèu“t¼^Š s?5OÇÀŽh=Ït¼ý{Þ:ùaÇ8¤„Ã@Z›ÛÛ;7;+³^Eì­–wv³ø_¸ž™í]þt¢iH/Z¶}ýúÕÅÅ«g&œ±3uÛ2‰fvwödBËêîÎÁþÚ¹\¿úkWff¦šò>"€© \éïV,íììþ~íÇ7ø#¶Rg§ÀËNÇÑz,вáqtdÉTrÒÓ©Ø|­Æ û7°â¨´B1å*Ö“-ŽVš×ÖKÖL2#ÉÚ­Ðs“þÔ3EÆ:œ¦àå)’žx1ÝNTÅá]Ûà½mMÂ’'Õã¾U,ÈÖÁkžN_ƯuZ$€vŒ°¤a²4¼ÿ´¾îH‰}°Õr]¢Ö,:Á«„/7 Mž™,öfgf p¡¾ƒ³Ììn5D¸/l¼}—ÏçûùÒÃay·ÛÆ_ûðP¬-Dr9A3“OVÜ ÅýBþŒ#$ènç ÑFTÛû½É+ZG$*}8ʼnG±XÞÍdÞ¾ÛÞÙÝÅYåô ©¹ÍÝ¿\ì’³Ÿq·à[ÚøGz—?àUŠÆ¢“““W>úèB4ŠûóL¡°œ¥…·77¿ÿýj.›ÅûÖ_z$*ýµ.'ñ>>Ù—Q"D=¸$‹ R­ÅÝD‹µ!´ñR²³½Ÿ¾‚Ú˜¸ESP[m!ì64𠵆2êQ_µ52dtSº}8ʼnCdÛ;ÒÚ‚‹/U=¡·–<äÀò§¸>Ñh$§’©¸‡ª}•¸bYVÊåb©”ßÛÛˤáxþÚ±XìÌ„tj…Hìç"p¼J$%q»¦#D|ÀÚ!+²µ¹‰ ‹Mø.Þü¸>ø¨{Ý/Ð25|}x0D6??‰—¨lƒ! ’ÇÛà8¦¿‹Añg ! Ñm)×ìZí`sGKú³ZQ¼;¨µ~®>u£ cP¥ð!k¯¯¯Û*‘½6…Ÿã¸ Ž5p#Å¢òÉ‹Æö ‘xã-ƒÛs Ú÷_¾Ï#-^ûÒÎmÁÕqÖq£ƒµåƒ3ŠÆR!OÙdˆÛ /€ªEH¨î ùÀ7¿.ƒ£ÅÁÕÓŒn¬†lŠ;ÙLâÉ(nƒApÔ!2ƒvìÃÚñx"“É8ñ¸ÎIb^x €¬½»cYvÄëL͆¸ ÆÞ¬-‡1‡£qÇ(nƒ`à Ö¶­0cÜZq›·Á˜[åJ5m¨ä\V8¦Îd2±xZë{¹\4уè qŒÐѵZ-ªX[Ék9ò/«z#!Á:X;¸n•s(l·Z-J/·‚qn3000ð*lªTs–ƒ7¢TÈsäÀuhmåKíV¤+SÍþicö£ù½=ãÜf```à?@Üu9eT€µÅî\²XµR-•ËÙlÎþýïW3Ù<Ó4šY´6w¹T¶ÿöÑÿ“Öø’µK€Ap!Yº^wkµÿ –È ÿžbJIEND®B`‚analog-ce-6.0.17/how-to/startwin/zip.content.004.png000066400000000000000000001037201406366436600220270ustar00rootroot00000000000000‰PNG  IHDRè¹;Ñ$tIMEÒ99aµäl pHYs  ÒÝ~ügAMA± üa‡_IDATxÚìésGzÆç0ƒ“-P")‰ŠLk­×n’ªT%ÿGjÿÄ|ÈÇýf§¶\•H.G>$Y·W")€"â˜ûÊÓÓ$D8C€)¿?ãAO÷;¾Ó3->øé®$ÉbŒ@A\T‚ ƒÀu]ª DQ‚pGQ´è #‚ F¡ç–í*PmM/pdžá¢7Œ ‚™‘ãíîµîµ-Óòü°×gSß¿˜ò=§LN4ÕâoüìH°ÁëϳáÙ„ñôàœóI’&ü¥;Èï¡*¢ªŠQd›fÏ4,…{m/;}§ù¶×í;–íO{,f¡n)bD“âLͨhs–ïÑ«;§ñ(ì ¾r)·0š\<Ãý*ÝŽÏb«¢™ïàÄhS}²âYŒmp>Ÿé´§îE”x]“J%9›uÂȳl[‰¢( Ã^Ï‚jÿíîËæžÑêXiŽHrí>õpœî(qóä5YåäÌ„½Kk:&ÔOišâ8L½k£ö.J\3ÅZFDŸf×R} BE£Ú¥[©˜BA¢t§ÇèÀÉ?ŽD6¡rÊÓ,:­Âéû6¢f4nir£sKôniF•2)_P1Åüäáù¾ç††éD«©ëÙT­ ¥V•î|¡hš†r¸8áµ›-ãåvÚæàŽÛIqšƒ’N°’Ꚙ蜈ŽÏžY¸“|C&œj)E*áoCÊ:š\-‘à&;æ§íÅé¦;ù/V4þŒ½wÂði™t¥)?ßÄç@tJ„Óv0µý'-Lrî%î$Ârb’ýM–Ð’«6"x!¯V–Ôº(*Š,+ò„Î0ÇAvºÖ~Ûq]1“É,×r©Zu:¢ïç®w±.VÿP¸}?´l¿u`Aµ·›ý±;•ä¤O$££?Ëè ¡¦øŽ uбJú[2íŠN‰3Mjv*ZÄi0\vn{—êû2ƒ“sê¥ un*Jç\T½.ëyéãÍÊÕ«™–ոˇçy¾iYøUÕ5MUÙ¥Äv»½½ìßÝrݪ,)o.]½ªòVã¶Ø‚A«^¿œÍ –©z¥cÂÍɨJAÏ^YUUƼ˶"€Kw½3ƒjñR[ƒy”-MÈQyš A‹BU¥rYj¯¯ ++‚m9¦ev;=I´L“%œu]ƒp—ÊEI’³{ww·Pt‚ЭTt¨öúª¸\ó-˄вhyU˜z¼v[û»»oѪs`ÃÙV=$Ür¥¬«Ù\^Ïà­aºíŽ¡2NVƒÄc¾oºó š›ÉÄA4Ä9[‚ ˆEËë2\3T{mUévÂF³Ó—÷wvžÁt 슢¶¹y;— K¥²ª•JË:ž. oU¯ ­=—;tnÏÑ oåø­(ÀCû¼•¡’øÎ›¿'Üy=‹†µÕò±(o½i·;æãç ¼…ïf5â?êËÅ+Ë¥;Ÿ®bK›{½Ý½À$>Â/†¹Ï°_CC}Ø<^·êKe¯;Ÿ^cAž5·ÞàåÆÖ{ÑAD"XçŽ ðýÐóBÃèãõâùsL¡rÁ½½·®kõå%Qtø¾I´ 1k.*?xðb½\«÷^k"~óæ Ó:l…µ_ï{Â Íæ²W–‹KåoÞº¾üó£m´E ŒùRE7 „Øc)ÅMýÚ5ùŽó.Âq{¤ÝA\N ²¥RisóãR£Ùjí¿ÞÚÒuýÖÆ ¨0\­`Ù#[aiKjµê‹ïxòä)JäÏúš/êôz#[–sxmÈ7Lq¥¬¦ ±†ÎÖ—‹BÄ®[òÌ Ok¼xµÇUjŽú˜AI>Ÿ-hÙvÇB¸õ+ñÚÚ9¨TD´߃Fc-qÄQMPHy‚ ./ªªÂ2ûžgYÖë­mè/\sQ Çôù‹¯G*hÕh4á»Mfp!ý˜¢-UÔÑ OAµUO~ü¼ñòÕ^s¯g iÞ¸¾ÌŒv$4÷º»{½ÌaòÉn³Œ9Sm8ëݽ.¬w¥¤ßùlfr±æÝTP¡x¾¢8H¿|º8IÄåE1-KQžâÐu ú‹)|îÈ&~œSét™­†v󋓘Y_[EaUVx÷’“Œnž!á.{©ÌÓ\¦p…˜îA9Jâ— Eæ9H<*óL·ú~ÞÐ0Ü8µü&{‚ ˆ‹ÎJ½Ž©t j>N¸…¸ ¦­Ö>÷'›·…8ÇÍßòE#yO¸! ~èÀ2C²y—’Ø 3Í…o¿ióTIü¶+¼ëÍd0¿õæ–<_QŽõ'é›Îö›ƒJY?`3ý¸[Äãsõ§‹“A|@©»]¦ßÉ5¹NÂbCß××Wy¯’•¸W oÞ¼á1µÊûQ«o ¬£È•åR<-Bja¢ã>݇'…øê"4zíêRfZÕ¹Ês!FMO ~~´sç3!¯e!Çí¶À:@²ëË%üù×í[×— ñõOº8IÄå" C?Ûµ,ɶ™Av/Œ"YfÒŠ¼í°Î¶í8¾ðdwF¼¬²ëz««×0£*Š®3m4M³P,â-3Òq¯Á“)ò÷„Êû¶í¼Ø:Ü€Ã{d7㌫7W3â‹W{ƒ¶ÐnÔ³6â¾€®ð‹–GÝ}®ÈŸïòîÄ3вµsÀ×E' ‚¸Dø¾g;B»}ÍØ‚8ë7‘îv{Z,Á]–¼ÍXµ:†aÄ]Û±Ûí6Zy¾Ýï÷ùýñqM&ýžøìáRì°ß7x«!íJ•ð×íž;¸åEñL¾ˆÕxÿþý8gÍ’'\ÖÚ âVA^GóH¸ƒ£îÞÇî•wù…Í£]‘jqypݰݶ¶w”ÝÝÝJ%°m&ܬwÜ‹[`w±‡Š Tàš¡¿»»A·+:ŽÎöŽq¼ÕHŽ· 9ŒÞ=Jp8Ç Ë¼»7ƒ‡Le·§{ÈAÄEÅ4ÝýýðÞÝç…¢›Ë:¾2}x+"ü2ÄúÛé(–ÿÞÝ…¢3¦•p²üq½ëÜq(ÜŠ"i9¥VѺËî¨ôXדk¤Çº&ÙZz¬ëÈ–ôX×1«¾TuÍe5ã¹^¥s`j0tWú!»Í]Ž;w°{]/—ªÕR¥P©ä4]RÑñŽ„[•¥R![¯å±­¥B&ÍÓ@ §A)$:>Sî ¤@)LŽ0ûD1ˆ[÷EQ9þ¨q„‘׆,ã!IaªVPíú•L¹?&ܰÛÕr¼Úí»–ã_”‘ôRÉñL6rìSÏg—SÐ3Ùª9HvÊêR„:mÃg8âZÊ-L±ÆsœlŽ#ê²3ßÇYíà6»xJt]*•¤\Ωo·Âwæ«í <ážgÜøñ_ ºÁçËœ~çæÏŒ6~~çÉÅ>Ús£uN(*,8 Ód;2ÈqË’$(’6Ul‚ âÜè’ç1á–¦EAÌn‚ ˆK 7AÄ%ƒ„› â’AÂMqÉ á&‚¸d(Ó‡ ‚8oø¼¦eñ§8-zsfÆL×4>’Î)•½µA§Õ¶l§ß7‚øÕ™Lfú˜6n£ëEQ˜Íf?( $ÜA|ÀkCµ>zFÔM×õ(ZÀ-Å3'ŒBÇvÚí¶(Š™ŒúÕ—wdEæ#*L€„› ˆK€çùðÚPí[и–—ÃðCx‚?þzØo·wvÞ¼~õÊu]Ã0*•ò©­R÷_ýËñ·¿ÜÿŸEï2A¿|–ÛൡÚLü@wàûžÛh4ú†á¹®eÛI2øé÷©b q?ƒ Ÿlu¶8A|Àd2]×ᵡÚk«×<Ï>æÂ±,6N¥R±,+ŠBILÔÓR%A\à²Ã0ˆØÐ0®ç:©ÚõKIÕ‹ãü°mËqlL}öEÒäÏ´ý¸ù“¡L—;®dBä¡hó>´A\~¸jw;½n·Ûéö,“)¸çùCuX5Óä3É#Ÿ¡Õ4¤sÜÑœÇ,:9à ÇÓ ƒù“yÉÉÊ”B!â pÕþåá#6˜¯ç×jU]×67osóÍëÄÂëã?ÕóáÇ:ñ³µš†isÜ\ˆ…‰R>Á#“ 1¸¶BµWVêx»R¯kúá0Ë|¦ÕÚGµ/[__…—ÊEL›û‡VZ׎ZYŸáæýõÖÖúÚbÎ!÷rî9î!Ë|Þ«#‚‰Ï²V§ÛãÙíR©„)ÊMé/Ï™°ŠeA¾ËåoÅÅ5QLQˆ©k7t|¯µ/Ä¢_«ÕX›Ú¹ïË´Â=ÐåYõ'!‚8'b+¬”KEüÃR%šÆ¸ç¿|ù›ûè'OžÁewºÝ_]œ,qYñò7!îš‚&(Ä‹_œD¦øžÿÅ矵ö÷76n\¸‹“A—n‡!¯¼' ÞºúÁAó¤6ïâåµ/ÿȦµê`)ò Å/Eòî€(Ñj¬d³v[¸h' ‚¸”ˆ I’ãųÅð}?ŠBÏõ$IÂŒ¢(çù€žò§\V Oj³Ò÷“ìe‰éu|¹ÒÃRhôaj%n%ÄÉq.ý\»Õ’:¯Í!á¾Lô sÑ›@\tdI–$ò!…¦ Qĵà_ÌŸái¨aA`ÛNøˆ *2—×ó‹|ðO£`dCu89½áÜVEÂ}™h4v½ Ä…FVä\6›ÏçEIÎfT=¹:âÚªéî‹¡•iæ„«×;+õå0P²Ù,ÊÏ/ò8ˆ[¾e±'ê-úx϶#ŽÃv*ÍÑK$Üÿù_]ôÞŒ›7Ö½ Ä\‰b`JùÌäʰ®Q¨vÙõ××YG7+ô€ç3ð¿ç²Xû~êÇ×9ŽÓívvw߆Ñïë¥bž—§ŠÌÇ`ObŠó <í0.òHÐÖ±ývÛŸÄí8ö?šYÕ>8è`÷=ϋ¤²$uÜß~ûí¢wþò—ÿXô&s% x.ÂFqÒc\Í !d¨ãz^µº„·Ù ¬+ñý„gñ ¾Ø2™3ìFÕ«øGNKù@'pTU CiBä‘x®×ŽGùj4•JåÃpÜðÚPmütA¸³YR$i•"UòÍ7ß,zïÜ»woÑ›@Ì•À÷ Ú¦Ñ‹õÛŸGÆ×¾Ý>`:h;á¡Ë~§òñø!1SO>þ€Ÿ,–ìy¢á‰‘á¥kªFx ?zØ¿}òaÿ#"¡Óébúâåo·6nb†?ÅiBä!àб*ìÔëW¯ ò–e¿æò‚£ÇŸâ­i9]Ïi¹œ’ QN9îÑŒü† ¾ ǽÏ<¾»víÚ¢ 1W|Ï…^ý¼$IÇ ydÓ²DQ‚•e™— ÉX É6¥°¥vºŠm+Îv=RôÀ±ƒœæk9¤|Ÿ ~‹ Ÿb#×׻Й¦ßYž4o“žÍf3Õu]ÏuãÒ‡0X0À_SðÚPí¥J%ŸÏ'¹÷’„;>ÛôéY]]]ô1 æŠ ) ü^WÃ)gô{Âø<²$F]U_ƒ,B²'Ä„ÅöM©¿•ë72ûß—:¶òD’´ÂP¾øÜÈdÜZÕ)=]Ï ÝLJŽzÎñ¼v£Ù„^?xðè“ÍÛnw¥^}f2høÁW_Þ1`·m;áØŒ—…0 ñÙAµ«K•$·_žE¸‡þZt¼d(%7g±;¹v¾y‹’]‚8üêŸëÔ„<²w¶€h†atjÿß’MO4Ÿê?t•~_Þ •[Õ /«?ß•kKt«#UåÌ[ÕC!v³ÛZ|«Ûë†AÏÀ D?—­öÛüøvrí†=/ ²"W*å$ã _:Žyzå´ÑOJódLUyæ ­Žôš¸ŒÄ=JÛ2Ç9è´ùý#|ÑàÛî¸ì~@HvtÚÕ-8nW^oåö•Qö]ÁpÂg÷Õ‚(ÞùB5[bá‹[tÕ 7¦ ¹»Ýíµ>üÙ¬øf}ãæm×ÝÖuí¿ÿöÝ­ÿwÿ§üê÷¾ÿáÏúºÕÚ/ÀÛ'ëåræ^Ø$Ó¦JH bnðQ[ûûñ¸´lxCÜ+ÉrÒﲪF¾Ýü¼_]Qóëöµntÿ§RÞ52ÆÕà©x}Mkµ#õ×RPó$+ô¤‹±=Ýn×¶[OŸþº~}»ß_Íåž Ñ?½Þúßëë_t¶o\¯>z|÷æÏîÿøÃW_~½X[[ý ½ó˜MŽ{`¥“$"Ž:EÂû—ûŽ/N¨|òRá©¿"ã29Ck§_#â?aÃûåá£F£ùzk›ß´½¾¶º²R‡{Muï‹¢9h½æª^k_Ò”ƒÇ¿T®û^”Ñü·’VWå@‘mEŒ»K'?*–Ý{ððW×Ûzð [,6ƒ $Šße3õ­ïd©ôvïi&SÚÞ~º¾þ1|÷¿ÿÛ¿¾|ùÛíÛ‰³%³¸½þÂ’ö¾ÿÙ÷¥™(ïÐ御’‘­„÷'Ž¿=ù›1¡ïÇ„µx§ñÀï[RCï Ú{­ýåZjùÿì][sÛHvq!u§<’Ö’×–,{,OœÌ8U[[É[*i_¦*•Jå1yÊSªòGö!I­7Sž±×—ñe,{$Û’l]’‰óu‚)J¤DQíþ,CT³Ñ  »?œK+ëÊ1$nü˜&³B«ç¤tºÕÌ¥¿vVŸ]j\—G^)ÞíF´ÞpåZÉ­…vU×Ó½Ø~ÐkÉLÆ™ÛÊe—Íݯ”ïjéû^ý;l?l-×êOþ¹øúÍÓå¥ïl»¼°0´òtEÿîõ'ðû?}«’6þ=Åë{>íEö?xäG{:œLžA|qñ*±¶Ê?k< tt¢…æÕHm¨æ^`Ž+ ¯¼(­ýVºlÉ•ÀòçÚº…ìuh÷åà,»†6>ñRjÜújæ©S½;3ûЩÞ1§î;Õ•TêþÖæ-Ey½xõî«Õ7÷û߹ޛËç{<ÔþÝë/,Žë÷/ ‘9`Ga¼O¤uas"paAqúI¾þǰž=¹´xÕ²,”€ÐëÞ±•Åd‚òò—g~fr/ªÔ¯K KÙUYÿZÿßœ?ýËzFö?¿»½¼Ô£Å´ª¹œŸÏÞ)^º79ñ÷¹ù{•Êþöñã;êWOß¼™’÷ë›,tõ⵫8ìs}õï¸aq,¿B¿Äݑ憎þ’ª!n \XP0µmç‰ÁAÜ$†Ÿ€¸±W¥ê|5ÿ›û_íÜZ™Ò¢GVxWvï©Ñ×Û¿ÎŽŒüøãíåË`íƒÞAâŽ"ÓÌBÊ^á|}7—ÛßšÙ?–í»iýõèÈL©ä?Ù»†§Çý ‹cùýŽMÜm¼v˜rù¸M%ßmöÒoÿ8¢wÁÝÜ$ŽrÚ6C?÷J"üžãüviÞyñø×o¿»ùaý¿'§nmlÿdF÷Î]Ÿ—ß,üޜˣÈe¬ ‰›IÙ¹O¸ûÍ›pº"Ï꺟֊„}¬HŽ»×z÷ûq‰»£ˆÝ±¤#›' hê ÇaFÙ‡éÓ»U/'" pÑÐ?_'Û)NMI»{K7¯?{òäÉÊÊÒËÏò¹é‡—®_›¨×‹ãSºªH½É1+­\½_~1/IäL½¿ÝÝ»·»s§VÛTN†Œ§rÇÂAÇÎV†ß~#öì?­Ñ9KÇ}„O¦€À— ˆ`<5yà8NÀ|Ü©×=p‹DrH(|²k[–•ÍæÒétRñÈßéu–"+8,ÿ@äû9]g¢¨®G¨íkHb=LãÀ Œ[_ãKY1äÈC…¿ÎÌð*Í-?MV´0TÑrÔpŽnùÔS#¹PU•4$`íø[p.8ÚöËDÜD¥™ÄÝ4#s¦F >·•lïì Mˆó\[2p^íµƒÿ·}üàÞ æ‚ãÑO¢¸ÉÏgv“EÖõË‚ï{5·Zœ72é‘ëè;7HŒÖα˜ÎZú$U­BÕ©Ùv \s‚Œ_±&Ã&$•CZNiZúð3‚Ô[îÚò k™,+ªž.òãñ)Ì£'Oq 8:Èã¦i¬­½½reþÕ«×ããcø‘¶ÙŽ››Éçæf>nïàôŸ=AZf—É5æ=…=÷÷ß6G#p4¶6ÖÏûΩ”œÉ0‰UÏdzIø¡²6X[‘SaµÌ¨"æNI[[ð¡V;6qÇzYæšì–fp-ŸbEÆ…ëKÓŵµu«üäéÂÂ|ɶÁÚø³P°PreaþÕêë›7–]׳?{ñÛGŸNOOmoïàs3JíY¹õDÜBÖ¾ Ð3"¦å—E–]“ô^= !kƒµ! “—Šïùg]{ÇóªÕdüjðÄiàVÃÈèº+Ð×ò€ ø@зm» ÙÜ,áøúæòG^â8.>`‹$ºŸGeøóç/QΜØÊð tÜÄÏÉ[L`phæ†B’¸e™yŠO'*sÌ9YÆ/ÒÀ[s¹¬®75!ƒky`6ˆü]"hÚqšŠ~R|¿ßØ$OTÓ0>>`d ‚6 £`åÖ{ȶÛ{>PÕÙÙ×qÇÇÇ@ôÜ ðŒU÷0ásò83€Ã5U‰BÕÊg{q§> ÌTEQÀ­JBU2 ––» #\°pÉ.ãOfd2]$õ7·Ô@Ö–ÅøÖdôm¡pÛ0°£Ë©ÿãö6©Âñ-öe:ñõ·h‡½Þä î,šWlМ/TŽ®ç.T˃½<$mulÇ=77ƒÏ‹‹×ÖÖÙ $°ðøøøÄ8ËMVö[Ô r–*“¿œ„´ŽF°×7·W°* ä›Û·(÷±ÁBÇ\«¡†Æ¥i|øúÆrì9‰­1Î û 7–!ƒ“! Ea$ñÿnÞ\F5ÔA!ÿ%÷¢ìEO{ ú\q ôŠdœJ¿r0ÔÃÁˆ 'Žáе©¸ÚÙD‡vÐ wc«Í9£ cJ-B瑼ø4çDÌØ™ àûø^TbµütÎf âè±Å+ϡŤÌ\_ Úh´-bÉc8ôÒTG*8 GdîXØU&8¯äŧ@Ü_ó·É?ýô'”ÄÛs9+A öSà¹öTh‹‹WI*‰ë´El8q ‡îMñjkëoñ+¸[à‹B_Äý~cÓ¶íúþäƒ4]dÛµµõÿúÏÿøñ§‡ÿòÏß?{þ‚‘Uhf'Šü㘊§PQàl@Ò.X;nzHDùÇímªGl`ÖQ<³ÉÆÆ–ë23Xr-‹[;,ïI,•SÖp02¶ÌHKÚ¦¦666Y” û­—þ¤¯$>^âNÒÔÔGÞ¸ëîÛá6åU#- ñ8Åè8ñ$n0@wÁÚÂþ÷/,Nà÷߸Ã0oKÌf3EV–XáXì”Kˆ4÷XiøÅ–_-Œ¦§§°´w»nìο´x »C\Z[_Dz¹²0EžËædEi€4oŸ9°p壆Ô`é`S]3µ ·DlîºIû*¢K.,3I“Ab2óqÀ‡x2@`Ç–li +9+¨/°0„k¢{Ì“GOžRShó ;â0ææfñ„·°0¿±¹¹$]£Xnh‡éUgmýmljGO öÖ•…ËBÇ2,èß½þÂâ~ÿ]ˆ79°6 „l¬h´ŠË§(Ì]ÊÊe£FDï‹^­¾¡§Q&…¹mè–J,PÖóç/nÞ\&wþW¯^/.^E ÖvÃ*º~}ÉÃþµ:ø" E軳®=8wâ©©É(ôUY |XknânŠ“IRöÿýpÌ ÑxnvåßþÍ TÿÓƒ¿ æ'“aõ5j‚…/qÅd˜§YòØ{˜Æ2Â%E6kŠän°9JØã»T.Ù6 Q™—Ÿ=977Óqâá~€v [HBâôï^aq¿ÿî·Ä#ÝŒO€¬L†¼®åD-OÙ$‚a á×[±l͸|ÕÑ»,'áÎOú,o,$,*°<Å¢;NÖSFGQÔÒÞ†˜¡Ž®ß6Ü$VSœL‰?ÌtÛf±9b5*''…ƒp˜>„…éáT a‚Jçrq›ºN6Å;e’>S¶p«_]}RÆ–e9 ‚Ã&üøtÎ{zÅ©¸×_X×ï¿qó¤çµqÉ ˆB–; «;”r뱚^1d¬Þ @N gç……yrçM¸°xÖÖÞBøò=­ù~¬!TÜgß«‡rÈGY¢QîºË'íj½GÕá³c2€µ Ó0™ˆlÒ¬¸režÞ‘HÍWˆbÒÓDŠmiM溆'=7þ¶ 1å8ŽDÛÄã–0Á9Dòè§å^aq,¿ÿîV%,:;*dí00ÍŒïËq›´ž6æ,DüQ—½S¢p·ÜOÒMìÎihqñž‘ñÖ'Ó`^šVd™‚¾‹Äêg< ¥d¥Vƒ4#w] *çÊäpKMe~Ïw€¦¸<ø*Ží@û¢œ"dvˆíÀ±½½-fE¬³¾²0Ϩ™ókÜ…Ä-gÑ;›c­<#˜f¤sG›Ø—×g"ö¡os“|š…‚{ˆ0\îõƒFO怌¥™°y.'㩪„&&ó-û*Ub‹Ê¢åí7æ­—­¸;ÿ l—¯Bêñ{éÚ5Ïó¬|.<« ¶mð}O–UF®û Üäp·ð771¸uãØv©Ì<ƒY˜ë›ÛÉÉÐŒí@žls³³¬‘À^X˜—x|“§–Â}ßRÔ¿7XL=b55üe)ÿÝqÖžç°Klj‡¾˜½Ê†x9)0¬H½øùaÆ0k®ƒÕ{0ø\¥ê`a—+Õb±øžaèÉ:Žã4=Ù¸-½Ê§—EWD’ Vl•%%2I-Ã/aÊ}Ž8z|Ûpp¸ÛÒfÇÈ!ž†žâ?H-–'Õ”Z&ÕäF/µ¦ ÕUÔE2”“Á[ꔦ!`kK…É£’>xRËPx °`K¥ò›µ·}9àФO:ÎÅË 6Ñíèà/p†‡[jh‹Ø µb;$éUâF~c;0—ã(ï˜d| ©5‘âŽâ£J[ò¨Ú&^[C‡~‰[útö7—YA¬‡Ïý þpÜ–ø¶k§âyÅ‘4äó>ãA·€€€ÀA·€€€ÀA·€€€ÀA$Rè ãD œ zQ)@è—¸“ëYâñTU‘9ÎûÔNßzÝsÜàû~$‚ËœUÉèz6›MÉŠžÖ¤”ÔchÓ/''n¢l,æ~j5{O¤5-èi]O úþœ€{3X{sëcÕqÃ0”S²zQ)T¶Ÿ¡—( çµ£@h†ÄCúpte°vÁ ææXƹ[ˆJéÄÄ ÊS»nÍqܪÜyh=` ÆFG²YSJ¥@â2VEbäbñ¼Ùw'Ùœ$wl©¼ê?Ø •à0ðt†-ò#¶§ÒÝç \4ÜžÁÚ»»{xšÕuÝ8k…ÕM3'……eïuÅžÁŽQè³iT¢Ð‹"_–1ŸÓšš“å´¬O…C…<Œ?#n¾ìˆDaɯ†: “±±Qü ‘O’ázδþYÆ5 ‚—Ë÷0Íd|ˆ#ó†“7X»R©¾ßØÂƒs¥R‰%|ˆù>¤? ÌO¬íûaCb¡·A”¨¦ñÜ7Iº$ *çV>:©Ôa ¯)¾­Á^᱿C^†‡þ¨)4Žèî .šQ^J¾|yÞ²¬ÑÑÑþ›¥pø?~œ˜˜À<­]1UÁÚõú›³~… 5 ¬­éúãnYpwg„›'NµÌZpDv\YÈà,·VG壙XÀï®?† t£ci"øåÒTe ÄÝTw:.X»\©°$„Å)rZc„κµ´Î…i%¤€¡ü+,|ŸÅkf+G‘•|> :UÕT’.™<žJU*ŽeåR”zøõHñm ò(²ìæQ­ºù|ζ«8Œr¹::Zo«Ÿ×„8]àzË\ÖkOMMMNNöß&–®çyEž­4N+üàv$ÖvÝwQdîìÜO§Ù²RP¼R(Ü’¤ª¦ALáé!†ËiNèûTN]@šÁ–‚X¡£\.w¬ãìó’&{G!zÇŸñV¤»à{!Ké’ÅúçQ SÑ!ªÇuÁÂï76b±?wŽSI¬m˜9â÷è3R§àÖUuj#]{7]œˆÂîAOHܵºWe!‡XûK—¦³¦‘Ëe%!h’MSô«“"÷Q¢B(è¬y“’ÓÈ”J%+—ÅšH1No‘À\Ã1ŽP4ß«§üÅ"UµÓüÀ•hŽSËfMöJ:jıՓ•Ù}"%㉠6"{ÏÈ•ªË.MJÑÒš¢êQ£¢¨ézÍ9ؽ…ãY…„Ê^R5ÕeÈÚ`í™™™þ¿`»¹¹ILJœrê;†à,–´°Z~øðn<Ùlt€ ¹9è±ëõÝ ÛÛ{09ùW’TW9dªÓ¶×-ëæ,xwP«#Ð?<.=‘àŒÏ½“Ú±v$Ö~÷î&-ièLŸ1Ü_}õ•Ôº€ä}ÌšêZ½¾#Ë5]¯ñº¸µ×Àõú/ºÎ&¶¦e0ЬçÕ>¼¿²òûTªBlHÊ `nnŽš>|¸²²V%&OAJ<.à[ßo ’¤ÊˆÏ+®L%ôg¬ I'ÐÖ;mééi:Nlgg'y¹âީ͸>G–[”° þ/ÚoÆìõ“áÀp¤cí¨—pðÔ&·nð;Æ ^Ôj,i=@™ì{Ùåìpèm$Äó½½]®%¯›F£†Ù_ujù|¾!ÉxˆÃ3l^K‡QY®:cP˜'æž *•*ضÁBtfÞ½{9WóüÂÈ(&H¥Z±, â|[e,0“•ì°·¦SÈà–‚ûöha„™úKúé·uW.Û¹¬;adprWM³ä^ç5¶Ÿ)ÎLâ& ‰«G¨,†-ná±$.1¹Äã7VÑž$)QTâ*oWŠ@Þ¡ÜÀ3œç×v)ð~öJE-—såòž®OP 80´ŒIHFÝ”q›!é;>0¢•Q‡†X5¾áÉ@jE¾EåÿgïZ›Û6²lƒI"A½bÑŶüŠÆ;RÖeoÕæËdÿy>e«’lÍÚ[»Ž‘œ‘í(¶õ HÐöܾb&)G‘dRòð–« 4ºOܾ}.*ù´ì)Ò_O¯®+q>3îA¾:Ÿ»œâ›%UYFy¿S×¼¦îÀX¢+‡•&GŽ:“µãwIMÇT«¥lå®Å(N s<>›™W¯%2«TÊøÁ Œ£dÆowÑÆ›,Pâ?r ¤™ß "ˆhVÓ &.*U; º8jÛUÓ*«è™CVJÙè»nXlꦡÉùŽA^öÓ-âµWfÅËÑОvµ ôÇ`C®pr‘ËÏl:{â6Æ*']O½K¡ä‰;tÁ¶mÛÀ,õ¶ž9Ž£üà ¥þÞÞ#ðîýýíjµ¦IŠÄ_>/áƒP$„áN»Gx7eªI±èKÑjÐĵ¶¶¶ÐàáÇÀbܳ®Á†&Ũax°®¬¬àÓá7açÛF ÷eä]]]Å6.¡]1Å«£ ˆ6#>š¡/¶···ñ‘q'ŒDëëëB.ØÅ Qò€q*&jo½|à~òôùÛ7=¯½|åòÄ5wU•Deœ„º¿;܇š”¸Áñ¸ÏÍÍ–Ë•°-..”ì‹0,S³R­ÆäAε+ XǸò°â;ˆc‹<ø²¼’åxnòÜpgÜÎ/gZÖÂÂ΃z”¦õþ+É |SY¶ˆ>£ >¸Õ8/Ž.3q}u&ûŒæ]eèˆC@m\ WÇiq]œNˆÏŽâ<jýˆq" öÖË—ßÿçØÝØ|ñÍ¿ÿ}¢+—'«€on¾¸~ýZY·Þ-й´< :ïÇdÜvµbu<Þsä‹(ێóv:B>§Ù5YˆãF›NÀ©¤J6yº#»jGI"q(êEYZÁ³._áŒ)j‰ŽLb®ŸõHÊ@Ê U ŠE±eaÛàÀ8 ‹ƒá„üë"7‰2•€×%üÃÒ%L qS—üàr5 I‚:Ï«ã*µšûù…ýOÜÆÃ¸u<«€3”섨†!¥4{ûö-^áqBÏ»»-<Άá˜fX6+–™‰´$˜ØÂðñö%ïÒv+ âžUµ¢´ã×$s^k€#ẊØ)ÁnhÑ÷l°CsöNÁx"P‹68äàr=·ç7äïA_»ОÏÉm@ê™q3”£ àk‚£ Æíg?ÝÆ Ÿ>}Ô~·³»¸0íæÒÐðèÑ÷ŸÂ8³9nrÚ©LIz|0 d¥¹îüVt»åû;;»ÜQ}É–J¡7™^ÇnÊ!oÑÈÑ@C=#  6ø©Zp“ê©<êtìªï·… ì×ñ Iþ‡ò¬×nw@‚ñž›õÇŽÝ-[æÜœ× »VÔ/Ì7ðs©×\v‘S÷Ú ºxõ™ÏkµR®¹½^€Ûh ÌU'ÔåŠd—Ò™!P–I*?N£x¹9Âý.ÑíRʆçá„"ÿ|&²Ïˆq‹>¹Rk'2—ŽJlÆÑ8a’tšÍkRÖ{½Ÿê ÇîUÌÜ4RQVœÚélšt˾%=÷åã§»³‹2Ͻ8–#/²ã‚!ÆQFšâ$! ›Çtÿþûï¹~F@âÃ×Ýí9мèÆáCtž)å]4À%4Ý>­¿o¢‚öÀ¸ñ%ã¨Û¨i6—tðDŒß€Å.%¿æÉÒ» ó¨± 9KwvwÁüpHe©N8/cës)&áõ>æ»?a7!µaÑJ„Ü)¼;ÄQ”,z•î` ŽNÙÙ†EÏR¬7M“J™æ¿¦E¤—ƒdŒÝ²YšZv5{ R™gq¨d–uMf€ÁË*ª^Ý c4ªÐj „Zd„ï½^ÝE³4Mgu!uÜÆÀåd)ºÑ¥ªØz¦–Y~>aÿgÁÆÆ¸)J1n^9É݋ۢ?Øv-Ï{¥R/Œ(Ž“èMÕÂ^LÀÝ¥_L¾—˼+òN¹Œ÷³0ŠªIIùþÁ`ÄÄ1×f6Ï.duä‰öÕ õ´¤Žî˜ÉÔ“Åu4¢¢¾xõf³É—FG¾Ðœ2?øU`mm /"8Äsís?¹qZÙùËêÅæÒÛ7òкî fxټ¢(Ó» jÀhðíÿý¿Ç|Ã4›ê8`œ Ý››¿â(ê½F}åú5¡²›ž'àï'!ó^è˜MÙnçý5“ï»àI\[¼ˆRª|™Y2RZ#õ†òAƒ§2òò(ê•+š2E…«–\S"Eá$¤;A!H4¦qå¸z&•#2W²‘º””3ãèv…—£xCK}òû䆚óŸç³·ñ0nžÉÀ‹yMÙ@T -ôU4P†ø0L]÷ÎïÛߋ̒í×¹%EW ì§;Žz{Ö›·~ž‡/^8óóíõåTŒì+s î0 â¬ÄGP®¯¯ó¬#Øôöö¶tFXÝX¨1@ÌŸZKè }¹«ó¥AüÑWA‰Ý½½=”8ù7ß|ƒÓ»A·_ØÐƒÊ© 縎샣sò3Dñ„Ñð¬ãÆæ¯ÅÊVËÇímm½õFãë~úìùí[7ZrH0¿õ›/0&+»×û#jL³_;–ƒ­áÞR~p®!_ vMÃ$÷²Ù?qÆÎiÓzÆOõÁ4ýÓ-Ë1hrñÀÃ>²q?h_EL¢ò2y´ÁVNŒ|äåÄÁ‚ú~„Ì»OÕÆÃ¸Í¾µZ-üðPÄq—M zPñò‡×8[¦Îþî‹n{WF‘ÀÎàœŠ,Oø—–ª3ÞÅÜZœ]rœ÷ì˜1°8ó©+…‚Z\šç¹ž? ³o ,Ó^l3vscMÉÑ…ý×B9Ðõ쥾ÜÀÕùhlûí·Œ×8_ïc‡—èpÀ“ÇË'8™€<Ù¶3ìÍÎTY/Š$EtMæg¥ÔÖò•÷k€·^¾BÙòÛ€ãíß”×­\ß¡,psIëPd BëÆç'~Uaø>ºnÀ!í;‰ú{z–Gv?zãb—~¯b9x†)T:ãæ—.]b@)bàfº­+M³bY5Ó\¬×Öž?ý}#ìõH“ŒfÆ©¢,2è%¦_¸°87w¹^ŸÓäZ{‡Ú·.Ôl!svU—õ%`š! ®ë³q¯áO­k®^ §ázö“ðy»õøqò8’”ööööQ¾{û†"{™íjïï·ºšššÔë,;s´»ê© @çëׯ­Á»}ßçh‰‰ÜáH›¼ijÿÌ66Æ]Ñ’ j ×Z%€l­URìÒíºs±¯ý7ßßMH8‰…¼3S½‡Ñz.‰]ˆ÷¼¹ÅÅfÑ×,†€u8±¸d5<Ð1$Ea“ÆG´1Cô×òŒÁð†ŠO6ýú·ß:íN¤–8fiZ2Íï°ÝnXV X¡¥cÕF6»Ž\n.-9…¨’Fƒf Cÿ†!Çu¦RiƲïàÚs`ÉPt ÜS›¤ÍÇ­±›WÙxž'> âêBš}®V[f*½º²èZ©(Í?=‘˜’x7­½L•œ7À§Ê²²m×Ô-Œ¾œöˆ¾KúTÖOÄH‰cê›7QûmHž¦’”ã¢h ”Rš9(ëõºmÛcF@ºœëŽ·¾jwa~>‰hol¾À!@ù×ëÅ5ÜŒ}âØ^¹~Ñü_ò¸§6Ig÷Ÿí¨#êx—ýµ·3êçʨE;Y%I D3I¢(2J%·Û­{:ÖFº8*ŸR®o̦4æÌ7nnÿöêâÅ‹vË©ÝöȲÓñëµ:ÉÑXUÍÒñMWpKÞ¾}SyKÔµ‹ ¯A¡~h–H øÝ¿¬b¤õæ`’å+—Ño"!%b ÜS›¬3Žû„A±ÑqnnŒrdG všAð*IüŸò<Ê2ìF ÝÛÛÕ[·Öƒ`n~þ ô-•@äË–J¦>p‘]¼ŠÞ=âR£ctáå9¼–G/äá)®ápÞÕ͆ßòœf#×—._ÙßÃ8·Œ¾pá‹ÃÊ0è4sRâlå^8>àf×v’XÅÈÞ¥OíЂIv¡x ÙÕ̤ïÆëvqèœ-À)Ú4YðÔNbg™qÿÙŽœ1GÊîÞÞß]äºU*y¶½ëûñâbçùóÿ^]vKu¥â=#D×u,kXã¾£DôîÑQx¸ËGQ{oo¯(E«ÏÃË|PÉ8®×mò‹-X+èRUÊ€wóâ%¿µ7?w«Ói5—š)z½ R±Æ #£Š•ÃA~î{ÌÐ'»ð}š,xj“´sĸÿ°£òkwwv~(—ó0|\­º€ò4L³W©äÍæ^«õC*gÂÀè…F–;õú½$É´Š7›PŽäX@Ô?~üxuuõˆ:ÚLœ‡»èâï7nû­ö6¥%žºEýßþÏò•Ë[/_=¸TÕÊ%V€\¹~íÉÓç(±}÷îêÑTœÚiÙ$ÎïøúõktlµZF£¨TÅìU)šÑÂà¾øšÁ vó²Z._Ë£ý°ìFF˜ô¢x@Å›éö@VjåUïhÀRÝ@^VÐù"ãv‹³ˆL¢Ùå‚, ‹}>|ˆOøõõüUhovjó:%eŒã,ù2 5^„øOĸó<£<è™xóæ-6Xgæó0I¹•¥oZV"¥Ï~üdÁAØ×j_¾|_"§.|_½zµl•ðGϳÄÀs›½'ÝÖÞòýw;»Ž \gàöI/ÑAÉúŠ å¥Ož=[\X@ËFÃCB|ß/.^Òá“ZeqR3¼S;¶Aâü‡9ª¤¨ÆW,AšÔòJ¼GÇêßÁbK)ìÆ»eEŠN&Œ|h‰îšë£G˜L±ÍHÊ2­ì²@åêê*P˜]ؼËøþî»ï¾úê+NT¦òÏvX¾•ÄŠ+Dr‚£1«r³7Zjïµµµ‘2ÃRã,¸¨±û1n0D|·ÿØzMŸ¨Û?ñÓwV,W’|@mDZ1Þe!Òñ“·;]npmlãQƇÖ×ÖÒ,]ZX*™eÙ!Ò~²`¦Ûø·¹ùÂó<”® nÇéûmÔ T.º%4#ˆ·|nƒ’õº¤lk¯78.•ŸDÅTŠ©ü\Ù9eÜ(v|]‚H¼{÷OßÁ:͵amAU-Ð !ö„@MÏŸ¨d—¼«q°˜TLSû¢‚6§%+ |3s×ܬÁ-”¿…A™õ‹ªÜ܇…Ù >òË–×ë<¹Á'bÜ,ÍÜ\ZìtÜùdöˆ¹Ï‹Ýـڔ·úÇÏäñ“gi¦‡¸6Pû×_i5å]½|‰þàå§;ÐÉ‚™nxIÈ<1ÃÐ×Y”[/_­\¿Êe¨”sÙOž>c­Å;·o µbëåK°í•ë×PÙ˜¢ö¹²sǸYð„“ óItéûÅÅÅÖþ³d›Îú²7‘Bí¶Bí¥b<‰ø!ò0Èj¨ÕøZvàf€¶¬ Í#ÐÈæ í•Ö||J­ÊÍ …µŠ÷G¾ 6–ˆãþDŒ;ϳ²ef)Ið%ú¹3K-Ç¥TŸˆqϘn?}úÌQôÙkÔ±Í+‡Ùfó‚JDT½ÕòÁÇÑåîÝUÖZÜØxqûöMÔ,/_AÀ÷ÝÆê@¼ÊÔθ;Æ­;û¸+”Ä’ò›%qÏÈ£ˆÞb֌ڎâÚ¶ˆý(Ä{ò)·ž?Ô*}|Eâ¢@¶FLÜ x.;I8™™ŽÎ’âKo33Ÿ±4 6x:Q«roll°oD«x/‡fEÕ”©ñûDŒ›ÓrÄÔŽŸ,¤Z†¾Gü{÷þ•G l8¶mY”!A’3ƒún ^$š+O÷ˆÀö€£ UÂ7žÕTÐÿœµМ®¾¼|Ù£äRL@6`jÇ·óȸ± Ô.JîõËZšºIlí섲½Wv{"į» µ»ÊCÒ–'[[»]ÃìN1ý‚(`®PøÈÓ’Œ¶xÚ9¹°PÞg.Qʯ¬£Í““œ¥_ÑÛ»Êâs±‹ Öժܸƒx‘ú k‹KØçÇ}¦ìøÉ‚ÜvdÛo}yõj'üKjñÅb*iÞ¹Ûñu²`ö“H)™w'ýX@÷ ç pÓÔj_½¥° •”¯÷µy6}Ú[[¯ÀÄå©æÊ›ÚlâÄù;šfÙ4Ý,w¢°× s#ˆÉ]Ò¡ÐBmSùµI'/jåzÕq«Õ÷r²¼¡u´OIy©=,òÇñZðOïjoæÅ È¥PbÜ|•••^³ÎYt&)~´amña©ñ3 R•ªÚvÛß·m¸ N}X¹·û¶j;»»ï,ÓLN/eÚgoÇOLsÝxÓ2›KK9B\[Æ8Â2˜:Y0#u«å³c¯<<)üäé3•á$º<¯®Y-9M$‰v±P€WÇö¢’h4<­µ¸½ýûíÛ·66_àÐÊÊ5ì6›&ý}NíÏÙ¹cÜéhY5`s½þõ£GÿÕñ^“ÛïË•¹(kWIêbÞ¶ßKé¹Ç"”ëm=WÉX|¨ -ú ]§u×µä÷ÈeîZ•[wøh#ïê㸚a” ë83Ä©ë èŒ,Û`ÙûíÛ7®[ëPÄKýO>>ÿ¼vÒdÁÕJe¦F‘•ŠZ€“&Šǽ‚ɋɂ‰A»„ÎBEòñÊïÀê€o–t)ê+²%kæ¢üÚýkË÷ûZ‹k‰Lîܾ ºHÿέ[46;•”¸6P{~þ‹¨xW :ÚGQÓþú‚‡¡ùÇ{)ì6° ïv}”v«dš%ˆÝÛ·¯ñe¾øõ—šMòa›S‘Œ#ÙI“›¦”®ÔêY±f·ã+ábY\Dš,ÂÑ Š@|NàÆÎ÷ï1§Öªä¬¯È!(ä׸ƒÿ–¯\æp@¡ÔQsG)1êpÀ©#;ƒÄùØUÞpÛ…4-e™l)­ô<¯Øö 6мµ¨âý9~õ¼dƒS÷L³*ebYe ù@Ùít¯_oã—Þît@Ö¦À}D;i²`•X`ðüx²à‘ Š}!.ËùPDôõy¦‘Ý,ù¡ÑL&<·ÉØÍÅtÎù´3HœOÒdÆq*¥’åy 5áâôõ¸«†7Èÿoïk›Û6Ò- ø*‹”DYbbimɶlljLɹw][5®º•ºuÿïÌ×Ýýä[uãÝgâ‰-Çv2²ÊÑI‰¯ ¹§û-˜¤$’’@HêF$žî>Ïl"q™ú0€jj~#ˆ»o¨·í­MftœžÎÈðiÜü~B@É‚{¹žÉô·OfÍå@…óÈž‘wÀD*gW8,-æç'íGZ2 h«Õn ž·Ö` É‚ |§pÖ`º²ºÊ[ÆŒ:YåÄÄ„NVɱ°gäǼB¯÷Ëä0xÓ®[,T6ôþÃE*•ª9#2&ŽÁ8Báì ¨R©è„“333\ÁFòuÌK4|F~Üs7YûÍ›7´ÞáÔç+Ëû9…!nƒq"䊛¬ýÛo¿Qq£0þdºa*nÎljuÒŸ‰·öäÓvÛºü [º<»³ðöÏêùÄ]GTxØå¼dy?×0Äm0N„_q™L†‘D"ó2² ê÷3òãæŒsÚ½r²Œß{-ÄÑÞÚÌDÛžp`¸^vUHc©¾÷ð¼dy?׸wÊŸ÷²uù^¸"vʲŲ¤´8Ww 䊛“ÈðÊÖ†îÆ’î©ô™‹©Žµ5øùqooos %Tȩ́ ¸õfBxþü9ízhxª¥g7‰©l5}-¼É¬…µ‹7gÕ÷Vˆ›@ïÞ›v^²¼Ÿk\„dÁLìP®à÷Ueu`§;"N$ãçdÙ‘x, ¢8_±Â+nAg¾ÈÓžê»+þpF~Ü´s"“b/½³———ií·`ùìÙ3,é¯Mç)ºl“ôïÞ½Ëb}-¼Ÿ>}Êü XÒÛ_*TˆJúVøæÍ›ÕÕÕ¾O¾ó’åý\ã"$ Æc£,Óñlî—e'’mÙÎ¥yçÂNOŠVÛÊLM‹–«ÝÏÏ B®¸õ!P—LJäâpšÿñÇétúìü¸™@R§ÊBV§c×[Ð0”ÑþÚ1/u=»!¨™„á0 oöˆê” Œœ`yX…x¨4ér¿ëׯ3Þ§&ì7›ny¿Ô•,”]–)ÞKÊ Ê¡ekJÈäîÌest.`¡òæÙÉ…AÈ7 0ÏdW_¾„ lÊmn9#?nþÉÐÚ[p±¥Ë³{ o¾'=vŽQÜà¤É‚‰$´vR¬åMw"'"Ÿ·Bú—|’,XtLZ~Y!´+2ý˜“ÏÌåæŽÍLž/~\^ºnK^„_q{³";^µW ¾™Ú«„…ÏÈûˆöpkÉ}ÞFq€@‡Í1óäÛw¿vÜ´!º+$ÂÇæÎç7ÀøÌqcXû 䊛‘c„„oŠ}Ŧñã&Œâ'MlÛV½Vk)[F¡>3•ø¦¥¦!$ &¨¸®áKK7@ÐB™õ ’ 8“IëJÆ}Ó N !WÜÃhü¸…QÜà¤É‚·6ÿ˜Ÿ›«”÷-5„¬])ïE"Ž?Y°³¨ÐŠÃô»ŽÌÌ„8&‡ûCÈ÷PàÇ=^«îaw8…dÁµZYˆ)&¹ kc]‰îƒdÁ‚9'“IfL¦’³Ù,ˆ=h.àY5‚и/Â)œ5ÂæÇ=¸U÷)Þ(îp É‚“‰Ä^i×KìBkËñ‚=É‚å`>•Xgæ–s/.,€è yÓ9y¡BáìGØü¸9£’#ÀwXËǘÁ(îP²`ÁÙí*0óë-ß<üJ X¨á€œ¶cXû äŠ;l~Ü`sìÅ.ºÿ(=-žcñ¡Ë ó!ôúµrÅïµ}Šänw(Y°8._𱹀ŧp .¯¸CåÇ ÊF±íím´6ËÖžP$bÎÙaIZ êŸÌaæÝ¨í0sí`w(Y°8._°ÁåDÈwØü¸9ë](6w-..âOìåC…d¶ÑÞn‚t7¤•6õ5k£×6êék®=Œâ'vÑ#U˹ìuüÊx®,¡ ÆíJ*†ÎÁxb?îºh©%8=ZÅÆà~ÜXb+ ]p4Ø;{÷.[ÎIðXÉårÏž=c€[À¿X2ëýG1¦P@L¹À:]P´§ÕÉAÅ]ÞßwËÚXÊŒ ©+2Ÿ™mR— Š â[QÙ¢–­$Íz­:î„F£ÎØ”eYãnË(¹âÖ‡„Ç› æF.C"ø“~ܺ*£’AT«µñ'Ž¢´gmÌ®`bÜç¸#¶Ì“ž ·™J%íˆÝ:WÉNvÿZÆÝœ¡ò·>$T~Ü\§¥ŸPÿôéÓ®2Ú©Šó3ÁìÚY›½¬g×WdbÜà"·m[­¶•ËdZ­F£V9¿nyÂZ?Õép΂TáWÜ¡òãÖ§‹Ê©ËÚ$hÍ﬿\ #×t’ò;kã~ƒoý 8Å.qË<¹v$35oL2™ºTÃN(´qáj®SëÜwÈwØü¸ÙQ ÆP-t´Pd­½ýÚÆú£G°òøñc…@ßXaOž<Á!«««ÚÎ<~ô¨ð¡`w¸ÄmYBæÉm¹–­UËúeÉ[æ]¾¥¤6§ªž3ÍrÅ6?n­»i¯ª•8}´Q†ñljng£Ñ`ç$ŸU‡™wëÑâ§£¸À… n9¨\¨.i©7/áÇÏ Ig æ¹BÈwØü¸¹®ã$]pJoJrá‹·0„r„y÷)NÀ1Š;\âîŒ(¿4’ áWÜaöãÖ_ói¤ÕzW%}qfÜÂ(î@pDrÅ=Ôcôã•O·QÜàâ†ÃOynîªeÙøQ«ÁÂ&”|qÐjµ¡µAÙ`Ñrƒ'îp góâÇ=F×^ÅŽ!n)Ä„Õjâ­Ïj÷1W08÷hŠ–œq)Y{ ÃÀC(œ?¹9çÄ{pŸî`w8ޏÕ[´#ÍÿÎåŒjƒAÐö!àS‡\qŸ?n”§ Çг7Ý>Fq€ãzÍH;ƒ³Døwý¸±„烄3hôvÅiîgmº}ŒâfˆˆÁ8rÅN?nŠëh4Š%/îÛØÎ)宅†€¶á~ôè‘ë}¦Ÿ©QÜàrÍ7Œ·úqóDÜY­Ý·±{Q[¾ÿþ{TõôéSmÃýæÍñ©ƒàÁøq£¸ Ɖ+n}HØü¸ù§:;cÙz&êô!¨m¸O×tûņ&nhm°öÆÇÍý²œNf[¶ý¤|léIÑj[™©iÑrm;¢‡7¤Ñ`CvÙD£N*™Œ*œÖõ°Ó_ÇORóÑUv"U.Wpí¸¸|ÜŠT*y¦ž_„\q‡ß›éÌœÀgmº}Œâ£(nhm°öÎή°ì84ƒÝ ÕÕëòKÓnµðÌÌÈDb–erá±v¡Xrwc i+š?UÚRçqùlH¥ÄI*ïbgÿµtÁ¿þ½4¬sí\%îB=—“¸Ã¯¸Ï…÷~ú»QÜ`xân·Á>rÀ“e_¿~#NóiÏñÿ2*×ng¦Ò*ö—ªUËú@²v±X|ûî­¸——n`Ü}Z´EJÅ)r¹y·£>FäDVµþþÃâÂ5ÍΧ‚Û kç76ü{­Ï-4þjíg,±~ÿþ½¨ë¤ø¹d¹â>/~Ü¡‚QÜ`”Q%­VÛV&&‰DtÂvˆ|f¯_¯ýË·ßâ““³¹ê6°Ð˜ä¬Üü¼ëJâvÞ¹}›8û‹K¡ô,þëìò>QlázôÓø ŸäSVµµµ½þþ=*W¢ø *pÆ/yµÜŽ*WX3#<U‡\q{à¸ü¸C£¸ÀˆÃ¨Ã7DiÀ¯ziÀ>XùñǯLHåy‚]þC:it m—»°‚?A^’ò@Oä>U {+¾@p±Q"ÿ²ªd*)Ùê®'„YÁÜ]˜/jÊÓ1eg„Oë³$SIÝàJ¹Ó@yÀŸ \ÖL2ÕUT|Í2¨„Ç¢ry]Š”SÞÀ®‚SL¥’årKT…×-é‹E]ƒºÕÑS&…!WÜCxF~Üzã‘“^?nnÁ°sızþŽ8P¸QÜ`ôqÜ4Ÿ|ñâÅ7ß|C›§OŸª.”Þ{Ë»^ßN:=I‚Oýžß}e¥”™¡h…ž…ÇW~ýýF$ Ò±$É...l¾ÞZ\X¨HÆlp<ÖÚÚë\n~}ýŠ¡À«µŸs¹9Ô¹¶ös6;£ã3Ø{ÿ‹{¨…â_ñ‹üÄ]‹ ×pÞB¡È½ ’p‰F¢ jò¯ t\ûö—åå?¾øéËû÷°Žå±[ò2óÅ‚¤côå÷DçéÒP‚ýŽåW!¹[VøšÍ¸³"_ApQ¸8ãòÒ lÌ\DÖaÎaðãÖ[ŽðÚîõãæŸœ3‰oíaWÊbzræ ^TÇ&m0Š;œÈ«Ÿ÷ööö_ÿú×7oÞüå/Jî®®NL\jf­ŒW”ËÞR#«%þ|¥8—¬MÚÿ¦Ói+ÔèÖÖÖ¦üæÝRëòÀ‚WÀ럔ÿãp]èRøäÿšï,ê9ÑÀÙõ¿¢X¬:›ÍB £ ¹†²TÏòÙòk§3“™Lü‰%*ĆÚý1,y,£4²µnžƒ‹}û ÞHÖÎø^x÷‹‡{•h?nmÉM?n€Éé,¬ý¸ñZ©üÔjíºn¾Ù,E"…XÌ¥÷^é?·6ÿWþ·ÿ½þÏÿ¹»ó¡Pø£kJ$ Ϻ”P|ñ'–ZwÛ»Êp K°]2÷’¬_ñ³gÏ^¾|ùüùs¿úî =·“£{ ¯’p¢™“ !|êÐÚü%üùÏžŸŸ›ÏÍ·ÜAg肤ÃfAU Ý|~C’/ĵ+Yµ\®à + †€ï’•Ê»w¿®Ü¾µöú祥ëØ[)ÏàìýUT<]¨¨wEÕ°µÕ©*£bÖÉT’Q¬Cs—Á"Ñ 9"EƯ±|º¸x mó“È%ΛIO¢À׿bå7;ÑN`‡pý¡Uo ²ÁæXê‹e€¾ëŒ"9àíž_U>ŸÇF2kžé•n›¦r]3 ú;Ì0 gá—Ëûd€ùÜgƒ(nã£wÄ‘ó€ÁVósWËåòçßýÛÏxððÁôô X;‹*¡Ñêʘ㠮Ó:zT‰äh¯«piéÆúûX oXʃ³  óB~Bò¬¬Ü–/ïËÀ1–P¸`7ëq2 øÕJ9œI£…)Eè¬jsk ÏÝÿ.°äòò œ—ƒq ¹ŒT*Ÿÿ(²{¡‚qvÕc)!i…lVþ)¡óÔ[ªo–!ÝeªøØe‹õÏfgPÚ©›wŽ••ÛPýØ…3âÏ\nnÜß“³BÈwü¸É‰B¹lS“jÑ ªæuñ©O·Þ‚£Ðfì³gÏ ³°Ž §ÒÒsëQI.—ãdzÂF ,@ŽfÎýa«ž?Žª@ÖÚò¤½[[›©;++Pܳ³sFqŸ†&îˆ-g´ƒlÉæÕ«Wù½_º±„åôÌ4ج-d²J«+ÛGtpä²7(Ø-ÓHWR}ƒ‹Q2©F_|ýð+ŠP5â[êS”ÔYU¥Úå0[0)Vî‘wg³YÙØ`U_~qOR¶ •HbõŸå¾z€%Y ØYÑr 5ƒ@U0ºˆ2h*yõúõâÂÍèÄ^ܖ錓Ž{þ÷­­-¬«XGÃá[…| $Y¿bü™Üü<–_§¾*¨· u±PÕ<œÖ?àŒwnß–/é‹)FB®¸Å)øq{þ®5ÅÝE1¸7èëdO0¡³6v=}úDŒufH@1lʧûÉ“'ÜÍ(6X˜B~Fep¬î¼{÷.¶°$Ö©ñu¤Q 4ýðáCffï«7ÂE&ºéãD´Çá›››·nýëîîög÷¾0ŠûŒ04qƒ—ñÚÕj[¹LÆq¬x,‚—G*—–[Çûµ¶ë6TJøƒ4†QoXXOÏœäX7EÊ’Ž%ëyôb‰%Éø 5)¨U4D—ä(Ù©žà\®ÓÕ”kŒ/Ï*zåu¤ÂßÿYØàYµ‚ çåæ;²—ñqÐ+ª}´ú'4uV5ŒO}u%¨ÑÎb¡Ä§‘<…ãB°³‘<{fõO¬qáštˆ£°Ü-|Ã/$B®¸õ!côãÖ)ʶ··é²Í`×)Ã{}ºý#Rp IùñãÇ<–’YO¦Ç:-«pR/íMø>!¼ð:x™”Mõ­sî ˜¶üF1œ·¥V­Ê—Ýý=ã># MÜÒóÏŽd¦äŒvhTÅ>üß~ mìUî-?q ÅV '§ãïñ‰WI‡¾½¨Kr`uڛآËt-úîz;ñ’¹<¬ªË¥ïY'¤žÓiF:*{½ñÝôé4FFÞBê«.GüyŸß;¯nmWýþ ïE\ô 8áWÜbÜ~Ü SÒ¢P]Ž<;6>{öL ãÓ ‚¦•ñE~'ƒ3 ºÿyÆ6€¬AÊ`m|Þ:TÅ™Ÿ`jmùMmŽÛ2™N»úÔôŒÇ}Fš¸-KHÏ¿–kÙÑZµÜ¨ÛýÊXJj·TˆðàëIê;·»×ªi’'t’:¢=Ç"“QÓj|ÇzO&Ùù =^Qc`üo'÷½ºx¿â»7CÉþAÜ\™žžfRàÃ|º…7‚‡c;—ÜÈĺÙZe£B<HÁØ85ö‚¯QžR Ýâ¼(L+mùýöí[ÍâD"©É(n3ŽûŒ0# ?ªD1²vj5èÂITü%DÈwü¸ì&)c‹?Žvå>l g*,AÁ$k}"†ˆÖÃWô:±–1Ÿ7ýcÉà| j[p,ç®^ÆœÉÉ+FqŸLê2ƒq"äŠ;?ná ÅæÊ}ØáykVå®® ë]y„)½QüN±¯Û¦Ñ2d¤mÁ±ÝuN$"µöä¤QÜgCÜãDø·7+rl~ÜLgsZè{¿šfï¨î‰Õ¬Ý{£»u-ÙP°gÒ(îÑ`ˆÛ`œ¹â¾œ~Ü]’ØwÀ`ˆÛ`œ¹âöÀ àÇ=SwÁ¸CÜãDÈ÷Pž©÷aÎÚÇš¬£¸À(9'ו!¿Ö!Cý"vĶ-9UÇRÃ/߈@ƒNá¬?nŽ$ºDq_¢#Œâ£w­V/Wª€rØé&åˆ#ÍLðµ¶ìˆœªc‰K8”Û`@„P8û¡ý¸µ ý¸±‚äkÝ?©ý¸£Ñv¥òS<žR1îZ$RÅÚôãnº•²U­X­vrròOøMN~ÖÅÂôà^__çHmŽfyúô)'.Ò‡Äß—ˆ%MVCÂÝFq€¡‰Z¬½ñqs¿,¿Í¶e;Ÿ¦Äg–ž­¶•™š-×¶#zÐwWŽGí¢g÷úN6ŸgØ{ÈP•°pÙ—)SØ<»ÁIrÅ?îíímœq[¡·Íxœè‰9þ˧‘ŠlXÅFQÜÐÚ`í]aÙñxÚ=:󺮤wË‘Çvž%\%î9=¼Áà¿â‰7x™ìÜåÊÍ™/zºìà€©ÈNFq€á‰»ÝÆWA~Y-ûúõétš_ Z…ÉIºívf*­¦§jÕ²>¬ÍôB¥T¿³r ¦drEiÃuT*EÖf¦Ç¹›IÈÞ½ûEWÒ»å°cõ³­Z^º¡2IJãÙû÷ï} Á© äŠ;T~ÜD—+÷ââ"Èš¾}´{åïQ{dÓô•3õƒùL⣌*iµÚÐÒ¶eA}€Ú®^½Êoíü/ñë×kÿòí·øð¤ò­ÛúÃ(«tbàÄœòÃÄ2¿ñ1ž,¨„8dðr²L¥ÜÉ^¦XUôøv…\Š…a%t…Íç?â›[Û¨Gû õ´8XW‚ši×_½– Q>“I3Ÿ™®ŠÐ•\Ǿ rÅ-BãÇí?‘ß•›éÖ×שǙ jl:Š n"xrÅFèD~Ç¡i˜+?þøã• ©R“*L×QÂ[[Û*e{17?·)×£*ŸäLY%¸Áº£¶wVv©n&=É%ëé ¹lmoã\ÌÓèº2±úÖ–L´Ž-ŸåäCB¯‹T¥©·+S§3ë#¸»àS*–[¤‘%} Ð5Û»üŽG¶áî"äŠ[2v?nýlèråf4œi…éŽÝå‘Ý5=ÅFÇ;ï/^|óÍ7ü=}úT#Ôb±þtÆl ×J'õ—ÌúXñØjwíõÏÙ™áÕÚϳÙ,IÙéÌ$Ó‰‘.uÈ…Qr%ÊdlÙÜÚ’™ÆT¿ÿïyÙ°Wk¯Y2_=3J¨2[âëï?,/]çJî®TôwVn õ4Zÿ§Ã±*1¦aí“"üŠ[„ÛÄÝ $ú\¹™õF$AS’Ó#›Æ~AvNÅì“ âÆóÿ¯ý+^Çþò—¿õÅ‹ÛÄÄ•Þ'<©Ayù íW¯_Ëì•Nnu,|ñ48Ö±]æ!(eD%7ÖႦ)±ý!ÔÉ]Šú·°äv<À¿ü–¯­½f^]’ùÌøØžjÎåæÔ <…ÊRÖøäÀ·¿@ÔcËl6«r`¾Þ¯Èà$ÐúW “ ÈéÇÍ¡ÜÂû¶ôúqsÙnwü¸e¸»\©ÕªµjÍ­Ö¶«5G­Çªžw³-Ú] Ó~ÜÀãǹB½Lmí"|®ÜÚùO;ùiÇm†\ü!òÀ$*`mãxv8ÑÌIvvG"<ö)aþüç?ÏÏÏÍçæ[nŸŸcwnß– “IÐ(t·‡…Ö^¹} „.T„¤X,Éw¹Ó·éÊìc®Nà 3» $tÉé z@HQ¬×Ö~F ‚«°Œ$há}{™h(ÿ¥xWùkôL^ ƒ/.^Si$Ý>Ùv †DÈw¨ü¸s¹ß~WnlD“´ã6V±|ùò%k€¢)J`Ÿ©QÜ`tâ¦]/¾/^¼`Òèï¾ûnQbœ[­ìu•gO Èì,…mYQ¤=?ÁÚ×1Ë캧ry’ÀèÒÒ :h·¨ò¦*2c¯&w™|Í—ˆÒk­ã?P2k¯¯¸ÿžkäöi ä1îðøq?yò+\ú]¹{·9gGçö;ÿã£wÄ‘2Ü7?w¢øóïþí‡ç?à\àbÆ…êfŒ6\àŒ›´Êð;›A3üæó++·ñhÁ®ååø3—›÷gwrÅ?n1²Ë•[ôsÜ*ÌÍpeðpŒâCwÄ–3ÚÓ“¢‘l^½z•_ˆ¥KXNÏLƒéÀÚÂKìçn*îÜüÜ«µŸn£P,B_ƒ”Uodcqa[@Ž{þƒêúëäí}ûîWu¬ƒZã(޶–c76î¬ÜÂïgaAF0°žßØ(J`ç È7þúáW%´¡î±NáœL%½ìÃ2Ǩ™vXB_3JþuÊàœ •Cn7ÜâÛ·eh%m¾g'EøwHü¸WÍ1/¯Í)~LCÁ(î`½~ùC"™ªVʸkzíØjµz­Þ(í•3™Ljbß>ÀoNF­OŸßþ^©ÙÄj§C¼kŸã±³2xÝhlnmCw¿Z{ÍÁ$‹ ×tÊ]Ñ3Ãû\•e½¢b/Ø«µ9ƒ×þ’ÂÓìrªN¹3rœ´ÝΤM—ƒÿôØØ;ðR åÞÛ/çów‹{n³õàÁס׮];yµ]]|CñoDju¯XÜ)—·÷ãƒÁÈ)•“’š`íX<>”âŽÅXHD—ø ¥_×? ­¸¥çŸÉLÉíÉd*ªbþo…6{–Ûí–v˜ò’ O‚ 5{ ŸW —2ê­†bWV…,pùZùiÊ]=içà ÙÙm8^ðš“h°¥«¤/–U§vØÓH–ç’Uù›JêfÎé!äŠ{Ø/€÷Éaw>Ë»%¤ç_˵ìh­ZnÔí~e,&yW/˜Æa‰týÃò2™ÎàŸÏår?üð ßÿ=Uy_Cp?Œâ†¸ Ɖð+î ý¸ ºMÑn¤¬Ã 7sà¶.ƒ‡— Y–ï qmõHAmhå÷===­«ÕgÔKTN‹pqœU€QÜÀ·Á8rŰ·ð‚OŸ>ÕvÛàÖ7oÞà¤85ÚÌ9“( !Ì2ÐË$hŠe\¯ DzÎõõuMÜ t°7’ƼwïÞ¥*×í!û“0 @7Š;œÈdÊÀà„ Œ&œƒ9ðÄ~ÜuÑRKpz´.Š#ü¸ývÛ¨"÷Ù³g`UP9X›¦%àk²³.óüùsúÍêxËï¿ÿUaÉd XòéÂq·¬íÑ£Gʦb‘m~éºcœIOûªcowyÜ},kcYÞ/¥RWZͦò`0L–wƒq"äŠ[€·ð²¹ÓM[Ûm3Ï$”2·0O[Â-ÔÚtßö‡8ð' øSêèñ' bÔ•-¼È YûTƘÅL–wƒq"ä1n}H~ÜÂ{¨€—éÚ¦í¶iE­{iÝ{-¹‡½ z ðuŠê¾P<3üT>øM61î\–÷¾)€‡Êæ.ú%t?lûÙâ ‚Gø7ý¸ñý¡àa~ܬªZíøq[méÇ-&eµ“Jk'„çÇ ÉsT RÛmÓ«D{½úgÉwYrûCŒo`£6ô7˜^¾|É› ëÔ½—]§ðû[é6Š;œåý óºÚ2P"v jÅq,ýüúV>T¢wƒ1"äŠ;x?nàîÝ» Tá³Û^@ƒnÝ}-¹¡Ž¹‚±|øð!»7!Éóù<‡ýáWÁ³0’Îø8ª‚ÆçДååeÅ6°¬óX28pô¯É(î\–÷®Ìëê±kho©w¿.É7t|’DïcDÈw~ÜB7M«««~»m°*¤.¾íØòèÑ#¡"Ý]–ÜÂí¨¯”JÌ‹ò¨_gDÊv8â› ]¨°.ÖïèÍ&Âg~ÄM3Š;—å4ZQÙd¤ÇžËúO7ê0¿» Ïª‚Nâ®í¥tFöÅ……­­m‘9•DïÓ)ç?©Ð}–Uº~mV%<#*nìÛZ}½ÂØQ‡+îX€~Üút¥§«Õ¶Úþ 8½–Ü 0Îì·Ô]” }ªfÿ‰ô±:6šû:z\²,k¯' ¦ÁËG,ã‰daw+žœ¨W+19€Ò` —å]9§Ê@‡ _(ÅívrHB;JJ³¤6PÕ^¬Ì¬3²ËD6`sç ûɽ7X-É—~³´äÃåy”fgácí®Öš|ðC!üŠÛ›yæ~Ü„Ž)÷5¸‡”¾R*tI‡Ú¹+x}Ø‰ŽØu4ÀÚk‰dj¯T˜¸’®Tö¯Lf ©{—ÉÔ•íMù$ÛÜŒ8¼Äxify? Åb <)e.7¯Í¸©mï!ó„IFÖÙ×?0M~cãä‰ÞÉÚÿïùßAñoßþ‚-.^+ªüůÖ~Æ.08B<‹LyœßAc»»!Û¥SΛ|ðC!䊛‘c„„ 7ú† PZeb"ÛlâEÓÜû¬o/)80ûo¾dWÊû–eCwG nG"½Ëbqgo¿¼_ÞÞ-äæfq«ˆáî\–÷ÀC –UV0™@}mí5XûÇ?é ëëï?ˆƒÈƒd@ì’ôýþé$zÇ’¡s°6SÉ=²6©ÖqŽ}ñŸdöw•âÉÁŒÜ^.ÿíùßM>øÑP*Y{0Ò{jÊÉå2 ÿí¿a™Èf#ssñL&yíÚüâââM¬är¹3%n jœ…SlÎút]°m0v4žÀ{‰‹'ä<¦ž¥eEêõÆÆÇ?JÅâÞ~'Xj0Íò~ y!´_¼ø R̽\ñeX—™à½œ ‚ÙU¬ÙU™Þʼn½3DCÍ4ó¨‚gwo©- l¬0¼.u²,ù±P(š|ð£!äŠ{¨OË{í^ [‰ß¡[œLžsÞt·eYÐÝBþBû Ü]5ῦ¬êïáJ/'‚Ëò.³Ò¨q±XbO iW¨—P@]ªiWjð……k̰ ÌdíQÑÙe¼<:ÐóyDïB…¶™t8©¢ÛB΃øpgåwm>ßf/£ì{TÑÝ ÉH÷’É?Bã‹÷þÚ}/sðJº<¸…7æÄoT2¤ ¢J„%$·.âÊØMÎãk±SôCpYÞušv€”ÝÉÝ®¤4.ønyù„*–­:Ã:8H\|’‘]ö’ßÅi$zÇÞ´Ê,,M³™;ª˜$ôT2íNêÁã\Á!&üIBáìGð~Ü:ÅÁúú:DûG Î¡LºÉÚ~n|ù9RÓF}û«•r­VÛ-ìèWUÁ²bƒZ½¡Tʇ£åÒ"¸,ï”É:;»ðr·Sº..,Èín_¸¯>XÿžÖ¿üâù] a•‘=;3ÃÈÆé&zO¦:I&Ëz ª‹RufAÄB¥çåp%›­˜|ð'AÈ÷Xü¸q"Ð(ZèŸÐØÄ`av±®-”ÏXrêŸý»r’±rmPÅKÃ.N½érßöOí>(”qŠÌ4Ûj6Ýν•C ¥­ím&æf&¬zD"ÆtD }ãð]ÄçÚj[¹LÆq¬x,¢³¼·Üzµ²çÏòÎf<0ê Œw ¼êÓe\Bxì2ª˜¿Œ¤~Ç]QÅ £ñ%øÒ+Ãá}àV&z_\¸Ö•è[ü%Á¶”Õþj94ÿáá!T¤[×ÓPJŸÉæ…—S¨nR]RÇOÐ6láåèá€}~Ť7å6¥Lók=ÈZ{dsöc—%·ßz›³f؉ Öæ$u=ÅÆ_FC´7É7¦|À±‹îÞ:iÁc±K×ÉŸ¿Ž´ÄbŽÁ?YSÛøñ?áÕ/»®š5‡ Þz­þÉDGFÆx²¼ë,ìœ\ÃuÿŽÒÓÖõˆRu-ŠÓMô®—„îÕ#rÒ{wÌ×ßhòÁŒ+î€ý¸)·»¶ ©øþ0ˆAâ¦>Kn4‰2Yxª\׆cQ,—˱ڢ̣Gø ó{p Ÿ_ Ÿ `,9ןóéµA v¡fÒá4i~î*hûËû÷Ô/I~óÁÔïÞýÖÞÜÚ†ºÂ[Ë¢ ~F£FqˆPdyýæ§ žËSOôn©FÈ·8?nÏßµ¦¸»(Žðã¦Ü÷Q2Ó}[»£,..BÕb‰àn®¿y󆤹ººŠuN·¡? ¯T‹”ùþûïoÞ¼ùìÙ3°<—ÇúY[_™]ß%°?çXÒÒ„ùÌP?Ú€F2eLå<ã›Áƒ¯¾L¥:þ-õjYˆâ–¬í¨uöó·Œoè¨i–wƒK‚+n}H~Üu/ÿÔakÐåÄÄ„L3ÑkÉ-Ô×¼"F«±šö—AmÏŸ?§y·Ê;ÁwYð2MÀÙKIå.¼Á'Â׃JëWÊš¢èvF}=ÿÔ×ÿñïr†Ä•[¸]ØB¯ÕÍ€«Ò,ï—áWÜ"(?n²¡skGb2¸—¶íÖ™ £E¿iAìfÔî%¼^\ê§ ç¥éÊé8¨—4Ô(]~X\aWjo(\CrwJrw±8I—“×” 7Ä=2LŒÉ`œ¿âÌ›5@½>|øP׉2ä³îœÔ#l ÿ¤×+C:äÍ›7ÙÇ(¹O{ 3Ãzº ýQ†Qò¾ð=<ôHmöÍ?Q^+÷z£îÔ]˜õ§Rr­ñÇ?-â6'B®¸ƒ÷ã&à ŕ¤`"ûY†ÌþèÑ#vE2üMRæš»2°6òFË9ëReVWWu7&3™ñ c¨rT…òdXú}ûMºé.‹e>ŸgyŽ_2;ÏÛx,6•¹"ç׸uWà>x Êæ²R©Vk5êM¤ep4 qŒ!WÜAúqsE^“[q"Ð+NÖ2VCÌ}:Áð†‚øÍ¸iTÒ×È[m“jc>p¤f’ø˜—-èDä÷ïfxÈ“'OøY¹} O»ýýrµZ/vš­æa“‡ÁÚ»»…ý½2î¡é  †¸ †€*$ˆn£^¯U.ìª>:VœH¿ÞíÞ¬§§3õz5[gж[‘ˆ5;›m5›]ãñ¥åˆ$mKV¨*iµœz=Ý{õòÿì­*6¶Z2Ò¥%—mÑÞß·â);™š°­(ôh¥RÆ]qÉYÅNÿÙ[yv"¶ŸšÊ$ñ¹«W''¯$Éx<–N§[­V*•,‹ØŽõx"! Û‘jÏl‘ÏÕ[©VubÉ‘‹º ê±-Ë‘ ZØ‹úËå êoºÍd*©\¢"×Ç«Õ*v•J­éé)!Ÿ šã66¢Q–o>¼O&¥R)b‹ß»j÷aÓÙ¡µÁÚ2±¸ìu"“å}Pâ6)¤Zv­Ã ”Q¢*߃k­v¿Hüò­D¼·<~Õ–°677gggé9`K‚9Ð’¼æàÅO+ ÚÞÙ™¡ƒG<±%!*ûi““LLÕ'_~õ?J{»îá~Ü 2úq§ÓS ÆÝ¶z°—cÒ1Br¥<n™žšÂ½~üø_ã‰$ʵY†¬Íu.Ó“Wº¶Ø¶Ê!è-{Ëà Œ%ΕãÆã]Çr>ô׎K]Ÿˆg»>D@m«T+ÿòí·{{%²¾þO•'¥ÒòMæèþ:É/“kÛQÜ |C䤃Á0JÎI@šÃ¨ 6}Ëà -Ÿ¢Ñ¨e©áƒæ%袀¤]Þ/íïM”ŠIØï[Re2ÜqücóóÏs©§·<ÉDt¯ÁÕ¨WjGàB+Ç¢x5+Y[*í6ȼY­|2£^¯·šñvË93¢u¨A&gBï7]·°»m»ññãÍ›·öJ…ÜgŸ3[£^:òµ@Ægð–ãÄe>0ÿÞ–û{ÅD2U)ï£ôüëû¡ãÚ]×-wêµÚ›7og¦31Ǿ:;s´{ª‚ÖžœL_Q3<Û&{Ù`…¸kµz¹9U¥­WWˆ<='&&,;"§êXÂD¯. :£ó•ã Ùv»ÿ/­áºø†¼ÿˉUò°ò AN !<ðˆ´2}EÚ*–Þø€ßTþ÷Ÿ_[ /û—åý½+““zÙµ7€e<žƒ«ÙБ#>t\8Þ ð ²þñ=H ïT*ɈÊÑ€TO¦&’É8V†¸ÃÐÄ ­ ÖÞø¸¹_––ixýr>·Š7=)Zm+35-ZxŠèAß:M»žîŸÎ>üuºëÇWË«g48iÊÏ´gΫÂë-îõþ^IxVËì}bÆN¡†î–ËåÍ?>‹…ýryj*]…`‹FÄáÖÌ—¼K{¥½b©øÙgŸíîlÎLßfŽÝ0-·'®¤¡»µ¿6>MñéÇí¿FH µÁÚWg³ƒÜ‡h,¢ˆ8Žü‰ÁEqCCµñ",,;'íOb^QËn¸Í\&£‚jQN°Ã2׌6™Òù$Gf.²6“Ó õ6÷è ™Me¿tý®Ü§….^¾g¿ï#­–ùÒcS™eßšgµŒ×-p½¿ü¸¯ Dà]ªÕk¸¯Pµ³³ËÇæD~™š˜¬TöÁª|uƇX“ƒÔ+ü’CVÓ NøýµÕkÙ¸ïîEÆðÄÝnパ“z-ûúõétš‰Ðnã³lµÉdªV-ëÍdíb±Øeë*”óÔÈÌEÖþñ?©îkWÚþ¥’++·(¾8 …ß½ûeiéFÔuNÅóÄ¥X®¿ÿ°¸pí0î>Óœ5.v ã唋ŕbùå÷Ò™IDZ!´Õ²¿|C’”A¼KB9œ€Ëû¥Ü|nìLݵ„â¾2™Ás’˜âna‡?:|ãÊí3!}º‰Žž-FU‚ÏÅVZ¬=77Ç)¿íV‚«Q“I¼u[+,™TL%Õ• v½D øóÎíÛnOüD®²_дëu«+ ä” T®“œáÅ+<𠶨C…ÎLf|ÝÓ'êºØ†÷jÿI1ŸFîÍ'©ß'xQeíó/Äö|þ#^'7·¶™»Ò߀Ã,ÓBT‘œbíõ÷ï×Ö~N&“Ÿåî¿Á€h5›¶kãǦîUÜåòž-G v~Ë2#ëöv>¿åA›eÅÝã¾— #t¢NÒ¶¡µÁÚ×®]óïª×ªxäâ)Ýu>ìN$Úu9KM©r  N9©”+´äŠãÀkÅFÇ›4ÊW3ÆXÈÐòŒnƒI|eQeSŒË,‘ª™%g{m`rH×-1w»ÿD~öìÚ%30¸2q»wèGWØr\Wª"cAEÏ$VxVãXÙÚÚRK™¸¢¦Ïâ'>¿Ûm8ƒ*Ìáùô?ÿ‹ wVn™TmÃBrb­~ÅíxÚEýèÊô׆øøO‹É¡ @pã¸õï9žÔÉ~Ïo€¶düDžARxÑ–’|CþÅ  ³§Ë¬cë˜Û l»¸(Ÿ:>Ž2Œ·0CÉr€6@ø†ÍfgP£ê8…mY[6UzxU‰Ìkƒï¢^÷·Kzý¡ã À¨à¸oä%‚}ò*NêVÆ:ÈÚ/þñžç >æÞŰgA%k2‡ä[åËΠkxûîW0û;™ÿ¬S!S³óŸJëîêSŽ·]2z"Æò•JÖÎŒ—XÁ.¤|.AÓŠdå[BE‰}Ô³)ÿmc©ÖyÒ->–t›q]øKÔ†j——®ó»ÞÕœ´ÞU'ÎR)WÂF‹|/ÊÆsVËÆ©¸ÃÀÔ]K´*•ºÂ§‹n3ÓvóCg²§°½ ^lŒÿgæ6?c‚¹ …⚢QF¢+e™ ý޲c^àÅKs#ù‚ý$KK7ŒÍ ÁƒBu|ëNpžBž¥Rá?þÉí”ÿµ½¢N½µuÐ@=‹J£å2ïpÔy÷îו۷Ö^ÿ¼´t½¨ž1?ƒ«øúáWl3ŽÝTœH=*åO »pQƒ¿NÉÚn#)B÷6ªÒs–ÿ÷oãÆ c~ÀCâÜ)nåÔšÂ/¿’寭s±ƒàˆ[þž•@.K:F¶ýº¯9KK7@X§ 2üVa™pÝãM×u§bå2 ©ëªøIcÔñÂŽJÆÖÉ@VI2%<ÛL%±Eu w2œ±åòÿ^¾ùÎÕ~¡žÝmvRÍ:qZŸ:ÐéYmµ,T·ðúûÙ™™°52ü8w1n|Äø ñÓèUbüµÃ(¿±ˆ²ž‰Z6=‡ºlz:‡ùS¼‹ƒé6ÒGG*é¤oW|ä_Iš*™ï¦ŠW`³Œn¿ÿÀ^/ÆUBö¤¢M&0“ÌÈ,ìì·DIìc&x¡bªÒÕ§ ™Îf³²£‡xÉíR­§d:MÊvÝ’øÁy“²§ŠCƒSù…±D³ï߿Ǹž4ÙlE·Y¥œ?8€Ó¡ŒìYõ€(v_%Aöש²=9þñ'!­–™+÷'œ 9ÎâæGühõO\'kû.^. MÜ[Îh‡¨m¸M|`vÄîiÏ!œþi;Á¤]ã¸!À… }¼}÷+7‚¶„úZä76ÀÐç_?üŠI•ð'Óò¦yˆÓh4Ÿßñɹ’4…ìºLSçnu¢+ } <°kaáxë8‘|tllp»>3&ʪ.ÍÞ6ètÃXÏ4Ò•l…éÞ v'Îfå¦3f›ñ§>]± cÖ• Ä߀••ÛBÅT0ý Ny-áøy4›-Nz²­¶¶ZnµÛ‰D—‰8]­vY[-ó™ÜUÞ€à]ÂÝà ³âN¦®‹;–)—Ëh*>b|ÐøÝ㇀ÆãÏ.í¶™}sºPDê'UëõËÉTµRprD­VLJTÚ+g2™ÔÄDzò @Pkã*=y÷Jrz´ú­ö9é(U‹?×Ö^s 6ß»»†ržðò©«¡q#£»fN²$wñ â®T*¯Ö^S€«pY!G°1HÝu"}8[ÛÕõ¢ Gwà{¬‡ië¥ƒÈæ.^5OÇÀŽðžgºþþ=¼Ø1)ÙÛ/çóÏ,íí]•Y¯¢Î±VË;»EüÎ?ÿ<7›=ºüåDÇz¿qœÛ·o./ß¼2‘;Sw-£ÑXawgO&´lìîï¯]*íãWëæR6;=Ô”÷¡ˆèÁ’~OÒ;¤)íFvvvÿùþ·¡·ôü³#™©ið28²Wò™@CȶÏÑ‘%3éI_§b絚ã¯9;©fÐ o ¹2íq´Ò¼Ž^²f’™ß«ä ¬ž)2Ö‘ì^ž"í‹óaÐïD Þ· þ»ÑÕ$,yRÒ±|–ÈX£ƒ×<¾Œ_ëx7$Ê€½;FD¤a²4¼ÿžÏ'¥Ä>Þj¹% Q[Ç–¿œà]‡k[Öä•ÉJyo6›…Â…úϲ°»Õvy¿¼ññýýýA>tÛ–ßvÇøkŸе…°!—c±843ùthÅÝVÜ/äÏ8J‚îw.‹6rxDÈDïGþVý¢õŒDe§¸ð¨Tj»…ÂÇ?¶wvwñDV9½,5·¹ÿ‡‹]rö3¾-xÁ–6þÑ£Ë_Nð.Åâ±ÉÉÉ›ËKŸ}öy,†ïç•ry/yçÔŠ/T`ˆl{GzXSpñ¥êˆCè-…%9¶üåîO,M$™t&‘L@UȾJܱÐ,ëµZ¥ZÝßÛÛÛ/KÃñüµãñø• éÔ ‘8ÈMàx•h,FâvMGˆø„µ­Htks7›ðY|ø-?ü¨{žÞ/025|}r0D¶¸8‰—¨#Ø#@%wÀqLƒâ ÏB¢;¢\³›ÍãÍ#ÒŸ5ûƒZäàªÛƒ*…OY;ŸÏ;*‘½6E&àœ à‹$Ób,ã‡…È N¼ñV+áí¹m€/߯õH‹×´sWpuÜ×:nô°¶|pÚV,‘¬–÷)› q ™‚Ϊ{C>ðͯËàtñIpõ2£kÛM‰d±P€x2ŠÛ`œvˆÌÀÀ ‡°v"‘* ÉDBç$1/¼!À¬½»‰8QÇÖ™š qŒG³¶ÆlÇI£¸ ÂãXۉ،qkÅmbÜc†mGjõF4ߨøÈ‘`êB¡O$ µ±¾W*ÅbQ=ˆÞ·Á8Ýl6cе•¼–#ÿŠª7’¬ƒµã±¨ë68‡ÂqŠôr+ç6ƒà¡ÂÖV½QŠDl0x»-ªå}Žü¸­­|©Ýºtej:¿ol8NloÏ8·wKN`mF±{—,Ö¨7ªµZ±XrþùÏõBqŸiͬ ƒÐZŠ»V­9ÿõýÿ•Öø’µK€Ax!YºÕr›Íÿ¡âÅ@áIEND®B`‚analog-ce-6.0.17/how-to/startwin/zip.content.005.png000066400000000000000000000521331406366436600220310ustar00rootroot00000000000000‰PNG  IHDRŸŸ–b.ÂtIMEÒ)iÛöª pHYs  ÒÝ~ügAMA± üaSêIDATxÚí½pdÇ}ßÙ£’¯ªø2CK‹²ÏÑÊIX±L¢#ÎÈGqGÿ˜]9¢°rÕ·N't9&VŽ$ Ž$ ¼Z »@rì]º\"ìX®eRe.BE"²ÅÙΚ¡byA¦¨…}jœ»ãÍ^ÅáLDYób©Œë™Þ6úßë÷¯ß›™ï§°³oúõë×ݯ§¿ýëî×]xá¹g Æ…³ùø«éo¾ë­YÇ pþüyúùjöåÛÏ3ëø ^•u0¯æ¿<ñä•ÄoP(œÂíÆ2&¸ÝXÆ·˘Œ÷íÌ1ÉÿC©è¿Úæ‚sçÎÉŽ¬gyC«î‚¢Ëm–ýý}<€‰âío»½ç'N\½z5”ÿO}êSî®âQ«;•öû@Îïøð>•öþïý÷ y‰¼øÿ þÈPï!ð& Ëyèþ`wXÿq®òQ¨;“ö;ü"ûÊdþÎÿQ´Ý?ûGûã-ð?û÷OÐÏ/_¹–uDŒÔŽgºÐ¨Ì3kþoÇúÄ|E·¤²Ý©¨u}xlµÖ/ð‚ÒâK;UýP‹ðbτ܇·ÝÍŠž,~Ÿ<x_Ëi§_ÃJ;‘z晣RÚ}˜O5>ÿ‹3 \¾ßEoF­î/Þ$_ýÔû/Ö¡´ãÍðÒöv|G=/WLÚ™Þ›ežI»ÒpOAÚ|·Þ!ý~Ÿ}5ÛñÉÚî@ã [xùfû»‡³ÝÙ± ®a«uóå¾ š±·M©LÎ }òô“j§™ÀÇc=Æ”JLÕݲ@†¾Mªý–T¯×›žžÖy OŠ=Y¿yÖioù88 ĸ;ûºÄÏœ9ª?<ðrû‘éb±HÕŽï^^XX ŸL\†eh¬Ož j§Óá#jB€ Ä?þ8ýd=ê†.s|XBXŠXÈT’mB`1év»Ôÿìì¬à233ã7At°†‘?èΟ‚¢@ž±µÝÙ3»wvvØ`0;ƃ{Â#_.ãK;oÊOMM}ç;ß!Öf.9´˜ÙÝ·¶¶ü(Q³´¹…ÛùJ,Ï׳õÏ’C?iŠX€’¬Œ5ç]h¦ÑfP`ùoyGy ÄqŒÀ.qsOxÌËyxi§È40gƽ=4@ªëò4uûîÂÅ‹ù´øíy¾žÞjßÝݽýöÛoܸÁ,oËV M>KˆÎ%0(Ua<Œ!Ô]˜IçwAûÌô³ÙlZ†ór¾û:Z4¬{?Ú4u¾O^;çûl"ÃK; ³R©Ð˜Ð¦Í6Xn™(ÿ¾¼ ß?ØP^ž²Çüسó$EhÛ¡TûžpæS°,¾ ÚtÑûwl÷Pñ‘…™h&Ǫ»àè³9nöñ¾úSjµše“ qwjdzãÀp|gOÓÒjµªÕªÿIÏÒdÚG @ÚDQw˜µ¼C©×Å‹ÙZ4~8~ ö­ÖO8ÛÝÒÆT\pä#lÆŸIàëœ`¯‡Šÿ•XXãØ0î¾½½MµÙ2«}ë¼Ùl²Æ /ðÔÑ~ö"D\g^)íö½â¾´ë8s挥ᾰ°ÀzÔûCÈÐ|gCÔñ¡ºK=Sažžž¾ýöÛù`–ÓÔ?úá_ ±eÊHö†ØÇ‡ ÇÚã4wÈá(ûã?¾³³ã;ò.aC¦*^«Õ˜Àó¶;ý$ªQY±g^ ”NÈÒ.ô¥ÛH;xf¸3ìgŸ wñ‡Ø}k>BÃEÈÖ,àC³ŒÐÝM…¿^¯‡¯¸,Q=ôngýóöébæ;/ð¾OiT±  ä‡(ê~ùòåÈ÷£v¶Òj÷•ïôéÓ–ÒÎGÃ_L†Ä˜šGTõ¡¦©ëÂ1¬£Ãï gPù¤v¥ze”ü¦†MƒCŽ/ðBT¡îB«;o%GÀŸœ“˜ÑÐ!·3ûiê䨴³@¢M&®¢ùÖh4,Þ—ÞdážfË@®§îÔ8‹cŸÅ¼<ñpdüÉq‘Iªù"ÔÕFàSÕZ È9ä™dÆÝǃD i+«ÓÉw4èˆ8g¹êŒPw`Ü€ºãÔ7 îÀ¸!¾wþüù¬£€XQ÷sçÎeÄ刺ûùofÄãîÀ¸qÄvâÉ+YÇ¡9wîß/Ϊ»víZÖ1@.üæ¯ .Š]d®^½šu<˜hNœ8‘óŸ¡ãæ?Cˆ‰PÈCMƒ;û‘ËŽê=â0½DæÍw½å'þYn³Ñq óŸ!<(ÿ ÊBN˒͵º÷ر,H Z@¯]» L&(ÿ qâ´1g7FLÝiëØ²³Œ:wÞ}¯ðUp±¿B›ôÊJ/H«žyVÚ^xîYÿ«ìd#[£…\~ø¯×RŸ|‘˪ø ¼xy›lÈož¦ed`”j8#6îþ ºó}r«Íü´ó0Ò„*?¶ê®lãûmRæÎUšk$ÆYXiæûhá—ÿ“¹ËCîçK_¯6O„¨~Îño!eó4SJ¬2&Â}”1Cž8Ë 0Z°Ra/ð±lw¹AêMþ ©Ž8j¸³˜ïã\0޳ܲ´¿øðBÎg©uÉvžë* g#/†2#G&Õ2fÎØú@€/o–¥"„ºË?g³œ”KäÂ|-’â%ð¨”#¾zéLáLRÁòŽ\Å%|äÒbS—F·ÝCU1ëtlM d`Ó$‹P_DË^¡c™$ÑbˆL„¶‹ÐMªŒ%ÞŠE´rNÝ…ñ¹D³Þ`£éÍŽ†ÒÇć²7ñ~—èæhrÀÄÝv·WzÝP˜pä‚§PÅozN†·³øüŒÿ›õ5R~.ò¬[7U„!&Dö&&[Ælò€˜X©»®¿N÷jáL †·Ú_x3L8ÂËrÐeZ"™X!N%þ씚“)§‘-öy’F¶€ÉaÄÞw&Ýö0–¨Õ]9G€@î¿ÿ~‚ò“ùÏFÇ1̆ üƒ˜ø…çÚµk1ƒR¨û‰'²N aâJ@Fágè8†ùÏÊ?ˆ _È/üæ¯Û_h»¿;v02Ä~Ñ6ìïŒqÞV÷Íí=¥{g¯½±r2ë´@ÄÊv_šŸ‘—×Ûoí>¶0›up„=ó7{^»ã5÷:ôxffš~>47[ÛºÙ\8–u*p +u§6z·×-—Êô“~½¼TŸkxµNg{kkŽÕõòÚÊ|Ö Àê~z³A?k õN‘ìî‘n×›k†ákÄ[];S*›»¤±³½¼¼¼±±as¿B¡°¿¿Ÿx2¢›Rd &™ÔNº›¢‚ELêþðÅrizáÔÌb£ç EÝ+UšS•S«ÛO­Í÷<âyo^×Ë: P°r}ì€=ÿ+ï¨óçF‘]„0y÷Àè…õŸ8æìM$OÂÞ]>ÿÕAþ>hùlæO3Bêt1ÔEµåXò*ù®W|la¶ÑØõš;«µÊ¥*iߘ.–ºÓ³g7·©¦3U÷¼~Ö©¹†Õ ¾~ñü+£Ý(š‹f`ZâøOCÞ&’'a#`ßYž&Jy6O3†G¯‹|>⣵ÝOo6./Õ×o]*ÍzÓÅKâ¥í^©\év{åéJûún»}³RQ̧³4XQ㠖ο߮”lî+(Š`1ÄÉmþYÊLœ™¯²©ÇùHæªÞ·´ÉÒþ9†ïÆvŒp‹¤ž¦¡ï*°³ÄP£†J”¡©'ÔÊFFî¤BaIey2œ:G¥½1Sõ®ß,^o´¯ß:Õ!¤T.Òýy^±xë¬\ëZ‘þC• ù*þZ›öHeŭΕÔÝ(Zô&þ·“ìøˆ.üL†–•÷µIräl1ÔN¢i݆R_eØTƒòÌ‘ „B¹¸l(´êN¥½;[íl=^¬Ôé×ųKs•[g©š·;½ò°k¾ß÷J¥[§B:öÚ `$P6éH 5BªÒ®4æ fhÊëRdStWGvw£÷:a³Iräl±)ñˉÍÏJ7 ©Ÿ!ªè¤¸zõ*[ŒÖòSA«î×;ýN·}𥶰uy§|zn­ÑaÓí¥¥Eßv÷¯2·+é ÄÙw`µ–ð˜þ G)íþ÷«ÙÔŠ6~’ IaJ£ËVÚØJÚ•¯U×.Uš‹•Òô i7ï•Ú…Néä|¥^­óÍ‹¥~Ôét¡ ¾5Ø1rˆÒNrs#7WYZf.ë;›4„=›éx¾eS™+ç,ó£§62ñmw­ºoÌW–·Éòv»V)©/íy7ûÝ~ezªLŽuK^¹W¤Ò^ì(.TþlÉÑ6³£îeÎ ºÚÜÒ³ab¼ÍœùPF¸Ü¥ÀðS"T¢B= w7ÏKHäŽid‹¥KÌ ÑÕ{6õ¡ÍC8‰Š_øAdR´ÝÉPàéç™3›„øcëÅâàØÿdnYçÀì'%#š-y^Q$Eж»Ï¥KKËËËY§È€’Í7¯ä3´É!]ÛÝÇr yÄÇ…í¾¹½§tïìµ7VNfÀ¸áÈv_šŸ‘—×Ûoí>¶0›u&c… ÛÝçfÏkw¼æÞ`¢üÌÌ4ý|hn¶¶u³¹pÌ>˜qd»S½Ûë–KeúI†KÐÏ5¼Z§³½µ5GÈêzyme>ë¬Æ„Ôm÷Ó› 2Xˆ¶Þ)’Ý=ÒízsÃÞkÄ[];S*›»¤±³½¼¼¬›yùl˜X2©Ê°-S~H×vøâN¹4½pjf±Ñó†¢î•*ͩʩÕí§Öæ{ÞÁKð^×#A$ò˜QVFØDzg&ÙÝÉ¢¹a*—u³\]ÕÍÛÉ"IT9oó€,ãc_öàæ×m¹”›®`ÄÏ7©ÓE/pï>R\gžÒõŠ-Ì6»^sgµV¹±T%íÓÅRwzöìæ6Õt¦êž¼Ü<ŠÎ$ã/l)¬Ué#øW:F»Q4!ÌÀ´ÄñŸT‡¤œÉ²6èýƒÐ…¯[ë4U´MÁˆ“-0DO—üqZiœˆo»kÕýôfƒmñ~©4ëMÏ\êOm÷JåJ·Û›š®´»¤Ý¾ÙWí…CGÝY¥³gá”îrâÔƒr5TàHäFaW'5G2‡ëÎʱÕUý‰D&Bønlǰ·H0JB‰U–a]©6ø UïÙôKÉÂI]ÒäÐ@(ÂÚîrÚžy&홪wýfñz£}ýÖ©!¥ò`õYØ"·­¹«M8kþUËAÉkÒÙç ¤AAµ¯Z„§Ø‹aÂÀ”²Ão'Áñ9üýì6yÒÝw_³‹<‚![ U™ÁEy¬üér^—6u¦|#sd¡HqÜJ{w¶ÚÙz¼X©Ó¯‹g—æ*·ÎR5owzå¡íÞï{¥Ò­SæÆš®C,뜩Ã?èTk„T¥]iŽ˜[¨94_dñàm/¡_7B~†oð“vm 6¦òþ#g‹Mˆ_Nl¢§›Ÿ‘ÔÏõyRÄw/¼ðܳþ‰'ž¼ríÚµ«W¯’aÏ|§Xéµ[d îÅb»¹|zn­q°+Üt{gii±\.u:äÒÚz¥Òesæu;e«S7¿FéAw¹p€²eÎ~äã¬êf„1W­D_z}Ð¥Ÿ°Ò.H¹Övo—*×*µÍ^¯Ý(Μ$•Ú…Nñä|ÑëæúâüÊj±XêO§³‚·oP²E9~È3çÏŸ'AŠî¬jÍgÕÈ‘âûîõò s¾¹T­m’^c«ÛÞ›ž*^ê{ÇW—Ö*ÓÓåñ¦I¯wä*ós•φÄÊp¬n¢€À(¢›:àc3ýÓ·ÈåêZ_p‘ïŽþÔȤ8î¾1_YÞ&ËÛíZ¥t¦¾´çÝìwû•é©29Ö-yå^‘J{±£¸Pž>CŽ>lƒgOÙQw€b”ï_ÆIþß?úõÀQhÏ8Ÿƒ¯ûfŸ!ƒÝƒçý#žã»/œŠ,³¸bf—ÿO!j°y7C_xîM·’eW£êüº›]Pý&HºkÕQ§ŸgÎlnƒ…kÈ`~pì2·¬ó\¬3éÒÒòòrÖ)€ÌØßÿßí=Ÿ8q‚ŸàfãÿÚµE¸ »*…Ä&i‚à†£=âtkÈÀ„`9å‰'¯Dóç*0~¤n»¯¯¯ή¬¬d_ 2üÈ:v ¿¸°ÝuÞjµ¨öCàǘïÿÇ‹ôó5oX_ßqvpüâo?|ppû/«/oÿsÁeêõíÿÅçØAÖ‰ ct&ãλï%ƒsÏ\ÀãhwTÚ!ð“ øáÿêIů©ücvvŸ~û7™#tLçΓÙꨊS9§LÎ!퓆£qw%µZ¬®®bÞÄdâÛîßÿÎoñýó_}iÚîìÀgêï|,ëÔÑÖðÞÿšu:€;RÜ#.¶ÜA³ÙŒŸ ,l”Oûä/òŽß‘uÑXáÿö_f½ôßÿέ>ùïûV{å#ò%S¯ÿý£ýÿôÙ¬“ @îðÝ´'µ3,ªôøÄß#.ººƒÉ º“CiqááлRÚf|ÃÝ?0P8ŠÁƒìžuBˆ+ÛÝn;v0Ƽæ gé_¨K íÄÁkç‡ÞÍìs§üõeåMܳN(PâþîG …íï;\«qp´fÚnèð¢}á«y•xåÈ6 #ƒôxÍ…žy¢é–׆iã…¬²it› Óè„Iv0ì'ÔÒòv|65–—£9óôÁÑçÔjµH­vð Wµžå•[µÚ\+ï FŽïsSêä óý¿8nΪÃ#cHàôx%²ŠÛèºÍ¾\awÓUéuš8š3hºWÙ·Á;NûD÷ñtÇŒáܺƒgÊÞw羼ǿòîO˜ç߈;¤ <›RGÐÄ£C(ëù>àlWe^ªm¶r'\umPzTé™àÌv/0Û}øܰ‹¾`òég? aõý‡º0Õ%f —ró%¨Ò]âÌv?˜Y[[«×ëÕju¨ôµ˜±ÇÀÌ$34âQY€Ñàĉ©ús•²F Ûr‚»µê„bA^YP„Ù˜1I64ˆFJ»±%{a~œìÁf’²0ŽnS +ý`b]L²\«N‡ð8ùRb>Pv¡S,‘ÕT®Km®2\ˆŠÚ .l÷ÁTùì°™ çß?ñÁ¬£PQ'Nê¶ûêê*É”pI„Z×lýƒ¤¾VݾYç0>¤¾VÝúúºá,ö~ÇŸ»NÂ[­6w'þ¸{¬=⨴›{„%ËýÝkµZ¡PX]]Å+@‚d¹¿;›O×l6ã'#½öZ`IR;ââO–¶{N@12¬ y d÷¬ãD\íï>Üöð«@±Ùø•`o˜QÀ•íÎ6|6úJÄš¶LÍCþ«Ðl”’ö×Êw´ &› a•+Æëªee5˱EH|»Óþ~k8Ä~ðÄôKØùKÜðV¾¿£€ïîš“6×*ïh¾;J`ì±1fÂîX©Ê•9ˆ#Û™îµZ•}c.:²µ•a©&~ýPCO'¯Á|ç¨.XTª™àÌv§‚4›l;V >3kÄ¡ :ä~x¿¶ÔÕ™¨T³Â™í>h Öjµµµµf³™Ô‹pq@Cxtóäý(ôájμԲ«V«ºM,uWö)ŒëØGÌŸÇ¡›6L9«P¾zÔÕ‡þ<'9L›ûêÂaÉãûîÂÞq|)‘„>ùkàÑ̪óïŽn%À„ WwʺQ¨÷û·êªt¥Ÿ¬3`|pa»·Z­¬“ ¿ ‹4qRß#nuu•˜"(´Ùúˆ¿G\€ºãñŽIÝv7oðŠÍÝ€ÄIÝv'z oµZTû!ð@²¤n»›¡Òñ¹ï“Ÿ¶ôùõÏüjÖ‘€Ôqa»ë¨V Ó®Áð<ˆÌ@Úê_þéÿ‰Ÿ ÿŽ“Ùƒ3ozù;úyqðß rçGyás¿–u”ÁÄñ§Ïÿ¹îÔ[îzcÖ±cˆSÛšélýÚPÔ™¢7›ÍZ­3I-zà/k“Tþ‚´á¥ÝÀÛÈTàßvüŽ·=úè}KK²Øô =¨´ðƒÔý¾06õgòƒ;Û½ÀM¯[]Y¡òž·r·ø;~Šü‡Ömÿá`M…ç¹OÊ¿àü½ÜÿæÛýÊü›Þ4ÿÔSTÞárã¥\ /^½An{õ«îûäG!ð ¥½ðÜs»wß=+ÞsÏ·¿õ­oåAàåÕ?u„S¨òž½/6Þô£â‰—ø7·e0–JûðóÍÔÐʉÀDš—pá8ëXŽl÷áΫûê*Ñï"#4•+š:ŸÄ¢)Ê÷ÌÛ¬¨ 2äWê'CùÿÆÎ Ÿûµ™÷Õ÷MúýGÉ 2¡¿J¶{Ö©cˆ´xs€ÙÊ¿nåyauzØñ9Á•í.îlJ¹yhã¢<670åRˆ–é¨@¥ý©ß'ä‡/Ûx®Ÿ&S·çTà_{êÔËý¾ö¶©)‚qwÒ~ ðLjb¥Rùò“ÿ*ÕØÚ¬ëWò<ßv·Ûvø×lµõ:1.>_8Ä 0®øÒþèÍ‹ôÏì™JûÙG\¨ÿÁ‡>D®^e?ò§ iéa'íƒÏ¡•ÿœáóŸü“¿xïƒÿKzQå·{ÑÕ®‚¢ûõ0j㼑ñûî26F3 ë gçå— ï\¼Hyä‘G=p_\\”=_>!º<ü>Òn·_÷º×‘¡1ô?ñY'Œ3Ö¶»üÏÆOiWvv‚œàô}wa]V¥qÌ /¸üáþ!;xöÙgeÿïÿûÿäOþ„üäOþä}÷Ý÷†×Ë:`œIJÚé§~¶R2(ëFôÃ(Nmw›’aè ô#Lî Mö* [.^¼(èº,óJu?õž·ÿÓ+Wö¾ØøüKö—–Ð-‡­]sÏ=÷ {Ô©ÍM†–wôO7¶»¡JdØÌ5ÆÄºœåZu:t3Ýøc¹H™§Ù뎉fÖ= ŽÈüŠîú?øÐ‡fþûÁc}Ýë^÷Ž÷¼ï™¯|1ë(ƒñÁ¼vMh4l˦n»cjlhyqa»&Ð9Àf h²‚4ø•úÉþË3äÙHú‹‹O¨Ú) ã#ø;H›·àl?©´/..ÖjÙ»ƒ"uÛ}uu5ÛFÖfˆzÞhØ=úaWË£>JëDyVÆÝAÚ$(íÃáöÁ‹!ÆÝ“•gHÝvÇcI²d:Yÿ¬U ãî m”vúùÈ#³‹‹´µJ5~1~ÜÀ„ÇqwLlêO}öÈ·ÅEmUˆqw*7n|ûî»ß›ŸøÄ'²Î 0J3å¢B¡pò¶Ûv^V,f‡qw*o¹ëßúÖ·þú¯“ìœgCï/’¿ý;ëôÑ ]Ûý]ïz—M$ž~úi¼ABa.,LÚîzyçªâ,ÆÝ’íœ'dD†ÜAnHwÜý§úž£zô 3üü?ó™×g`4¨Vì~W¤}ëùÛQØîwHvb{i{œŽ»ï“{ ä[dÿRøÝýý_,>EöÏ‘Â/ÆOLÿ ÁrÚ<“vßvõ”bWŒ»ƒTIÖv ü€ÿúúÿšuÊL *ÎNתHûà¿ß|Piü—€´ƒ ÂnÎ<“vf»SiÿÝgÛ¿úÞþG¹—öpÜýÿ;~æ¯ý¿²N7Þr׿ð…?øà“ø‹›‹‹‹¯}ŠÑVî Ü2›w‡¨çtmwéq¿å¿ ø»ôß+¯¼B¿w»]Z&ž~úé¬óŒsæ“éž?˜R'Hû}Ÿü4¹í¶Á°Çvߟj|òÓ蟉“Æ[ïic³ñ+ÁV^£€SÛŠ:ÿ•I»ìMh*W664!u>‰ESTY|±h] œ3ïÏ–¤ý¿<õvüÂ+äó/ýÙî r•Û^ýªû>ùQÓŽ­MݘuŽ[\Øî†>yÁp'‡ãæu~„É¡Éþùq}~$ž÷2Ÿ'#t“¥¥ç‡ÿÿ BÓãaÒÎøìpxj»g20¶¼å®7¾÷Á×'æ—ŸüWéE8°º3ORæAm™9éÚî¡–š÷Š…²#HçG.RæiöîrˆÁþ¦f:/êô+ýÜûbã•ïþÉ?}åGŸÿ?³åýîëq QRã40T¡†š•dIÑvÿÄ'>‘‡ùh°¼'ªå—ýÊ}Kú.ÔXg/Åm¿t7!/¾üÿ! ›·m-Q]§V>õ|ç#ïá[0ŠÄ·ÝM“÷ÃR Óäœù7 Þ|£9ûãOÍrâð˜bžq@}›ÂÚîrØßäj…¿öÔ©£¢þSÔ…÷3œª÷S¾gî€1 õ9ó…BammMyª^¯×j5´ò@ªöú×?ó !Zz€%õ9óTÚWVV”§Z­V³ÙÄìJ YÒwg «ºSÕj• |ÖùŒ.ÆÝçë5*ðûûbÿ|-ó]€qÄÅZuõ‡ÊTÊ©À÷7vŠ‹{ÞÅêØk·÷÷÷[­V"ÉpнÏ:0ˆ:,W§°ÁÅZu‹ UBZ—NîL-Ÿì2åíö‹³Ó—û•¹êÒu2€Ï:´¦€qB$ Ü2›wG ™7\Œ»“0øâ`µäþÆej¾gü`Pd“ƒa qna…oLœÊ'ñÇÝ­ÔýæÙ2(úÎc‹Û«ÍòV{¦¸¬Ý«¸pˆðU(O‚‹Î]¾\w­Ò¿pU¶O ²Â¦Ë]þÀªÛP?Ûl;t8²Ý}ÎTŠ=¯½xá’·¡ÝïHnÚ¸UÓ’wÑùá‘ý ±Êúy@Š˜ßÍ®q6Õ¯àÇPƒ°8²Ý]èöÚmú·[»x¡^ò6ç6½ÓÔQéÙ²xÁ˜€á»å ½›¼ôÊÝœ1A­žîlwªåÇ6*—N2™_YYQ*´MÛ í;pÜï×Ã‰ÔÆ~÷ëÌÏ.»°àcoÄåá­wLøeMhÙŸ nO×ãîò:ó~ÃÍðtu~xw¿9)ø”ý„½;Œ%æê‘hæ8+!vÕ¯àG¾;”>2yÜ#NÖ{ùXçG)Øì  ßè]y‹·| ,{À$`¨ ՠ²•]PÓ&Hƶ»ÌMÑøþ€¼áÂv___×Z[[cg«ÕjJ) +ÒuˆC²µ(êäh¤¾Î¼nûW¤DêëÌ j +OÕëuyVb’ºíN¥]g¾·Z-¶¹;Hø¶{ð¬ºBaUwªZ­2Ï:€ñÁÅœùùzM)ðµu/äa5`œp1g¾þP™J9øþÆNqqÏ»8C{í6[«.‘d8èÞç_ ÃWÅnF]1¶«#õqwr°¹{ëÒÉÁæî„Ly»ýâìôÅå~e®ºt à³Î-¬è ¥ÁwßË}á¹gÓ¸EØ`ýKøký¨ò¡ññu².n¡²E[¢!¯þ©ó œJµ†DõÔçÌ3¨À{›ƒƒÀo ú—©ù~,ëô‚R•*‚M´ü«ˆ^w!®`ìÑ­°uýÞBºrLÝ›x’ >|eÜÌ£û†þ³À¤ÁKµa›8Á›Ù¿ òô&æ_ÀGãîd(ðdw‹lì ¿Ri÷Ÿ_³Ùô½Ù ç`Ègl5É—Rƒ\ô8¥žsÜFKc²þp†Ü¯tD=>Žl÷fŽ]Xð¿±7âòð¾;ædŽ¡Ìn€=ʚо>¼ÉŽ·“’ÅÅZuäuæÙ6üèüðî|q‘§`èöxµ¹;H&Þ|gxØËÓˆ’Ëû¢É²Â\=Íge ÑÂ7_¥ cðJÜÚîvÈz/ëü(›rt}MþW4'S"ð•qù½pYøåqqÃÛäº@ (ÇÝ…øû’c9~ÀÚRÅP=ªAå)›ª[ç-‚ ànÜ=+ÂÎÎÀlgèä\y |`PüUÊk§§™ïhé(bž$hˆï9Á×úã„ Û}}}]wjmm­V«)¥0¬HCÔ'ÈËÌe“üDîkQÔÛ2©Ûîºí_ÈüHc¨˜ä'Ú€œ“ºí^(¨®ëØã‡‹9óõ‡ÊTÊ©À÷7vŠ‹{ÞÅêØk·ÙZu‰$ÃA÷>ÿú;Ç#­Ø5àâ}÷Å…*!­K'w›»2åíö‹³Ó—û•¹êÒu2€Ï:´ÈÛÀX"¯þ©ó œ2/a 2ÁÑþîC0øâ`ï×þÆej¾gü`P:“Ã>‡pJ·ûªaÝÙ¬S3Ñ8ÚßmÿÚߨylq{µYÞjÏ—wuž…uŒ•+ëÖ:6ø”4ßÝߘwÏöi@VØlË ¿_…òÕ©¹·©®y¬0oÀ‘íîs¦RìyíÅ —¼Y¹yhãBTMKÞEç‡Gö/Ä*ëç)b³VØ]ãüúÖ\ÛT׆*8²Ý]èöÚmú·[»x¡^ò6ç6½ÓƒßUX/Ó |·¼¡w“WV¹›ÓžhU=ª}KÜÙîTË-lT.d2¿²²¢|´6M34ßÀ=r?¼_‡­-«qa€ßò€Æââ}÷[Ì.»°àcoÄåá­wÌíóÔ÷lëIlè×ãîò:ó~»Ìððt~xw¿¡'ø”ý„½;Œ%æê‘hæ8+ u/¿…!DJ¯Ã­ín‡¬÷ò±ÎR°ÙAA¿q»ònùXö€IÀP=ªAå)¡ò4ÈáèªkTÅödl»;ÀÜï@" úM¶ûúúºîÔÚÚ;[­VSJaØR‚Rqˆ\‹F»•¶’Ô×™×mÿ €”H}ùB¡@ tå©z½.Ϫ@LR·Ý©´ëÌ÷V«Å6w‡À ßvžUW(¬êNU«U&ðYç0>¸Øß}¾>ØÜ}_ìŸÏÃ:6Œ4wÞ}oÖQH—ž{6ë(0’¸Øß½þP™J9øþÆNqqÏ»8C{í6[«.‘d {L,ãZòOœ8qíÚµ¬cÂá¸*FÍoÀ…í>ÜܽuéäÎ`swB¦¼Ý~qvúâr¿2W]ºN†ðYç#Œò—9Ò<ñ䕬£0‰È«ê<§ÌKØ‚Lp1îN~À@à‹ƒ½_û—©ùžuòÜBص…G·}¶nâ¤=[­Uwól™ }ç±ÅíÕfy«=S\ÞÕy–V®l¬[ëØàSÐpkË»c> `BЭe?æ³–1`Ôñ;Õ™Þ3›ž9ú-ÁÒŒöÕ# ª!Ø\9ëâ#GÏòvˆ‹÷Ýâ슎u~äg,wþü„½;dŒ+¼`óO8¥üÈ.Y'„ÆP=TyÊ7±táD¨®¡âö¸X«.[mñœ„ @®'ÄÔZ¶ÝˆªÖqa»¯¯¯ëN­­­±³Õj5¥†*%–žQòÀx#XáöÂ^$F íBTÈJR·ÝuÛ¿rH´uù*ôÌ-.lw6åA÷™u0Ñøsåü¯²cà…òUv²%uÛIøúúºò@æ(•Xpä¿úÇò…†«.I×vç%<à{ÄñïEŸØûH·kÕ%„Í[æxcX><ÁЀ ŽÖªãßbÄÁCä¥ât„S`Í!ŽÖª3,ˆÉO^É: `L0ÔϾ/X²3ç8Z«N~üæ2Äû1¬l,Ÿ’o$76.ŒIà…8ãĉYGLº•ç…ÕàͪBÆ´ë8¸¶Ý[­V¿_›šjÚxöŸ«®Á(”@¹¬ŠŽÙ'ÊÈ ×®]Ë: `|°1ZüÚÏ\ &[!ƒ°8µÝ›Í&•öz45ê`U—Y`_žPAÞÀ å Alê7¹4û êÕ¤p4gžõ±0i§…~>óŒÚ'{´ é÷;l¶å}Ú_ã ½|]Hz5AâÏ™·Rwö´¦¦š}~Ôv'ïxGÖIçP6E}Œ¸Æeí—¸uêÕDp=îNË µÚ©´ëž?A#0Lùý ƒ‹ßÀ”_Ï#š† >1¥0f˜«Dbœã,â[áæð+dL¬‹ŒëýÝŸh°åW¡ H7ëÒš2@›³°Úc¡J4Tz¥å‚z5AR·ÝS]k4 “®í¾²²b3[-rì!ê7’­™QÏG#õ9óûAdÀ¸ábùÍí=¥{g¯½±r2ëÆ Gsæ—ægdÇåõöÃ[»-Ìf ÀXátÎüÍž×îxͽ=ž™™¦ŸÍÍÖ¶n6ŽeÀøàÈv§6z·×-—Êô“~½¼TŸkxµNg{kkŽÕõòÚÊ|ÖYŒ ©Ûî§7ô³¶PïÉîév½¹ö`¾F¼Õµ3¥R±¹K;ÛËËË–‘6oýBšcm ,¼pþüù¬£ÈT€ù!]Ûýá‹;åÒô©™ÅFÏŠºWª4§*§V·ŸZ›ïyÄóÞ¼®—HbÒ.X(¸œýÈdzŽ "òÒr:òfܨóFº¶{×+^^œ]¼å]o¯ž®?T=vûjcz®Þž=»¹½´0?Uxó¼~±˜uN€$¸zõjÁnxU"7²wÂ$»Göï&Õ~·0s¨< Cø–»‘:È–øE%½Ø&r‰yn7R|ßýôfãòRJû¥Ò¬7=s©S<µÝ+•+ÝnojºÒî’vûf_e´¾ÊeH>¥¼ÐÿÊú§ ûÉ÷® $BœJPx|ÄX¢¢ÝÈ|•M˜6Ëwç 7í ÿ.i´ä"ÿAÇÉŠÀZ1°ž”]BU\6ÂÚoÒ&Å÷Ý™´7fªÞõ›Åëöõ[§:„”ÊkÝcžÇÛîró0ÐŽ‘û‹”>yG›†¿!&–!€d1?t{l ÓIžuaÞM$«dò½~ ³Š‰¥›6µ¢M=)÷(3Ùœ±¨ôF‚ÇÝ©´wg«­Ç‹•:ýºxvi®rë,Uóv§WÚîý¾W*Ý:•^Óq¤‘g²{â7Jü*¥qcޟý1d9|àŸM#’ò}EQ6ßIú?s{i·ÙÇÒþ¦‰ø1có³Ü…’3 ARw¿Þéwºíƒ/µ…­Ë;åÓsks˜nï,--ú¶»†s€’L†œSº*l ÏÛ/B)ü™GÒAÖj7÷/F¸©aÑÁ#ûám²dBŠãîíR¥¹X)MÏvcÐñ^©]è”NÎWêÕJ±±1ÿÐ|±Xê÷³Î‰œT €G7UÍÁÜ\ei™e[ºŒ¤Î@Ì6[lº1,/ÌüiêâipÌgœŽÇÝëåAç|s©ZÛ$½ÆV·½7=U¼Ô÷ޝ,.­U¦§Ë=âM“^ïÈUö=WfŸæÃhd;Ô7áóÎ ÏWpÛx#å­ Óâü©|‚góš öþÓ ÂÏGˆd²?@›ÐÜü<Íóå³r”"DÒ¦ ëü˜ p çPÉçA%™9)Ž»oÌW–·Éòv»V)©/íy7ûÝ~ezªLŽuK^¹W¤Ò^ì(.Ôum®t §”?˜Àp,BùG™Ne®*³‹òɆº‘ÍUö—›£~JXÎ!H)Úö¡™ãà2O¢žh·6×Nfw"Õœ–6ω(*é¾ïNž~ž9³¹Aˆ?¶^,ŽýOæ-ö‰[ç%°Æ”Œh¶ æœ\¬3éÒÒòòr±GÑÀ ø­)Ñlɶ“¸ÁÑqökÈ &©Ûîëë놳+++Yç0n¸°ÝuÞjµ¨öCà€dIñ}w¨´›{„%Å÷Ý©Õjì`uu³0€¤ÈÒvgK…4›Í°š®JuÆ”B€dɤ¾B%™²´ÝgDß=6oèÊ›s<ǹQd!L庪æåÀlRš7 Œdœh+¯Õå¹ã¥ÎC=;]<#ä‰Â>wÞ=‡É™p\Ùî› Ã߈LX)ÓGð¯tŒv£h.B˜i‰œÒ”0ßÑ2’q¢-\kÈs—5I„gç;Ú„ OMù|&¸²ÝiAa¿Iz8ü$k¦/͉&xV6öù½ùSºeŸmVTnˆ“ÿÊý­u!'²J¨|6°ú“w5Í £b“¹‰gØ•h [ÆEH ‚² [î¼@¢Vn†¦žP£ŽD™{ÙîƒG¿¿ß±”‚U­gƒY 4å6¦¡±OŽþØüS†vtÎ[Ùˆ Õ‘;Ÿ¬ËÍâ”á$•RgÈ‘ŒmáZö¤ølñ]Ü ‰ù¾–Ï.lÌmjÅÀzRîj Ìy]ùjÖqþKÙ{•}£¥âÐEAzµ âH#4Δî‰ß(ñ«”M ¥…'tꦑÒh)Ú7«Ç¶|­ÜCT#în6Ó3 ›pVŽd„ !vµbüšÓæ©é&‘@éó†3Û} çÍf‹}#Ä$í‘ÇêÀã¬îp`µA Ïa2‰ÏhI3\è¦æ"Ïß1W…$lw+ug?¹Z­¶¶¶Öl6÷#½熜W “‰\!¦ô˜\vÈ Æœ.]YH›<Œæ¤¢êZ—&£2b†g—mlÓH`ž#\ìÇŠEµZµìô3hð) GEË<¿»2ió€ ÏWpkÌÞHyëÀ¹Ÿ²––Ãí2GHB²ÑŽÚ¾~†lR˜£¿¨ØÜ7¬s¬B%Ð2òû˜X—í å$,¾*Õá˜Î0 pÚ¸Û”„P7 U0/7G)0ü”H6Qñïnó¸dTÌl‰ÃPµ™Ùhšž ‘GݘC\Øî­V+¥ØçЦ`,5¦dD³5ç$ºí¾ººJR#Õ¢‰r€~JF4[ܼV²%õ9óûvdÀøàbμ?«Hù €dIÝvgãRëëëÊO<8é®UçKxàgÖùŒ.Öªã_c>Ó›NL,ŽÖªKÃÎî#9$“úÐýΰ¨öu¸[gÞßw(ÿ»]"l]U8ŠÙsœEv ½°þ3A™|å3о![ þ3Ï]&äði ±ÕÅÐð‹K5VYgÌHâl8§ëI1üE˜Œnñó7Šæ"„˜–8þ3!p³˜Ñ¶‘vÿ)ç$OˆÝ³ËU„e7ªQgk ÀµínÓœ7Xi†`•×*CÓØÄAw*qjCÙ¼3”¨h7 »:©9’y®úí#3a׵͉d®;9ž6µb`=)»„ªÄt+Ï Æ[!L/W¨ YÞ½ÒáÚvoµZý~mjªiã¹`½G2ÿ¤ù³Ñ ˆ‚´±á+p‰ù¡ÛX*¢=åI.ºÇ‘Rž8Ø3&Ùœ‰YnmjE›zR®•±%vF|àÃM¤B¶Iqj»3i¯× ý,Ó¶Œý¢fïßð¸ÿ1ó &þ8R•va¡„›GòßW¤{©Ö¿þ2—¼Øä0—„l‰Vn#ôzFŽª9z²µãw‰E¾¯\!ç¿Ìç§¶{£Q ÒNŸýöÌ3jŸ…ü çðƒ¸|…BFÁnœµÓXíaKxÞ~iäI‚·?“ΦVtSsÊýðJ÷øŒÙ̧¶ûÔT³ÑH;ý|Ç;²I0ß;ØI%\hø RE®;Rª¿\vȇ­Žó,ZÊÞ<·ÆÜ0Z­1]„ùïijÚP!ƒ˜¸w§å„ZíTÚuоÃÊÆ§Ð!f™)ÂUBq†{Ad„~lÓÜ#tšo¤¼µ¡›Ýï·<ëÊOXÿ™ D2lž„ _é"‡‘øÀl‰_#…õcŽC geÍñ7ˆtÌäë~øh(q±¿;Ïañ ö£ü*L1T²C€öÇ$g•ì„ «),=–¨°7 U$l¦¢~&ÄÌ“øá+Ý3Ϩ°Ï:rÈ6uM(˼Á³yvˆÙ1B…ÖH}÷Tך… aAÍ9 ¤k»¯¬¬Øt(EŽ=Š&„%íšÓ}Í -IÝvG¦Žq1î¾¹½§tïìµ7VNfÀ¸‘ºíÎXšŸ‘—×Ûoí>¶0›u&c…Ó9ó7{^»ã5÷:ôxffš~>47[ÛºÙ\8–u>ãƒ#ÛÚèÝ^·\*ÓOúõòR}®áÕ:í­­9BV×Ëk+óYg0&¤n»ŸÞlÐÏÚB½S$»{¤ÛõæÚƒaøñV×ΔJÅæ.iìl///oll$›6l˜X2©Ê°-S~H×vøâN¹4½pjf±Ñó†¢î•*ͩʩÕí§Öæ{ñ¼7¯ë¹I-ÊÊè¢[1wÔyŽs£È.B˜ÂÆæè…õŸ6‘ Ì8‹Ç†/{p?ñ³%Ïïš›V†È£jÍ!é®3ßõŠ-Ì6»^sgµV¹±T%íÓÅRwzöìæ6Õt¦êž×Ï:@®au‡n¯-åêW‘E¸Q4!ÌÀ´Äñï,Õ þ?Ñ"ø\\®å?[2yš¡0ü¬t‘ÏgB@üuæµê~z³qy©¾þxëRiÖ›ž¹Ô)žÚî•Ê•n·75]iwI»}³¯2Ú…½ÿ„í Jÿ† |á¶Ì9q̹’‹PÌ…]‰ÖÉüÛ@6†ZcN¾6ÕÛÙc¾EªqÐUz6»¦|†ª÷lú¥öƒ6r tá¿æ¶ 4¤8îΤ½1Sõ®ß,^o´¯ß:Õ!¤T.Òýy^±xë¬ÜÕVPíí¸«„2(y½beà ŸTûªExjݹ& L);0¤7ÙñßÑÿ!gµgŒá¾IÞ´ 1Veå±òGdŸb]gš«k92‚P¤8îN¥½;[íl=^¬Ôé×ųKs•[g©š·;½òÐvï÷½RéÖ©° Ä„À?èTk„T¥]iŽ˜[¨îÍ—À›ÊφDEÈO嵂¢(Í’¾Þ„-T«1T¶Ø”øåÄæg¥›’ÔÏõyR¤h»_ïô;ÝöÁ—ÚÂÖåòé¹µF‡9L·w––}ÛÝ¿ÊÜ®”qù«âì7ïÀjUÂ#øO„‘ˆ$ÏwÂÙÔŠakÎø1!)LiD}ž ñmwí¸{»Ti.VJÓ3¤Ýt¼Wj:¥“ó•zµRllÌ?4_,–ú M§S¶%ÁØ ×)=e—òa«ãLD+'‘4ÜÚe¶è&÷¸¹{æ t–ÕÐõDHÑv¯—óÍ¥jm“ô[ÝöÞôTñRß;~¼²¸´V™ž.÷ˆ7Mz½#W™»峡±2«1æÆ/÷°=Û7RÞÚ0-N9âHô…0¬ÿT3\ySCð½è‘ÇÝ-ó\wUzeކM´£e‹MÖù1Ç!T‰ÝôO4]¾Q`†Èw—Çæ%)Ž»oÌW–·Éòv»V)©/íy7ûÝ~ezªLŽuK^¹W¤Ò^ì(.4O— ¬ò”C³²£îÅ(‡è4ÆÒ³¡DÙÌÍ`„ËÍQ ?%’MTü»Û<î̧ͧ—-6eXçÇÂ6ó—cfªßIw­:*ðôóÌ™Í Bü±õbqpì27ûÇ™ˆ ˆì'%#š-¨E'ëÌ_º´´¼¼œTŒQp~wJF4[ܼVÏÐ&G{Ä%¾†<t¤n»¯¯¯ή¬¬dÀ¸áÂv×Ix«Õ¢Ú’%Å÷Ým Òn6î–t÷ˆ3S«Õ …Âêêê8-dNŠ{Ä–;h6›¼cX¥GËd2©å-G(òcF–¶;övÀ´Ùò2ò"»a†Š^XÿIå°¥£|Jù8bF[÷duè¹Ô‘$ŠJ¶DH ïžuÜH|ÛÝê8úðIw‚ɤ ÚY+på¬5N!h»LK!ÌÀ´ÄñŸT[:*OÉ=ÄŒv`Î2Ú3Æ~ÃÓE%„J œu¬W¶;-´ }%bÍ´ÙQØÖ®²½in„‚"N%(›w†‚‘È*¡Â,X,ß*J)°ò¨MÛË&7ÂÆgT”2r$ }W:?÷hu£Í†°ÊEìCE¾p¸Ä8êí˜8w<¦ýýÖpˆýà‰­j=ïÂ[ùº=¤uW·1ÈáoDF°"7ÝKT4µÈ§ÆD ©„°-'=Qxü…*uÊx†¹M­¨,Õ|MhS7Ú$0lÇI`TQ]§£µê˜éNH•}£OóÐÅ 4â9Z•]ÁÉV ©J»²Ia¶’3)ÿeµÏÈçr°Ÿô"Z©“3!ÚPE"~â'Pp·)'¨À3ÁÑûîÃOšÍûFH8iG³8³ÒXía˳ûòÏß1¿;›øøEε$ò,spSOÊýðöÏ%i¢p4îÎ~rµZmmm­ÙlîK/Â…%ç?`,SÕÒ»‘›«,-³lëGËÞZû%+gÙRˆ7÷ÐqlO`Î#\Í™—ZvÕj5°ÇoF¨)òß„¡æ cxJŸÑÊOà”·6L‹ãGysù·÷Ÿ`ö†ê„7û7< @¢]ë_•jϼ!bñ‹ŠÍ}Ãú1Ç*T-#¿ôՀȑÂaq4înòY*HüÐY$@æGËR¡sWžŠ`„ËÍQ ?ì33Z¢Ò‹9ëœe”e&DŽ¡MÖù1ÄÊf ˆ!sº#FP]§‰‹ýÝ[­V&i‹l:`E)ÑlÉaݘÃ(:©Ûî«««$#PJH üš”Œh¶¤íá‡êŸ6¤n»ãñŽIÝv/ kkkÊSõz½V«Aþ€dIÝv§Ò¾²²¢<ÕjµšÍæˆ\¹ÅÅûî…‚vè½Z­2Ï:€ñÁÅûîóõøý}±¾V«e|` qñ¾{ý¡2•r*ðýââžwq†:öÚíýý}ùe¹ ;ê¬nȤ.u|S ì`‚mùyö#¿ð›¿.„¬î‹ UBZ—NîL-Ÿì2åíö‹³Ó—û•¹êÒu’Î ña·¾@)É9Âë°ÂhŽy¹º87Šì"„©\¥Õ¼4w"ÉqFØÐòÝ-²u²7üºraÅHæ½Þ[šØ\hpÖfw`µOH‰uœÌ°åaS˹© å~x¥{R‰"RןR3fO9Uî¼û^Ùñ…çž5_ee»0»@5žý‘á³1ëz‚Œw5:ö‚¦ª¥w#7Wzù4Ä?­M;|÷Ù’O”æ‡À3ÌêQŸ›’-²J; §îÊuæý®~¤J×£3„ Ï=ëïýþÄ“W>ðàY' áà¥üÚµkGl÷sçÎe=Ä刺ÇÙJ9!ÖJ´È!Gl÷'ž¼’u|˜tÎ;çže&ÿÇ8Šˆsæ1«€ü€ß#9ä?½ô_þóì•úc?VöþÎ¿ÖæÚ×|ùkÓׯÏ+zž×ï÷ÊåÎìì÷s?›x$Goy&Š¿÷/èNýû'>hã TÚ+•ÊÜÜ=îv»ô¸×ëݸq£ÑhüüÿösækïøôoéåòàK¿O¾Ôéǧ¿îw>—l<1îXA¥êz™É3u©ÕjŸûíÏ®}óÇ>Y,I¥2ø;vl ñôk¹\0>æpF« ûæž¿ü˿ܙÉ>\U¶O~zzšúüÜûs?û/wvŠ{{åbÑïÕï_‡ë±ù¡´—fgï·˜0¯”vyܽ@¥ˆßò=oëZçmT;l|ò„ß#V¢ +äÁì_ùä§+• {¯Ý îpzÜàëo|æWu¡}îK½žßóîë:{ë½{ìØ§¯ Using Analog for Virtual Hosts (Separate Logfiles)

HOW-TO
Use Analog for Virtual Hosts
(Using Separate Logfiles)

This HOW-TO written by Peter Rose.
Converted to HTML and Step Three added by Stephen Turner.

One of the great things about Analog is that it can easily be used to offer different customised output to multiple virtual hosts on the same server.

This is an obvious asset if you host several domains on your server and want to offer all your customers the benefit of daily/weekly/monthly Analog stats, but not all of them require the same level of reporting or the same 'look'.

This real-world example is based on Apache 1.3.12 running on RedHat Linux 6.1, but should be applicable to any Unix-like platform. Steps Two and Three, and the general ideas, should be helpful on Windows NT and other operating systems, but for the details you'll have to ask someone else :-)

Step One

Make the necessary entries in the Apache Virtual Host sections.

Here's an example from my httpd.conf:

<VirtualHost 212.87.82.24>
ServerName www.ontiles.com
SSLDisable
DocumentRoot /home/httpd/html/tileshop
ServerAdmin webmaster@ontiles.com
CustomLog logs/ontiles-referer_log  referer
TransferLog logs/ontiles.com-access_log
</VirtualHost>

<VirtualHost 212.87.82.24>
ServerName www.nuw-maas.co.uk
SSLDisable
DocumentRoot /home/httpd/html/nuwmaas
ServerAdmin webmaster@cyberscreen.com
TransferLog logs/nuw-maas-access_log
</VirtualHost>

Here you can see there are 2 virtual hosts with different logging requirements:

ontiles.com wants to get a referer report as well as the regular access statistics, whereas nuw-maas.co.uk only needs the basic access stats.

Step Two

Create a separate analog.cfg file for each domain. It's your choice whether you want each domain's config file to replace or to supplement the global analog.cfg - see Step Four for details.

For ontiles.com, we have a file called (with stunning originality) ontilesanalog.cfg. The relevant parts from this are as follows:

LOGFILE /etc/httpd/logs/ontiles.com-access_log
LOGFORMAT REFERRER
LOGFILE /etc/httpd/logs/ontiles-referer_log
OUTFILE /home/httpd/html/cyberscreen/stats/ontiles_stats.html 
HOSTNAME "ONTILES.COM"
HOSTURL "http://www.ontiles.com/"
IMAGEDIR "http://www.cyberscreen.com/images/"
LOGO "ontileslogo.jpg"
STYLESHEET ontilesanalogstyle.css
Note the order in which the LOGFILE and LOGFORMAT commands appear - if the LOGFORMAT REFERRER is not before the LOGFILE /etc/httpd/logs/ontiles-referer_log, it won't work! You can see also that we're giving the reports for this domain their own logo at the top of the page and are using a stylesheet that will match that of their website. Not essential, but you can't beat the finishing touches :-)

Now here's the same section for the analog.cfg file for the other virtual host - which, yes, you've guessed it, is called nuw-maasanalog.cfg.

LOGFILE /etc/httpd/logs/nuw-maas-access_log
OUTFILE /home/httpd/html/cyberscreen/stats/nuw-maas_stats.html 
HOSTNAME "WWW.NUW-MAAS.CO.UK"
HOSTURL "http://www.nuw-maas.co.uk/"
IMAGEDIR "http://www.cyberscreen.com/images/"
LOGO "nuw-maaslogo.jpg"
STYLESHEET nuw-maassanalogstyle.css
So by this time, you get the idea. This domain don't need the referrer report, but they would like their own groovy logo and stylesheet applied to the output. You can, of course, take the opportunity within each domain's analog.cfg file to tweak the output appearance, request floors and so on according to each host's requirements.

Step Three

We also want a report for our own use with a summary of the usage for all the virtual hosts. So we need to analyse all the logfiles together. The problem is that the filenames appear in the logfiles as just /index.html for example, but we want to see http://www.ontiles.com/index.html, so that we know which files belong to which virtual hosts. This is where the second argument to the LOGFILE command comes in. This argument specifies a prefix to add to the filenames in that logfile. You can see this in this configuration file, which we'll call all.cfg:
LOGFILE /etc/httpd/logs/ontiles.com-access_log http://www.ontiles.com
LOGFILE /etc/httpd/logs/nuw-maas-access_log    http://www.nuw-maas.co.uk
OUTFILE /home/httpd/html/cyberscreen/stats/overall_stats.html 
HOSTNAME "Cyberscreen"
IMAGEDIR "http://www.cyberscreen.com/images/"
SUBDIR http://*
Notice the SUBDIR command at the end. This enables us to see the amount of traffic for each virtual host in the Directory Report. This information is not in the Virtual Host Report, because the virtual host name is just part of the filename, not an item on its own.

When we run this report, analog will give us a "possible double counting" warning. This just means that the dates for the logfiles overlap, and it's nothing to worry about because all the logfiles are from separate virtual hosts.

Step Four

Now we have to knock up a little shell script to tell Analog to make a report on the stats for our different hosts at runtime. This works for me:
#!/bin/sh

cd /etc/httpd/analog4.0
./analog -G +gontilesanalog.cfg
./analog -G +gnuwmaasanalog.cfg
./analog -G +gall.cfg
Obviously, the first line reflects the location of my analog - yours may well be somewhere else. And of course, if you've put Analog in your $PATH, you won't need the ./ at the beginning of each line. What we're doing here is simply running Analog twice using a different config file each time. I won't say you can do this ad infinitum, but I'm up to 20 virtual hosts and Analog processes the whole lot in seconds. The important switches are the -G , which tells Analog not to use the default config file, and the +g in front of each cfg filename, which tells Analog to use that particular config file. No, you don't leave a space before the filename.

If you include the -G, the individual config files replace the global analog.cfg. If you don't include -G, then each domain will get the global analog.cfg plus its own analog.cfg.

Step Five

Save the above script as 'runanalog' (or whatever) and chmod it 755. Now you can use the cron daemon to execute analog on all your virtual hosts automatically at whatever frequency you desire. In the case of Linux, this is a definite no-brainer as under /etc you will find the directories cron.daily, cron.weekly or cron.monthly. My users like to have their stats pages updated on a daily basis, so I just copied 'runanalog' into cron.daily, but you could equally run weekly or monthly. If you offer a different service to different hosts, you could have one 'runanalog' or the daily stats junkies and another version in cron.monthly with the hosts that can't handle too much information.

And that's it! You now have Analog reports automatically generated and customised for all your virtual hosts.


Back to index of How-To's analog-ce-6.0.17/images/000077500000000000000000000000001406366436600147165ustar00rootroot00000000000000analog-ce-6.0.17/images/analog.css000066400000000000000000000005501406366436600166710ustar00rootroot00000000000000body { background-color: #F3F3F3; margin: 10px; padding: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 0.88em; } h1 { font-size: 1.8em; color: #882b32; } h2 { font-size: 1.4em; color: #882b32; } a:link { color: #3f7fc3; } a:active { color: #1E3D60; } a:visited { color: #1E3D60; } a:hover { color: #142941; }analog-ce-6.0.17/images/analogo.gif000066400000000000000000000052631406366436600170330ustar00rootroot00000000000000GIF89a00÷üœ¾â„®Ú‰³Ýq¤Û}«Û/VˆòöøËÜíåïù–()u¨Ûl Óޏâˆ%*m˜ÍéÃǃœ°ä·»•»âŽ%ìËË·8:¸Ðéìôûéïø´Îì¢ÃåP„äìøÙæðx§ØÏQVèñûn ÙÈßñv%(“·Û°ßI›,2y­ä�DpÃÙñ 6oÎâóê×Û³ÊâUZq›w!£56ëñóÍAF¨Åä®22ðÎÒp£ÓîàáæïõêÓÑ­Ëç|«Ôòòö÷àâQŒËâíõÙ…ˆ_"¤(-ôîóÄÕë䨨ô·¹˜JRßéõÛŽ“ýòñ»00õûþöóõ½Òìí÷þÈ13÷ÿÿÝíù?ÃÒåój'%‘iÒáìºØñ»Ïñðúÿýýþy016aÑßéÖ®²˜VcNw­Ú~}ˆ+2aŽÇÜž£3r¼¬µÈíå郶é–!t‹´õÇÇì´²ò÷ýçŸêòþéó÷ñÚâñ×ÙóÔÖóÜÜ›¿èz}§•§½ýúý£,/ÿÿüíõøùþû×è÷F„ÐÔàðœÇë­z}4 Ü—š©ÊìIe•r ë‘a“Õ&]¢ÆbeüÜÛ3l¥R%A{Jc$µÔî²$(ßso²Ä×쬱䗠òüõÿúù¯Îë½Ðâ÷õùûêê5x£Ööææ•14USz2 ×gg¥¿ÝãìþüùôÔ_^ïòþõêìÂ…‹¾:Gßñþý÷ï°Ëðíñùu›Á¾mr޽éöñúÃÚìÓÉ×ùûÿR7Qðòîž>D¿×îõõýÇU]ÑuuÐâýÀBEþëãÙlsùØÙÊ»Èíúóu8FËØã, ´V]²ÌÂØçããí' ªâÀÕåèêñÎØëÚÖáªÕöÄšŸÎooâ?Fô¡¤£Âì(õÙÕÕy}øÑÕ0ÊÐéDCÜåûû÷ûõãêédb§Õìýa*/þåèÝ¥ ýzy¬KP>/¥Ž»ôjœãÿÿÿw¢Ï¼"ÿõûõ¦°4.K:öÓΗÿÿÿ!ùü,00ÿù H° Áƒ*\Èo–§T3eJ•!Ë m¼xq V*^BãæÓ§5Sò“–©ƒ—?:­’5³ÓŸ?^õ)6†‰J…Î,Ä D剜 ]žtY*å‚@4úP™·.«ŸùdªÂ‰S9P’%ã$¥° üèõJ¯>}H¹ŠµÖ–]Mp AH­`iqý ”U«B1g$P †~BÓ' uš^¸P§ Áåš’'<ÀÙ Õ©‹È! ò™–)t@èF€á”&MBéȣÎ Ù2É)d´ƒ‰0LŒ¡Ë Q¼°Â [lq„ÐP†CÌÑð\a†ß„-Œ0YÇ‘Âʰð†@dœ"† ¨ÍŠ1Ù`³Ì4=d`É¿ÿQ 4Ö ƒŒ vð†0Ƙ &Ùd£øÌ‘DJ ‚"}qJ%b|qÎ9„L„laÁ XÀ+äB!at¶|€ *à +¡›±Í&ÍðR „E7áˆ!ÆÚÔK 5<¢ôÏLóÂ,³Xð ˜Ô‚.ÍÔðôÏOá*›0òH*€¡‚ IrÊ!Ìpž181…ù¼²†8QÐ@! aƒDp#‰à‚8^QòU ¬°"Ô7á`ðã‡$DqˆCp®_Èßop‰KÀ¢£HH@ èA$Ð÷‚a¾~Àê‡/ÈãE#ô;„ÿN1‚Ü`œB=Ðñ†B°ˆ"H@‘7\ 7¸JqTPÂÜÀ3x†IT"¢˜„(ÐH„3œà7˜Â%öp  ðJ@€H€d(Â%Š€|Á¼P„#.XËeP ‹€A7*a‚Jš`08ƒ‹à gÀ9P@GA €µ(OPŠ3ÀŠPÀX0° l›1dÀ Q˜D€ °Ð?øá€0€Œâ™ 0åŠ0ƒ”âêØÃ A e€Ñ–1È"¦P,B˜ÀÄÂdЀ øa(XÀr0€ ôäã ÐÿÈÀ”h„È0‚I˜"è¡8Ñ¡3˜@D ‚ Fð…3L`dh¦äiÏ{â“ÈÂ0,Aˆ€yЄdûÐÆ ªNv6 ¾ØÃBà€žî4¨§=à€¨r ÈBJ}¡Ž/Ä ,(@AÆ™IÔô¦˜ÁÚ0€ž†¨ÑŒfPàa p<¬P%”Š€ªAFà„Ht H€^•€ÈS(k K€Â–µ ÓôC+XA¥”Pâb¬³'H€*`ʶQ”¢0Ú;*`hfÁÖ§ªA¡I€úYŠÿœ€ @AYï(HÀ…ÀoEÒ¶èi#‚°ZG`N!ïpƒ;P€Ý>2@ÐÃF^ DÁ–ð„'!Þ[Ø!hD#Øëˆ‹$ (ð4¤!rÃŽÂŽð´ü" È/7ôà_ìTƒ(1F”±‡6V€±…pg…A ZˆÖ.lOÀŽ%@Ap©’24‚…ðî,¸…\äâTW耚µ)sÁß-D<ÐÀåŸÄ ¸F±7´@äPE,ª@hA\A¹x q[”!œXHÐKœ ÊKP…*@€!,áп°€',q 4”!Ò‰V …]†ÉèE/h@¦X¤cר¤Q¬aÐx †Ý…%a ¨¯1â @€Ð想ù°ìj/; ;analog-ce-6.0.17/images/analogo.png000066400000000000000000000142161406366436600170500ustar00rootroot00000000000000‰PNG  IHDR00Wù‡tEXtSoftwareAdobe ImageReadyqÉe<0IDATxÚÔZùo\çu=o³‡Ë )’"E-”dm”¼[v%[I,;QÇQ4c4hà Ô)Ð% ´`ô'#hò‹a HSÇi× Ç‰[–¼É²ej¡,“Q\†³/ï½yKÏ÷F¢\#ýBƒšñÌ{ßûî½çž{îý(A€?åõãÿsݘ5£ÜdÝ’×óḼI•àµ,\µ4”,`n®4Z©YûâÉØYÁh£Zö;INÇ ²ï•E_Œ&“Ó\f¢Ö¬ËðO¬ï™èO™H*|UuÒ½ráâûz‡ŸÚöàg&åx×wé}I’Ã+áÞE^ÊmDr~ÒûâÇkà'/¿ó£eï‰Oß½çÈQ(,OÃ’+3Ê> ]“¸×$•÷)ܰ'ðÅÕÃÐkšø4#$ÓH…žç~¡—ª°ë6ZzRD‡žŠBó\9ñN?ÿßÏË»¶>ùéÇO¨8A‹ä¡C€J®#p-‰¿ôÑrÔ›âqZÚ’ð£—Î̯N~çË÷ÝvÏèºîЋd›Ó5ÉC\×m'=äûí÷t:TnVWÔ6²ë U­2qéñ–Û†M’œ&bš ›Qi™Q©´t’‹i¸:3‹÷~ú“WS‰Ì÷ïüú7^q:¢¡ç¹U$MöCgµ!$ìâ6ßëLŒ¦ããÿóæÓËËÿò¹ƒwݳmc7l« ° ±Â3 &ßÛþ¤§y‚=Dâ«tFDxŒWë´ÆkZ¨ÕjÌ—i¡6 1i°•aÄcô—†fÏP™¼©äxų“xág?yu¤¿ïïúó¯°¸\/\˃ëŒä1 [žÂÑF¾ÿÍFNM]}âƒûîÙº¡Õj -—›#WËŠ«é‚e€É„K"=;.GlHíwpJ«%Ôê0jjO?¤\?‚¾>(½9,1" Á.ÑŒX‰dšÆ«(аj ¤6mÂ}_ùò=+3ÓO¼ûóŸ¨t“,°Ãj6¼ø ½OL:{.~øøçîÝdÏð,ÛF@*T‰óïW[>lzOx<„¨‚â=™Ÿ æò[üF’ð39(Q3d(…Ï×vlA,½ÖJ W.Í£°Z$ÌlhM&új¸·±nÛvŒ¸ïÈäG3ôæ[0^ij„³¯WbáI…j™ {wü‘ƒ½º)KÏ7¸á¦‘$M2ì¤?††I*B(µ!–Y ß¼0¼.1$H“4^p¶ÝlÀoÔIÝ4 ‘bbtBW†°Œ“<·f“×py‘Ü©¬»jaý]÷b±Ü|ììË/¿ß?4ðŒ²n@Yd[;’„^yçâÔ0³ýÑ;ölU¥Z ¾aÒQµ\”è]$*½í²jIô°HVÁõí2Oû^h”ð²F¦‰ç 0— /ÌW¯À+¬À+¡–VÑ Cª„X½h…¤˜êídm0Ôëô®DÒÊ/¡Q(a‰¹14¶KÕeõÑ©Sg†MQ}tùFLCÆòrã3SG÷ìÜ´ +šeSçqBZTCOÛ„“$J=éL  R“CÄrdn^'¥Zõ ÞC{0TE»5Wòøåã½V 6.h„—/ 80™Ð;¸NDa©Çdtf3Ú½gÿGç/ܾý‰ëÅ“¯å€ëáä»ã•Výá][6€ôYK!S8(ºV¸q™ gqÃÌd¸‡,¯†Z‰¨bK!LDÐE·hзŨ«‚Ù\‹÷ÉÇDçØÔD~¥€¨E Ï×Q™]‚Avvõ0™üó%Tm=ÔGݦHÞ÷îE¾X~øƒã'š¶{#†éÝÙ‹‡·n뢛.äáÚ)n¶Í2MnªNëj e+€A5h9uÔùÀë©òªLu›ò£H¯ùÄ|›5c¨6Eí2Ða4‚Ða*×SHe)Ûàgñ †jy… µ‘ŒÔ‰æô$¢n«yJ5‚HORCCÝ=:virêð°ÕøqŒU44Àç=g/¹‰ÉF‘Pl€p$ÓL^/4S䬪°j2"MF#gò»7ï aÆÿtf¯Çdµ ó Ç¢h¶JhœÆü X Dòi¤dQÐ,Þßl:Ð=MñP›e}ÑÑÙ·“E «‹¤wéLÊq#¿;Ý kõ­CòòÜ‘J· X:ýî(^úÙØ–u0ö"ÅíŠ$3™¬Dº¤çô¬ãh0É.2e­ÍÄ6ø#›L(ø'C‘fQ™É6 iÔ-ø¢›!eà6·xŸãÙô* ²„æ+”ßJ¹ŒÕš“Õ¹3—eVÐ)Ç‘IšXeæZå"‚³1õÒ+’·ß5Ú·iÇDh@åâì¾â•¹Ì›¿}Ù ›1X®"_YfM“Þký )/ŽZ‹ ÅÉD&?Á¦.Ï–FêqÒî2Qçæ5I¿Ü˜C(V™˜¶e¸Y6È2>é˜x Õ¦Oˆ5uÒZ}9Ë'ßF÷àzô§{`ÓèJ½ -a"ZœÁ©wÞÆ •d¦º$ï»h`ò;NÓ×€‘èÄ£[†!¯P1U˜o:©Íì€Ý1H¸ÄjR²ƒ‹›%-‰¢eA«’ã¤Àæ‰c…P‹uuÁ0z¸Y®‘‘èÖ™“Ùéö©Ð1>£"§w¥ˆå™r˜¹Dº³ˆÒØ‹o¾Žçæ«xmd?6µôkI<½¼0:Ï0O9Uüò÷/á®ÌŒ&»#å3§¡LÍ€ö¦]Hßû)ÔÓ*ò5z…UVÖüP2;$ÜJƒƒ‰ÝÕ»™ö¢Ô3ˆUf²;ƒ( WL@äý÷Ѹt‘ŽiÀíP¡1X!™”åLô4evÌ·Q\( Ñ,!Õ³‡yaàêÅYüî•7p2µ‡*×ÁùsÓ£kLLOK¦Ž\G'®âG'OáÛ»v#©µP+Ôàՙȭ24b0µ~Ñ»Å3ᲸyvƒÜOÊe$˜hr½†"ä²ÌÖa-Ä5!ÒÑ× “tºôÖÛ e˜A”÷ÛhVšðHÁQÖ#¯°ŒÕRMWÅÀ¶Qt°W(P™ž}í$^_rÑí€Êäž[X^3À®rõbÉH*,(??ý>rW,|mûš¾Žrzf#^žBùW?G„Õ4·eZÝLv„ýD…¥ß—õ°¨µ<ªJ¥…«u¢ÉT„üõêÔU”JV%©»‰4ZŒD‹„áQrÈô|`HÏ2Û÷@ëêÇòbWÞ{çÏŒãr×¾POie õF!·fÀÛIQ–ñb =”KùŒ„ËO ºìá¦ìz(ÔDËd‡´hLÞ<Žü'Ø2 k÷môÈ.tlÞFüF°Ðl¢EÅ*Qš%7ù^t=ŒU2Ñôí»°rå7ÈmÖÖ˜š l Ó¡xC#Úu÷«}SïÂo^}ãýÛ ä6Àm ¹Â:ÕÒk¨L0™ÍDPw‘ ›n yJ‚¿xG ‹[)uµVeÝ„MÃcmœÿõ÷Ï “Åe‘<ýÖ—þ ;Gº)Jh°NÔ Y&¼ÈW+zê$Sebh<øM¤ÏœAíò94¨µ»²ŒEÜWIw÷¯C«Ú$­2iˆ½EC†~æHœ…ªÈc‰©Š&œÊ²cqš†}*%®C©,¦q¯«·D÷¦…£•“Óó° 26BãZuö E2\ñê ÊÅ $B¨sxê¹Pò3¸³:ŽÖÔi\žx/ÔXÑ®›+[x½]ãklÚvÓ);/\š¾‚$ºÉ4ÐLJ*QJ 5FáÆ •PˆjqDcihaA&¨ïü3ÔFö¦Wéb*Sª"¡PY¼ EÐÝšè“% 7z½NB0©<§ö~ ïÂäÆ:˜ šGœÑ7#Ô\ÍUôÚ H°PÎ#’M!‘éFOƒýD*–(l:µf@Ï-{'²wì>V’DS]a™· å’ˆí/;ȤuæÛ>*³$­7ü:6 üèwqîÀ7ÐôÄL¦Únjlv¸r™ŠèÃašÞZd©–C¹0¹çÓÈfÓˆQÿÄSqJí¶‘>»;s¡ú ,ŸN,‡ÞÞ,<3ˈ£²ÔÀÖ\DZ›÷än@hh°ÙM[^žãËb*GiáÂIê¡9Zg²v0qSB„Ù¬Ÿd©÷y ú]B'¥ªµ &žd‚GX…å° 3(˜Ÿì#‚ð½iˆ™šŽF2LþÒ®ûÙC0±KediÄ–­£z7PFÈXÕS(¤sØGÖÙl$Qb!”™'^y£ëÒ/g)ônLªY´n}àÈ‹8½\-£#G,`q!Dbü:ÎF¥ƒ9@µzLîAŒ,U¾Ö6JñŒ8»&2„Ã'¢bÜl„•»ýªŠrøª…®1quãíáôW8D»÷(^»ÿ»8ÛH¦RPKõá\×(¢LæùÄV¬F»™+y tGOñðÍ/¦MýFKÙ´ì¼ûàÜGŸúÌsó¿þÅØæ ›ÐQj6l4¨oÓÌ Ñ66¨@û©ÓO|õŒLâ>JŽ74j ÖQ!5­=N[½6¿i)¤S6Ï¢hùlG=1ÿíäú-¸øßA½se¼ßpP©FMößlˆ¦»v dö"ϼjIljæòøÂƒcϼwçœ,FÕÒ541gg,n~àóÏþî¿?ܨ÷çxACÌkŒ|z„Rtì~ûÙ¿C7ûæf£B©l¶gŸ²8U‘ÃuÄÈQUĔڊF‹‘'šzW´OY\¶”6¿ëŒ1á÷Ü ôÚd%ÛåÐa®*†*‘$„QèíU*Ò =Ñã_üÔmÏjºzm}m*¡Òu [·ïŸþì—ž¾P(¹—PbŸ§¯–¯ëgþ¬Ë±YiVÃÐàn£\,Î$"jبð…0ñÂר)±VˆQç'£zø*`&î3§Ø®3é)×&sÑ!ºÆ|áz*U§Â1‹Õ¸¸ô¡{ôÐæ§÷ï™S÷ãS ÏeWD¾÷ ø-G¿òÌÅógv»ãï|+!‹f›Þ:ø0Þ¹å‹Ä¿¸±Nçt ¸Ùªâ:~gózßg´j•5À!t1W²=„ÉT8z°!¾SÅ=¬ìÐlj'ƒÑj1ÿJŠD4Ê|ÐPXºˆÛGR??7äª=C‰–w¿B·ùˆ Êäí„5R{Œ 3B(ˆqe”!ÖÑcªÅ_>ª1ÏT¦‰É´˜m ÛHvyLdáV×ié…ÂUèŒyÊ‹üGÇ^ýúîøþ—?sËkqŠEÑxbNpˆ¼vÄ„sÍvXÄY¬Ê×Y9ùì wþô”õDvdë‘íÛ³¬Ä¥±ÁtèqF€pÐ+Þ§— C_;±‰ÈíD ‘'šv?Ç.óCœ7XôæJ¡ ›Æ„•Ã$¬ÖULLœÇ™³ÇŸÿ˃#O>tÿ}'z&s‰U(Ñ|9\‡¤ÌÚrÍq’(x;¬iʵ1¹˜ñS2èäõÿ|áÝ‘çON?ŽÎÔc{ÇnRG²Y²S}©O±ÂêdÂBTï(× Tˆ0̶ꇧ?!„„£ü ì¤,ÂH@©ºÚÄrÅEÀæIMŰºRÇ©?œr[•ù>phûSÜ3ã:~xºÎ®‘ÕØOOÙüS%+4èÿœ‡Ì×.@xd$æ4Ä% œþ`Ͻr⑹šòèèöû· S`‘ ;S öµ¼ÆGJâcâ0Nœ‰êŒŒ(`žð£Ðà?un¦N ´([,®/ß•%œ¹Œ¥+çoîo=ýÙ{ö=s×Î]a} 'aÂòؼþÑ€rý˜U¾!· ™ŸRŠy èELUŒðó¥ïëoŸ>qnþèd¾òð¾Í½cwßr3F3T’„²-NeZ›ÒÙèÄiÇxò—E­S¼^®:xë×1óáäéþL÷s· ={Ëî¾éþ®:EkŸ7ˆ /Â!h”°t…Y|ò¤^U’¯ÿYDh€˜õ˜á± =©DÂä“|ùr ÿñÊ…sž9ÜÛÝ}ˆa>02ËlèëFOò®TÈPMÒáõÃ8*qvl–òeÌÌ/afn¡P¢ÇJ+ó/ï;xßþísƒ]]ÜîA(REÖÛ§ ¡òµ kǫ”ëçÄí]ßø„0/ˆ1qø¬ŠCj©BDè¼™JÓ1¤ÖÓ²|³s8yöܨšÊìSucGe)?õ¥á„¢æ¤¸™ú¨Õ²KÍFm‘¨šN&“’¢WjÕS·ŒnšØ¼ié„N¶j๮ªa‘’’$jŽ:°½?µ )qàü?+ñ§öó¿ {Þ&—’F"‘IEND®B`‚analog-ce-6.0.17/images/bara1.gif000066400000000000000000000000471406366436600163740ustar00rootroot00000000000000GIF87a€¿33ÿÿÿ,„©Ë};analog-ce-6.0.17/images/bara1.png000066400000000000000000000001651406366436600164140ustar00rootroot00000000000000‰PNG  IHDRÄËM¸PLTE¿33"ÀÑtEXtSoftwaregif2png 2.4.2£^G IDATxÚc`@ ïè3%IEND®B`‚analog-ce-6.0.17/images/bara16.gif000066400000000000000000000000731406366436600164610ustar00rootroot00000000000000GIF89a€€¿33ÿÿÿ,€„©Ëí£œ´Ú‹³Þ¼û†âH–扦êW;analog-ce-6.0.17/images/bara16.png000066400000000000000000000001661406366436600165030ustar00rootroot00000000000000‰PNG  IHDR€1MPLTE¿33"ÀÑtEXtSoftwaregif2png 2.4.2£^G IDATxÚc` f·ÁëIEND®B`‚analog-ce-6.0.17/images/bara2.gif000066400000000000000000000000511406366436600163700ustar00rootroot00000000000000GIF87a€¿33ÿÿÿ,„©Ëíc*;analog-ce-6.0.17/images/bara2.png000066400000000000000000000001651406366436600164150ustar00rootroot00000000000000‰PNG  IHDR𲌤PLTE¿33"ÀÑtEXtSoftwaregif2png 2.4.2£^G IDATxÚc`@äUçIEND®B`‚analog-ce-6.0.17/images/bara32.gif000066400000000000000000000001071406366436600164550ustar00rootroot00000000000000GIF87a€¿33ÿÿÿ,&„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçú];analog-ce-6.0.17/images/bara32.png000066400000000000000000000001661406366436600165010ustar00rootroot00000000000000‰PNG  IHDR’ÒŒPLTE¿33"ÀÑtEXtSoftwaregif2png 2.4.2£^G IDATxÚc`ÆþýJIEND®B`‚analog-ce-6.0.17/images/bara4.gif000066400000000000000000000000551406366436600163760ustar00rootroot00000000000000GIF87a €¿33ÿÿÿ,  „©Ëí£œ´Úk ;analog-ce-6.0.17/images/bara4.png000066400000000000000000000001651406366436600164170ustar00rootroot00000000000000‰PNG  IHDR ˜AœPLTE¿33"ÀÑtEXtSoftwaregif2png 2.4.2£^G IDATxÚc`ÀeYžqIEND®B`‚analog-ce-6.0.17/images/bara8.gif000066400000000000000000000000621406366436600164000ustar00rootroot00000000000000GIF87a@€¿33ÿÿÿ,@„©Ëí£œ´Ú‹³Þ¼û¯;analog-ce-6.0.17/images/bara8.png000066400000000000000000000001661406366436600164240ustar00rootroot00000000000000‰PNG  IHDR@I¦ ìPLTE¿33"ÀÑtEXtSoftwaregif2png 2.4.2£^G IDATxÚc` 6ˆ‰jIEND®B`‚analog-ce-6.0.17/images/barb1.gif000066400000000000000000000001031406366436600163660ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,ºþNÈ)‡½–è­‹ÿ^;analog-ce-6.0.17/images/barb1.png000066400000000000000000000002251406366436600164120ustar00rootroot00000000000000‰PNG  IHDR +ÂÈPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^GIDATxÚc`A `Pc `p†P $¤ýŽ[Ÿ.IEND®B`‚analog-ce-6.0.17/images/barb16.gif000066400000000000000000000001761406366436600164660ustar00rootroot00000000000000GIF89a€ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,€KºÜþ0ÊI«½0èÍ»ÿ`(Ždiž  ®lë¾p,Ïtmßð ï|ïÿÀ pH,@‚rÉl:ŸÐ¨tJ­Z¯Ð‚vËíz¿à°xL.›Ïà;analog-ce-6.0.17/images/barb16.png000066400000000000000000000002271406366436600165020ustar00rootroot00000000000000‰PNG  IHDR€ùù‹=PLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^GIDATxÚc` R”( Æ C(…°?ÁKf“¯IEND®B`‚analog-ce-6.0.17/images/barb2.gif000066400000000000000000000001141406366436600163710ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,ºÜ0Ê„½8‹Á»ÿ!ŽdIhª®E;analog-ce-6.0.17/images/barb2.png000066400000000000000000000002251406366436600164130ustar00rootroot00000000000000‰PNG  IHDR8RÔPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^GIDATxÚc`€A(`P‚c(`p†P(ƒ²ù”:IEND®B`‚analog-ce-6.0.17/images/barb32.gif000066400000000000000000000002451406366436600164610ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,rºÜþ0ÊI«½8ëÍ»_A(Ždižhª®lë¾p,Ït- x®ï|ïÿÀ pH,ȤrÉÌ žÐ¨tJ­Z¯Ø¬vËíz¿à°x %˜Ïè´zÍn»ßð¸|N¯Ûïø¼þ\èûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘~ ;analog-ce-6.0.17/images/barb32.png000066400000000000000000000002301406366436600164720ustar00rootroot00000000000000‰PNG  IHDRÞr]üPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^GIDATxÚc`h 8À€Ai€ƒñ— ¡ Ó¡ù„ÎÏIEND®B`‚analog-ce-6.0.17/images/barb4.gif000066400000000000000000000001251406366436600163750ustar00rootroot00000000000000GIF87a ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ, "ºÜþ,ÈI«½TèÍ»ÿÜ Ždiž$¡®lë¾l!Ïtmßt;analog-ce-6.0.17/images/barb4.png000066400000000000000000000002251406366436600164150ustar00rootroot00000000000000‰PNG  IHDR P¡ìPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^GIDATxÚc`@‚h€A 0£4ÀŠñ-ñÆð+|IEND®B`‚analog-ce-6.0.17/images/barb8.gif000066400000000000000000000001441406366436600164020ustar00rootroot00000000000000GIF87a@ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,@1ºÜþ0ʪ½8ëÍ;`(Ždižè9¬lë¾p,Ï2aßx®ï|ï÷… pH,È$2;analog-ce-6.0.17/images/barb8.png000066400000000000000000000002261406366436600164220ustar00rootroot00000000000000‰PNG  IHDR@F…œPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^GIDATxÚc`  %€Á˜`p!B ‰Ÿá¢»IEND®B`‚analog-ce-6.0.17/images/barc1.gif000066400000000000000000000001041406366436600163700ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,ºP0:A«8;»+`X$;analog-ce-6.0.17/images/barc1.png000066400000000000000000000002371406366436600164160ustar00rootroot00000000000000‰PNG  IHDR +ÂÈPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^G&IDATxÚc````e`e`RRRe`666e`qqqe` ÆËZ IEND®B`‚analog-ce-6.0.17/images/barc16.gif000066400000000000000000000003261406366436600164640ustar00rootroot00000000000000GIF87a€ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,€£ºP¼î59e|—eH·òÖÖœ¨ƒ¦Àzª.¼Ê¬Ðoë3_ï6ÜÍ— Ȥ#©<2Ëg”9m>¡NjÖ*Ý"«_/ö wè´#­°Ñëwœ=o¿u¸[¾§÷í|wyxz‚‰ŠŠ‹ˆŒ’”Ž‘•š—“œ‰– Ÿ™˜¡¤ž©ª«ª ­¬°¯­³«µ®°±´¹·©½º¶¼Â° ;analog-ce-6.0.17/images/barc16.png000066400000000000000000000002511406366436600165000ustar00rootroot00000000000000‰PNG  IHDR€ùù‹=PLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^G0IDATxÚc````¥3 ŠR‚˜””T)Á ÌÆÆ¦”`WJ0khh(%š?1±)- IEND®B`‚analog-ce-6.0.17/images/barc2.gif000066400000000000000000000001201406366436600163670ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,ºP¼.ȧt"k¬³`ø… Cœ¨‰žNá¾-ì&;analog-ce-6.0.17/images/barc2.png000066400000000000000000000002471406366436600164200ustar00rootroot00000000000000‰PNG  IHDR8RÔPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^G.IDATxÚc````cFAAQf`RRRafccSf`qqqaÖÐÐPf*7›™åêIEND®B`‚analog-ce-6.0.17/images/barc32.gif000066400000000000000000000004761406366436600164700ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,þºP¼î59e|—eH·òÖ)–è©j&›º+÷ÊñxîäúÍ»_7ìý€>bÒ(\âŠO'ò6©Òª6ËÅz¯`åWf*è´#­°Ñëwœ=o¿u¸[¾§÷í|wyxz‚…„‡ŠŒ~‹Ž€“’•†|™šš›™œ ¢¤ž ¦¡Ÿ£¬¥®§­¨ª©°«³¶µ¸»²½¯¼¿¾±ÁÄÃÆ·­ÊËËÌÎÊÍÑÓÎÕÏÑ×ÒÐÔÝÖߨÞÙÛÚáÜäçæéìãîàíðïâòõô÷èÞûüýü þùð_Á~ hpaÂ}"tH‘`ņ3bÜ8 QcGŽ =† qa;analog-ce-6.0.17/images/barc32.png000066400000000000000000000002521406366436600164770ustar00rootroot00000000000000‰PNG  IHDRÞr]üPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^G1IDATxÚc````PÌ(((:˜IIIu 1³±±é@b×Ä ¬¡¡¡‰Û9carö½»IEND®B`‚analog-ce-6.0.17/images/barc4.gif000066400000000000000000000001461406366436600164010ustar00rootroot00000000000000GIF87a ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ, 3ºP¼î59ƒ½îb mîŽ Žá(–&JCë:îËÆL;D®ãzÎ÷¿]£@,‹Ä#RYL;analog-ce-6.0.17/images/barc4.png000066400000000000000000000002471406366436600164220ustar00rootroot00000000000000‰PNG  IHDR P¡ìPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^G.IDATxÚc````EÁŒ‚‚¢È˜III30›"cWdÌÀŠŒ†í mLP¤IEND®B`‚analog-ce-6.0.17/images/barc8.gif000066400000000000000000000002211406366436600163770ustar00rootroot00000000000000GIF87a@ÂæxxàXXÖFF¿33°00‰&&ÿÿÿÿÿÿ,@^ºP¼î59e|—e‚ÿÎvb–§˜Ž¥Iª€ ÏÎLǶPç»Ýß9ÎŽ#²¨$›OetÙt2¥‚vëØr³^B7<ö–¿a1ØÜ(¸ßí·;.§Ãåw¼C¿×';analog-ce-6.0.17/images/barc8.png000066400000000000000000000002501406366436600164200ustar00rootroot00000000000000‰PNG  IHDR@F…œPLTEæxxàXXÖFF¿33°00‰&&m|tEXtSoftwaregif2png 2.4.2£^G/IDATxÚc````Å‹Eña&%%U|˜ÙØØf`qqqŇXCCCñaøAÙtÒ?¬IEND®B`‚analog-ce-6.0.17/images/bard1.gif000066400000000000000000000000531406366436600163740ustar00rootroot00000000000000GIF87a€¿33, „§›þ\[¡;analog-ce-6.0.17/images/bard1.png000066400000000000000000000001711406366436600164140ustar00rootroot00000000000000‰PNG  IHDRÄËM¸PLTE¿33JävtEXtSoftwaregif2png 2.4.2£^G IDATxÚc`d€C0 ÍÓ¯IEND®B`‚analog-ce-6.0.17/images/bard16.gif000066400000000000000000000001501406366436600164600ustar00rootroot00000000000000GIF89a€€¿33,€G„§›þ\[U¯Ñ‘æ/^Hަ%¢¥zb«Ûn)ÌÖô-¿yÜÙ»ßÃBŽqFL—Gùt6yS`µ½*µQjö+Í;analog-ce-6.0.17/images/bard16.png000066400000000000000000000001741406366436600165050ustar00rootroot00000000000000‰PNG  IHDR€1MPLTE¿33JävtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`D ´†aÙN¯›IEND®B`‚analog-ce-6.0.17/images/bard2.gif000066400000000000000000000000601406366436600163730ustar00rootroot00000000000000GIF87a€¿33,„§›þ\[U¯Ñ‘;analog-ce-6.0.17/images/bard2.png000066400000000000000000000001721406366436600164160ustar00rootroot00000000000000‰PNG  IHDR𲌤PLTE¿33JävtEXtSoftwaregif2png 2.4.2£^G IDATxÚc`dd@E~ b4aIEND®B`‚analog-ce-6.0.17/images/bard32.gif000066400000000000000000000002231406366436600164570ustar00rootroot00000000000000GIF87a€¿33,r„§›þ\[U¯Ñ‘æ/^Hަ%¢¥zb«Ûn)ÌÖô-¿yÜÙ»ßÃBŽqFL—Gùt6yS`µ½*µQjö+{Ãä±Ù*F—ÕgìÚÝÞ¦áì:ý.çã]ûÞ߇ø'Èe8G˜8¸x¨Çˆ˜P;analog-ce-6.0.17/images/bard32.png000066400000000000000000000001741406366436600165030ustar00rootroot00000000000000‰PNG  IHDR’ÒŒPLTE¿33JävtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`$†‚KÁX¬œæIEND®B`‚analog-ce-6.0.17/images/bard4.gif000066400000000000000000000000711406366436600163770ustar00rootroot00000000000000GIF87a €¿33, „§›þ\[U¯Ñ‘æ/^Hަ%Z;analog-ce-6.0.17/images/bard4.png000066400000000000000000000001731406366436600164210ustar00rootroot00000000000000‰PNG  IHDR ˜AœPLTE¿33JävtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`\†m@ IEND®B`‚analog-ce-6.0.17/images/bard8.gif000066400000000000000000000001141406366436600164010ustar00rootroot00000000000000GIF87a@€¿33,@+„§›þ\[U¯Ñ‘æ/^Hަ%¢¥zb«Ûn)ÌÖô-¿yÜÙ»ßc;analog-ce-6.0.17/images/bard8.png000066400000000000000000000001731406366436600164250ustar00rootroot00000000000000‰PNG  IHDR@I¦ ìPLTE¿33JävtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`„RF1„ZIEND®B`‚analog-ce-6.0.17/images/bare1.gif000066400000000000000000000001071406366436600163750ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿ,ºòP„Aë$kŠÿE`Œ¤$;analog-ce-6.0.17/images/bare1.png000066400000000000000000000002421406366436600164140ustar00rootroot00000000000000‰PNG  IHDR +ÂÈPLTEæxxàXXÖFF¿33°00‰&&r‰ààtEXtSoftwaregif2png 2.4.2£^G&IDATxÚc````dPRRRd0666dpqqqd dHKKK4åC‰sgÀIEND®B`‚analog-ce-6.0.17/images/bare16.gif000066400000000000000000000003111406366436600164600ustar00rootroot00000000000000GIF87a€ÂæxxàXXÖFF¿33°00‰&&ÿÿÿ,€–º¼î59e|—eH·òÖV'œ¨¤èʪ/üº,ÚmŒŸ»\ëÀ™n@,Æ"2yd6™ËdÔ8U:«DìSzíB¯„°˜‹ËfrZF›Ýcøy-×Ùoº¾M/øÿ€‚ƒ†‡†…ƒ‹€„ˆ~’‰Œ‘—Š‘›œœŸ ž£¤£¢ ¨ª¡¥¬›¯¦©®´§® ;analog-ce-6.0.17/images/bare16.png000066400000000000000000000002541406366436600165050ustar00rootroot00000000000000‰PNG  IHDR€ùù‹=PLTEæxxàXXÖFF¿33°00‰&&r‰ààtEXtSoftwaregif2png 2.4.2£^G0IDATxÚc````¤+)))R‚Œ )Á ...Ž”`†ÐÐÐ@J0CZZZ"%ÕìT!û&n@IEND®B`‚analog-ce-6.0.17/images/bare2.gif000066400000000000000000000001251406366436600163760ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿ,"º¼AÈ)"•aè=2×!ŽDHŠA¡®Eʪ!ÏFLËA;analog-ce-6.0.17/images/bare2.png000066400000000000000000000002521406366436600164160ustar00rootroot00000000000000‰PNG  IHDR8RÔPLTEæxxàXXÖFF¿33°00‰&&r‰ààtEXtSoftwaregif2png 2.4.2£^G.IDATxÚc````c%%%Ef0666aGf a†´´´D¾ …Á~IEND®B`‚analog-ce-6.0.17/images/bare32.gif000066400000000000000000000004541406366436600164660ustar00rootroot00000000000000GIF87aÂæxxàXXÖFF¿33°00‰&&ÿÿÿ,ùº¼î59e|—eH·òÖ)–è©j&›º+÷Êñ'ܸäøÎë?àÏÇ#挽 ò¶•Ðaô)­R¯ÇiÖºÅ&¹_/s@.æ2:}f·ÙëtÜ ¼tIEND®B`‚analog-ce-6.0.17/images/barf32.gif000066400000000000000000000002651406366436600164670ustar00rootroot00000000000000GIF87a€¿33[‘,”„o¡«ˆÌÜK&,ÀÙrýy8Šyšºª‘[ÁÜI¡]â©Þò¯΄5Ç͘Cî”=æÏ„¥ÅGÒºÄ6µOnÔ;W'WrÖ¼EwÕ_vØ=¾œåiúÚÞÆ¿õñM™Ïrç77XW(x$˜wȘ·¸×(ùHÙW9™ù·‰ùyJ:*JEzjª¨ ÉjY ›JT;analog-ce-6.0.17/images/barf32.png000066400000000000000000000001741406366436600165050ustar00rootroot00000000000000‰PNG  IHDR’ÒŒPLTE¿33[‘€]štEXtSoftwaregif2png 2.4.2£^GIDATxÚc`øOÍò_¡ÿD2]IEND®B`‚analog-ce-6.0.17/images/barf4.gif000066400000000000000000000000721406366436600164020ustar00rootroot00000000000000GIF87a €¿33[‘, „o¡«ˆÌÜK&,ÀÙrýy8ŠyšP;analog-ce-6.0.17/images/barf4.png000066400000000000000000000001731406366436600164230ustar00rootroot00000000000000‰PNG  IHDR ˜AœPLTE¿33[‘€]štEXtSoftwaregif2png 2.4.2£^GIDATxÚc`ø„¸­p õûðÔIEND®B`‚analog-ce-6.0.17/images/barf8.gif000066400000000000000000000001141406366436600164030ustar00rootroot00000000000000GIF87a@€¿33[‘,@+„o¡«ˆÌÜK&,ÀÙrýy8Šyšºª‘[ÁÜI¡]â©Þò¯* ;analog-ce-6.0.17/images/barf8.png000066400000000000000000000001731406366436600164270ustar00rootroot00000000000000‰PNG  IHDR@I¦ ìPLTE¿33[‘€]štEXtSoftwaregif2png 2.4.2£^GIDATxÚc`ø…¤0yØéó&ß4IEND®B`‚analog-ce-6.0.17/images/barg1.gif000066400000000000000000000001351406366436600164000ustar00rootroot00000000000000GIF87aãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,È)…½–è­ÿ"Ž¢bžf;analog-ce-6.0.17/images/barg1.png000066400000000000000000000002441406366436600164200ustar00rootroot00000000000000‰PNG  IHDR +ÂÈ!PLTEæxxàXXÖFF¿33°00‰&&uL/tEXtSoftwaregif2png 2.4.2£^GIDATxÚc`% `p†4 `è†U@I*ù<¡ajIEND®B`‚analog-ce-6.0.17/images/barg16.gif000066400000000000000000000003531406366436600164700ustar00rootroot00000000000000GIF89a€ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,€ È)ƒ½–RŒõä—W¥ˆš«J p tM˲mã±^ó3ß(Fb)$8ŸÎ‚t*…B©Të;ÕF¹/ö’Åg3ØÀn³ð8Üí–Ëém{ÿÖø~|‚€…„~Š‹Š ŽŽŒŒ’‹”–˜ šœš ž£¢œ ¨©¨ ¬­¬ªª®®°©²­´«¶ ¸ º»¸¾¼ÁÀº;analog-ce-6.0.17/images/barg16.png000066400000000000000000000003011406366436600165000ustar00rootroot00000000000000‰PNG  IHDR€ùù‹=$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^G6IDATxÚÅÁ ÁUH!…RH!…RH!…äZ†›Ï€Šâ«šÒéJgj)­£t®žÒ?üŒA¸²€IEND®B`‚analog-ce-6.0.17/images/barg2.gif000066400000000000000000000001571406366436600164050ustar00rootroot00000000000000GIF87aãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,$È)ƒ½Vè­‡ÿ!Žbaž¦¡®êá¾."Ïrbß¶¢ïúâÿ¾;analog-ce-6.0.17/images/barg2.png000066400000000000000000000002671406366436600164260ustar00rootroot00000000000000‰PNG  IHDR8RÔ$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^G,IDATxÚc`A `Pc `p‚P `H‚r `è‚™@À° v/‰ëÒG0IEND®B`‚analog-ce-6.0.17/images/barg32.gif000066400000000000000000000005211406366436600164630ustar00rootroot00000000000000GIF87aãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,þÈ)ƒ½–RŒõä—W¥ˆš«J²¯ ³ÌÑ·Ýé!o À p@,…B£T™Cç*N¡Vj+Õv¹No¬—ÉKôSM$¸ßî‚|.‡Ãétû?×Çù~€~„‚‡†€ˆ‹Š|ŒŽx“’y–}˜rœœ ¡ žž¢¢¤¦¡¨Ÿª¬®¯¬²°µ´®¶¹¸ªº½¼¦¾ÁÀ§Ä«Æ ÊËÊ ÎÏÎÌÌÐÐÒËÔÏÖÍØ ÚÜÝÚàÞãâÜäçæØèëêÔìïîÕòÙôÎ øùø üýüúúüù˜O`?‚û .@¨@áB„F„¨PbEŠ-fÄ(PcGŽAÉ/;analog-ce-6.0.17/images/barg32.png000066400000000000000000000003021406366436600164770ustar00rootroot00000000000000‰PNG  IHDRÞr]ü$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^G7IDATxÚÅÅÁ ÁUH!…RH!…RH!…äZ‹›Ï€ŠbW5¥¦k(5SK©Ù:JÍÕSêžV­IEND®B`‚analog-ce-6.0.17/images/barg4.gif000066400000000000000000000002041406366436600164000ustar00rootroot00000000000000GIF87a ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ, 9È)ƒ½–RŒ…ÿÞ Ž"’$¡®já¾.˰aßö¡ï:Žó<„p(LF"‰T8ŸÎ…t*…B©Ô;analog-ce-6.0.17/images/barg4.png000066400000000000000000000003001406366436600164140ustar00rootroot00000000000000‰PNG  IHDR P¡ì$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^G5IDATxÚc`A €ÓJ@` 0šÁBF3¤A9Àh† ˜ 0šaì ~B#¢ÄYƒIEND®B`‚analog-ce-6.0.17/images/barg8.gif000066400000000000000000000002571406366436600164140ustar00rootroot00000000000000GIF87a@ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,@dÈ)ƒ½–RŒõä—W`žæ ®*в¬{«œÒ¡ïzáÿ>îˆ?cY08ŸÎƒt*…B©Të;ÕF¹„x,N˜Ïf2VÙgwžPØïö…~¯Çãù|~w€{‚y„ ;analog-ce-6.0.17/images/barg8.png000066400000000000000000000003001406366436600164200ustar00rootroot00000000000000‰PNG  IHDR@F…œ$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^G5IDATxÚuÅÁ ÁUH!…RH!…RH!…äZ›Ï€ŠâUMiº†ÒL-¥Ù:Jsõ”þ}F!ócÛXIEND®B`‚analog-ce-6.0.17/images/barh1.gif000066400000000000000000000001361406366436600164020ustar00rootroot00000000000000GIF87aãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,È 8[»5`h!di)hªD;analog-ce-6.0.17/images/barh1.png000066400000000000000000000002561406366436600164240ustar00rootroot00000000000000‰PNG  IHDR +ÂÈ!PLTEæxxàXXÖFF¿33°00‰&&uL/tEXtSoftwaregif2png 2.4.2£^G&IDATxÚc```àb`RRÒb`qqñb`KKËbàèèèbàZµj7n7ÅEÉEIEND®B`‚analog-ce-6.0.17/images/barh16.gif000066400000000000000000000004371406366436600164740ustar00rootroot00000000000000GIF87a€ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,€ÔÈ T¸8,:m¾W} 8’!ç})µfmGjæ‹mB®[CïãºÏׇDã.@,‚BfSm¨äï Õ: à°¥@.oÂâ@Ù @ƒÇëÂÙ _ÏÑu¶›'ßÓqrmtjqˆ‰Œ‡‰ˆ‹Œ’“•Š“”‘›œ™ œ£—ŽžŸ©¯° ³´°±´µ·¯²º ¶½¿ºÂ·Ä»½ȳƸÀÁ¼Ã¹À ר ÛÜÖÙ×ÝÛßÚâÞßáâäéçèÙêÝìðîóØñÜ;analog-ce-6.0.17/images/barh16.png000066400000000000000000000003251406366436600165070ustar00rootroot00000000000000‰PNG  IHDR€ùù‹=$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^GJIDATxÚc```à”&›fRRÒ66¶&—f`qqñ &—f`KKË//¯&—fàèèè’œ9s6¹4תU«¤wïÞM. ÐNp!nn!=IEND®B`‚analog-ce-6.0.17/images/barh2.gif000066400000000000000000000001621406366436600164020ustar00rootroot00000000000000GIF87aãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,'È T¸8, º·C(nDiZEªnFëZG,oHm[I®oJï[‹ p;analog-ce-6.0.17/images/barh2.png000066400000000000000000000003121406366436600164160ustar00rootroot00000000000000‰PNG  IHDR8RÔ$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^G?IDATxÚc```à”f`RRÒ66¶f`qqñ f`KKË//¯fàèèè’œ9s6תU«¤wïÞ óö;?ïØIEND®B`‚analog-ce-6.0.17/images/barh32.gif000066400000000000000000000006771406366436600165000ustar00rootroot00000000000000GIF87aãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,þÈ T¸8,:m¾W} 8’!ç})µfmGjæ‹Å’]Š:Íϸ«$¢ŒÃßQÀlZÐè¦é D¥*óyLµÜë—Æjeè¸ÚõfÁÖîz¿Éu3¼=GçÕwlrt|„~†ginŽ‘’Ž’“•˜”›˜ •¢™›¦‘¤–žŸš¡—ž¬œ²£°¥¶§±®´©º«¸­³Âµ½Å¿Ç¨ª¯ÎÏÒÓÏÐÓÔÖÎÑÙÕÜÞÙáÖãÚÜçÒå×ßàÛâØßíÝóäñæ÷èòïõêûØåsGo ="L·‚‡-$˜HqĈ(Vpñ¡Du ,vü¨QäE’;"@9Ñ$F!9ŽÌÒ¥Gš%ežÄ™r&L›+y¶Ôù²&Ñ›?Mª’eLP£ZX@µê©Q5X¥ZëÔ­W½jÝÚëX«e¥ž­š6+ذfß¶…º–«×¯dïÖ…«V®^¿bÇ;¯Õ;analog-ce-6.0.17/images/barh32.png000066400000000000000000000003261406366436600165060ustar00rootroot00000000000000‰PNG  IHDRÞr]ü$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^GKIDATxÚc```à”0šIIIKØØØz h/ÑÐÐè¢ØÒÒ²ÄËË«Šfàèèè’œ9sö@Ñ \«V­’Þ½{÷@ÑDàAb¤g@IEND®B`‚analog-ce-6.0.17/images/barh4.gif000066400000000000000000000002201406366436600163770ustar00rootroot00000000000000GIF87a ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ, EÈ T¸8,:m¾› ŽÖ`žá(–§¹pltýÆð\Ó›áÿ–ƒpØûù‚CáÁlZÐè²É|F¡…vkYx¿Y®VöF;analog-ce-6.0.17/images/barh4.png000066400000000000000000000003231406366436600164220ustar00rootroot00000000000000‰PNG  IHDR P¡ì$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^GHIDATxÚc```à”†ÓLJJZÂÆÆÖ0šÅÅÅK444F3°¥¥e‰——WÃhŽŽŽ.É™3gÃh®U«VIïÞ½F©³ ð®IEND®B`‚analog-ce-6.0.17/images/barh8.gif000066400000000000000000000003021406366436600164040ustar00rootroot00000000000000GIF87a@ãæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿ,@wÈ T¸8,:m¾W} 8’› ®Öà¾éª¶¯Ët}³Am„ ÐR(7ÂaÀx& DfùŒ27†¬Örèz±Ú,×Û‡Çdó6@.ð¸%A¯oâò@ÝþÆ#æ{ w~€{ ˆ‰ Œ‡ŠˆŽŒ‹“’“;analog-ce-6.0.17/images/barh8.png000066400000000000000000000003241406366436600164270ustar00rootroot00000000000000‰PNG  IHDR@F…œ$PLTEæxxF–áàXX0„ÀÖFF j¤¿33[‘°00P€‰&&BfÄ9R tEXtSoftwaregif2png 2.4.2£^GIIDATxÚc```à”ÆI3))i [ã¢X\\¼DCC£qÑ liiYâååÕ¸hŽŽŽ.É™3g㢸V­Z%½{÷n\4ZX8û±óØIEND®B`‚analog-ce-6.0.17/images/bari1.gif000066400000000000000000000001041406366436600163760ustar00rootroot00000000000000GIF87a¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ,ºþNÈ)‡½–R#`&;analog-ce-6.0.17/images/bari1.png000066400000000000000000000002221406366436600164160ustar00rootroot00000000000000‰PNG  IHDR6!£¸PLTE¿33àXXæxxðÐЉ&&x“yÆtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`A `Pc €°Àb`à8šuJ– }IEND®B`‚analog-ce-6.0.17/images/bari16.gif000066400000000000000000000002031406366436600164640ustar00rootroot00000000000000GIF87a€¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ,€PºÜþ0ÊI«½0èÍ»ÿ`(Ždiž  ®lë¾p,Ïtmßð ï|ïÿÀ pH,@œrÉl:•¨¨tJ­F1جvËžà°xL.›Ïè´zÍ.';analog-ce-6.0.17/images/bari16.png000066400000000000000000000002261406366436600165100ustar00rootroot00000000000000‰PNG  IHDR€ÃóêMPLTE¿33àXXæxxðÐЉ&&x“yÆtEXtSoftwaregif2png 2.4.2£^G IDATxÚc` R”( ÆÊ]@qP \(áK7A-­ßDIEND®B`‚analog-ce-6.0.17/images/bari2.gif000066400000000000000000000001161406366436600164020ustar00rootroot00000000000000GIF87a¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ,ºÜ0Ê„½8‹Á»ÿƒ&^T9èB¬lë ;analog-ce-6.0.17/images/bari2.png000066400000000000000000000002231406366436600164200ustar00rootroot00000000000000‰PNG  IHDRXb¤PLTE¿33àXXæxxðÐЉ&&x“yÆtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`€A(`P‚c(@ˆÀÕÀ Ë|é®UæÎIEND®B`‚analog-ce-6.0.17/images/bari32.gif000066400000000000000000000002541406366436600164700ustar00rootroot00000000000000GIF87a¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ,yºÜþ0ÊI«½8ëÍ»_A(Ždižhª®lë¾p,Ït- x®ï|ïÿÀ pH,ȤrÉÌ žÐ¨tJ­Z¯Ø¬vËíz¿à°x mšÏè´zÍnmð¸|N¯Ûï¬~Ïïûÿ€„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜… ;analog-ce-6.0.17/images/bari32.png000066400000000000000000000002311406366436600165020ustar00rootroot00000000000000‰PNG  IHDRäx<ŒPLTE¿33àXXæxxðÐЉ&&x“yÆtEXtSoftwaregif2png 2.4.2£^G#IDATxÚc`h 8À€Ai€ƒñƒO\ònJ— IEND®B`‚analog-ce-6.0.17/images/bari4.gif000066400000000000000000000001301406366436600164000ustar00rootroot00000000000000GIF87a ¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ, %ºÜþ,ÈI«½TèÍ»ÿÜ Ždiž$¨®æ¾$Ï aßx®ïx;analog-ce-6.0.17/images/bari4.png000066400000000000000000000002241406366436600164230ustar00rootroot00000000000000‰PNG  IHDR j«àœPLTE¿33àXXæxxðÐЉ&&x“yÆtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`@‚h€A 0£Lf`4] Ñ[%ÓIEND®B`‚analog-ce-6.0.17/images/bari8.gif000066400000000000000000000001471406366436600164140ustar00rootroot00000000000000GIF87a@¿33àXXæxxðÐЉ&&ÿÿÿÿÿÿÿÿÿ,@4ºÜþ0ʪ½8ëÍ;`(Ždižè9¬lë¾p,Ïrjß8îí|ßOÀ PH(ȤrÉl2;analog-ce-6.0.17/images/bari8.png000066400000000000000000000002251406366436600164300ustar00rootroot00000000000000‰PNG  IHDR@»LäìPLTE¿33àXXæxxðÐЉ&&x“yÆtEXtSoftwaregif2png 2.4.2£^GIDATxÚc`  %€Á˜ lA7.¥ý¡;xhPIEND®B`‚analog-ce-6.0.17/images/barj1.gif000066400000000000000000000001361406366436600164040ustar00rootroot00000000000000GIF87aã¿33[‘àXX0„ÀæxxF–áðÐÐØàÿ‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,È)…½–è­ÿÇaE!hŠF;analog-ce-6.0.17/images/barj1.png000066400000000000000000000002361406366436600164240ustar00rootroot00000000000000‰PNG  IHDR6!£¸PLTE¿33àXXæxxðÐЉ&&o átEXtSoftwaregif2png 2.4.2£^GIDATxÚc`% `p†4 €°Àb`Ðq éþèìIEND®B`‚analog-ce-6.0.17/images/barj16.gif000066400000000000000000000003751406366436600164770ustar00rootroot00000000000000GIF87a€ã¿33[‘àXX0„ÀæxxF–áðÐÐØàÿ‰&&Bfÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,€²È)ƒ½–RŒõä—W¥ˆš«J p tM˲mã±^ó3ß(Fb)$8ŸÎ‚t*…B©Të;ÕF¹/ö’Åg3ØÀn³ð8Üí–Ëém{ÿÖø~|‚€…„~h`Š\ŒXŽYj’”‘ZdJBš>œ:ž;L¢Ÿ¤¡îˆ?cY08ŸÎƒt*…B©Të;ÕF¹%Y“ÍL4Ò&À Øn8NNH;^O⃀€ „…„‚‚††ˆŠ…ŒƒŽ ;analog-ce-6.0.17/images/barj8.png000066400000000000000000000002721406366436600164330ustar00rootroot00000000000000‰PNG  IHDR@»LäìPLTE¿33[‘àXX0„ÀæxxF–áðÐÐØàÿ‰&&Bfåãä÷tEXtSoftwaregif2png 2.4.2£^G5IDATxÚc`A ÀI+1à¢\€ pÑ i@P¸hÂ&tA_tÁL ÀEœ=?ÁVÆ£`IEND®B`‚analog-ce-6.0.17/images/html2.gif000066400000000000000000000003471406366436600164370ustar00rootroot00000000000000GIF89a0 ¡ÿÿÿÿ!ù,0 ¸„©Ëí£œ2ØKsºëÜ…Á7‰ †è§®)çjm\¨€ G®ó|%r^‡êK$Óâ.‹ÓEZeê8DD—êp^pB07J­¢¾_™ÌÕî们pöÀÇtfÿÏ&б7Bè'פfç%˜ç(”xˆ¶&5Ø8vYT·ÉyX‡„µç¦Išèó`ÒA“ªzÂèâê¥9çIb V»"b5Ä+kL{Û;l[¼ˆâñÙÆš=M]íP;analog-ce-6.0.17/images/html2.png000066400000000000000000000004421406366436600164520ustar00rootroot00000000000000‰PNG  IHDR0 )º PLTEÿÿÿÿš•‘tRNS@æØftEXtSoftwaregif2png 2.3.2¦Q‹¥IDATxڅб ƒ@ àßA²ßÒÉ¥ >… Å,÷íS¤B¡¸»_¡¹§¬­x—vñ–ËG2ä°ÿrÖµ+äÜ«†ª3n¬j€;=µþä›1¼žhÈFEuô¨Œ|àPñŒù‹«kBèjÍ:vs}Âä¸î‡{Ĺûøz\¦pò>P5VZÙ. ж%·¥”²Å",Ã`Cö‡"Í@1õîíß”~3á5IEND®B`‚analog-ce-6.0.17/images/sq0.png000066400000000000000000000001331406366436600161240ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcüÏ€01ŒJcA,ã\¾IEND®B`‚analog-ce-6.0.17/images/sq1.png000066400000000000000000000001361406366436600161300ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcd`øÏ€01à#U?.U¾ÓFIEND®B`‚analog-ce-6.0.17/images/sq2.png000066400000000000000000000001351406366436600161300ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcdh`À˜F¥1§R”º¶`îIEND®B`‚analog-ce-6.0.17/images/sq3.png000066400000000000000000000001351406366436600161310ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcüßÀ€010ŒJcÛ,“„º„âIEND®B`‚analog-ce-6.0.17/images/sq4.png000066400000000000000000000001361406366436600161330ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcd`h`À ˜ð‚‘* ¦Ò”5\ÛIEND®B`‚analog-ce-6.0.17/images/sq5.png000066400000000000000000000001351406366436600161330ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcdøÏ€010ŒJc@-÷VÎIEND®B`‚analog-ce-6.0.17/images/sq6.png000066400000000000000000000001361406366436600161350ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcüßÐÀ€01à#Ut»+ŸE"IEND®B`‚analog-ce-6.0.17/images/sq7.png000066400000000000000000000001361406366436600161360ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcdøÿŸ7`bÀ Fª4r ?Þ$‚IEND®B`‚analog-ce-6.0.17/images/sq8.png000066400000000000000000000001361406366436600161370ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcl`h`À ˜ð‚‘* Aagwy~IEND®B`‚analog-ce-6.0.17/images/sq9.png000066400000000000000000000001351406366436600161370ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚcüÿŸ`b`•ÆtrÔJÙIEND®B`‚analog-ce-6.0.17/images/sqg.png000066400000000000000000000001361406366436600162160ustar00rootroot00000000000000‰PNG  IHDR PXêgAMA± üaIDATxÚclhh`À ˜ð‚‘* Ûa”¾"´IEND®B`‚analog-ce-6.0.17/lang/000077500000000000000000000000001406366436600143725ustar00rootroot00000000000000analog-ce-6.0.17/lang/README.txt000066400000000000000000000020401406366436600160640ustar00rootroot00000000000000This directory contains all language files and other translations for analog. Notes to translators: Files are named after country codes (not language codes); or in some cases country code plus an additional letter indicating the character set. There is a variety of files which can be translated, but only one is essential, namely the language file. Here are all the possibilities. If the country code is xy, then the language MUST have xy.lng Language file in the language's usual character set It MAY have xya.lng Language file transliterated into US-ASCII, i.e. no accents etc. Every language is ENCOURAGED to have xydom.tab Domains file in local character set xydesc.txt Report descriptions file in local character set and if it has an ASCII language file, it SHOULD then have corresponding xyadom.tab, xyadesc.txt It MAY also have xyform.html Form interface xy.cfg Configuration file with any locale-specific commands: for example LANGUAGE and TYPEOUTPUTALIAS commands analog-ce-6.0.17/lang/am.lng000066400000000000000000000313331406366436600154740ustar00rootroot00000000000000## Armenian Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of Armenian language file. ## (Dependant of the user's browser settings, in some cases this can be ## "x-user-defined" ARMSCII-8 ## Abbreviations for the day and month names. ÏÇñ »Ïß »ùß ãùß Ñ·ß áõñ ߵà ÐÜð öºî Øðî ²äð Ø²Ú ÐÜê ÐÈê ú¶ê êºä ÐàÎ ÜàÚ ¸ºÎ ## Next some standard common words. ## Abbreviation for "week beginning" ß³µ³Ãí³ ëϽ. ï³ñÇ ## Quarter of a year ù³éáñ¹ ³ÙÇë ûñ ûñ»ñ ų٠ñáå» ñáå»Ý»ñ í³ÛñÏÛ³Ý í³ÛñÏÛ³ÝÝ»ñ µ³Ûà µ³Ûà ## ?bytes represents kbytes, Mbytes etc. ?µ³Ûà ѳñóáõ٠ѳñóáõÙÝ»ñ ³Ùë³ÃÇí ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ³Ùë³ÃÇí ų٠³é³çÇÝ ³Ùë³ÃÇí ³é³çÇÝ Å³Ù í»ñçÇÝ ³Ùë³ÃÇí í»ñçÇÝ Å³Ù ·áñÍ ·áñÍ»ñ ѳݷáõÛó ѳݷáõÛóÝ»ñ ϳñÍ³Ï³Ý Ñ³Ý·áõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛóÝ»ñ ÷³Ã»Ã ÷³Ã»ÃÝ»ñ ïÇñáõÛà ïÇñáõÛÃÝ»ñ ϳ½Ù³Ï»ñåáõÃÛáõÝ Ï³½Ù³Ï»ñåáõÃÛáõÝÝ»ñ ï»ë³Ï ï»ë³ÏÝ»ñ URL URL-Ý»ñ ½ÝÝÇã ½ÝÝÇãÝ»ñ ´ì (µ³Ý³í³ñÇã) ´ì-Ý»ñ ## (= operating system, operating systems) ã³÷ ÷ÝïñíáÕ »½ñ ÷ÝïñíáÕ »½ñ»ñ ϳÛù ϳÛù»ñ û·ïíáÕ û·ïíáÕÝ»ñ ϳñ·³íÇ׳ÏÇ ÏṠϳñ·³íÇ׳ÏÇ Ïá¹»ñ ì»å µ³ßËÇãÇ íÇ׳ϳ·ñáõÃÛáõÝ ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports ÀݹѳÝáõñ ³Ù÷á÷áõÙ ## The time reports, plus "busiest" strings (at the bottom of each report) î³ñ»Ï³Ý ½»ÏáõÛó ²Ù»Ý³½µ³Õí³Í ï³ñǪ ø³éáñ¹ ï³ñí³ ½»ÏáõÛó ²Ù»Ý³½µ³Õí³Í ù³éáñ¹ ï³ñÇݪ ²Ùë³Ï³Ý ½»ÏáõÛó ²Ù»Ý³½µ³Õí³Í ³ÙÇëª Þ³µ³Ã³Ï³Ý ½»ÏáõÛó ²Ù»Ý³½µ³Õí³Í ß³µ³Ãª ëÏëíáõÙ ¿ úñ³Ï³Ý ³Ù÷á÷áõÙ úñ³Ï³Ý ½»ÏáõÛó ²Ù»Ý³½µ³Õí³Í ûñª ijٳ½»ÏáõÛó ijٳÛÇÝ ³Ù÷á÷áõÙ Þ³µ³Ãí³ Å³ÙÁ ³Ù÷á÷áõÙ ²Ù»Ý³½µ³Õí³Í ų٪ ø³éáñ¹-ų٠½»ÏáõÛó ø³éáñ¹-ų٠³Ù÷á÷áõ٠ijÙí³ ³Ù»Ý³½µ³Õí³Í ù³éáñ¹Á ÐÇÝ·-ñáå» ½»ÏáõÛó ÐÇÝ·-ñáå» ³Ù÷á÷áõÙ ²Ù»Ý³½µ³Õí³Í ÑÇÝ· ñáå»Ý»ñª ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ¼»ÏáõÛó Áëï ѳݷáõÛóÇ Ñ³Ý·áõÛó ѳݷáõÛóÝ»ñ n гݷáõÛóÇ í»ñ³áõÕÕáñ¹Ù³Ý ½»ÏáõÛó ѳݷáõÛó ѳݷáõÛóÝ»ñ n гݷáõÛóÇ Ó³ËáÕÙ³Ý ½»ÏáõÛó ѳݷáõÛó ѳݷáõÛóÝ»ñ n ¼»ÏáõÛó Áëï ÷³Ã»ÃÇ ÷³Ã»Ã ÷³Ã»ÃÝ»ñ n ¶áñÍÇ ï»ë³ÏÇ ½»ÏáõÛó ï»ë³Ï ï»ë³ÏÝ»ñ n гñóÙ³Ý ½»ÏáõÛó ·áñÍ ·áñÍ»ñ n ì»ñ³áõÕÕáñ¹Ù³Ý ½»ÏáõÛó ·áñÍ ·áñÍ»ñ n Ò³ËáÕÙ³Ý ½»ÏáõÛó ·áñÍ ·áñÍ»ñ n ÐÕáõÙÝ»ñÇ ½»ÏáõÛó ÑÕáÕ URL ÑÕáÕ URL-Ý»ñ n ÐÕáÕ Ï³ÛùÇ ½»ÏáõÛó ÑÕáÕ Ï³Ûù ÑÕáÕ Ï³Ûù»ñ n ì»ñ³áõÕÕáñ¹Çã ÑÕáÕÇ ½»ÏáõÛó ÑÕáÕ URL ÑÕáÕ URL-Ý»ñ n Ò³ËáÕí³Í ÑÕáõÙÝ»ñÇ ½»ÏáõÛó ÑÕáÕ URL ÑÕáÕ URL-Ý»ñ n öÝïñíáÕ Ñ³ñóÙ³Ý ½»ÏáõÛó ѳñóáõ٠ѳñóáõÙÝ»ñ n öÝïñíáÕ µ³éÇ ½»ÏáõÛó ÷ÝïñíáÕ µ³é ÷ÝïñíáÕ µ³é»ñ n Ü»ñùÇÝ ÷ÝïñíáÕ Ñ³ñóÙ³Ý ½»ÏáõÛó ѳñóáõ٠ѳñóáõÙÝ»ñ n Ü»ñùÇÝ ÷ÝïñíáÕ µ³éÇ ½»ÏáõÛó ÷ÝïñíáÕ µ³é ÷ÝïñíáÕ µ³é»ñ n γñÍ³Ï³Ý Ñ³Ý·áõÛóÇ ½»ÏáõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛóÝ»ñ n γñÍ³Ï³Ý Ñ³Ý·áõÛóÇ í»ñ³áõÕÕáñ¹Ù³Ý ½»ÏáõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛóÝ»ñ n γñÍ³Ï³Ý Ñ³Ý·áõÛóÇ Ó³ËáÕÙ³Ý ½»ÏáõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛó ϳñÍ³Ï³Ý Ñ³Ý·áõÛóÝ»ñ n ú·ïíáÕÇ ½»ÏáõÛó û·ïíáÕ û·ïíáÕÝ»ñ n ú·ïíáÕÇ í»ñ³áõÕÕáñ¹Ù³Ý ½»ÏáõÛó û·ïíáÕ û·ïíáÕÝ»ñ n ú·ïíáÕÇ Ó³ËáÕÙ³Ý ½»ÏáõÛó û·ïíáÕ û·ïíáÕÝ»ñ n ¼ÝÝÇãÇ ³Ù÷á÷áõÙ ½ÝÝÇã ½ÝÝÇãÝ»ñ n âÝÝÇãÇ ½»ÏáõÛó ½ÝÝÇã ½ÝÝÇãÝ»ñ n ´³Ý³í³ñãÇ ½»ÏáõÛó µ³Ý³í³ñÇã µ³Ý³í³ñÇãÝ»ñ n ¼»ÏáõÛó Áëï ïÇñáõÛÃÇ ïÇñáõÛà ïÇñáõÛÃÝ»ñ n ¼»ÏáõÛó Áëï ϳ½Ù³Ï»ñåáõÃÛ³Ý Ï³½Ù³Ï»ñåáõÃÛáõÝ Ï³½Ù³Ï»ñåáõÃÛáõÝÝ»ñ n γr·³íÇ׳ÏÇ Ïá¹Ç ½»ÏáõÛó ϳñ·³íÇ׳ÏÇ ÏṠϳñ·³íÇ׳ÏÇ Ïá¹»ñ n ì³ñÙ³Ý Å³Ù³Ý³ÏÇ ½»ÏáõÛó ¶áñÍÇ ã³÷Ç ½»ÏáõÛó ## Used at the bottom of the report ì»ñÉáõÍáõÃÛáõÝÁ ϳï³ñí»É ¿ª ²ß˳ï³Å³Ù³Ý³ÏÁ ²í»ÉÇ ùÇã ù³Ý 1 ## Used in the time reports ²Ù»Ý ÙÇ ÙdzíáñÁ Ý»ñϳ۳óÝáõÙ ¿ ϳ٠ٳëÝ ¿ ϳ½Ùáõ٠ѳñóáõÙ ÙÇ ¿çÇ Ñ³Ù³ñ ѳñóáõÙ ¿ç»ñÇ Ñ³Ù³ñ ## Used at the bottom of each non-time report: need m, f & n genders * * Ý»ñϳ۳óí³Í ã¿ ## Used on the pie charts: again need m, f & n genders * * ²ÛÉ ## Used at the top of the report Ìñ³·ñ³ß³ñÁ ëÏëí»É ¿ª ì»ñÉáõÍí³Í ѳñóáõÙÝ»ñª ÙÇÝ㢠## Used in the General Summary гçáÕí³Í ѳñóáõÙÝ»ñ úñ³Ï³Ý ÙÇçÇÝ Ñ³çáÕí³Í ѳñóáõÙÝ»ñ гçáÕí³Í ѳñóáõÙÝ»ñ Áëï ¿ç»ñÇ úñ³Ï³Ý ÙÇçÇÝ Ñ³çáÕí³Í ѳñóáõÙÝ»ñ Áëï ¿ç»ñÇ ²ñӳݳ·ñáõÃÛ³Ý ïáÕ»ñÝ ³é³Ýó ϳñ·³íÇ׳ÏÇ Ïá¹Ç Ò³ËáÕí³Í ѳñóáõÙÝ»ñ ì»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñ гñóáõÙÝ»ñ ï»Õ»Ï³ïí³Ï³Ý ϳñ·³íÇ׳ÏÇ Ïá¹Ç Ñ»ï гñóí³Í ï³ñµ»ñ ·áñÍ»ñ êå³ë³ñÏí³Í ï³ñµ»ñ ѳݷáõÛóÝ»ñ ²ñӳݳ·ñáõÃÛ³Ý íݳëí³Í ïáÕ»ñ ²ñӳݳ·ñáõÃÛ³Ý ³Ýó³ÝϳÉÇ Ù³ë»ñ öá˳Ýóí³Í ïíÛ³ÉÝ»ñ úñ³Ï³Ý ÙÇçÇÝ ÷á˳Ýóí³Í ïíÛ³ÉÝ»ñ ö³Ï³·Í»ñáõÙ »Õ³Í Ãí»ñÁ í»ñ³µ»ñáõÙ »Ý 7 ûñ ÙÇÝ㢠ì»ñçÇÝ 7 ûñ»ñ ¸»åÇ êÏǽµ ## Some special phrases for particular reports. (ãµ³ó³Ñ³Ûïí³Í Ãí³ÛÇÝ Ñ³ëó»Ý»ñ) (ïÇñáõÛÃÁ ïñí³Í ã¿) (³ÝѳÛï ïÇñáõÛÃ) /(³ñÙ³ï-÷³Ã»Ã) (÷³Ã»Ã ãϳ) (³é³Ýó ï»ë³Ï) (÷³Ã»ÃÝ»ñ) ²ÝѳÛï àõÇݹὠ²ÛÉ ÚáõÝÇùë èáµáïÝ»ñ ´ìÁ ³ÝѳÛï ¿ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #Ññó 7 ûñ Ññó %Ññó %7 ûñ Ññó #¿ç»ñ 7 ûñ ¿ç»ñ %¿ç»ñ %7 ûñ ¿ç»ñ µ³Ûà ?µ³Ûà 7 ûñ µ³Ûà 7 ûñ ?µ³Ûà %µ³Ûà %7 ûñ µ³Ûà #ÑÙ. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ²é³çÇÝ %sÇ óáõó³Ï * * ²é³çÇÝ %d %sÇ óáõó³Ï * * %sÇ óáõó³Ï ## "by" in the phrase "listing the top 3 files BY number of requests" Áëï ## All requests WITH AT LEAST 10 requests . Ýí³½³·áõÛÝÁª ## Different ways of doing floors ѳñóáõ٠ݳËáñ¹ 7 ûñ»ñÇÝ Ñ³ñóáõÙÝ»ñ ݳËáñ¹ 7 ûñ»ñÇÝ ¿çÇ Ñ³ñóáõ٠ݳËáñ¹ 7 ûñ»ñÇÝ ¿ç»ñÇ Ñ³ñóáõÙÝ»ñ ݳËáñ¹ 7 ûñ»ñÇÝ í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙ í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñ í»ñ³áõÕÕáñ¹í³Í ѳñóáõ٠ݳËáñ¹ 7 ûñ»ñÇÝ í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñ ݳËáñ¹ 7 ûñ»ñÇÝ Ó³ËáÕí³Í ѳñóáõÙ Ó³ËáÕí³Í ѳñóáõÙÝ»ñ Ó³ËáÕí³Í ѳñóáõ٠ݳËáñ¹ 7 ûñ»ñÇÝ Ó³ËáÕí³Í ѳñóáõÙÝ»ñ ݳËáñ¹ 7 ûñ»ñÇÝ % ïíÛ³ÉÝ»ñÇ ÑáëùÇó % ïíÛ³ÉÝ»ñÇ ÑáëùÇó ݳËáñ¹ 7 ûñ»ñÇÝ % ïíÛ³ÉÝ»ñÇ ÑáëùÇ ³Ù»Ý³µ³ñÓñ ³ñÅ»ùÇó % ïíÛ³ÉÝ»ñÇ ÑáëùÇ ³Ù»Ý³µ³ñÓñ ³ñÅ»ùÇó ݳËáñ¹ 7 ûñ»ñÇÝ ÑáëùÇ µ³Ûà ÑáëùÇ µ³Ûà ## ?bytes represents kbytes, Mbytes etc. ?ÑáëùÇ µ³Ûà ÑáëùÇ µ³Ûà ݳËáñ¹ 7 ûñ»ñÇÝ ÑáëùÇ µ³Ûà ݳËáñ¹ 7 ûñ»ñÇÝ ?ÑáëùÇ µ³Ûà ݳËáñ¹ 7 ûñ»ñÇÝ Ñ³ñóí»É ¿ ¹»é¢ë í»ñ³áõÕÕáñ¹í³Í ѳñóÙ³Ý Ñ»ï ¹»é¢ë Ó³ËáÕí³Í ѳñóÙ³Ý Ñ»ï ¹»é¢ë ³é³çÇÝ Ñ³ñóÙ³Ý Ñ»ï ¹»é¢ë ³é³çÇÝ í»ñ³áõÕÕáñ¹í³Í ѳñóÙ³Ý Ñ»ï ¹»é¢ë ³é³çÇÝ Ó³ËáÕí³Í ѳñóÙ³Ý Ñ»ï ¹»é¢ë ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ¹³ë³íáñí³Í Áëï ## Used at the top of each report ²Ûë ½»ÏáõÛóÁ å³ñáõݳÏáõÙ ¿ ïíÛ³ÉÝ»ñ ## Used in pie charts Îáñ»ñÁ ·Í³·ñ»É ¿ ## different ways of sorting ÑáëùÇ ã³÷Ç ÑáëùÇ ã³÷Ç Ý³Ëáñ¹ 7 ûñ»ñÇÝ % ѳñóáõÙÝ»ñÇ % ѳñóáõÙÝ»ñÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % ѳñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ % ѳñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ Ñ³ñóáõÙÝ»ñÇ ÃíÇ Ñ³ñóáõÙÝ»ñÇ ÃíÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % ¿ç»ñÇ Ñ³ñóáõÙÝ»ñÇ % ¿ç»ñÇ Ñ³ñóáõÙÝ»ñÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % ¿ç»ñÇ Ñ³ñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ % ¿ç»ñÇ Ñ³ñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ ¿ç»ñÇ Ñ³ñóáõÙÝ»ñÇ ÃíÇ ¿ç»ñÇ Ñ³ñóáõÙÝ»ñÇ ÃíÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñÇ % í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ % í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñÇ ÃíÇ í»ñ³áõÕÕáñ¹í³Í ѳñóáõÙÝ»ñÇ ÃíÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % Ó³ËáÕí³Í ѳñóáõÙÝ»ñÇ % Ó³ËáÕí³Í ѳñóáõÙÝ»ñÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ % Ó³ËáÕí³Í ѳñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ % Ó³ËáÕí³Í ѳñóáõÙÝ»ñÇ ³Ù»Ý³Ù»Í ù³Ý³ÏÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ Ó³ËáÕí³Í ѳñóáõÙÝ»ñÇ ÃíÇ Ó³ËáÕí³Í ѳñóáõÙÝ»ñÇ ÃíÇ Ý³Ëáñ¹ 7 ûñ»ñÇÝ í»ñçÇÝ Ñ³ñóÙ³Ý Å³Ù³Ý³ÏÇ í»ñçÇÝ í»ñ³áõÕÕáñ¹í³Í ѳñóÙ³Ý Å³Ù³Ý³ÏÇ í»ñçÇÝ Ó³ËáÕí³Í ѳñóÙ³Ý Å³Ù³Ý³ÏÇ ³é³çÇÝ Ñ³ñóÙ³Ý Å³Ù³Ý³ÏÇ ³é³çÇÝ í»ñ³áõÕÕáñ¹í³Í ѳñóÙ³Ý Å³Ù³Ý³ÏÇ ³é³çÇÝ Ó³ËáÕí³Í ѳñóÙ³Ý Å³Ù³Ý³ÏÇ ## 3 other ways of sorting in m, f, & n * * ¹³ë³íáñí³Í Áëï ³Ûµ»Ý³Ï³Ý ϳñ·Ç * * ¹³ë³íáñí³Í Áëï Ãí³ÛÇÝ Ï³ñ·Ç * * ã¹³ë³íáñí³Í ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. £ ## am and pm in the sense of morning and afternoon. ³é »ñ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%Y ## In Daily Summary %w ## In Hourly Report %d/%m/%Y %H:%n%x%I:%o ## In Hourly Summary %H ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/amdom.tab000066400000000000000000000120561406366436600161630ustar00rootroot00000000000000ad 2 ²Ý¹áñ³ ae 3 ØÇ³óÛ³É ²ñ³µ³Ï³Ý ¾ÙÇñ³ïÝ»ñ af 1 ²ýÕ³Ýëï³Ý ag 2 ²ÝïÇùáõ³ ¢ ´³ñµáõ¹³ ai 1 ²ÝùáõÇɳ al 1 ²Éµ³Ýdz am 2 г۳ëï³Ý an 1 ²ÝïÇÉÛ³Ý Üǹ»éɳݹݻñ ao 1 ²Ý·áɳ aq 1 ²Ýï³ñÏïǹ³ ar 3 ²ñ·»ÝïÇݳ arpa 1 ÐÇÝ á×Ç ²ðö²ÜºÂ as 1 ²Ù»ñÇÏÛ³Ý ê³Ùá³ at 3 ²íëïñdz au 3 ²íëïñ³Édz aw 1 ²ñáõµ³ az 1 ²¹ñµ»ç³Ý ba 3 ´áëÝdz-лñóá·áíÇݳ bb 2 ´³ñµ³¹áë bd 1 ´³Ý·É³¹»ß be 3 ´»É·Ç³ bf 1 ´áõñÏÇݳ ü³ëá bg 2 ´áõÉÕ³ñdz bh 1 ´³Ññ»ÛÝ bi 1 ´áõñáõÝ¹Ç bj 1 ´»ÝÇÝ bm 1 ´»ñÙáõ¹³ bn 1 ´ñáõÝ»Û ¸³ñáõë³É³Ù bo 3 ´áÉÇídz br 3 ´³ñ³½ÇÉdz bs 1 ´³Ñ³ÙÛ³Ý ÏÕ½ÇÝ»ñ bt 1 ´áõÃ³Ý bv 1 ´áõí» ÏÕ½Ç bw 1 ´áïëí³Ý³ by 1 ´»Éáéáõëdz bz 1 ´»Éǽ ca 3 γݳ¹³ cc 1 ÎáÏáëÛ³Ý ÏÕ½ÇÝ»ñ cd 1 ÎáÝ·áÛÇ ÅáÕáíñ¹³í³ñ³Ï³Ý ѳÝñ³å»ïáõÃÛáõÝ cf 1 гñ³í ²ýñÇÏÛ³Ý Ð³Ýñ³å»ïáõÃÛáõÝ cg 1 ÎáÝ·á ch 2 Þí»Ûó³ñdz ci 1 öÕáëÏñ» ²÷ ck 1 øáõÏÇ ÏÕ½ÇÝ»ñ cl 2 âÇÉÇ cm 1 γٻñáõÝ cn 3 âÇݳëï³Ý co 3 ÎáõÉáõٵdz com 2 ²é¢ïñ³Ï³Ý cr 3 Îáëï³ èÇϳ cu 2 Îáõµ³ cv 1 γݳã Ññí³Ý¹³ÝÇ ÏÕ½ÇÝ»ñ cx 2 ÌÝÝ¹Û³Ý ÏÕ½Ç cy 3 ÎÇåñáë cz 2 â»Ë³Ï³Ý ѳÝñ³å»ïáõÃÛáõÝ de 2 ¶»ñÙ³Ýdz dj 1 æÇµáõïÇ dk 2 ¸³Ýdz dm 2 ¸áÙÇÝÇÏ do 3 ¸áÙÇÝÇÏÛ³Ý Ñ³Ýñ³å»ïáõÃÛáõÝ dz 1 ²ÉÅÇñ ec 3 ¾Ïí³¹áñ edu 2 ²ØÜ áõëáõÙÝ³Ï³Ý ee 2 ¾ëïáÝdz eg 3 º·Çåïáë eh 1 ²é¢ÙïÛ³Ý ê³Ñ³ñ³ er 1 ¾ñÇïñ»³ es 2 Æëå³Ýdz et 1 гµ»ßëï³Ý fi 2 üÇÝɳݹdz fj 3 üÇçÇ fk 1 üáÉÏÉ»Ý¹Û³Ý ÏÕ½ÇÝ»ñ fm 1 سÏñáÝ»½Ç³ fo 1 ü³ñ»ñÛ³Ý ÏÕ½ÇÝ»ñ fr 2 üñ³Ýëdz fx 1 üñ³Ýëdz (ºíñáå³Ï³Ý ï³ñ³Íù) ga 1 ¶³µáÝ gb 1 ØÇ³óÛ³É Â³·³íáñáõÃÛáõÝ gd 1 ¶ñ»Ý³¹³ ge 1 ìñ³ëï³Ý gf 1 üñ³ÝëÇ³Ï³Ý ¶³Û³Ý³ gg 1 ¶áõ»ñÝë»Û gh 3 ¶³Ý³ gi 1 æÇµñ³Éóñ gl 1 ¶ñ»Ýɳݹdz gm 1 ¶³ÙµÇ³ gn 1 ¶íÇÝ»³ gov 2 ²ØÜ ϳé³í³ñáõÃÛáõÝ gp 1 ¶í³ï»Éáõå» (üñ³Ýëdz) gq 1 гë³ñ³Ï³Í³ÛÇÝ ¶íÇÝ»³ gr 2 Ðáõݳëï³Ý gs 1 ë. æáñçdz ¢ ë. ê³Ý¹íÇã ÏÕ½ÇÝ»ñ gt 3 ¶í³ï»Ù³É³ gu 1 ¶áõ³Ù (²ØÜ) gw 1 ¶íÇÝ»³ ´Çëá gy 1 ¶ídzݳ hk 3 ÐáÝÏáÝ· hm 1 лñ¹ ¢ Øþ¸áݳɹ ÏÕ½ÇÝ»ñ hn 2 Ðáݹáõñ³ë hr 2 Êáñí³Ãdz ht 1 гÇÃÇ hu 2 ÐáõÝ·³ñdz id 3 ÆÝ¹áÝ»½Ç³ ie 2 Æéɳݹdz il 3 Æëñ³Û»É im 1 سñ¹áõ ÏÕ½Ç in 3 Ðݹϳëï³Ý int 1 ØÇç³½·³ÛÇÝ io 1 ´ñÇï³Ý³Ï³Ý ÑÝ¹Ï³Ï³Ý ûíÏdzÝáëÇ ï³ñ³Íù iq 1 Æñ³ù ir 1 Æñ³Ý is 2 Æëɳݹdz it 2 Æï³Édz je 1 æ»ñëÇ jm 3 Ú³Ù³Ûϳ ÏÕ½Ç jo 3 Ðáñ¹³Ý³Ý jp 3 Ö³åáÝdz ke 3 ø»Ýdz kg 1 ÔñÕëï³Ý kh 1 γٵáçdz ki 1 ÎÇñǵ³ÃÇ km 1 ÎáÙáñáë kn 1 êáõñµ øÇà ¢ Ü»íÇë kp 1 ÐÛáõëÇë³ÛÇÝ Îáñ»³ kr 3 гñ³í³ÛÇÝ Îáñ»³ kw 3 øáõí»Ûï ky 1 ø³ÛÙ³Ý ÏÕ½ÇÝ»ñ kz 1 Ô³½³Ëëï³Ý la 1 ȳáë lb 3 Èǵ³Ý³Ý lc 1 ê»Ýï Èáõódz li 2 ÈÇËï»Ýßï»ÛÝ lk 1 ÞñÇ È³Ýϳ lr 1 Èǵ»ñdz ls 1 È»ëáÃá lt 2 ÈÇïídz lu 2 ÈÛáõùë»Ùµáõñ· lv 2 ȳïídz ly 1 Èǵdz ma 1 سñáÏÏá mc 2 ØáݳÏá md 1 Øáɹ³ídz mg 1 س¹³·³ëϳñ mh 1 سñß³ÉÛ³Ý ÏÕ½ÇÝ»ñ mil 2 ²ØÜ é³½Ù³Ï³Ý mk 3 سϻ¹áÝdz ml 1 سÉÇ mm 1 ØÛ³ÝÙ³ñ mn 1 ØáÝÕáÉdz mo 1 سϳáõ mp 1 ÐÛáõëÇë³ÛÇÝ Ø³ñdzÝÛ³Ý ÏÕ½ÇÝ»ñ mq 1 سñïÇÝÇϳ ÏÕ½Ç mr 1 سíñÇï³Ýdz ms 1 ØáÝë»ñ³ï mt 3 سÉó mu 1 سíñÇïÇáõë mv 1 سɹÇí»ë mw 1 سɳíÇ mx 3 Ø»ùëÇϳ my 3 سɳ½Ç³ mz 1 Øá½³ÙµÇÏ na 1 ܳÙǵdz nc 1 Üáñ γɻ¹áÝdz (üñ³Ýëdz) ne 1 ÜÇ·»ñ net 2 ò³Ýó nf 1 ÜáñýáÉÏÛ³Ý ÏÕ½Ç ng 1 ÜÇ·»ñdz ni 3 ÜÇϳñ³·áõ³ nl 2 Üǹ»ñɳݹݻñ no 2 Üáñí»·Ç³ np 1 Ü»å³É nr 1 ܳáõñáõ nu 2 ÜÇÛáõ nz 3 Üáñ ¼»É³Ý¹Ç³ om 1 úÙ³Ý org 2 àã ß³Ñáõóµ»ñ ϳ½Ù³Ï»ñåáõÃÛáõÝÝ»ñ pa 3 ä³Ý³Ù³ pe 3 ä»ñáõ pf 1 äáÉÇÝ»½Ç³ (üñ³Ýëdz) pg 3 ä³åáõ³ Üáñ ¶íÇÝ»³ ph 3 üÇÉÇåÇÝÝ»ñ pk 3 ä³ÏÇëï³Ý pl 3 Ȼѳëï³Ý pm 1 ê»Ýï äÇ»é ¢ ØÇù»É pn 1 öÇÃù³ñÝ ÏÕ½Ç pr 1 äáõ»ñïá èÇÏá pt 2 äáñïáõ·³Édz pw 1 ä³É³áõ py 3 ä³ñ³·í³Û qa 1 ø³ï³ñ re 1 ð»ÛáõÝÇáÝ (üñ³Ýëdz) ro 2 èáõÙÇÝdz ru 2 èáõë³ëï³Ý rw 1 èí³Ý¹³ sa 3 ê³áõ¹Û³Ý ²ñ³µÇ³ sb 1 êáÉáÙáÝÛ³Ý ÏÕ½ÇÝ»ñ sc 1 ê»Ûã»É»ë sd 1 êáõ¹³Ý se 2 Þí»¹Ç³ sg 3 êÇÝ·³åáõñ sh 1 ê»Ýï лɻݳ si 2 êÉáí»Ýdz sj 1 êí³Éµ³ñ¹ ¢ Ä³Ý Ø³Û»Ý ÏÕ½ÇÝ»ñ sk 2 êÉáí³ÏÛ³Ý Ð³Ýñ³å»ïáõÃÛáõÝ sl 1 êÇ»é³ È»áÝ» sm 1 ê³Ý سñÇÝá sn 1 ê»Ý»·³É so 1 êáÙ³Édz sr 1 êáõñÇݳ٠st 1 ê»Ýï ÂáÙ su 2 ܳËÏÇÝ ÊêÐØ sv 3 ¾É ê³Éí³¹áñ sy 1 êÇñdz sz 1 êí³½Çɻݹ tc 1 Âáõñù»ñ ¢ γÏáë ÏÕ½ÇÝ»ñ td 1 â³¹ tf 1 üñ³ÝëÇ³Ï³Ý Ð³ñ³í³ÛÇÝ î³ñ³ÍùÝ»ñ tg 1 îá·á th 3 ³Çɳݹ tj 1 î³çÇÏëï³Ý tk 1 îáϻɳ tl 1 ²ñ¢»ÉÛ³Ý ÂÇÙáñ tm 1 ÂáõñùÙ»Ýëï³Ý tn 1 ÂáõÝÇëdz to 1 îáÝ·³ tp 1 ²ñ¢»ÉÛ³Ý ÂÇÙáñ tr 3 Âáõñùdz tt 3 ÂñÇÝǹ³¹ ¢ îáµ³Ïá tv 1 îáõí³Éáõ tw 3 î³Ûí³Ý tz 1 î³Ý½³Ýdz ua 3 àõÏñ³Çݳ ug 3 àõ·³Ý¹³ uk 3 ØÇ³óÛ³É Â³·³íáñáõÃÛáõÝ um 1 ²ØÜ Ïñïë»ñ ÏÕ½ÇÝ»ñ us 4 ØÇ³óÛ³É Ü³Ñ³Ý·Ý»ñ uy 3 àõñáõ·í³Û uz 1 àõ½µ»ÏÇëï³Ý va 1 ì³ïÇÏ³Ý vc 1 ê»Ýï ìÇÝë»Ýï ¢ ¶ñ»Ý³¹Ç³ ve 3 ì»Ý»ëáõ»É³ vg 1 ìÇñçÇÝÛ³Ý ÏÕ½ÇÝ»ñ (´ñÇï³Ýdz) vi 1 ìÇñçÇÝÛ³Ý ÏÕ½ÇÝ»ñ (²ØÜ) vn 1 ìÇ»ïݳ٠vu 1 ì³Ýáõ³ïáõ wf 1 ì³ÉÇë ¢ üáõïáõݳ ÏÕ½ÇÝ»ñ ws 1 ê³Ùá³ ye 1 ºÙ»Ý yt 1 سÛáû yu 3 гñ³íëɳídz za 3 гñ³í³ÛÇÝ ²ýñÇϳ zm 1 ¼³ÙµÇ³ zr 1 ÎáÝ·áÛÇ ÄáÕáíñ¹³í³ñ³Ï³Ý ѳÝñ³å»ïáõÃÛáõÝ zw 3 ¼Çݵ³µ» analog-ce-6.0.17/lang/ba.lng000066400000000000000000000332211406366436600154570ustar00rootroot00000000000000## Bosnian language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Bosnian version (1.1) ISO-8859-2 and ASCII 7bit - made by Emir Alikadiæ ## ## Prijedlozi i ispravke dobro do¹li! ## ## emir@mensartis.com ## ## The character set of this language file (ISO Latin 2) ISO-8859-2 ## Abbreviations for the day and month names. ned. pon. uto. sri. èet. pet. sub. jan. feb. mar. apr. maj. jun. jul. avg. sep. okt. nov. dec. ## Next some standard common words. ## Abbreviation for "week beginning" poè. sedmice ++year++ ## Quarter of a year ++quarter++ mjesec dan dana sat min min sek sek bajt bajta ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ zahtjev zahtjeva dana ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum vrijeme ++time++ poèetni datum poèetno vrijeme posljednji datum posljednje vrijeme dokument dokumenata host hostova virtualni host virtualna hosta direktorij direktorija domen domena organizacija organizacije tip tipova URL URL-a brauzer brauzeri OS OS-i ## (= operating system, operating systems) velièina izraz za pretragu izrazi za pretragu sajt sajtova korisnik korisnika statusna oznaka statusnih oznaka Statistika za Web server ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Osnovne informacije ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Statistika po mjesecima Najvi¹e zauzeti mjesec: Statistika po sedmicama Najvi¹e zauzeta sedmica: sedmica poèela Dnevni sa¾etak Dnevna statistika Najvi¹e zauzeti dan: Statistika po satima Sa¾etak po satima ++Hour of the Week Summary++ Najvi¹e zauzeti sat: 15-to minutna statistika ++Quarter-Hour Summary++ Najvi¹e zauzetih 15 min.: 5-to minutna statistika ++Five-Minute Summary++ Najvi¹e zauzetih 5 min.: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Statistika po hostovima host hostova n ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Statistika po direktorijima direktorij direktorija n Statistika po ekstenzijama ekstenzija ekstenzija n Statistika po zahtjevima datoteka datoteka n Statistika po preusmjeravanjima datoteka datoteka n Statistika po gre¹kama datoteka datoteka n Statistika po stranama sa kojih se stizalo dolazeæi URL dolazeæih URL-a n Statistika po WWW serverima sa kojih se stizalo dolazeæi WWW server dolazeæih WWW servera n Statistika po preusmjerenim dolascima dolazeæi URL dolazeæih URL-a n Statistika pogre¹nih pristizanja dolazeæi URL dolazeæih URL-a n Statistika po upitima za pretragu upit upita n Statistika po rijeèima za pretragu rijeè za pretragu rijeèi za pretrage n ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Statistika po virtuelnim hostovima virtuelni host virtuelnih hostova n ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Statistika po korisnicima korisnik korisnika n ++User Redirection Report++ ++user++ ++users++ ++n++ Statistika gre¹aka po korisnicima korisnik korisnika n Pregled po brauzerima brauzer brauzera n Statistika po brauzerima brauzer brauzera n Statistika po operativnim sistemima operativni sistem operativnih sistema n Statistika po domenima domen domena n Statistika po organizacijama organizacija organizacija n Statistika po statusnim oznakama statusna oznaka statusnih oznaka n Izvje¹taj o utro¹enom vremenu Statistika po velièini datoteke ## Used at the bottom of the report Ovaj izvje¹taj je pripremio Utro¹eno vrijeme Manje od 1 ## Used in the time reports Svaki jedinica predstavlja ili dio istoga zahtjeva za stranicu zahtjeva za stranice ## Used at the bottom of each non-time report: need m, f & n genders * * nije na listi ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Program startao Analizirani zahtjevi od do ## Used in the General Summary Uspje¹nih zahtjeva Dnevni prosjek uspje¹nih zahtjeva Uspje¹nih zahtjeva za stranice Dnevni prosjek uspje¹nih zahtjeva za stranice Broj linija u dnevniku bez statusnih oznaka Neuspje¹nih zahtjeva Preusmjerenih zahtjeva Zahtjeva sa statusnom oznakom (100-101) Zahtjeva za razlièite datoteke Razlièitih opslu¾enih hostova Neispravnih linija u dnevniku Ne¾eljenih linija u dnevniku Prenesenih podataka Dnevni prosjek prenesenih podataka Brojevi u zagradama se odnose na 7 dana prije prethodnih 7 dana Skok na Vrh strane ## Some special phrases for particular reports. [nerije¹ene numerièke adrese] [domen nije dat] [nepoznati domen] [root direktorij] [nema direktorija] [nema ekstenzije] [direktorija] Nepoznat Windows Ostali Unix-i ++Robots++ Nepoznat OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) zahtjeva ++7-day reqs++ %zahtjeva ++%7-day reqs++ stranica ++7-day pages++ %stranica ++%7-day pages++ bajta ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %bajta ++%7-day bytes++ br. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ispis prvih %s * * Ispis prvih %d %s * * Ispis %s ## "by" in the phrase "listing the top 3 files BY number of requests" po ## All requests WITH AT LEAST 10 requests sa najmanje ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ preusmjereni zahtjev preusmjerenih zahtjeva ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ neuspje¹ni zahtjev neuspje¹nih zahtjeva ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % saobraæaja ++% of the traffic in the last 7 days++ % najveæeg obima saobraæaja ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ bajta saobraæaja ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ zahtjevano od sa preusmjerenim zahtjevom od sa neuspje¹nim zahtjevom od ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortirano prema ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting obimu saobraæaja ++the amount of traffic in the last 7 days++ % zahtjeva ++% of the requests in the last 7 days++ % najveæeg broja zahtjeva ++% of the maximum number of requests in the last 7 days++ broju zahtjeva ++the number of requests in the last 7 days++ % zahtjeva za stranice ++% of the requests for pages in the last 7 days++ % najveæeg broja zahtjeva za stranice ++% of the maximum number of requests for pages in the last 7 days++ broju zahtjeva za stranice ++the number of requests for pages in the last 7 days++ % preusmjerenih zahtjeva ++% of the redirected requests in the last 7 days++ % najveæeg broja preusmjerenih zahtjeva ++% of the maximum number of redirected requests in the last 7 days++ broju preusmjerenih zahtjeva ++the number of redirected requests in the last 7 days++ % neuspje¹nih zahtjeva ++% of the failed requests in the last 7 days++ % najveæeg broja neuspje¹nih zahtjeva ++% of the maximum number of failed requests in the last 7 days++ broj neuspje¹nih zahtjeva ++the number of failed requests in the last 7 days++ vremenu posljednjeg zahtjeva vremenu posljednjeg preusmjerenog zahtjeva vremenu posljednjeg neuspje¹nog zahtjeva ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n * * sortirano po abecedi * * sortirano brojèano * * nesortirano ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y. u %H:%n ## "Program started at" and "Analysed requests from" %w %d. %m %Y. u %H:%n ## In Daily Report %d.%m %y. ## In Daily Summary ++%w++ ## In Hourly Report %d.%m %y. %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d.%m %y. %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d.%m %y. ## In Monthly Report %m %Y. ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d.%m %y. ## The date & time (D) column in non-time reports %d.%m %y. %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m %y. u %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Nastavi sa zahtjevom 101 Promjena protokola 1xx [Raznolike informacije] 200 OK 201 Napravljeno 202 Prihvaæeno za buduæu obradu 203 Nevjerodostojna informacija 204 OK, ali nista za poslati 205 Poni¹ti dokument 206 Djelomièan sadr¾aj 2xx [Raznoliki uspjesi] 300 Postoje vi¹estruki dokumenti 301 Dokument pomjeren za stalno 302 Dokument nadjen drugdje 303 Vidi drugi dokument 304 Nepromijenjeno od posljednjeg zahtjeva 305 Koristi proxy 306 Promijeni proxy 307 Dokument pomjeren trenutno 3xx [Raznolike redirekcije] 400 Pogre¹an zahtjev 401 Potrebna potvrda vjerodostojnosti 402 Plaæanje potrebno 403 Pristup zabranjen 404 Dokument nije nadjen 405 Metod nije dozvoljen 406 Dokument nije prihvatljiv klijentu 407 Potrebna proxy potvrda vjerodostojnosti 408 Zahtjev istekao 409 Zahtjev u neskladu sa stanjem resursa 410 Dokument nestao za stalno 411 Potrebna duzina 412 Preduslov neispravan 413 Zahtjev predugaèak 414 Predugacko ime zahtjevanog dokumenta 415 Nepodr¾avan tip medija 416 Zahtijevani raspon neispravan 417 Neuspje¹no oèekivanje 4xx [Raznolike gre¹ke klijenta/korisnika] 500 Interna server gre¹ka 501 Nepodr¾avan tip zahtjeva 502 Gre¹ka na prija¹njem serveru 503 Usluga trenutno nije prisutna 504 Gateway istekao 505 Nepodr¾avana HTTP verzija 506 Redirekcija neuspje¹na 5xx [Raznolike gre¹ke servera] xxx [Nepoznato] analog-ce-6.0.17/lang/baq.lng000066400000000000000000000335001406366436600156400ustar00rootroot00000000000000############################################################################### ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ## ############################################################################### ## ## BAIETZ Fundazioak euskaratuta ## ## /usr/lib/analog/lang/eu.lng izan daiteke ## analog.conf fitxategian, ez jarri "LANGUAGE BASQUE", baizik eta ## "LANGFILE eu.lng" ## ############################################################################### ISO-8859-15 ## Abbreviations for the day and month names. Iga Alh Aar Aaz Osg Orl Lar Urt Ots Mar Api Mai Eka Uzt Abu Ira Urr Aza Abe ## Next some standard common words. ## Abbreviation for "week beginning" aste hasiera urtea ## Quarter of a year hiruhilekoa hilea egun egun ordua minutu minutu segundu segundu byte byte ## ?bytes represents kbytes, Mbytes etc. ?byte eskaera eskaera data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data ordua ordua lehen data lehen ordua azken data azken ordua artxibo artxibo sistema sistem zerbitzari birtual zerbitzari birtual direktorio direktorio domeinu domeinu erakunde erakunde luzapen luzapen URL URL Nabigatzailea Nabigatzaile SE SE ## (= operating system, operating systems) neurria bilatutako termino bilatutako termino gune gune erabiltzaile erabiltzaile egoera kode egoera kode Zerbitzari honen estatistikak: ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Laburpen orokorra ## The time reports, plus "busiest" strings (at the bottom of each report) Urtekako txostena Trafiko handienaren urtea: Hiruhilabetekako txostena Trafiko handienaren hiruhilabetea: Hilekako txostena Trafiko handienaren hilea: Astekako txostena Trafiko handienaren astea: Egunkako laburpena Egunkako txostena Trafiko handienaren eguna: Ordukako txostena Ordukako laburpena Astearen ordukako txostena Trafiko handienaren ordua: Ordulaurdenkako txostena Ordulaurdenkako laburpena Trafiko handienaren ordulaurdena: Bost minutukako txostena Bost minutukako laburpena Trafiko handienaren bost minutuak: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings. and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Sistema txostena sistema sistem m Sistema Birbideratze txostena sistema sistem m Sistema Akats txostena sistema sistem m Direktorio txostena direktorio directorio m Fitxategi Moten txostena luzapena luzapen m Eskaera txostena artxiboa artxibo m Biribideratze txostena artxiboa artxibo m Eskaera baten akatsen txostena artxiboa artxibo m Eskatzaileen txostena URL eskatzailea URL eskatzaile m Gune eskatzaileen txostena gune eskatzailea gune eskatzaile m Birbideratutako eskatzaileen txostena URL eskatzailea URL eskatzaile m Eskatzaileen akatsen txostena eskatzailearen URLa eskatzaileen URL m Bilaketa Galderen txostena galdera galdera m Bilatutako Hitzen txostena bilatutako hitza bilatutako hitz m Bilaketa Galderen Barne txostena galdera galder m Bilaketa Hitzen Barne txostena bilatutako hitz bilatutako hitz m Zerbitzari birtualen txostena zerbitzari birtual zerbitzari birtual m Zerbitzari Birtualen Birbideratze txostena zerbitzari birtual zerbitzari birtual m Zerbitzari Birtualen Akatsen txostena zerbitzari birtual zerbitzari birtual m Erabiltzaileen txostena erabiltzaile erabiltzaile m Erabiltzaileen Birbideratze txostena erabiltzaile erabiltzaile m Erabiltzaileen Akatsen txostena erabiltzaile erabiltzaile m Nabigatzaileen Laburpena nabigatzailea nabigatzaile m Nabigatzaileen txostena nabigatzailea nabigatzaile m Sistema Eragileen txostena sistema eragile sistema eragile m Domeinuen txostena domeinua domeinuak m Erakunde txostena Erakundea Erakundeak m Egoera kodeen txostena egoera kodea egoera kodeak m Prozesatze denboren txostena Artxiboen neurriaren txostena ## Used at the bottom of the report Azterketa hau egin duen programa: Eman duen denbora Gehienez 1 ## Used in the time reports Ale bakoitzak adierazten du edo zatia orriren eskaera eskaera orriko ## Used at the bottom of each non-time report: need m, f & n genders zerrendatu gabe * * ## Used on the pie charts: again need m, f & n genders Besterik * * ## Used at the top of the report Programa exekutatu da: Eskaeren azterketa tartea: --> ## Used in the General Summary Eskaera zuzenak Eguneko bataz besteko eskaera kopurua Orriko eskaera zuzenak Eguneko orriko bataz besteko eskaera zuzenen kopurua Logean egoera koderik gabeko lerroak Lortu gabeko eskaerak Birbideratutako eskaerak Egoera kodea informatiboa duten eskaerak Eskatutako artxibo ezberdinak Zerbitutako sistema eragile ezberdinak Logean lerro okerrak Logean eskatu gabeko sarrerak Transferentzia guztira Eguneko bataz besteko transferentzia Parentesi arteko zenbakiak zera dira, 7 egun data honetan: azken 7 egunak Joan hona Gora ## Some special phrases for particular reports. [aurkitu gabeko zenbaki helbideak] [zehaztu gabeko domeinua] [domeinu ezezaguna] [erro direktorioa] [direktoriorik gabe] [luzapenik gabe] [direktorioak] Windows ezezaguna Beste Unixen bat Errobotak Sistema Eragile ezezaguna ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) Esk. Kop. esk. 7-egun %esk. %esk 7-egun Orri. orri 7-egun %Orri. %orri. 7-egun byte ?byte byte 7-egun ?byte 7-egun %byte %byte 7-egun zki. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Lehen %sen zerrenda * * Lehen %d %sen zerrenda * * %sen zerrenda * * ## "by" in the phrase "listing the top 3 files BY number of requests" honen arabera: ## All requests WITH AT LEAST 10 requests , gutxienez zera adierazten dutela, ## Different ways of doing floors azken 7 egunetako eskaera azken 7 egunetako eskaerak azken 7 egunetako orri baten eskaera azken 7 egunetako orriko eskaera birbideratutako eskaera birbideratutako eskaerak azken 7 egunetan birbideratutako eskaera azken 7 egunetan birbideratutako eskaerak lortu gabeko eskaera lortu gabeko eskaerak azken 7 egunetan lortu gabeko eskaera azken 7 egunetan lortu gabeko eskaerak trafikoaren % azken 7 egunetako trafikoaren % gehienezko trafikoaren % azken 7 egunetako gehienezko trafikoaren % trafiko byte trafiko byte ## ?bytes represents kbytes, Mbytes etc. trafiko ?byte trafiko byte azken 7 egunetan trafiko byte azken 7 egunetan trafiko ?byte azken 7 egunetan eskaera batekin data honetatik: birbideratutako eskaera batekin data honetatik: lortu gabeko eskaera batekin data honetatik: lehen eskaera batekin data honetatik: biribideratutako lehen eskaera batekin data honetatik: lortu gabeko lehen eskaera batekin data honetatik: ## Now "sorted by": again, in m, f & n (only needed in plural though) honen arabera: * * ## Used at the top of each report Txosten honek hemengo datuak ditu: ## Used in pie charts Guneak marrazturik daude honen arabera: ## different ways of sorting trafiko kopurua azken 7 egunetako trafiko kopurua eskaera % azken 7 egunetako eskaera % gehienezko eskaeren % azken 7 egunetako gehienezko eskaeren % eskaera kopurua azken 7 egunetako eskaera kopurua orriko eskaera % azken 7 egunetako orriko eskaera % orriko gehienezko eskaera % azken 7 egunetako orriko gehienezko eskaera % orriko eskaera kopurua azken 7 egunetako orriko eskaera kopurua birbideratutako eskaera % azken 7 egunetako birbideratutako eskaera % birbideratutako gehienezko eskaeren % azken 7 egunetan birbideratutako gehienezko eskaeren % birbideratutako eskaera kopurua azken 7 egunetan birbideratutako eskaera kopurua lortu gabeko eskaera % azken 7 egunetan lortu gabeko eskaera % lortu gabeko gehienezko eskaera % azken 7 egunetan lortu gabeko gehienezko eskaera % lortu gabeko eskaera kopurua azken 7 egunetan lortu gabeko eskaera kopurua azken eskaeraren ordua birbideratutako azken eskaeraren ordua lortu gabeko azken eskaeraren ordua lehen eskaeraren ordua birbideratutakko lehen eskaeraren ordua lortu gabeko lehen eskaeraren ordua ## 3 other ways of sorting in m, f, & n alfabetikoki * * zenbakikoki * * desordenaturik * * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . ' ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %Y/%m/%d for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %j:%n %a ## "Program started at" and "Analysed requests from" %w, %Y/%m/%D %j:%n %a ## In Daily Report %Y/%m/%d ## In Daily Summary %w ## In Hourly Report %Y/%m/%d %H:%n%x%I:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o %b ## In Quarter-Hour and Five-Minute Reports %Y/%m/%d %H:%n%x%I:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n%x%I:%o %b ## In Weekly Report %Y/%m/%d ## In Monthly Report %Y %m ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %Y/%m/%d ## The date & time (D) column in non-time reports %Y/%m/%d %j:%n %a ## In non-time reports: "including all files with requests since [date]" %Y/%m/%d - %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Eskaera jarraitu 101 Konmutazio protokokoak 1xx [Hainbat informazio mezu] 200 OK 201 Sortuta 202 Gero prozesatzeko onartua 203 Baimenik gabeko informazioa 204 OK, baina bidaltzekorik ez 205 Dokumentua berrezarri 206 Eduki partziala 2xx [lortutako hainbat eragiketa] 300 Hainbat dokumentu prest 301 Betiko mugitutako dokumentua 302 Beste nonbait aurkitutako dokumentua 303 Beste dokumentu bat begiratu 304 Azken atzipenatik aldatu gabe 305 Zerbitzari alternatiboa erabili 306 Zerbitzari alternatiboa aldatu 307 Dokumentua behin-behineko mugituta 3xx [Hainbat birbideratze] 400 eskaera okerra 401 Autentikazioa behar da 402 Ordainketa behar da 403 Debekatuta 404 Aurkitu gabeko dokumentua 405 Baimendu gabeko metodoa 406 Bezeroak ezin duen onartu dokumentua 407 Ordezko zerbitzariaren autentikazioa behar da 408 eskaera etenda 409 Eskaera eta baliabidearen arteko gatazka 410 Dokumentua ezin da gehiago atzitu 411 Derrigorrezko iraupena 412 Aurrebaldintzaren akatsa 413 eskaera luzeegia 414 Eskatutako artxiboaren izena luzeegia 415 Baliabide baliogabea 416 Eskatutako tartea baliogabea 417 Eskaera lortu gabea 4xx [bezeroa/erabiltzailearen hainbat akats] 500 Zerbitzariaren barne akatsa 501 Onartu gabeko eskaera 502 Zerbitzariaren helbidean akatsa 503 Zerbitzua behin-behingoz erabilezina 504 Pasarela etenda 505 HTTP bertsioa onartugabea 506 Lortu gabeko birbideratzea 5xx [Zerbitzariaren hainbat akats] xxx [Ezezaguna] analog-ce-6.0.17/lang/bg.lng000066400000000000000000000321201406366436600154620ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Bulgarian translation on 2.VI.2000, Luchezar Georgiev ## http://midifiler.tsx.org ## Windows / X version ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1251 ## Abbreviations for the day and month names. íåä ïîí âòð ñðä ÷òâ ïòê ñáò ÿíó ôåâ ìàð àïð ìàé þíè þëè àâã ñåï îêò íîå äåê ## Next some standard common words. ## Abbreviation for "week beginning" íà÷. íà ñåäì. ãîäèíà ## Quarter of a year òðèìåñå÷èå ìåñåö äåí äíè ÷àñ ìèíóòà ìèíóòè ñåêóíäà ñåêóíäè áàéò áàéòà ## ?bytes represents kbytes, Mbytes etc. ?áàéòà çàÿâêà çàÿâêè äàòà ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 äàòà âðåìå âðåìå ïúðâà äàòà ïúðâî âðåìå ïîñëåäíà äàòà ïîñëåäíî âðåìå ôàéë ôàéëîâå õîñò õîñòîâå âèðòóàëåí õîñò âèðòóàëíè õîñòîâå äèðåêòîðèÿ äèðåêòîðèè îáëàñò îáëàñòè îðãàíèçàöèÿ îðãàíèçàöèè ðàçøèðåíèå ðàçøèðåíèÿ ÓÐË ÓÐË-òà áðàóçåð áðàóçåðè ÎÑ ÎÑ-ìè ## (= operating system, operating systems) ðàçìåð òúðñåí èçðàç òúðñåíè èçðàçè ñàéò ñàéòîâå ïîòðåáèòåë ïîòðåáèòåëè êîä íà ñúñòîÿíèåòî êîäîâå íà ñúñòîÿíèåòî Ñòàòèñòèêà íà WWW ñúðâåðà çà ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Îáùà ñâîäêà ## The time reports, plus "busiest" strings (at the bottom of each report) Ãîäèøåí îò÷åò Íàé-íàòîâàðåíà ãîäèíà: Òðèìåñå÷åí îò÷åò Íàé-íàòîâàðåíî òðèìåñå÷èå: Îò÷åò ïî ìåñåöè Íàé-íàòîâàðåí ìåñåö: Îò÷åò ïî ñåäìèöè Íàé-íàòîâàðåíà ñåäìèöà: íà÷àëî íà ñåäìèöàòà Äíåâíà ñâîäêà Îò÷åò ïî äíè Íàé-íàòîâàðåí äåí: Îò÷åò ïî ÷àñîâå ×àñîâà ñâîäêà Ñâîäêà ïî ÷àñ íà ñåäìèöàòà Íàé-íàòîâàðåí ÷àñ: ×åòâúðò÷àñîâ îò÷åò ×åòâúðò÷àñîâà ñâîäêà Íàé-íàòîâàðåíè 15 ìèí. â ÷àñà: Ïåòìèíóòåí îò÷åò Ïåòìèíóòíà ñâîäêà Íàé-íàòîâàðåíè 5 ìèí. â ÷àñà: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Îò÷åò ïî õîñòîâå õîñò õîñòîâå n Îò÷åò ïî ïðåíàñî÷âàíèÿ íà õîñòà õîñò õîñòîâå n Îò÷åò ïî ãðåøêèòå íà õîñòà õîñò õîñòîâå n Îò÷åò ïî äèðåêòîðèè äèðåêòîðèÿ äèðåêòîðèè n Îò÷åò ïî òèï ôàéë ðàçøèðåíèå ðàçøèðåíèÿ n Îò÷åò ïî çàÿâêè ôàéë ôàéëîâå n Îò÷åò ïî ïðåíàñî÷âàíèÿ ôàéë ôàéëîâå n Îò÷åò ïî ïîâðåäè ôàéë ôàéëîâå n Îò÷åò ïî îòïðàùàíèÿ îòïðàùàù ÓÐË îòïðàùàùè ÓÐË-òà n Îò÷åò ïî îòïðàùàùè ñàéòîâå îòïðàùàù ñàéò îòïðàùàùè ñàéòîâå n Îò÷åò ïî ïðåíàñî÷åíè îòïðàùàùè ñàéòîâå îòïðàùàù ÓÐË îòïðàùàùè ÓÐË-òà n Îò÷åò ïî íåóñïåøíè ïðåïðàùàíèÿ îòïðàùàù ÓÐË îòïðàùàùè ÓÐË-òà n Îò÷åò ïî òúðñåíè ôðàçè ôðàçà ôðàçè n Îò÷åò ïî òúðñåíè äóìè òúðñåíà äóìà òúðñåíè äóìè n Âúòðåøåí îò÷åò ïî òúðñåíà ôðàçà ôðàçà ôðàçè n Âúòðåøåí îò÷åò ïî òúðñåíà äóìà òúðñåíà äóìà òúðñåíè äóìè n Îò÷åò ïî âèðòóàëíè õîñòîâå âèðòóàëåí õîñò âèðòóàëíè õîñòîâå n Îò÷åò ïî ïðåíàñî÷âàíèÿ íà âèðòóàëíèÿ õîñò âèðòóàëåí õîñò âèðòóàëíè õîñòîâå n Îò÷åò ïî ãðåøêè íà âèðòóàëíèÿ õîñò âèðòóàëåí õîñò âèðòóàëíè õîñòîâå n Îò÷åò ïî ïîòðåáèòåëè ïîòðåáèòåë ïîòðåáèòåëè n Îò÷åò ïî ïðåíàñî÷âàíèÿ íà ïîòðåáèòåëèòå ïîòðåáèòåë ïîòðåáèòåëè n Îò÷åò íà ïîâðåäèòå ïî ïîòðåáèòåëè ïîòðåáèòåë ïîòðåáèòåëè n Ñâîäêà íà áðàóçåðèòå áðàóçåð áðàóçåðè n Îò÷åò ïî áðàóçåðè áðàóçåð áðàóçåðè n Îò÷åò ïî îïåðàöèîííè ñèñòåìè îïåðàöèîííà ñèñòåìà îïåðàöèîííè ñèñòåìè n Îò÷åò ïî îáëàñòè îáëàñò îáëàñòè n Îò÷åò ïî îðãàíèçàöèè îðãàíèçàöèÿ îðãàíèçàöèè n Îò÷åò ïî êîä íà ñúñòîÿíèåòî êîä íà ñúñòîÿíèåòî êîäîâå íà ñúñòîÿíèåòî n Îò÷åò ïî âðåìå íà îáðàáîòêà Îò÷åò ïî ðàçìåð íà ôàéëà ## Used at the bottom of the report Òîçè àíàëèç å íàïðàâåí îò Âðåìå çà èçïúëíåíèå Ïî-ìàëêî îò 1 ## Used in the time reports Âñÿêà åäèíèöà ïðåäñòàâëÿâà èëè ÷àñò îò íåÿ çàÿâêà çà ñòðàíèöà çàÿâêè çà ñòðàíèöè ## Used at the bottom of each non-time report: need m, f & n genders * * íå å äàäåíî ## Used on the pie charts: again need m, f & n genders * * Äðóãè ## Used at the top of the report Ïðîãðàìàòà å ñòàðòèðàíà â Àíàëèçèðàíè çàÿâêè îò äî ## Used in the General Summary Óñïåøíè çàÿâêè Ñðåäåí áðîé óñïåøíè çàÿâêè íà äåí Óñïåøíè çàÿâêè çà ñòðàíèöè Ñðåäåí áðîé óñïåøíè çàÿâêè çà ñòðàíèöè íà äåí Ðåäîâå íà ôàéëà äàííè áåç êîä íà ñúñòîÿíèåòî Íåóñïåøíè çàÿâêè Ïðåíàñî÷åíè çàÿâêè Çàÿâêè ñ èíôîðìèðàù êîä íà ñúñòîÿíèåòî Îòäåëíè çàÿâåíè ôàéëîâå Îòäåëíè îáñëóæåíè õîñòîâå Ïîâðåäåíè ðåäîâå âúâ ôàéëà äàííè Íåæåëàíè ïîëåòà âúâ ôàéëà äàííè Ïðåõâúðëåíè äàííè Ñðåäíî êîëè÷åñòâî ïðåõâúðëåíè äàííè íà äåí ×èñëàòà â ñêîáè ñå îòíàñÿò çà 7-òå äåíà äî ïîñëåäíèòå 7 äíè Ïðåìèíè êúì Íà÷àëîòî ## Some special phrases for particular reports. [íåðåøåíè ÷èñëîâè àäðåñè] [íåçàäàäåíà îáëàñò] [íåïîçíàòà îáëàñò] [ãëàâíà äèðåêòîðèÿ] [íÿìà äèðåêòîðèÿ] [íÿìà ðàçøèðåíèå] [äèðåêòîðèè] Íåïîçíàò Windows Äðóã Unix Ðîáîòè Íåèçâåñòíà ÎÑ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) çàÿâêè 7-äí. çàÿâêè %çàÿâêè %7-äí. çàÿâêè ñòð. 7-äí. ñòð. %ñòð. %7-äí. ñòð. áàéòà ?áàéòà 7-äí. áàéòà 7-äí. ?áàéòà %áàéòà %7-äí. áàéòà • ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ïîêàçâàíå íà ïúðâàòà %s * * Ïîêàçâàíå íà ïúðâèòå %d %s * * Ïîêàçâàíå íà %s ## "by" in the phrase "listing the top 3 files BY number of requests" ïî ## All requests WITH AT LEAST 10 requests ñ ïîíå ## Different ways of doing floors çàÿâêà çà ïîñëåäíèòå 7 äíè çàÿâêè çà ïîñëåäíèòå 7 äíè çàÿâêà çà ñòðàíèöà çà ïîñëåäíèòå 7 äíè çàÿâêè çà ñòðàíèöà çà ïîñëåäíèòå 7 äíè ïðåíàñî÷åíà çàÿâêà ïðåíàñî÷åíè çàÿâêè ïðåíàñî÷åíà çàÿâêà çà ïîñëåäíèòå 7 äíè ïðåíàñî÷åíè çàÿâêè çà ïîñëåäíèòå 7 äíè íåóñïåøíà çàÿâêà íåóñïåøíè çàÿâêè íåóñïåøíà çàÿâêà çà ïîñëåäíèòå 7 äíè íåóñïåøíè çàÿâêè çà ïîñëåäíèòå 7 äíè % îò òðàôèêà % îò òðàôèêà çà ïîñëåäíèòå 7 äíè % îò ìàêñèìàëíîòî êîëè÷åñòâî òðàôèê % îò ìàêñèìàëíîòî êîëè÷åñòâî òðàôèê çà ïîñëåäíèòå 7 äíè áàéò òðàôèê áàéòà òðàôèê ## ?bytes represents kbytes, Mbytes etc. ?áàéòà òðàôèê áàéò òðàôèê çà ïîñêåäíèòå 7 äíè áàéòà òðàôèê çà ïîñëåäíèòå 7 äíè ?áàéòà òðàôèê çà ïîñëåäíèòå 7 äíè çàÿâåíè ñëåä ñ ïðåíàñî÷åíà çàÿâêà ñëåä ñ íåóñïåøíà çàÿâêà ñëåä ñ ïúðâà çàÿâêà ñëåä ñ ïúðâà ïðåíàñî÷åíà çàÿâêà ñëåä ñ ïúðâà íåóñïåøíà çàÿâêà ñëåä ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ñîðòèðàíè ïî ## Used at the top of each report Òîçè îò÷åò ñúäúðæà äàííè îò ## Used in pie charts Ðåçåíèòå ñà íà÷åðòàíè ïî ## different ways of sorting êîëè÷åñòâî òðàôèê êîëè÷åñòâî òðàôèê çà ïîñëåäíèòå 7 äíè % íà çàÿâêèòå % íà çàÿâêèòå çà ïîñëåäíèòå 7 äíè % íà ìàêñèìàëíèÿ áðîé çàÿâêè % îò ìàêñèìàëíèÿ áðîé çàÿâêè çà ïîñëåäíèòå 7 äíè áðîÿ çàÿâêè áðîÿ çàÿâêè çà ïîñëåäíèòå 7 äíè % íà çàÿâêèòå çà ñòðàíèöè % íà çàÿâêèòå çà ñòðàíèöè çà ïîñëåäíèòå 7 äíè % íà ìàêñèìàëíèÿ áðîé çàÿâêè çà ñòðàíèöè % íà ìàêñèìàëíèÿ áðîé çàÿâêè çà ñòðàíèöè çà ïîñëåäíèòå 7 äíè áðîÿ çàÿâêè çà ñòðàíèöè áðîÿ çàÿâêè çà ñòðàíèöè çà ïîñëåäíèòå 7 äíè % íà ïðåíàñî÷åíèòå çàÿâêè % íà ïðåíàñî÷åíèòå çàÿâêè çà ïîñëåäíèòå 7 äíè % íà ìàêñèìàëíèÿ áðîé ïðåíàñî÷åíè çàÿâêè % íà ìàêñèìàëíèÿ áðîé ïðåíàñî÷åíè çàÿâêè çà ïîñëåäíèòå 7 äíè áðîÿ íà ïðåíàñî÷åíèòå çàÿâêè áðîÿ íà ïðåíàñî÷åíèòå çàÿâêè çà ïîñëåäíèòå 7 äíè % íà íåóñïåøíèòå çàÿâêè % íà íåóñïåøíèòå çàÿâêè çà ïîñëåäíèòå 7 äíè % íà ìàêñèìàëíèÿ áðîé íåóñïåøíè çàÿâêè % íà ìàêñèìàëíèÿ áðîé íåóñïåøíè çàÿâêè çà ïîñëåäíèòå 7 äíè áðîÿ íà íåóñïåøíè çàÿâêè áðîÿ íà íåóñïåøíèòå çàÿâêè çà ïîñëåäíèòå 7 äíè âðåìåòî íà ïîñëåäíàòà çàÿâêà âðåìåòî íà ïîñëåäíàòà ïðåíàñî÷åíà çàÿâêà âðåìåòî íà ïîñëåäíàòà íåóñïåøíà çàÿâêà âðåìåòî íà ïúðâàòà çàÿâêà âðåìåòî íà ïúðâàòà ïðåíàñî÷åíà çàÿâêà âðåìåòî íà ïúðâàòà íåóñïåøíà çàÿâêà ## 3 other ways of sorting in m, f, & n * * ñîðòèðàíè ïî àçáó÷åí ðåä * * ñîðòèðàíè ïî ÷èñëîâ ðåä * * íåñîðòèðàíè ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ñóòðèíòà ñëåäîáåä ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %h.%n ## "Program started at" and "Analysed requests from" %w %d %m %Y %h.%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %h.%n%x%i.%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %h.%n%x%i.%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %h.%n%x%i.%o ## In Quarter-Hour and Five-Minute Summaries %h.%n%x%i.%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %h.%n ## In non-time reports: "including all files with requests since [date]" %d %m %y â %h.%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/bgdesc.txt000066400000000000000000000107551406366436600163720ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Bulgarian translation 25.I.2001 L.Georgiev # Windows-1251 (Windows / X) version # # Yearly Report Òîçè îò÷åò îïèñ àêòèâíîñòòà çà âñÿêà ãîäèíà. # Quarterly Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñÿêî òðèìåñå÷èå. # Monthly Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñåêè ìåñåö. # Weekly Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñÿêà ñåäìèöà. # Daily Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñåêè äåí. # Hourly Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñåêè ÷àñ. # Quarter-Hour Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñåêè ÷åòâúðò÷àñîâ ïåðèîä. # Five-Minute Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà çà âñåêè ïåòìèíóòåí ïåðèîä. # Daily Summary Òîçè îò÷åò îïèñâà îáùàòà àêòèâíîñò çà âñåêè äåí îò ñåäìèöàòà, ñóìèðàíà çà âñè÷êè ñåäìèöè íà îò÷åòà. # Hourly Summary Òîçè îò÷åò îïèñâà îáùàòà àêòèâíîñò çà âñåêè ÷àñ íà äåíÿ, ñóìèðàíà çà âñè÷êè äíè íà îò÷åòà. # Hour of the Week Summary Òîçè îò÷åò îïèñâà îáùàòà àêòèâíîñò çà âñåêè ÷àñ îò ñåäìèöàòà, ñóìèðàíà çà âñè÷êè ñåäìèöè íà îò÷åòà. # Quarter-Hour Summary Òîçè îò÷åò îïèñâà îáùàòà àêòèâíîñò çà âñåêè ÷åòâúðò÷àñîâ ïåðèîä îò äåíÿ, ñóìèðàíà çà âñè÷êè äíè íà îò÷åòà. # Five-Minute Summary Òîçè îò÷åò îïèñâà îáùàòà àêòèâíîñò çà âñåêè ïåòìèíóòåí ïåðèîä îò äåíÿ, ñóìèðàíà çà âñè÷êè äíè íà îò÷åòà. # General Summary Òîçè îò÷åò ñúäúðæà öÿëîñòíà ñòàòèñòèêà. # Request Report Òîçè îò÷åò îïèñâà ôàéëîâåòå íà ñàéòà. # Redirection Report Òîçè îò÷åò îïèñâà ôàéëîâåòå, êîèòî ñà ïðåäèçâèêàëè ïðåíàñî÷âàíå íà çàÿâêèòå êúì äðóã ôàéë. (Îáèêíîâåíî äèðåêòîðèè ñ ëèïñâàùà ïîñëåäíà íàêëîíåíà ÷åðòà èëè CGI-ñêðèïòîâå, ïðåäèçâèêàëè ïðåíàñî÷âàíå.) # Failure Report Òîçè îò÷åò îïèñâà ôàéëîâåòå, ïðåäèçâèêàëè ãðåøêè, íàïðèìåð ôàéëîâå, êîèòî íå ñà íàìåðåíè. # File Type Report Òîçè îò÷åò îïèñâà ðàçøèðåíèÿòà íà çàÿâåíèòå ôàéëîâå. # Directory Report Òîçè îò÷åò îïèñâà äèðåêòîðèèòå, îò êîèòî ñà áèëè çàÿâåíè ôàéëîâå. (×èñëàòà çà âñÿêà äèðåêòîðèÿ âêëþ÷âàò âñè÷êè íåéíè ïîääèðåêòîðèè.) # Host Report Òîçè îò÷åò îïèñâà êîìïþòðèòå, êîèòî ñà çàÿâèëè ôàéëîâå. # Host Redirection Report Òîçè îò÷åò îïèñâà êîìïþòðèòå, êîèòî ñà áèëè ïðåíàñî÷åíè êúì äðóã ôàéë. # Host Failure Report Òîçè îò÷åò îïèñâà êîìïþòðèòå, êîèòî ñà ñå íàòúêíàëè íà ñãðåøåíè çàÿâêè. # Domain Report Òîçè îò÷åò îïèñâà ñòðàíèòå, â êîèòî ñà áèëè êîìïþòðèòå, çàÿâèëè ôàéëîâå. # Referrer Report Òîçè îò÷åò îïèñâà îòïðàùà÷èòå (îòêúäåòî õîðàòà ñà ñëåäâàëè âðúçêèòå èëè ñòðàíèöè, êîèòî ñà âêëþ÷âàëè èçîáðàæåíèÿ îò òîçè ñàéò). # Referring Site Report Òîçè îò÷åò îïèñâà îò êîè ñúðâåðè õîðàòà ñà ñëåäâàëè âðúçêè. # Redirected Referrer Report Òîçè îò÷åò îïèñâà îòïðàùà÷èòå, êîèòî ñà ïðåäèçâèêàëè ïðåíàñî÷åíè çàÿâêè. # Failed Referrer Report Òîçè îò÷åò îïèñâà îòïðàùà÷èòå, ñúäúðæàùè íåâàëèäíè âðúçêè êúì ñàéòà. # Browser Report Òîçè îò÷åò îïèñâà áðàóçåðèòå, èçïîëçâàíè îò ïîñåòèòåëèòå. # Virtual Host Report Òîçè îò÷åò îïèñâà àêòèâíîñòòà íà âñÿêà îò âèðòóàëíèòå îáëàñòè íà ñàéòà. # Virtual Host Redirection Report Òîçè îò÷åò îïèñâà ïðåíàñî÷åíèòå çàÿâêè êúì âñÿêà îò âèðòóàëíèòå îáëàñòè. # Virtual Host Failure Report Òîçè îò÷åò îïèñâà ñãðåøíèòå çàÿâêè êúì âñÿêà îò âèðòóàëíèòå îáëàñòè. # User Report Òîçè îò÷åò îïèñâà ïîòðåáèòåëèòå, êîèòî ñà çàÿâèëè ôàéëîâå, àêî ñàìîëè÷íîñòòà èì å áèëà óñòàíîâåíà èëè ìîãàò äà áúäàò èäåíòèôèöèðàíè îò "êúñìåò÷åòà". # User Redirection Report Òîçè îò÷åò îïèñâà ïîòðåáèòåëèòå, êîèòî ñà áèëè ïðåíàñî÷åíè êúì äðóã ôàéë. # User Failure Report Òîçè îò÷åò îïèñâà ïîòðåáèòåëèòå, êîèòî ñà ñå íàòúêíàëè íà ñãðåøåíè çàÿâêè. # Organisation Report Òîçè îò÷åò îïèñâà the îðãàíèçàöèèòå, â êîèòî ñà áèëè êîìïþòðèòå, çàÿâèëè ôàéëîâå. # Search Query Report Òîçè îò÷åò îïèñâà êîè ôðàçè ñà èçïîëçâàëè õîðàòà â òúðñåùèòå ìàøèíè, çà äà íàìåðÿò ñàéòà. # Search Word Report Òîçè îò÷åò îïèñâà êîè äóìè ñà èçïîëçâàëè õîðàòà â òúðñåùèòå ìàøèíè, çà äà íàìåðÿò ñàéòà. # Internal Search Query Report Òîçè îò÷åò îïèñâà êîè ôðàçè ñà èçïîëçâàëè õîðàòà â ñêðèïòîâå â ðàìêèòå íà ñàéòà. # Internal Search Word Report Òîçè îò÷åò îïèñâà êîè äóìè ñà èçïîëçâàëè õîðàòà â ñêðèïòîâå â ðàìêèòå íà ñàéòà. # Browser Summary Òîçè îò÷åò îïèñâà òèïîâåòå áðàóçåðè íà ïîñåòèòåëèòå. # Operating System Report Òîçè îò÷åò îïèñâà îïåðàöèîííèòå ñèñòåìè, èçïîëçâàíè îò ïîñåòèòåëèòå. # File Size Report Òîçè îò÷åò îïèñâà ðàçìåðèòå íà ôàéëîâåòå. # Status Code Report Òîçè îò÷åò îïèñâà HTTP-êîäà íà ñúñòîÿíèåòî íà âñè÷êè çàÿâêè. # Processing Time Report Òîçè îò÷åò îïèñâà âðåìåíàòà, êîèòî ñà áèëè íåîáõîäèìè çà îáðàáîòêà íà óñïåøíèòå çàÿâêè. analog-ce-6.0.17/lang/bgdom.tab000066400000000000000000000132371406366436600161600ustar00rootroot00000000000000# Bulgarian domain name translation 3.VI.2000 L.Georgiev # MIK-16 (DOS / Linux) version aero 2 Âúçäóøåí òðàíñïîðò arpa 1 Àðïàíåò (ñòàð ñòèë) biz 2 Îáëàñòè íà äåéíîñò com 2 Êîìåðñèàëíà îáëàñò coop 2 Êîîïåðàòèâè edu 2 Îáðàçîâàòåëíà îáëàñò íà ÑÀÙ gov 2 Ïðàâèòåëñòâåíà îáëàñò íà ÑÀÙ info 2 Èíôîðìàöèîííè int 2 Ìåæäóíàðîäíè äîãîâîðíè îðãàíèçàöèè mil 2 Âîåííà îáëàñò íà ÑÀÙ museum 2 Ìóçåè name 3 Èíäèâèäè net 2 Ìðåæîâà îáëàñò org 2 Îáëàñò íà íåêîìåðñèàëíèòå îðãàíèçàöèè pro 3 Ïðîôåñèîíàëèñòè ac 1 Îñòðîâ Âúçíåñåíèå ad 2 Àíäîðà ae 3 Îáåäèíåíè àðàáñêè åìèðñòâà af 1 Àôãàíèñòàí ag 2 Îñòðîâ Àíòèãóà è îñòðîâ Áàðáóäà ai 1 Îñòðîâ Àíãèëà al 1 Àëáàíèÿ am 2 Àðìåíèÿ an 1 Àíòèëñêè îñòðîâè (Õîëàíäèÿ) ao 1 Àíãîëà aq 1 Àíòàðêòèäà ar 3 Àðæåíòèíà as 1 Îñòðîâè Ñàìîà (ÑÀÙ) at 3 Àâñòðèÿ au 3 Àâñòðàëèÿ aw 1 Îñòðîâ Àðóáà az 1 Àçúðáàéäæàí ba 3 Áîñíà è Õåðöåãîâèíà bb 2 Îñòðîâ Áàðáàäîñ bd 1 Áàíãëàäåø be 2 Áåëãèÿ bf 1 Áóðêèíà Ôàñî bg 2 Áúëãàðèÿ bh 1 Áàõðåéí bi 1 Áóðóíäè bj 1 Áåíèí bm 1 Áåðìóäñêè îñòðîâè bn 1 Áðóíåé bo 3 Áîëèâèÿ br 3 Áðàçèëèÿ bs 1 Áàõàìñêè îñòðîâè bt 1 Áóòàí bv 1 Îñòðîâ Áóâå bw 1 Áîòñòóàíà by 1 Áåëàðóñ bz 1 Áåëèç ca 3 Êàíàäà cc 1 Êîêîñîâè îñòðîâè cd 1 Äåìîêðàòè÷íà ðåïóáëèêà Êîíãî (Çàèð) cf 1 Öåíòðàëíoàôðèêàíñêà ðåïóáëèêà cg 1 Êîíãî (Áðàçàâèë) ch 2 Øâåéöàðèÿ ci 1 Áðÿã íà Ñëîíîâàòà êîñò ck 1 Îñòðîâè íà Êóê cl 2 ×èëè cm 1 Êàìåðóí cn 3 Êèòàé co 3 Êîëóìáèÿ cr 3 Êîñòà Ðèêà cu 1 Êóáà cv 1 Îñòðîâè Êàïî Âåðäå (Çåëåíè íîñ) cx 2 Îñòðîâ Ðîæäåñòâî cy 3 Êèïúð cz 2 ×åõèÿ de 2 Ãåðìàíèÿ dj 1 Äæèáóòè dk 2 Äàíèÿ dm 2 Îñòðîâ Äîìèíèêà do 2 Äîìèíèêàíñêà ðåïóáëèêà dz 1 Àëæèð ec 3 Åêâàäîð ee 2 Åñòîíèÿ eg 3 Åãèïåò eh 1 Çàïàäíà Ñàõàðà er 1 Åðèòðåÿ es 2 Èñïàíèÿ et 1 Åòèîïèÿ fi 2 Ôèíëàíäèÿ fj 3 Ôèäæè fk 1 Ôîëêëåíäñêè (Ìàëâèíñêè) îñòðîâè fm 1 Ìèêðîíåçèÿ fo 1 Ôàðåðñêè îñòðîâè fr 2 Ôðàíöèÿ fx 1 Ôðàíöèÿ (Åâðîïåéñêà òåðèòîðèÿ) ga 1 Ãàáîí gb 1 Âåëèêîáðèòàíèÿ gd 1 Ãðåíàäà ge 1 Ãðóçèÿ gf 1 Ôðåíñêà Ãâèàíà gg 1 Îñòðîâ Ãåðíñè gh 3 Ãàíà gi 1 Ãèáðàëòàð gl 1 Îñòðîâ Ãðåíëàíäèÿ gm 1 Ãàìáèÿ gn 1 Ãâèíåÿ gp 1 Ãâàäåëóïà gq 1 Åêâàòîðèàëíà Ãâèíåÿ gr 2 Ãúðöèÿ gs 1 Îñòðîâ Þæíà Äæîðäæèÿ è Þæíè Ñàíäâè÷åâè îñòðîâè gt 3 Ãâàòåìàëà gu 1 Ãóàì gw 1 Ãâèíåÿ Áèñàó gy 1 Ãàéàíà hk 3 Õîíã Êîíã hm 1 Îñòðîâ Õúðä è îñòðîâè íà Ìàêäîíàëä hn 2 Õîíäóðàñ hr 2 Õúðâàòñêî ht 1 Õàèòè hu 2 Óíãàðèÿ id 3 Èíäîíåçèÿ ie 2 Èðëàíäèÿ il 3 Èçðàåë im 1 Îñòðîâ Ìàí in 3 Èíäèÿ io 1 Áðèòàíñêà òåðèòîðèÿ â Èíäèéñêèÿ îêåàí iq 1 Èðàê ir 1 Èðàí is 2 Èñëàíäèÿ it 2 Èòàëèÿ je 1 Îñòðîâ Äæúðñè jm 3 ßìàéêà jo 3 Éîðäàíèÿ jp 3 ßïîíèÿ ke 3 Êåíèÿ kg 1 Êèðãèçñòàí kh 1 Êàìáîäæà ki 1 Êèðèáàòè (îñòðîâè Ãèëáåðò è äð.) km 1 Êîìîðñêè îñòðîâè kn 1 Îñòðîâè Ñâ. Êðèñòîôúð è Íåâèñ kp 1 Ñåâåðíà Êîðåÿ kr 3 Þæíà Êîðåÿ kw 3 Êóâåéò ky 1 Îñòðîâè Êàéìàí kz 1 Êàçàõñòàí la 1 Ëàîñ lb 3 Ëèâàí lc 1 Îñòðîâè Ñâ. Ëó÷èÿ li 2 Ëèõòåíùàéí lk 1 Øðè Ëàíêà lr 1 Ëèáåðèÿ ls 1 Ëåñîòî lt 2 Ëèòâà lu 2 Ëþêñåìáóðã lv 2 Ëàòâèÿ ly 1 Ëèáèÿ ma 1 Ìàðîêî mc 2 Ìîíàêî md 1 Ìîëäîâà mg 1 Ìàäàãàñêàð mh 1 Ìàðøàëñêè îñòðîâè mk 3 Ìàêåäîíèÿ ml 1 Ìàëè mm 1 Ìÿíìàð (Áèðìà) mn 1 Ìîíãîëèÿ mo 1 Ìàêàî mp 1 Ñåâåðíè Ìàðèàíñêè îñòðîâè mq 1 Îñòðîâ Ìàðòèíèêà mr 1 Ìàâðèòàíèÿ ms 1 Îñòðîâ Ìîíñåðàò mt 3 Îñòðîâ Ìàëòà mu 1 Îñòðîâ Ìàâðèöèé mv 1 Ìàëäèâñêè îñòðîâè mw 1 Ìàëàâè mx 3 Ìåêñèêî my 3 Ìàëàéçèÿ mz 1 Ìîçàìáèê na 1 Íàìèáèÿ nc 1 Îñòðîâ Íîâà Êàëåäîíèÿ ne 1 Íèãåð nf 1 Îñòðîâ Íîðôîëê ng 1 Íèãåðèÿ ni 3 Íèêàðàãóà nl 2 Õîëàíäèÿ no 2 Íîðâåãèÿ np 1 Íåïàë nr 1 Îñòðîâ Íàóðó nu 1 Îñòðîâ Íèóå (Ñàâèäæ) nz 3 Íîâà Çåëàíäèÿ om 1 Îìàí pa 3 Ïàíàìà pe 3 Ïåðó pf 1 Ôðåíñêà Ïîëèíåçèÿ pg 3 Ïàïóà Íîâà Ãâèíåÿ ph 3 Ôèëèïèíèòå pk 3 Ïàêèñòàí pl 3 Ïîëøà pm 1 Îñòðîâ Ñåí Ïèåð è îñòðîâè Ìèêåëîí pn 1 Îñòðîâ Ïèòêåðí pr 1 Îñòðîâ Ïóåðòî Ðèêî ps 1 Îêóïèðàíè ïàëåñòèíñêè òåðèòîðèè pt 2 Ïîðòóãàëèÿ pw 1 Îñòðîâè Ïàëàó py 3 Ïàðàãâàé qa 1 Êàòàð re 1 Îñòðîâ Ðåþíèîí ro 2 Ðóìúíèÿ ru 2 Ðóñèÿ rw 1 Ðóàíäà sa 3 Ñàóäèòñêà Àðàáèÿ sb 1 Ñîëîìîíîâè îñòðîâè sc 1 Ñåéøåëñêè îñòðîâè sd 1 Ñóäàí se 2 Øâåöèÿ sg 3 Ñèíãàïóð sh 1 Îñòðîâ Ñâ. Åëåíà si 2 Ñëîâåíèÿ sj 1 Îñòðîâ Ñâàëáàðä è îñòðîâ ßí Ìàéåí sk 2 Ñëîâàêèÿ sl 1 Ñèåðà Ëåîíå sm 1 Ñàí Ìàðèíî sn 1 Ñåíåãàë so 1 Ñîìàëèÿ sr 1 Ñóðèíàì st 1 Îñòðîâè Ñàí Òîìå è îñòðîâ Ïðèíñèïè su 2 ÑÑÑÐ sv 3 Ñàëâàäîð sy 1 Ñèðèÿ sz 1 Ñâàçèëåíä tc 1 Îñòðîâè Òúðêñ è îñòðîâè Êàéêîñ td 1 ×àä tf 1 Ôðåíñêè þæíè òåðèòîðèè tg 1 Òîãî th 3 Òàéëàíä tj 1 Òàäæèêèñòàí tk 1 Îñòðîâè Òîêåëàó tl 1 Èçòî÷åí Òèìîð tm 1 Òóðêìåíèñòàí tn 1 Òóíèñ to 1 Îñòðîâè Òîíãà tp 1 Èçòî÷åí Òèìîð tr 3 Òóðöèÿ tt 3 Òðèíèäàä è Òîáàãî tv 1 Îñòðîâè Òóâàëó (Åëèñ) tw 3 Îñòðîâ Òàéâàí tz 1 Òàíçàíèÿ ua 3 Óêðàéíà ug 3 Óãàíäà uk 3 Îáåäèíåíî êðàëñòâî Âåëèêîáðèòàíèÿ è Ñåâåðíà Èðëàíäèÿ um 1 Îòäàëå÷åíè ïî-ìàëêè îñòðîâè íà ÑÀÙ us 4 ÑÀÙ uy 3 Óðóãâàé uz 1 Óçáåêèñòàí va 1 Âàòèêàíúò vc 1 Îñòðîâ Ñâ. Âèíñåíò è îñòðîâè Ãðåíàäèíè ve 3 Âåíåöóåëà vg 1 Âèðãèíñêè îñòðîâè (Âåëèêîáðèòàíèÿ) vi 1 Âèðãèíñêè îñòðîâè (ÑÀÙ) vn 1 Âèåòíàì vu 1 Îñòðîâè Âàíóàòó (Íîâè Õåáðèäè) wf 1 Îñòðîâè Óîëèñ è Ôóòóíà ws 1 Îñòðîâè Ñàìîà ye 1 Éåìåí yt 1 Îñòðîâ Ìàéîòà yu 3 Þãîñëàâèÿ za 3 Þæíîàôðèêàíñêà ðåïóáëèêà zm 1 Çàìáèÿ zr 1 Çàèð (Äåìîêðàòè÷íà ðåïóáëèêà Êîíãî) zw 3 Çèìáàáâå analog-ce-6.0.17/lang/bgm.lng000066400000000000000000000321121406366436600156400ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Bulgarian translation on 2.VI.2000, Luchezar Georgiev ## http://midifiler.tsx.org ## DOS / Linux version ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP MIK-16 ## Abbreviations for the day and month names. ­¥¤ ¯®­ ¢²° ±°¤ ·²¢ ¯²ª ±¡² ¿­³ ´¥¢ ¬ °  ¯° ¬ © ¾­¨ ¾«¨  ¢£ ±¥¯ ®ª² ­®¥ ¤¥ª ## Next some standard common words. ## Abbreviation for "week beginning" ­ ·. ­  ±¥¤¬. £®¤¨­  ## Quarter of a year ²°¨¬¥±¥·¨¥ ¬¥±¥¶ ¤¥­ ¤­¨ · ± ¬¨­³²  ¬¨­³²¨ ±¥ª³­¤  ±¥ª³­¤¨ ¡ ©² ¡ ©²  ## ?bytes represents kbytes, Mbytes etc. ?¡ ©²  § ¿¢ª  § ¿¢ª¨ ¤ ²  ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ¤ ²  ¢°¥¬¥ ¢°¥¬¥ ¯º°¢  ¤ ²  ¯º°¢® ¢°¥¬¥ ¯®±«¥¤­  ¤ ²  ¯®±«¥¤­® ¢°¥¬¥ ´ ©« ´ ©«®¢¥ µ®±² µ®±²®¢¥ ¢¨°²³ «¥­ µ®±² ¢¨°²³ «­¨ µ®±²®¢¥ ¤¨°¥ª²®°¨¿ ¤¨°¥ª²®°¨¨ ®¡« ±² ®¡« ±²¨ ®°£ ­¨§ ¶¨¿ ®°£ ­¨§ ¶¨¨ ° §¸¨°¥­¨¥ ° §¸¨°¥­¨¿ “‹ “‹-²  ¡° ³§¥° ¡° ³§¥°¨ Ž‘ Ž‘-¬¨ ## (= operating system, operating systems) ° §¬¥° ²º°±¥­ ¨§° § ²º°±¥­¨ ¨§° §¨ ± ©² ± ©²®¢¥ ¯®²°¥¡¨²¥« ¯®²°¥¡¨²¥«¨ ª®¤ ­  ±º±²®¿­¨¥²® ª®¤®¢¥ ­  ±º±²®¿­¨¥²® ‘² ²¨±²¨ª  ­  WWW ±º°¢¥°  §  ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Ž¡¹  ±¢®¤ª  ## The time reports, plus "busiest" strings (at the bottom of each report) ƒ®¤¨¸¥­ ®²·¥²  ©-­ ²®¢ °¥­  £®¤¨­ : ’°¨¬¥±¥·¥­ ®²·¥²  ©-­ ²®¢ °¥­® ²°¨¬¥±¥·¨¥: ޲·¥² ¯® ¬¥±¥¶¨  ©-­ ²®¢ °¥­ ¬¥±¥¶: ޲·¥² ¯® ±¥¤¬¨¶¨  ©-­ ²®¢ °¥­  ±¥¤¬¨¶ : ­ · «® ­  ±¥¤¬¨¶ ²  „­¥¢­  ±¢®¤ª  ޲·¥² ¯® ¤­¨  ©-­ ²®¢ °¥­ ¤¥­: ޲·¥² ¯® · ±®¢¥ — ±®¢  ±¢®¤ª  ‘¢®¤ª  ¯® · ± ­  ±¥¤¬¨¶ ²   ©-­ ²®¢ °¥­ · ±: —¥²¢º°²· ±®¢ ®²·¥² —¥²¢º°²· ±®¢  ±¢®¤ª   ©-­ ²®¢ °¥­¨ 15 ¬¨­. ¢ · ± : ¥²¬¨­³²¥­ ®²·¥² ¥²¬¨­³²­  ±¢®¤ª   ©-­ ²®¢ °¥­¨ 5 ¬¨­. ¢ · ± : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ޲·¥² ¯® µ®±²®¢¥ µ®±² µ®±²®¢¥ n ޲·¥² ¯® ¯°¥­ ±®·¢ ­¨¿ ­  µ®±²  µ®±² µ®±²®¢¥ n ޲·¥² ¯® £°¥¸ª¨²¥ ­  µ®±²  µ®±² µ®±²®¢¥ n ޲·¥² ¯® ¤¨°¥ª²®°¨¨ ¤¨°¥ª²®°¨¿ ¤¨°¥ª²®°¨¨ n ޲·¥² ¯® ²¨¯ ´ ©« ° §¸¨°¥­¨¥ ° §¸¨°¥­¨¿ n ޲·¥² ¯® § ¿¢ª¨ ´ ©« ´ ©«®¢¥ n ޲·¥² ¯® ¯°¥­ ±®·¢ ­¨¿ ´ ©« ´ ©«®¢¥ n ޲·¥² ¯® ¯®¢°¥¤¨ ´ ©« ´ ©«®¢¥ n ޲·¥² ¯® ®²¯° ¹ ­¨¿ ®²¯° ¹ ¹ “‹ ®²¯° ¹ ¹¨ “‹-²  n ޲·¥² ¯® ®²¯° ¹ ¹¨ ± ©²®¢¥ ®²¯° ¹ ¹ ± ©² ®²¯° ¹ ¹¨ ± ©²®¢¥ n ޲·¥² ¯® ¯°¥­ ±®·¥­¨ ®²¯° ¹ ¹¨ ± ©²®¢¥ ®²¯° ¹ ¹ “‹ ®²¯° ¹ ¹¨ “‹-²  n ޲·¥² ¯® ­¥³±¯¥¸­¨ ¯°¥¯° ¹ ­¨¿ ®²¯° ¹ ¹ “‹ ®²¯° ¹ ¹¨ “‹-²  n ޲·¥² ¯® ²º°±¥­¨ ´° §¨ ´° §  ´° §¨ n ޲·¥² ¯® ²º°±¥­¨ ¤³¬¨ ²º°±¥­  ¤³¬  ²º°±¥­¨ ¤³¬¨ n ‚º²°¥¸¥­ ®²·¥² ¯® ²º°±¥­  ´° §  ´° §  ´° §¨ n ‚º²°¥¸¥­ ®²·¥² ¯® ²º°±¥­  ¤³¬  ²º°±¥­  ¤³¬  ²º°±¥­¨ ¤³¬¨ n ޲·¥² ¯® ¢¨°²³ «­¨ µ®±²®¢¥ ¢¨°²³ «¥­ µ®±² ¢¨°²³ «­¨ µ®±²®¢¥ n ޲·¥² ¯® ¯°¥­ ±®·¢ ­¨¿ ­  ¢¨°²³ «­¨¿ µ®±² ¢¨°²³ «¥­ µ®±² ¢¨°²³ «­¨ µ®±²®¢¥ n ޲·¥² ¯® £°¥¸ª¨ ­  ¢¨°²³ «­¨¿ µ®±² ¢¨°²³ «¥­ µ®±² ¢¨°²³ «­¨ µ®±²®¢¥ n ޲·¥² ¯® ¯®²°¥¡¨²¥«¨ ¯®²°¥¡¨²¥« ¯®²°¥¡¨²¥«¨ n ޲·¥² ¯® ¯°¥­ ±®·¢ ­¨¿ ­  ¯®²°¥¡¨²¥«¨²¥ ¯®²°¥¡¨²¥« ¯®²°¥¡¨²¥«¨ n ޲·¥² ­  ¯®¢°¥¤¨²¥ ¯® ¯®²°¥¡¨²¥«¨ ¯®²°¥¡¨²¥« ¯®²°¥¡¨²¥«¨ n ‘¢®¤ª  ­  ¡° ³§¥°¨²¥ ¡° ³§¥° ¡° ³§¥°¨ n ޲·¥² ¯® ¡° ³§¥°¨ ¡° ³§¥° ¡° ³§¥°¨ n ޲·¥² ¯® ®¯¥° ¶¨®­­¨ ±¨±²¥¬¨ ®¯¥° ¶¨®­­  ±¨±²¥¬  ®¯¥° ¶¨®­­¨ ±¨±²¥¬¨ n ޲·¥² ¯® ®¡« ±²¨ ®¡« ±² ®¡« ±²¨ n ޲·¥² ¯® ®°£ ­¨§ ¶¨¨ ®°£ ­¨§ ¶¨¿ ®°£ ­¨§ ¶¨¨ n ޲·¥² ¯® ª®¤ ­  ±º±²®¿­¨¥²® ª®¤ ­  ±º±²®¿­¨¥²® ª®¤®¢¥ ­  ±º±²®¿­¨¥²® n ޲·¥² ¯® ¢°¥¬¥ ­  ®¡° ¡®²ª  ޲·¥² ¯® ° §¬¥° ­  ´ ©«  ## Used at the bottom of the report ’®§¨  ­ «¨§ ¥ ­ ¯° ¢¥­ ®² ‚°¥¬¥ §  ¨§¯º«­¥­¨¥ ®-¬ «ª® ®² 1 ## Used in the time reports ‚±¿ª  ¥¤¨­¨¶  ¯°¥¤±² ¢«¿¢  ¨«¨ · ±² ®² ­¥¿ § ¿¢ª  §  ±²° ­¨¶  § ¿¢ª¨ §  ±²° ­¨¶¨ ## Used at the bottom of each non-time report: need m, f & n genders * * ­¥ ¥ ¤ ¤¥­® ## Used on the pie charts: again need m, f & n genders * * „°³£¨ ## Used at the top of the report °®£° ¬ ²  ¥ ±² °²¨° ­  ¢ €­ «¨§¨° ­¨ § ¿¢ª¨ ®² ¤® ## Used in the General Summary “±¯¥¸­¨ § ¿¢ª¨ ‘°¥¤¥­ ¡°®© ³±¯¥¸­¨ § ¿¢ª¨ ­  ¤¥­ “±¯¥¸­¨ § ¿¢ª¨ §  ±²° ­¨¶¨ ‘°¥¤¥­ ¡°®© ³±¯¥¸­¨ § ¿¢ª¨ §  ±²° ­¨¶¨ ­  ¤¥­ ¥¤®¢¥ ­  ´ ©«  ¤ ­­¨ ¡¥§ ª®¤ ­  ±º±²®¿­¨¥²® ¥³±¯¥¸­¨ § ¿¢ª¨ °¥­ ±®·¥­¨ § ¿¢ª¨ ‡ ¿¢ª¨ ± ¨­´®°¬¨° ¹ ª®¤ ­  ±º±²®¿­¨¥²® ޲¤¥«­¨ § ¿¢¥­¨ ´ ©«®¢¥ ޲¤¥«­¨ ®¡±«³¦¥­¨ µ®±²®¢¥ ®¢°¥¤¥­¨ °¥¤®¢¥ ¢º¢ ´ ©«  ¤ ­­¨ ¥¦¥« ­¨ ¯®«¥²  ¢º¢ ´ ©«  ¤ ­­¨ °¥µ¢º°«¥­¨ ¤ ­­¨ ‘°¥¤­® ª®«¨·¥±²¢® ¯°¥µ¢º°«¥­¨ ¤ ­­¨ ­  ¤¥­ —¨±« ²  ¢ ±ª®¡¨ ±¥ ®²­ ±¿² §  7-²¥ ¤¥­  ¤® ¯®±«¥¤­¨²¥ 7 ¤­¨ °¥¬¨­¨ ªº¬  · «®²® ## Some special phrases for particular reports. [­¥°¥¸¥­¨ ·¨±«®¢¨  ¤°¥±¨] [­¥§ ¤ ¤¥­  ®¡« ±²] [­¥¯®§­ ²  ®¡« ±²] [£« ¢­  ¤¨°¥ª²®°¨¿] [­¿¬  ¤¨°¥ª²®°¨¿] [­¿¬  ° §¸¨°¥­¨¥] [¤¨°¥ª²®°¨¨] ¥¯®§­ ² Windows „°³£ Unix ®¡®²¨ ¥¨§¢¥±²­  Ž‘ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) § ¿¢ª¨ 7-¤­. § ¿¢ª¨ %§ ¿¢ª¨ %7-¤­. § ¿¢ª¨ ±²°. 7-¤­. ±²°. %±²°. %7-¤­. ±²°. ¡ ©²  ?¡ ©²  7-¤­. ¡ ©²  7-¤­. ?¡ ©²  %¡ ©²  %7-¤­. ¡ ©²  Õ ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ®ª §¢ ­¥ ­  ¯º°¢ ²  %s * * ®ª §¢ ­¥ ­  ¯º°¢¨²¥ %d %s * * ®ª §¢ ­¥ ­  %s ## "by" in the phrase "listing the top 3 files BY number of requests" ¯® ## All requests WITH AT LEAST 10 requests ± ¯®­¥ ## Different ways of doing floors § ¿¢ª  §  ¯®±«¥¤­¨²¥ 7 ¤­¨ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ § ¿¢ª  §  ±²° ­¨¶  §  ¯®±«¥¤­¨²¥ 7 ¤­¨ § ¿¢ª¨ §  ±²° ­¨¶  §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¯°¥­ ±®·¥­  § ¿¢ª  ¯°¥­ ±®·¥­¨ § ¿¢ª¨ ¯°¥­ ±®·¥­  § ¿¢ª  §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¯°¥­ ±®·¥­¨ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ­¥³±¯¥¸­  § ¿¢ª  ­¥³±¯¥¸­¨ § ¿¢ª¨ ­¥³±¯¥¸­  § ¿¢ª  §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ­¥³±¯¥¸­¨ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ®² ²° ´¨ª  % ®² ²° ´¨ª  §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ®² ¬ ª±¨¬ «­®²® ª®«¨·¥±²¢® ²° ´¨ª % ®² ¬ ª±¨¬ «­®²® ª®«¨·¥±²¢® ²° ´¨ª §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¡ ©² ²° ´¨ª ¡ ©²  ²° ´¨ª ## ?bytes represents kbytes, Mbytes etc. ?¡ ©²  ²° ´¨ª ¡ ©² ²° ´¨ª §  ¯®±ª¥¤­¨²¥ 7 ¤­¨ ¡ ©²  ²° ´¨ª §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ?¡ ©²  ²° ´¨ª §  ¯®±«¥¤­¨²¥ 7 ¤­¨ § ¿¢¥­¨ ±«¥¤ ± ¯°¥­ ±®·¥­  § ¿¢ª  ±«¥¤ ± ­¥³±¯¥¸­  § ¿¢ª  ±«¥¤ ± ¯º°¢  § ¿¢ª  ±«¥¤ ± ¯º°¢  ¯°¥­ ±®·¥­  § ¿¢ª  ±«¥¤ ± ¯º°¢  ­¥³±¯¥¸­  § ¿¢ª  ±«¥¤ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ±®°²¨° ­¨ ¯® ## Used at the top of each report ’®§¨ ®²·¥² ±º¤º°¦  ¤ ­­¨ ®² ## Used in pie charts ¥§¥­¨²¥ ±  ­ ·¥°² ­¨ ¯® ## different ways of sorting ª®«¨·¥±²¢® ²° ´¨ª ª®«¨·¥±²¢® ²° ´¨ª §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  § ¿¢ª¨²¥ % ­  § ¿¢ª¨²¥ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© § ¿¢ª¨ % ®² ¬ ª±¨¬ «­¨¿ ¡°®© § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¡°®¿ § ¿¢ª¨ ¡°®¿ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  § ¿¢ª¨²¥ §  ±²° ­¨¶¨ % ­  § ¿¢ª¨²¥ §  ±²° ­¨¶¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© § ¿¢ª¨ §  ±²° ­¨¶¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© § ¿¢ª¨ §  ±²° ­¨¶¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¡°®¿ § ¿¢ª¨ §  ±²° ­¨¶¨ ¡°®¿ § ¿¢ª¨ §  ±²° ­¨¶¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  ¯°¥­ ±®·¥­¨²¥ § ¿¢ª¨ % ­  ¯°¥­ ±®·¥­¨²¥ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© ¯°¥­ ±®·¥­¨ § ¿¢ª¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© ¯°¥­ ±®·¥­¨ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¡°®¿ ­  ¯°¥­ ±®·¥­¨²¥ § ¿¢ª¨ ¡°®¿ ­  ¯°¥­ ±®·¥­¨²¥ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  ­¥³±¯¥¸­¨²¥ § ¿¢ª¨ % ­  ­¥³±¯¥¸­¨²¥ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© ­¥³±¯¥¸­¨ § ¿¢ª¨ % ­  ¬ ª±¨¬ «­¨¿ ¡°®© ­¥³±¯¥¸­¨ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¡°®¿ ­  ­¥³±¯¥¸­¨ § ¿¢ª¨ ¡°®¿ ­  ­¥³±¯¥¸­¨²¥ § ¿¢ª¨ §  ¯®±«¥¤­¨²¥ 7 ¤­¨ ¢°¥¬¥²® ­  ¯®±«¥¤­ ²  § ¿¢ª  ¢°¥¬¥²® ­  ¯®±«¥¤­ ²  ¯°¥­ ±®·¥­  § ¿¢ª  ¢°¥¬¥²® ­  ¯®±«¥¤­ ²  ­¥³±¯¥¸­  § ¿¢ª  ¢°¥¬¥²® ­  ¯º°¢ ²  § ¿¢ª  ¢°¥¬¥²® ­  ¯º°¢ ²  ¯°¥­ ±®·¥­  § ¿¢ª  ¢°¥¬¥²® ­  ¯º°¢ ²  ­¥³±¯¥¸­  § ¿¢ª  ## 3 other ways of sorting in m, f, & n * * ±®°²¨° ­¨ ¯®  §¡³·¥­ °¥¤ * * ±®°²¨° ­¨ ¯® ·¨±«®¢ °¥¤ * * ­¥±®°²¨° ­¨ ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ±³²°¨­²  ±«¥¤®¡¥¤ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %h.%n ## "Program started at" and "Analysed requests from" %w %d %m %Y %h.%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %h.%n%x%i.%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %h.%n%x%i.%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %h.%n%x%i.%o ## In Quarter-Hour and Five-Minute Summaries %h.%n%x%i.%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %h.%n ## In non-time reports: "including all files with requests since [date]" %d %m %y ¢ %h.%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/bgmdesc.txt000066400000000000000000000107471406366436600165500ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Bulgarian translation 25.I.2001 L.Georgiev # MIK-16 (DOS / Linux) version # # Yearly Report ’®§¨ ®²·¥² ®¯¨±  ª²¨¢­®±²²  §  ¢±¿ª  £®¤¨­ . # Quarterly Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¿ª® ²°¨¬¥±¥·¨¥. # Monthly Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¥ª¨ ¬¥±¥¶. # Weekly Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¿ª  ±¥¤¬¨¶ . # Daily Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¥ª¨ ¤¥­. # Hourly Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¥ª¨ · ±. # Quarter-Hour Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¥ª¨ ·¥²¢º°²· ±®¢ ¯¥°¨®¤. # Five-Minute Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  §  ¢±¥ª¨ ¯¥²¬¨­³²¥­ ¯¥°¨®¤. # Daily Summary ’®§¨ ®²·¥² ®¯¨±¢  ®¡¹ ²   ª²¨¢­®±² §  ¢±¥ª¨ ¤¥­ ®² ±¥¤¬¨¶ ² , ±³¬¨° ­  §  ¢±¨·ª¨ ±¥¤¬¨¶¨ ­  ®²·¥² . # Hourly Summary ’®§¨ ®²·¥² ®¯¨±¢  ®¡¹ ²   ª²¨¢­®±² §  ¢±¥ª¨ · ± ­  ¤¥­¿, ±³¬¨° ­  §  ¢±¨·ª¨ ¤­¨ ­  ®²·¥² . # Hour of the Week Summary ’®§¨ ®²·¥² ®¯¨±¢  ®¡¹ ²   ª²¨¢­®±² §  ¢±¥ª¨ · ± ®² ±¥¤¬¨¶ ² , ±³¬¨° ­  §  ¢±¨·ª¨ ±¥¤¬¨¶¨ ­  ®²·¥² . # Quarter-Hour Summary ’®§¨ ®²·¥² ®¯¨±¢  ®¡¹ ²   ª²¨¢­®±² §  ¢±¥ª¨ ·¥²¢º°²· ±®¢ ¯¥°¨®¤ ®² ¤¥­¿, ±³¬¨° ­  §  ¢±¨·ª¨ ¤­¨ ­  ®²·¥² . # Five-Minute Summary ’®§¨ ®²·¥² ®¯¨±¢  ®¡¹ ²   ª²¨¢­®±² §  ¢±¥ª¨ ¯¥²¬¨­³²¥­ ¯¥°¨®¤ ®² ¤¥­¿, ±³¬¨° ­  §  ¢±¨·ª¨ ¤­¨ ­  ®²·¥² . # General Summary ’®§¨ ®²·¥² ±º¤º°¦  ¶¿«®±²­  ±² ²¨±²¨ª . # Request Report ’®§¨ ®²·¥² ®¯¨±¢  ´ ©«®¢¥²¥ ­  ± ©² . # Redirection Report ’®§¨ ®²·¥² ®¯¨±¢  ´ ©«®¢¥²¥, ª®¨²® ±  ¯°¥¤¨§¢¨ª «¨ ¯°¥­ ±®·¢ ­¥ ­  § ¿¢ª¨²¥ ªº¬ ¤°³£ ´ ©«. (Ž¡¨ª­®¢¥­® ¤¨°¥ª²®°¨¨ ± «¨¯±¢ ¹  ¯®±«¥¤­  ­ ª«®­¥­  ·¥°²  ¨«¨ CGI-±ª°¨¯²®¢¥, ¯°¥¤¨§¢¨ª «¨ ¯°¥­ ±®·¢ ­¥.) # Failure Report ’®§¨ ®²·¥² ®¯¨±¢  ´ ©«®¢¥²¥, ¯°¥¤¨§¢¨ª «¨ £°¥¸ª¨, ­ ¯°¨¬¥° ´ ©«®¢¥, ª®¨²® ­¥ ±  ­ ¬¥°¥­¨. # File Type Report ’®§¨ ®²·¥² ®¯¨±¢  ° §¸¨°¥­¨¿²  ­  § ¿¢¥­¨²¥ ´ ©«®¢¥. # Directory Report ’®§¨ ®²·¥² ®¯¨±¢  ¤¨°¥ª²®°¨¨²¥, ®² ª®¨²® ±  ¡¨«¨ § ¿¢¥­¨ ´ ©«®¢¥. (—¨±« ²  §  ¢±¿ª  ¤¨°¥ª²®°¨¿ ¢ª«¾·¢ ² ¢±¨·ª¨ ­¥©­¨ ¯®¤¤¨°¥ª²®°¨¨.) # Host Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¬¯¾²°¨²¥, ª®¨²® ±  § ¿¢¨«¨ ´ ©«®¢¥. # Host Redirection Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¬¯¾²°¨²¥, ª®¨²® ±  ¡¨«¨ ¯°¥­ ±®·¥­¨ ªº¬ ¤°³£ ´ ©«. # Host Failure Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¬¯¾²°¨²¥, ª®¨²® ±  ±¥ ­ ²ºª­ «¨ ­  ±£°¥¸¥­¨ § ¿¢ª¨. # Domain Report ’®§¨ ®²·¥² ®¯¨±¢  ±²° ­¨²¥, ¢ ª®¨²® ±  ¡¨«¨ ª®¬¯¾²°¨²¥, § ¿¢¨«¨ ´ ©«®¢¥. # Referrer Report ’®§¨ ®²·¥² ®¯¨±¢  ®²¯° ¹ ·¨²¥ (®²ªº¤¥²® µ®° ²  ±  ±«¥¤¢ «¨ ¢°º§ª¨²¥ ¨«¨ ±²° ­¨¶¨, ª®¨²® ±  ¢ª«¾·¢ «¨ ¨§®¡° ¦¥­¨¿ ®² ²®§¨ ± ©²). # Referring Site Report ’®§¨ ®²·¥² ®¯¨±¢  ®² ª®¨ ±º°¢¥°¨ µ®° ²  ±  ±«¥¤¢ «¨ ¢°º§ª¨. # Redirected Referrer Report ’®§¨ ®²·¥² ®¯¨±¢  ®²¯° ¹ ·¨²¥, ª®¨²® ±  ¯°¥¤¨§¢¨ª «¨ ¯°¥­ ±®·¥­¨ § ¿¢ª¨. # Failed Referrer Report ’®§¨ ®²·¥² ®¯¨±¢  ®²¯° ¹ ·¨²¥, ±º¤º°¦ ¹¨ ­¥¢ «¨¤­¨ ¢°º§ª¨ ªº¬ ± ©² . # Browser Report ’®§¨ ®²·¥² ®¯¨±¢  ¡° ³§¥°¨²¥, ¨§¯®«§¢ ­¨ ®² ¯®±¥²¨²¥«¨²¥. # Virtual Host Report ’®§¨ ®²·¥² ®¯¨±¢   ª²¨¢­®±²²  ­  ¢±¿ª  ®² ¢¨°²³ «­¨²¥ ®¡« ±²¨ ­  ± ©² . # Virtual Host Redirection Report ’®§¨ ®²·¥² ®¯¨±¢  ¯°¥­ ±®·¥­¨²¥ § ¿¢ª¨ ªº¬ ¢±¿ª  ®² ¢¨°²³ «­¨²¥ ®¡« ±²¨. # Virtual Host Failure Report ’®§¨ ®²·¥² ®¯¨±¢  ±£°¥¸­¨²¥ § ¿¢ª¨ ªº¬ ¢±¿ª  ®² ¢¨°²³ «­¨²¥ ®¡« ±²¨. # User Report ’®§¨ ®²·¥² ®¯¨±¢  ¯®²°¥¡¨²¥«¨²¥, ª®¨²® ±  § ¿¢¨«¨ ´ ©«®¢¥,  ª® ± ¬®«¨·­®±²²  ¨¬ ¥ ¡¨«  ³±² ­®¢¥­  ¨«¨ ¬®£ ² ¤  ¡º¤ ² ¨¤¥­²¨´¨¶¨° ­¨ ®² "ªº±¬¥²·¥² ". # User Redirection Report ’®§¨ ®²·¥² ®¯¨±¢  ¯®²°¥¡¨²¥«¨²¥, ª®¨²® ±  ¡¨«¨ ¯°¥­ ±®·¥­¨ ªº¬ ¤°³£ ´ ©«. # User Failure Report ’®§¨ ®²·¥² ®¯¨±¢  ¯®²°¥¡¨²¥«¨²¥, ª®¨²® ±  ±¥ ­ ²ºª­ «¨ ­  ±£°¥¸¥­¨ § ¿¢ª¨. # Organisation Report ’®§¨ ®²·¥² ®¯¨±¢  the ®°£ ­¨§ ¶¨¨²¥, ¢ ª®¨²® ±  ¡¨«¨ ª®¬¯¾²°¨²¥, § ¿¢¨«¨ ´ ©«®¢¥. # Search Query Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¨ ´° §¨ ±  ¨§¯®«§¢ «¨ µ®° ²  ¢ ²º°±¥¹¨²¥ ¬ ¸¨­¨, §  ¤  ­ ¬¥°¿² ± ©² . # Search Word Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¨ ¤³¬¨ ±  ¨§¯®«§¢ «¨ µ®° ²  ¢ ²º°±¥¹¨²¥ ¬ ¸¨­¨, §  ¤  ­ ¬¥°¿² ± ©² . # Internal Search Query Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¨ ´° §¨ ±  ¨§¯®«§¢ «¨ µ®° ²  ¢ ±ª°¨¯²®¢¥ ¢ ° ¬ª¨²¥ ­  ± ©² . # Internal Search Word Report ’®§¨ ®²·¥² ®¯¨±¢  ª®¨ ¤³¬¨ ±  ¨§¯®«§¢ «¨ µ®° ²  ¢ ±ª°¨¯²®¢¥ ¢ ° ¬ª¨²¥ ­  ± ©² . # Browser Summary ’®§¨ ®²·¥² ®¯¨±¢  ²¨¯®¢¥²¥ ¡° ³§¥°¨ ­  ¯®±¥²¨²¥«¨²¥. # Operating System Report ’®§¨ ®²·¥² ®¯¨±¢  ®¯¥° ¶¨®­­¨²¥ ±¨±²¥¬¨, ¨§¯®«§¢ ­¨ ®² ¯®±¥²¨²¥«¨²¥. # File Size Report ’®§¨ ®²·¥² ®¯¨±¢  ° §¬¥°¨²¥ ­  ´ ©«®¢¥²¥. # Status Code Report ’®§¨ ®²·¥² ®¯¨±¢  HTTP-ª®¤  ­  ±º±²®¿­¨¥²® ­  ¢±¨·ª¨ § ¿¢ª¨. # Processing Time Report ’®§¨ ®²·¥² ®¯¨±¢  ¢°¥¬¥­ ² , ª®¨²® ±  ¡¨«¨ ­¥®¡µ®¤¨¬¨ §  ®¡° ¡®²ª  ­  ³±¯¥¸­¨²¥ § ¿¢ª¨. analog-ce-6.0.17/lang/bgmdom.tab000066400000000000000000000132361406366436600163340ustar00rootroot00000000000000# Bulgarian domain name translation 3.VI.2000 L.Georgiev # MIK-16 (DOS / Linux) version aero 2 ‚º§¤³¸¥­ ²° ­±¯®°² arpa 1 €°¯ ­¥² (±² ° ±²¨«) biz 2 Ž¡« ±²¨ ­  ¤¥©­®±² com 2 Š®¬¥°±¨ «­  ®¡« ±² coop 2 Š®®¯¥° ²¨¢¨ edu 2 Ž¡° §®¢ ²¥«­  ®¡« ±² ­  ‘€™ gov 2 ° ¢¨²¥«±²¢¥­  ®¡« ±² ­  ‘€™ info 2 ˆ­´®°¬ ¶¨®­­¨ int 2 Œ¥¦¤³­ °®¤­¨ ¤®£®¢®°­¨ ®°£ ­¨§ ¶¨¨ mil 2 ‚®¥­­  ®¡« ±² ­  ‘€™ museum 2 Œ³§¥¨ name 3 ˆ­¤¨¢¨¤¨ net 2 Œ°¥¦®¢  ®¡« ±² org 2 Ž¡« ±² ­  ­¥ª®¬¥°±¨ «­¨²¥ ®°£ ­¨§ ¶¨¨ pro 3 °®´¥±¨®­ «¨±²¨ ac 1 ޱ²°®¢ ‚º§­¥±¥­¨¥ ad 2 €­¤®°  ae 3 Ž¡¥¤¨­¥­¨  ° ¡±ª¨ ¥¬¨°±²¢  af 1 €´£ ­¨±² ­ ag 2 ޱ²°®¢ €­²¨£³  ¨ ®±²°®¢  °¡³¤  ai 1 ޱ²°®¢ €­£¨«  al 1 €«¡ ­¨¿ am 2 €°¬¥­¨¿ an 1 €­²¨«±ª¨ ®±²°®¢¨ (•®« ­¤¨¿) ao 1 €­£®«  aq 1 €­² °ª²¨¤  ar 3 €°¦¥­²¨­  as 1 ޱ²°®¢¨ ‘ ¬®  (‘€™) at 3 €¢±²°¨¿ au 3 €¢±²° «¨¿ aw 1 ޱ²°®¢ €°³¡  az 1 €§º°¡ ©¤¦ ­ ba 3 ®±­  ¨ •¥°¶¥£®¢¨­  bb 2 ޱ²°®¢  °¡ ¤®± bd 1  ­£« ¤¥¸ be 2 ¥«£¨¿ bf 1 ³°ª¨­  ” ±® bg 2 º«£ °¨¿ bh 1  µ°¥©­ bi 1 ³°³­¤¨ bj 1 ¥­¨­ bm 1 ¥°¬³¤±ª¨ ®±²°®¢¨ bn 1 °³­¥© bo 3 ®«¨¢¨¿ br 3 ° §¨«¨¿ bs 1  µ ¬±ª¨ ®±²°®¢¨ bt 1 ³² ­ bv 1 ޱ²°®¢ ³¢¥ bw 1 ®²±²³ ­  by 1 ¥« °³± bz 1 ¥«¨§ ca 3 Š ­ ¤  cc 1 Š®ª®±®¢¨ ®±²°®¢¨ cd 1 „¥¬®ª° ²¨·­  °¥¯³¡«¨ª  Š®­£® (‡ ¨°) cf 1 –¥­²° «­o ´°¨ª ­±ª  °¥¯³¡«¨ª  cg 1 Š®­£® (° § ¢¨«) ch 2 ˜¢¥©¶ °¨¿ ci 1 °¿£ ­  ‘«®­®¢ ²  ª®±² ck 1 ޱ²°®¢¨ ­  гª cl 2 —¨«¨ cm 1 Š ¬¥°³­ cn 3 Ѝ² © co 3 Š®«³¬¡¨¿ cr 3 Š®±²  ¨ª  cu 1 г¡  cv 1 ޱ²°®¢¨ Š ¯® ‚¥°¤¥ (‡¥«¥­¨ ­®±) cx 2 ޱ²°®¢ ®¦¤¥±²¢® cy 3 Ѝ¯º° cz 2 —¥µ¨¿ de 2 ƒ¥°¬ ­¨¿ dj 1 „¦¨¡³²¨ dk 2 „ ­¨¿ dm 2 ޱ²°®¢ „®¬¨­¨ª  do 2 „®¬¨­¨ª ­±ª  °¥¯³¡«¨ª  dz 1 €«¦¨° ec 3 …ª¢ ¤®° ee 2 …±²®­¨¿ eg 3 …£¨¯¥² eh 1 ‡ ¯ ¤­  ‘ µ °  er 1 …°¨²°¥¿ es 2 ˆ±¯ ­¨¿ et 1 …²¨®¯¨¿ fi 2 ”¨­« ­¤¨¿ fj 3 ”¨¤¦¨ fk 1 ”®«ª«¥­¤±ª¨ (Œ «¢¨­±ª¨) ®±²°®¢¨ fm 1 Œ¨ª°®­¥§¨¿ fo 1 ” °¥°±ª¨ ®±²°®¢¨ fr 2 ”° ­¶¨¿ fx 1 ”° ­¶¨¿ (…¢°®¯¥©±ª  ²¥°¨²®°¨¿) ga 1 ƒ ¡®­ gb 1 ‚¥«¨ª®¡°¨² ­¨¿ gd 1 ƒ°¥­ ¤  ge 1 ƒ°³§¨¿ gf 1 ”°¥­±ª  ƒ¢¨ ­  gg 1 ޱ²°®¢ ƒ¥°­±¨ gh 3 ƒ ­  gi 1 ƒ¨¡° «² ° gl 1 ޱ²°®¢ ƒ°¥­« ­¤¨¿ gm 1 ƒ ¬¡¨¿ gn 1 ƒ¢¨­¥¿ gp 1 ƒ¢ ¤¥«³¯  gq 1 …ª¢ ²®°¨ «­  ƒ¢¨­¥¿ gr 2 ƒº°¶¨¿ gs 1 ޱ²°®¢ ž¦­  „¦®°¤¦¨¿ ¨ ž¦­¨ ‘ ­¤¢¨·¥¢¨ ®±²°®¢¨ gt 3 ƒ¢ ²¥¬ «  gu 1 ƒ³ ¬ gw 1 ƒ¢¨­¥¿ ¨± ³ gy 1 ƒ © ­  hk 3 •®­£ Š®­£ hm 1 ޱ²°®¢ •º°¤ ¨ ®±²°®¢¨ ­  Œ ª¤®­ «¤ hn 2 •®­¤³° ± hr 2 •º°¢ ²±ª® ht 1 • ¨²¨ hu 2 “­£ °¨¿ id 3 ˆ­¤®­¥§¨¿ ie 2 ˆ°« ­¤¨¿ il 3 ˆ§° ¥« im 1 ޱ²°®¢ Œ ­ in 3 ˆ­¤¨¿ io 1 °¨² ­±ª  ²¥°¨²®°¨¿ ¢ ˆ­¤¨©±ª¨¿ ®ª¥ ­ iq 1 ˆ° ª ir 1 ˆ° ­ is 2 ˆ±« ­¤¨¿ it 2 ˆ² «¨¿ je 1 ޱ²°®¢ „¦º°±¨ jm 3 Ÿ¬ ©ª  jo 3 ‰®°¤ ­¨¿ jp 3 Ÿ¯®­¨¿ ke 3 Š¥­¨¿ kg 1 Ѝ°£¨§±² ­ kh 1 Š ¬¡®¤¦  ki 1 Ѝ°¨¡ ²¨ (®±²°®¢¨ ƒ¨«¡¥°² ¨ ¤°.) km 1 Š®¬®°±ª¨ ®±²°®¢¨ kn 1 ޱ²°®¢¨ ‘¢. а¨±²®´º° ¨ ¥¢¨± kp 1 ‘¥¢¥°­  Š®°¥¿ kr 3 ž¦­  Š®°¥¿ kw 3 г¢¥©² ky 1 ޱ²°®¢¨ Š ©¬ ­ kz 1 Š § µ±² ­ la 1 ‹ ®± lb 3 ‹¨¢ ­ lc 1 ޱ²°®¢¨ ‘¢. ‹³·¨¿ li 2 ‹¨µ²¥­¹ ©­ lk 1 ˜°¨ ‹ ­ª  lr 1 ‹¨¡¥°¨¿ ls 1 ‹¥±®²® lt 2 ‹¨²¢  lu 2 ‹¾ª±¥¬¡³°£ lv 2 ‹ ²¢¨¿ ly 1 ‹¨¡¨¿ ma 1 Œ °®ª® mc 2 Œ®­ ª® md 1 Œ®«¤®¢  mg 1 Œ ¤ £ ±ª ° mh 1 Œ °¸ «±ª¨ ®±²°®¢¨ mk 3 Œ ª¥¤®­¨¿ ml 1 Œ «¨ mm 1 Œ¿­¬ ° (¨°¬ ) mn 1 Œ®­£®«¨¿ mo 1 Œ ª ® mp 1 ‘¥¢¥°­¨ Œ °¨ ­±ª¨ ®±²°®¢¨ mq 1 ޱ²°®¢ Œ °²¨­¨ª  mr 1 Œ ¢°¨² ­¨¿ ms 1 ޱ²°®¢ Œ®­±¥° ² mt 3 ޱ²°®¢ Œ «²  mu 1 ޱ²°®¢ Œ ¢°¨¶¨© mv 1 Œ «¤¨¢±ª¨ ®±²°®¢¨ mw 1 Œ « ¢¨ mx 3 Œ¥ª±¨ª® my 3 Œ « ©§¨¿ mz 1 Œ®§ ¬¡¨ª na 1  ¬¨¡¨¿ nc 1 ޱ²°®¢ ®¢  Š «¥¤®­¨¿ ne 1 ¨£¥° nf 1 ޱ²°®¢ ®°´®«ª ng 1 ¨£¥°¨¿ ni 3 ¨ª ° £³  nl 2 •®« ­¤¨¿ no 2 ®°¢¥£¨¿ np 1 ¥¯ « nr 1 ޱ²°®¢  ³°³ nu 1 ޱ²°®¢ ¨³¥ (‘ ¢¨¤¦) nz 3 ®¢  ‡¥« ­¤¨¿ om 1 ެ ­ pa 3  ­ ¬  pe 3 ¥°³ pf 1 ”°¥­±ª  ®«¨­¥§¨¿ pg 3  ¯³  ®¢  ƒ¢¨­¥¿ ph 3 ”¨«¨¯¨­¨²¥ pk 3  ª¨±² ­ pl 3 ®«¸  pm 1 ޱ²°®¢ ‘¥­ ¨¥° ¨ ®±²°®¢¨ Œ¨ª¥«®­ pn 1 ޱ²°®¢ ¨²ª¥°­ pr 1 ޱ²°®¢ ³¥°²® ¨ª® ps 1 Žª³¯¨° ­¨ ¯ «¥±²¨­±ª¨ ²¥°¨²®°¨¨ pt 2 ®°²³£ «¨¿ pw 1 ޱ²°®¢¨  « ³ py 3  ° £¢ © qa 1 Š ² ° re 1 ޱ²°®¢ ¥¾­¨®­ ro 2 ³¬º­¨¿ ru 2 ³±¨¿ rw 1 ³ ­¤  sa 3 ‘ ³¤¨²±ª  €° ¡¨¿ sb 1 ‘®«®¬®­®¢¨ ®±²°®¢¨ sc 1 ‘¥©¸¥«±ª¨ ®±²°®¢¨ sd 1 ‘³¤ ­ se 2 ˜¢¥¶¨¿ sg 3 ‘¨­£ ¯³° sh 1 ޱ²°®¢ ‘¢. …«¥­  si 2 ‘«®¢¥­¨¿ sj 1 ޱ²°®¢ ‘¢ «¡ °¤ ¨ ®±²°®¢ Ÿ­ Œ ©¥­ sk 2 ‘«®¢ ª¨¿ sl 1 ‘¨¥°  ‹¥®­¥ sm 1 ‘ ­ Œ °¨­® sn 1 ‘¥­¥£ « so 1 ‘®¬ «¨¿ sr 1 ‘³°¨­ ¬ st 1 ޱ²°®¢¨ ‘ ­ ’®¬¥ ¨ ®±²°®¢ °¨­±¨¯¨ su 2 ‘‘‘ sv 3 ‘ «¢ ¤®° sy 1 ‘¨°¨¿ sz 1 ‘¢ §¨«¥­¤ tc 1 ޱ²°®¢¨ ’º°ª± ¨ ®±²°®¢¨ Š ©ª®± td 1 — ¤ tf 1 ”°¥­±ª¨ ¾¦­¨ ²¥°¨²®°¨¨ tg 1 ’®£® th 3 ’ ©« ­¤ tj 1 ’ ¤¦¨ª¨±² ­ tk 1 ޱ²°®¢¨ ’®ª¥« ³ tl 1 ˆ§²®·¥­ ’¨¬®° tm 1 ’³°ª¬¥­¨±² ­ tn 1 ’³­¨± to 1 ޱ²°®¢¨ ’®­£  tp 1 ˆ§²®·¥­ ’¨¬®° tr 3 ’³°¶¨¿ tt 3 ’°¨­¨¤ ¤ ¨ ’®¡ £® tv 1 ޱ²°®¢¨ ’³¢ «³ (…«¨±) tw 3 ޱ²°®¢ ’ ©¢ ­ tz 1 ’ ­§ ­¨¿ ua 3 “ª° ©­  ug 3 “£ ­¤  uk 3 Ž¡¥¤¨­¥­® ª° «±²¢® ‚¥«¨ª®¡°¨² ­¨¿ ¨ ‘¥¢¥°­  ˆ°« ­¤¨¿ um 1 ޲¤ «¥·¥­¨ ¯®-¬ «ª¨ ®±²°®¢¨ ­  ‘€™ us 4 ‘€™ uy 3 “°³£¢ © uz 1 “§¡¥ª¨±² ­ va 1 ‚ ²¨ª ­º² vc 1 ޱ²°®¢ ‘¢. ‚¨­±¥­² ¨ ®±²°®¢¨ ƒ°¥­ ¤¨­¨ ve 3 ‚¥­¥¶³¥«  vg 1 ‚¨°£¨­±ª¨ ®±²°®¢¨ (‚¥«¨ª®¡°¨² ­¨¿) vi 1 ‚¨°£¨­±ª¨ ®±²°®¢¨ (‘€™) vn 1 ‚¨¥²­ ¬ vu 1 ޱ²°®¢¨ ‚ ­³ ²³ (®¢¨ •¥¡°¨¤¨) wf 1 ޱ²°®¢¨ “®«¨± ¨ ”³²³­  ws 1 ޱ²°®¢¨ ‘ ¬®  ye 1 ‰¥¬¥­ yt 1 ޱ²°®¢ Œ ©®²  yu 3 ž£®±« ¢¨¿ za 3 ž¦­® ´°¨ª ­±ª  °¥¯³¡«¨ª  zm 1 ‡ ¬¡¨¿ zr 1 ‡ ¨° („¥¬®ª° ²¨·­  °¥¯³¡«¨ª  Š®­£®) zw 3 ‡¨¬¡ ¡¢¥ analog-ce-6.0.17/lang/br.lng000066400000000000000000000335341406366436600155070ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## ## Brazilian Portuguese version by Ivan F. Martinez, June 1998 - June 2001 ## based on Portuguese version by Jaime Carvalho e Silva, 11 June 1998 ## ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Dom Seg Ter Qua Qui Sex Sab Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez ## Next some standard common words. ## Abbreviation for "week beginning" semana de ano ## Quarter of a year trimestre mês dia dias h minuto minutos segundo segundos byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes requisição requisições data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data hora hora prim. data prim. horario ult. data ult. horario arquivo arquivos máquina máquinas servidor virtual servidores virtuais diretório diretórios domínio domínios organização organizações extensão extensões URL URLs Browser Browsers Sistema Operacional Sistemas Operacionais ## (= operating system, operating systems) tamanho termo pesquisado termos pesquisados site sites usuario usuarios cod. estado cod. estado Estatísticas do Servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sumário Geral ## The time reports, plus "busiest" strings (at the bottom of each report) Relatório Anual Ano mais movimentado: Relatório Trimestral Trimestre mais movimentado: Relatório Mensal Mês mais movimentado: Relatório Semanal Semana mais movimentada: semana começando Resumo Diário Relatório Diário Dia mais movimentado: Relatório Horário Resumo Horário Hora do Resumo Semanal Hora mais movimentada: Relatório de 15min Resumo de 15min 15min mais movimentado: Relatório cada cinco minutos Resumo de 5 minutos Cinco minutos mais movimentados: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Relatório de Máquinas máquina máquinas f Relatório de Maquinas Redirecionadas maquina maquinas f Relatório de Maquinas com Falha maquina maquinas f Relatório de Diretórios diretório diretórios m Relatório de Tipos de Arquivo extensão extensões f Relatório de Requisições arquivo arquivos m Relatório de Redirecionamento arquivo arquivos m Relatório de Falhas arquivo arquivos m Relatório de referência URL de referência URLs de referência m Relatório do site de referência site de referência sites de referência m Relatório de referência redirecionada URL de referência URLs de referência m Relatório de referência falhada URL de referência URLs de referência m Relatório de pesquisas pesquisa pesquisas f Relatório de pesquisa de palavras palavra pesquisada palavras pesquisadas f Relatório de pesquisa interna pesquisa pesquisas f Relatório de pesquisa interna de palavras palavra pesquisada palavras pesquisadas f Relatório de Servidor Virtual servidor virtual servidores virtuais m Relatório de Redirecionamento de Servidor Virtual servidor virtual servidores virtuais m Relatório de Falha de Servidor Virtual servidor virtual servidores virtuais m Relatório de Usuarios usuario usuarios m Relatório de Redirecionamento de Usuarios usuario usuarios m Relatório de Erros de Usuarios usuario usuarios m Resumo de Browsers browser browsers m Relatório de Browsers browser browsers m Relatório de Sistemas Operacionais Sistema Operacional Sistemas Operacionais m Relatório de Domínios domínio domínios m Relatório de organizações organização organizações f Relatório de Códigos de Estado código de estado códigos de estado m Relatório de tempo de processamento Relatório de Tamanho de Arquivo ## Used at the bottom of the report Estatísticas geradas por Tempo de execução Menos de 1 ## Used in the time reports Cada unidade representa ou fração requisição de uma página requisições de páginas ## Used at the bottom of each non-time report: need m, f & n genders não listados não listadas * ## Used on the pie charts: again need m, f & n genders * * Outros ## Used at the top of the report Começo do programa em Análise de requisições desde até ## Used in the General Summary Requisições atendidas Número médio de requisições atendidas por dia Pedidos de páginas atendidas Número médio de requisições de páginas atendidas por dia Linhas sem código de estado no arquivo de log Requisições que falharam Requisições redirecionadas Requisições com código de estado informativo Arquivos diferentes solicitados Máquinas diferentes atendidas Linhas inválidas no arquivo de log Entradas não desejadas no arquivo de log Tráfego total Tráfego médio transferido por dia Os valores entre parêntesis referem-se aos 7 dias até últimos 7 dias Ir a Início ## Some special phrases for particular reports. [endereço IP não resolvido] [domínio não indicado] [domínio desconhecido] [diretório raiz] [sem diretório] [sem extensão] [diretórios] Windows desconhecido Outro Unix Robos Sistema Operacional desconhecido ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) N.req reqs 7 dias % req %reqs 7 dias Pags. pags 7 dias %pags. %pags 7 dias bytes ?bytes bytes 7 dias ?bytes 7 dias %bytes %bytes 7 dias no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Mostrando o primeiro %s Mostrando a primeira %s * Mostrando os %d primeiros %s Mostrando as %d primeiras %s * Mostrando os %s Mostrando as %s * ## "by" in the phrase "listing the top 3 files BY number of requests" por ## All requests WITH AT LEAST 10 requests com pelo menos ## Different ways of doing floors requisicao nos ultimos 7 dias requisicoes nos ultimos 7 dias requisicao de pagina nos ultimos 7 dias requisicoes de paginas nos ultimos 7 dias requisição redirecionada requisições redirecionadas requisição redirecionada nos ultimos 7 dias requisições redirecionadas nos ultimos 7 dias requisição falhou requisições falararam requisição falhou nos ultimos 7 dias requisições falararam nos ultimos 7 dias % do tráfego % do tráfego nos ultimos 7 dias % da quantidade máxima de tráfego % da quantidade máxima de tráfego nos ultimos 7 dias byte de tráfego bytes de tráfego ## ?bytes represents kbytes, Mbytes etc. ?bytes de tráfego byte de tráfego nos ultimos 7 dias bytes de tráfego nos ultimos 7 dias ?bytes de tráfego nos ultimos 7 dias requisição desde com uma requisição redirecionada desde com uma requisição falhada desde com primeira requisição desde com primeira requisição redirecionada desde com primeira requisição falhada desde ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenados por ordenadas por * ## Used at the top of each report Este relatorio contem dados de ## Used in pie charts As partes sao definidas por ## different ways of sorting quantidade de tráfego quantidade de tráfego nos ultimos 7 dias % das requisições % das requisições nos ultimos 7 dias % da quantidade máxima de requisições % da quantidade máxima de requisições nos ultimos 7 dias número de requisições número de requisições nos ultimos 7 dias % das requisições de páginas % das requisições de páginas nos ultimos 7 dias % do número máximo de requisições de páginas % do número máximo de requisições de páginas nos ultimos 7 dias número de requisições de páginas número de requisições de páginas nos ultimos 7 dias % das requisições redirecionadas % das requisições redirecionadas nos ultimos 7 dias % do número máximo de requisições redirecionadas % do número máximo de requisições redirecionadas nos ultimos 7 dias número de requisições redirecionadas número de requisições redirecionadas nos ultimos 7 dias % dos requisições falhadas % dos requisições falhadas nos ultimos 7 dias % do número máximo de requisições falhadas % do número máximo de requisições falhadas nos ultimos 7 dias número de requisições que falharam número de requisições que falharam nos ultimos 7 dias horario da última requisição horario da última requisição redirecionada horario da última requisição que falhou horario da primeira requisição horario da primeira requisição redirecionada horario da primeira requisição que falhou ## 3 other ways of sorting in m, f, & n por ordem alfabética por ordem alfabética por ordem alfabética por ordem numérica por ordem numérica por ordem numérica desordenados desordenadas * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %D/%m/%Y ## In Daily Summary %w ## In Hourly Report %D/%m/%Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %D/%m/%Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %D/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%Y ## The date & time (D) column in non-time reports %d/%m/%Y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%Y às %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/bra.lng000066400000000000000000000335311406366436600156450ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## ## Brazilian Portuguese version by Ivan F. Martinez, June 1998 - June 2001 ## based on Portuguese version by Jaime Carvalho e Silva, 11 June 1998 ## ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Dom Seg Ter Qua Qui Sex Sab Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez ## Next some standard common words. ## Abbreviation for "week beginning" semana de ano ## Quarter of a year trimestre mes dia dias h minuto minutos segundo segundos byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes requisicao requisicoes data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data hora hora prim. data prim. horario ult. data ult. horario arquivo arquivos maquina maquinas servidor virtual servidores virtuais diretorio diretorios dominio dominios organizacao organizacoes extensao extensoes URL URLs Browser Browsers Sistema Operacional Sistemas Operacionais ## (= operating system, operating systems) tamanho termo pesquisado termos pesquisados site sites usuario usuarios cod. estado cod. estado Estatisticas do Servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sumario Geral ## The time reports, plus "busiest" strings (at the bottom of each report) Relatório Anual Ano mais movimentado: Relatório Trimestral Trimestre mais movimentado: Relatorio Mensal Mes mais movimentado: Relatorio Semanal Semana mais movimentada: semana comecando Resumo Diario Relatorio Diario Dia mais movimentado: Relatorio Horario Resumo Horario Hora do Resumo Semanal Hora mais movimentada: Relatorio de 15min Resumo de 15min 15min mais movimentado: Relatorio cada cinco minutos Resumo de 5 minutos Cinco minutos mais movimentados: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Relatorio de Maquinas Maquina Maquinas f Relatorio de Maquinas Redirecionadas maquina maquinas f Relatorio de Maquinas com Falha maquina maquinas f Relatorio de Diretorios diretorio diretorios m Relatorio de Tipos de Arquivo extensao extensoes f Relatorio de Requisicoes arquivo arquivos m Relatorio de Redirecionamento arquivo arquivos m Relatorio de Falhas arquivo arquivos m Relatorio de referencia URL de referencia URLs de referencia m Relatorio do site de referencia site de referencia sites de referencia m Relatorio de referencia redirecionada URL de referencia URLs de referencia m Relatorio de referencia falhada URL de referencia URLs de referencia m Relatorio de pesquisas pesquisa pesquisas f Relatorio de pesquisa de palavras palavra pesquisada palavras pesquisadas f Relatorio de pesquisa interna pesquisa pesquisas f Relatorio de pesquisa interna de palavras palavra pesquisada palavras pesquisadas f Relatorio de Servidor Virtual servidor virtual servidores virtuais m Relatorio de Redirecionamento de Servidor Virtual servidor virtual servidores virtuais m Relatorio de Falha de Servidor Virtual servidor virtual servidores virtuais m Relatorio de Usuarios usuario usuarios m Relatorio de Redirecionamento de Usuarios usuario usuarios m Relatorio de Erros de Usuarios usuario usuarios m Resumo de Browsers browser browsers m Relatorio de Browsers browser browsers m Relatorio de Sistemas Operacionais Sistema Operacional Sistemas Operacionais m Relatorio de Dominios dominio dominios m Relatorio de organizacoes organizacao organizacoes f Relatorio de Codigos de Estado codigo de estado codigos de estado m Relatorio de tempo de processamento Relatorio de Tamanho de Arquivo ## Used at the bottom of the report Estatisticas geradas por Tempo de execucao Menos de 1 ## Used in the time reports Cada unidade representa ou fracao requisicao de uma pagina requisicoes de paginas ## Used at the bottom of each non-time report: need m, f & n genders nao listados nao listadas * ## Used on the pie charts: again need m, f & n genders * * Outros ## Used at the top of the report Comeco do programa em Analise de requisicoes desde ate ## Used in the General Summary Requisicoes atendidas Numero medio de requisicoes atendidas por dia Pedidos de paginas atendidas Numero medio de requisicoes de paginas atendidas por dia Linhas sem codigo de estado no arquivo de log Requisicoes que falharam Requisicoes redirecionadas Requisicoes com codigo de estado informativo Arquivos diferentes solicitados Maquinas diferentes atendidas Linhas invalidas no arquivo de log Entradas nao desejadas no arquivo de log Trafego total Trafego medio transferido por dia Os valores entre parentesis referem-se aos 7 dias ate ultimos 7 dias Ir a Inicio ## Some special phrases for particular reports. [endereco IP nao resolvido] [dominio nao indicado] [dominio desconhecido] [diretorio raiz] [sem diretorio] [sem extensao] [diretorios] Windows desconhecido Outro Unix Robos Sistema Operacional desconhecido ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) N.req reqs 7 dias % req %reqs 7 dias Pags. pags 7 dias %pags. %pags 7 dias bytes ?bytes bytes 7 dias ?bytes 7 dias %bytes %bytes 7 dias no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Mostrando o primeiro %s Mostrando a primeira %s * Mostrando os %d primeiros %s Mostrando as %d primeiras %s * Mostrando os %s Mostrando as %s * ## "by" in the phrase "listing the top 3 files BY number of requests" por ## All requests WITH AT LEAST 10 requests com pelo menos ## Different ways of doing floors requisicao nos ultimos 7 dias requisicoes nos ultimos 7 dias requisicao de pagina nos ultimos 7 dias requisicoes de paginas nos ultimos 7 dias requisicao redirecionada requisicoes redirecionadas requisicao redirecionada nos ultimos 7 dias requisicoes redirecionadas nos ultimos 7 dias requisicao falhou requisicoes falararam requisição falhou nos ultimos 7 dias requisições falararam nos ultimos 7 dias % do trafego % do trafego nos ultimos 7 dias % da quantidade maxima de trafego % da quantidade maxima de trafego nos ultimos 7 dias byte de trafego bytes de trafego ## ?bytes represents kbytes, Mbytes etc. ?bytes de trafego byte de trafego nos ultimos 7 dias bytes de trafego nos ultimos 7 dias ?bytes de trafego nos ultimos 7 dias requisicao desde com uma requisicao redirecionada desde com uma requisicao falhada desde com primeira requisicao desde com primeira requisicao redirecionada desde com primeira requisicao falhada desde ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenados por ordenadas por * ## Used at the top of each report Este relatorio contem dados de ## Used in pie charts As partes sao definidas por ## different ways of sorting quantidade de trafego quantidade de trafego nos ultimos 7 dias % das requisicoes % das requisicoes nos ultimos 7 dias % da quantidade maxima de requisicoes % da quantidade maxima de requisicoes nos ultimos 7 dias numero de requisicoes numero de requisicoes nos ultimos 7 dias % das requisicoes de paginas % das requisicoes de paginas nos ultimos 7 dias % do numero maximo de requisicoes de paginas % do numero maximo de requisicoes de paginas nos ultimos 7 dias numero de requisicoes de paginas numero de requisicoes de paginas nos ultimos 7 dias % das requisicoes redirecionadas % das requisicoes redirecionadas nos ultimos 7 dias % do numero maximo de requisicoes redirecionadas % do numero maximo de requisicoes redirecionadas nos ultimos 7 dias numero de requisicoes redirecionadas numero de requisicoes redirecionadas nos ultimos 7 dias % das requisicoes falhadas % das requisicoes falhadas nos ultimos 7 dias % do numero maximo de requisicoes falhadas % do numero maximo de requisicoes falhadas nos ultimos 7 dias numero de requisicoes que falharam numero de requisicoes que falharam nos ultimos 7 dias horario da ultima requisicao horario da ultima requisicao redirecionada horario da ultima requisicao que falhou horario da primeira requisicao horario da primeira requisicao redirecionada horario da primeira requisicao que falhou ## 3 other ways of sorting in m, f, & n por ordem alfabetica por ordem alfabetica por ordem alfabetica por ordem numerica por ordem numerica por ordem numerica desordenados desordenadas * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %D/%m/%Y ## In Daily Summary %w ## In Hourly Report %D/%m/%Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %D/%m/%Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %D/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%Y ## The date & time (D) column in non-time reports %d/%m/%Y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%Y as %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/bradesc.txt000066400000000000000000000123201406366436600165340ustar00rootroot00000000000000# Arquivo de descricao dos relatorios para analog 6.0. # # Este arquivo contem as descricoes para cada relatorio. # As linhas iniciadas por (#) sao comentarios. # Cada relatorio precisa ter EXATAMENTE UMA LINHA. # Este relatorio lista as atividades anuais. # Quarterly Report - Relatorio Trimestral Este relatorio lista as atividades trimestrais. # Monthly Report - Relatorio Mensal Este relatorio lista as atividades mensais. # Weekly Report - Relatorio Semanal Este relatorio lista as atividades semanais. # Daily Report - Relatorio Diario Este relatorio lista as atividades diarias. # Hourly Report - Relatorio por Hora Este relatorio lista as atividades a cada hora. # Quarter-Hour Report - Relatorio por Quinze minutos Este relatorio lista as atividades a cada quinze minutos. # Five-Minute Report - Relatorio por Cinco minutos Este relatorio lista as atividades a cada cinco minutos. # Daily Summary - Resumo Diario Este relatorio lista o total de atividades para cada dia da semana, somadas todas as semanas deste relatorio. # Hourly Summary - Resumo por Hora Este relatorio lista o total de atividades para cada hora do dia, somadas todos os dias deste relatorio. # Hour of the Week Summary - Resumo por Hora da Semana Este relatorio lista o total de atividades para cada hora da semana, somadas todas as semanas deste relatorio. # Quarter-Hour Summary - Resumo por Quinze Minutos Este relatorio lista o total de atividades diarias para cada quinze minutos, somados todos os dias deste relatorio. # Five-Minute Summary - Resumo por Cinco Minutos Este relatorio lista o total de atividades diarias para cada cinco minutos, somados todos os dias deste relatorio. # General Summary - Resumo Geral Este relatorio contem estatisticas gerais. # Request Report - Relatorio de Requisicoes Este relatorio lista os arquivos no site. # Redirection Report - Relatorio de Redirecionamentos Este relatorio lista os arquivos cujas requisicoes foram redirecionadas para outro arquivo. (Normalmente diretorios sem a ultima barra ou CGI's que forcam o redirecionamento. # Failure Report - Relatorio de Falhas Este relatorio lista os arquivos que causaram erros, por exemplo Arquivo inexistente. # File Type Report - Relatorio por Tipos de Arquivos Este relatorio lista as extensoes dos arquivos requisitados. # Directory Report - Relatorio por Diretorios Este relatorio lista os diretorios de cada arquivo requisitado. # Host Report - Relatorios por Hosts Este relatorio mostra os computadores os quais requisitaram os arquivos. # Host Redirection Report - Relatorio por Hosts Redirecionados Este relatorio lista os computadores que foram redirecionados para outro arquivo. # Host Failure Report - Relatorio por Falhas de Hosts Este relatorio lista os computadores que tiveram falha na requisicao. # Domain Report - Relatorio por Dominios Este relatorio lista os paises cujos computadores requisitaram os arquivos. # Referrer Report - Relatorio por Referencias Este relatorio lista as referencias (de onde sao os links ou paginas que incluiram a imagem deste site). # Referring Site Report - Relatorio por Referencias de Sites Este relatorio lista os servidores com links. # Redirected Referrer Report - Relatorio de Referencias Redirecionadas Este relatorio lista as referencias de requisicoes redirecionadas. # Failed Referrer Report - Relatorio de Referencias com Falhas Este relatorio lista as referencias contendo links cancelados para o site. # Browser Report - Relatorio de Navegadores Este relatorio lista os browsers usados pelos visitantes. # Virtual Host Report - Relatorio de Dominios Virtuais Este relatorio lista as atividades de cada dominio virtual no site. # Virtual Host Redirection Report - Relatorio de Redirecionamento de Dominios Virtuais Este relatorio lista as requisicoes redirecionadas para cada dominio virtual. # Virtual Host Failure Report - Relatorio de Falhas de Redirecionamento de Dominios Virtuais Este relatorio lista as requisicoes com falha para cada dominio virtual. # User Report - Relatorio de Usuarios Este relatorio lista os usuario que requisitaram arquivos, caso os usuarios tenham autenticado ou possam ser identificados por cookies. # User Redirection Report Este relatorio lista os usuarios os quais foram redirecionados para outro arquivo. # User Failure Report Este relatorio lista os usuario que obtiveram falha na requisicao. # Organization Report Este relatorio lista as organizacoes os computadores que requisitaram arquivos. # Search Query Report Este relatorio lista quais as solicitacoes usadas em mecanismos de busca para encontrar o site. # Search Word Report Este relatorio lista quais as palavras usadas em mecanismos de busca para encontrar o site. # Internal Search Query Report Este relatorio lista quais as solicitacoes usadas nos scripts com o site. # Internal Search Word Report Este relatorio lista quais as palavras usadas nos scripts com o site. # Browser Summary Este relatorio lista os fornecedores os browsers dos visitantes. # Operating System Report Este relatorio lista os sistemas operacionais usados pelos visitantes. # File Size Report Este relatorio lista os tamanhos dos arquivos. # Status Code Report Este relatorio lista o status HTTP de todas as requisicoes. # Processing Time Report Este relatorio lista o tempo tomado por cada requisicao bem sucedida. analog-ce-6.0.17/lang/bradom.tab000066400000000000000000000117031406366436600163300ustar00rootroot00000000000000ad 2 Andorra ae 3 Emirados Arabes Unidos af 1 Afeganistao ag 2 Antigua e Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antilhas Holandesas ao 1 Angola aq 1 Antartida ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijao ba 3 Bosnia Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgica bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasil bs 1 Bahamas bt 1 Butao bv 1 Ilha Bouvet bw 1 Botswana by 1 Lituania bz 1 Belize ca 3 Canada cc 1 Ilhas Cocos (Keeling) cd 1 Congo cf 1 Republica Centro-Africana cg 1 Congo ch 2 Suica ci 1 Costa do Marfim ck 1 Ilhas Cook cl 2 Chile cm 1 Camaroes cn 3 China co 3 Colombia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Ilha Christmas cy 3 Chipre cz 2 Republica Theca de 2 Alemanha dj 1 Djibuti dk 2 Dinamarca dm 2 Dominica do 3 Republica Dominicana dz 1 Argelia ec 3 Equador edu 2 Educacional ee 2 Estonia eg 3 Egito eh 1 Saara Oriental er 1 Eriteia es 2 Espanha et 1 Etiopia fi 2 Finlandia fj 3 Fiji fk 1 Ilhas Malvinas (Falkland) fm 1 Estados Federados da Micronesia fo 1 Ilhas Faroe fr 2 Franca fx 1 Franca (Territorio Europeu) ga 1 Gabao gb 1 Gra-Bretanha gd 1 Grenada ge 1 Georgia gf 1 Guiana Francesa gg 1 Ilha de Guernsey gh 3 Gana gi 1 Gibraltar gl 1 Groelandia gm 1 Gambia gn 1 Guine gov 2 Governo norte-americano gp 1 Ilha de Guadalupe gq 1 Guine Equatorial gr 2 Grecia gs 1 Ilhas de Georgia do Sul e Sandwich do Sul gt 3 Guatemala gu 1 Ilha de Guam gw 1 Guine-Bissau gy 1 Guiana (ex. Guiana Inglesa) hk 3 Hong Kong hm 1 Ilhas Heard e McDonald hn 2 Honduras hr 2 Croacia ht 1 Haiti hu 2 Hungria id 3 Indonesia ie 2 Irlanda il 3 Israel im 1 Ilha de Man in 3 India int 1 Internacional io 1 Territorio Indico-britanico iq 1 Iraque ir 1 Ira is 2 Islandia it 2 Italia je 1 Ilha de Jersey jm 3 Jamaica jo 3 Jordania jp 3 Japao ke 3 Qenia kg 1 Kyrgyzstan kh 1 Camboja ki 1 Kiribati km 1 Ilhas Comoros kn 1 Ilhas Saint Kitts e Nevis kp 1 Coreia do Norte kr 3 Coreia do Sul kw 3 Kuwait ky 1 Ilhas Cayman kz 1 Cazaquistao la 1 Laos lb 3 Libano lc 1 Ilha de Santa Lucia li 2 Liechtenstein lk 1 Sri-Lanka lr 1 Liberia ls 1 Lesoto lt 2 Lituania lu 2 Luxemburgo lv 2 Letonia ly 1 Libia ma 1 Marrocos mc 2 Principado de Monaco md 1 Moldavia mg 1 Madagascar mh 1 Ilhas Marshall mil 2 Militar norte-americano mk 3 Macedonia (Antiga Iugoslavia) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macau mp 1 Ilhas Mariana do Norte mq 1 Martinica mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Ilhas Mauricio mv 1 Ilhas Maldivas mw 1 Malavi mx 3 Mexico my 3 Malasia mz 1 Mocambique na 1 Namibia nc 1 Nova Caledonia ne 1 Niger net 2 Redes nf 1 Ilha Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Holanda no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nova Zelandia om 1 Oma org 2 Organizacoes nao-governamentais pa 3 Panama pe 3 Peru pf 1 Polinesia Francesa pg 3 Papua Nova Guine ph 3 Filipinas pk 3 Paquistao pl 3 Polonia pm 1 Ilhas Saint Pierre e Miquelon pn 1 Ilha Pitcairn pr 1 Porto Rico ps 3 Palestina pt 2 Portugal pw 1 Palau py 3 Paraguai qa 1 Qatar re 1 Ilhas Reuniao ro 2 Romenia ru 2 Russia rw 1 Ruanda sa 3 Arabia Saudita sb 1 Ilhas Salomao sc 1 Ilhas Seychelles sd 1 Sudao se 2 Suecia sg 3 Singapura sh 1 Ilha de Santa Helena si 2 Eslovenia sj 1 Ilhas Svalbard e Jan Mayen sk 2 Eslovaquia sl 1 Serra Leoa sm 1 Principado de San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Sao Tome e Principe su 2 Antiga Uniao Sovietica sv 3 El Salvador sy 1 Siria sz 1 Suazilandia tc 1 Ilhas Turks e Caicos td 1 Chade tf 1 Territorios Franceses de Ultramar tg 1 Togo th 3 Tailandia tj 1 Tadjiquistao tk 1 Ilha Tokelau tl 1 Timor Leste tm 1 Turcomenistao tn 1 Tunisia to 1 Tonga tp 1 Timor Leste tr 3 Turquia tt 3 Trinidade e Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ucrania ug 3 Uganda uk 3 Reino Unido um 1 Territorios americanos de ultramar us 4 Estados Unidos da America uy 3 Uruguai uz 1 Uzbequistao va 1 Cidade do Vaticano vc 1 Ilhas de Saint Vincent e Grenadines ve 3 Venezuela vg 1 Ilhas Virgens Britanicas vi 1 Ilhas Virgens vn 1 Vietna vu 1 Vanuatu wf 1 Ilhas Wallis e Futuna ws 1 Samoa ye 1 Iemen yt 1 Ilha Mayotte yu 3 Iugoslavia za 3 Africa do Sul zm 1 Zambia zr 1 Republica Democratica do Congo zw 3 Zimbabue analog-ce-6.0.17/lang/brdesc.txt000066400000000000000000000123201406366436600163730ustar00rootroot00000000000000# Arquivo de descrição dos relatórios para analog 6.0. # # Este arquivo contem as descrições para cada relatório. # As linhas iniciadas por (#) são comentários. # Cada relatório precisa ter EXATAMENTE UMA LINHA. # Este relatório lista as atividades anuais. # Quarterly Report - Relatório Trimestral Este relatório lista as atividades trimestrais. # Monthly Report - Relatório Mensal Este relatório lista as atividades mensais. # Weekly Report - Relatório Semanal Este relatório lista as atividades semanais. # Daily Report - Relatório Diário Este relatório lista as atividades diárias. # Hourly Report - Relatório por Hora Este relatório lista as atividades a cada hora. # Quarter-Hour Report - Relatório por Quinze minutos Este relatório lista as atividades a cada quinze minutos. # Five-Minute Report - Relatório por Cinco minutos Este relatório lista as atividades a cada cinco minutos. # Daily Summary - Resumo Diário Este relatório lista o total de atividades para cada dia da semana, somadas todas as semanas deste relatório. # Hourly Summary - Resumo por Hora Este relatório lista o total de atividades para cada hora do dia, somadas todos os dias deste relatório. # Hour of the Week Summary - Resumo por Hora da Semana Este relatório lista o total de atividades para cada hora da semana, somadas todas as semanas deste relatório. # Quarter-Hour Summary - Resumo por Quinze Minutos Este relatório lista o total de atividades diárias para cada quinze minutos, somados todos os dias deste relatório. # Five-Minute Summary - Resumo por Cinco Minutos Este relatório lista o total de atividades diárias para cada cinco minutos, somados todos os dias deste relatório. # General Summary - Resumo Geral Este relatório contem estatísticas gerais. # Request Report - Relatório de Requisições Este relatório lista os arquivos no site. # Redirection Report - Relatório de Redirecionamentos Este relatório lista os arquivos cujas requisições foram redirecionadas para outro arquivo. (Normalmente diretórios sem a ultima barra ou CGI's que forcam o redirecionamento. # Failure Report - Relatório de Falhas Este relatório lista os arquivos que causaram erros, por exemplo Arquivo inexistente. # File Type Report - Relatório por Tipos de Arquivos Este relatório lista as extensões dos arquivos requisitados. # Directory Report - Relatório por Diretórios Este relatório lista os diretórios de cada arquivo requisitado. # Host Report - Relatórios por Hosts Este relatório mostra os computadores os quais requisitaram os arquivos. # Host Redirection Report - Relatório por Hosts Redirecionados Este relatório lista os computadores que foram redirecionados para outro arquivo. # Host Failure Report - Relatório por Falhas de Hosts Este relatório lista os computadores que tiveram falha na requisição. # Domain Report - Relatório por Domínios Este relatório lista os países cujos computadores requisitaram os arquivos. # Referrer Report - Relatório por Referências Este relatório lista as referencias (de onde são os links ou paginas que incluíram a imagem deste site). # Referring Site Report - Relatório por Referências de Sites Este relatório lista os servidores com links. # Redirected Referrer Report - Relatório de Referências Redirecionadas Este relatório lista as referencias de requisições redirecionadas. # Failed Referrer Report - Relatório de Referências com Falhas Este relatório lista as referencias contendo links cancelados para o site. # Browser Report - Relatório de Navegadores Este relatório lista os browsers usados pelos visitantes. # Virtual Host Report - Relatório de Domínios Virtuais Este relatório lista as atividades de cada domínio virtual no site. # Virtual Host Redirection Report - Relatório de Redirecionamento de Domínios Virtuais Este relatório lista as requisições redirecionadas para cada domínio virtual. # Virtual Host Failure Report - Relatório de Falhas de Redirecionamento de Domínios Virtuais Este relatório lista as requisições com falha para cada domínio virtual. # User Report - Relatório de Usuários Este relatório lista os usuário que requisitaram arquivos, caso os usuários tenham autenticado ou possam ser identificados por cookies. # User Redirection Report Este relatório lista os usuários os quais foram redirecionados para outro arquivo. # User Failure Report Este relatório lista os usuário que obtiveram falha na requisição. # Organization Report Este relatório lista as organizações os computadores que requisitaram arquivos. # Search Query Report Este relatório lista quais as solicitações usadas em mecanismos de busca para encontrar o site. # Search Word Report Este relatório lista quais as palavras usadas em mecanismos de busca para encontrar o site. # Internal Search Query Report Este relatório lista quais as solicitações usadas nos scripts com o site. # Internal Search Word Report Este relatório lista quais as palavras usadas nos scripts com o site. # Browser Summary Este relatório lista os fornecedores os browsers dos visitantes. # Operating System Report Este relatório lista os sistemas operacionais usados pelos visitantes. # File Size Report Este relatório lista os tamanhos dos arquivos. # Status Code Report Este relatório lista o status HTTP de todas as requisições. # Processing Time Report Este relatório lista o tempo tomado por cada requisição bem sucedida. analog-ce-6.0.17/lang/brdom.tab000066400000000000000000000117031406366436600161670ustar00rootroot00000000000000ad 2 Andorra ae 3 Emirados Árabes Unidos af 1 Afeganistão ag 2 Antigua e Barbuda ai 1 Anguilla al 1 Albânia am 2 Armênia an 1 Antilhas Holandesas ao 1 Angola aq 1 Antartida ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Áustria au 3 Austrália aw 1 Aruba az 1 Azerbaijão ba 3 Bósnia Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Bélgica bf 1 Burkina Faso bg 2 Bulgária bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolívia br 3 Brasil bs 1 Bahamas bt 1 Butão bv 1 Ilha Bouvet bw 1 Botswana by 1 Lituânia bz 1 Belize ca 3 Canadá cc 1 Ilhas Cocos (Keeling) cd 1 Congo cf 1 República Centro-Africana cg 1 Congo ch 2 Suíça ci 1 Costa do Marfim ck 1 Ilhas Cook cl 2 Chile cm 1 Camarões cn 3 China co 3 Colômbia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Ilha Christmas cy 3 Chipre cz 2 República Theca de 2 Alemanha dj 1 Djibuti dk 2 Dinamarca dm 2 Dominica do 3 República Dominicana dz 1 Argélia ec 3 Equador edu 2 Educacional ee 2 Estônia eg 3 Egito eh 1 Saara Oriental er 1 Eritéia es 2 Espanha et 1 Etiópia fi 2 Finlândia fj 3 Fiji fk 1 Ilhas Malvinas (Falkland) fm 1 Estados Federados da Micronésia fo 1 Ilhas Faroe fr 2 França fx 1 França (Território Europeu) ga 1 Gabão gb 1 Grã-Bretanha gd 1 Grenada ge 1 Geórgia gf 1 Guiana Francesa gg 1 Ilha de Guernsey gh 3 Gana gi 1 Gibraltar gl 1 Groelândia gm 1 Gâmbia gn 1 Guiné gov 2 Governo norte-americano gp 1 Ilha de Guadalupe gq 1 Guiné Equatorial gr 2 Grécia gs 1 Ilhas de Geórgia do Sul e Sandwich do Sul gt 3 Guatemala gu 1 Ilha de Guam gw 1 Guiné-Bissau gy 1 Guiana (ex. Guiana Inglesa) hk 3 Hong Kong hm 1 Ilhas Heard e McDonald hn 2 Honduras hr 2 Croácia ht 1 Haiti hu 2 Hungria id 3 Indonésia ie 2 Irlanda il 3 Israel im 1 Ilha de Man in 3 Índia int 1 Internacional io 1 Território Índico-britânico iq 1 Iraque ir 1 Irã is 2 Islândia it 2 Itália je 1 Ilha de Jersey jm 3 Jamaica jo 3 Jordânia jp 3 Japão ke 3 Qênia kg 1 Kyrgyzstan kh 1 Camboja ki 1 Kiribati km 1 Ilhas Comoros kn 1 Ilhas Saint Kitts e Nevis kp 1 Coréia do Norte kr 3 Coréia do Sul kw 3 Kuwait ky 1 Ilhas Cayman kz 1 Cazaquistão la 1 Laos lb 3 Líbano lc 1 Ilha de Santa Lucia li 2 Liechtenstein lk 1 Sri-Lanka lr 1 Libéria ls 1 Lesoto lt 2 Lituânia lu 2 Luxemburgo lv 2 Letônia ly 1 Líbia ma 1 Marrocos mc 2 Principado de Mônaco md 1 Moldávia mg 1 Madagascar mh 1 Ilhas Marshall mil 2 Militar norte-americano mk 3 Macêdonia (Antiga Iugoslávia) ml 1 Mali mm 1 Myanmar mn 1 Mongólia mo 1 Macau mp 1 Ilhas Mariana do Norte mq 1 Martinica mr 1 Mauritânia ms 1 Montserrat mt 3 Malta mu 1 Ilhas Mauricio mv 1 Ilhas Maldivas mw 1 Malavi mx 3 México my 3 Malásia mz 1 Moçambique na 1 Namíbia nc 1 Nova Caledônia ne 1 Níger net 2 Redes nf 1 Ilha Norfolk ng 1 Nigéria ni 3 Nicarágua nl 2 Holanda no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nova Zelândia om 1 Omã org 2 Organizações não-governamentais pa 3 Panamá pe 3 Peru pf 1 Polinésia Francesa pg 3 Papua Nova Guiné ph 3 Filipinas pk 3 Paquistão pl 3 Polônia pm 1 Ilhas Saint Pierre e Miquelon pn 1 Ilha Pitcairn pr 1 Porto Rico ps 3 Palestina pt 2 Portugal pw 1 Palau py 3 Paraguai qa 1 Qatar re 1 Ilhas Reunião ro 2 Romênia ru 2 Rússia rw 1 Ruanda sa 3 Arábia Saudita sb 1 Ilhas Salomão sc 1 Ilhas Seychelles sd 1 Sudão se 2 Suécia sg 3 Singapura sh 1 Ilha de Santa Helena si 2 Eslovênia sj 1 Ilhas Svalbard e Jan Mayen sk 2 Eslováquia sl 1 Serra Leoa sm 1 Principado de San Marino sn 1 Senegal so 1 Somália sr 1 Suriname st 1 São Tomé e Príncipe su 2 Antiga União Soviética sv 3 El Salvador sy 1 Síria sz 1 Suazilândia tc 1 Ilhas Turks e Caicos td 1 Chade tf 1 Territórios Franceses de Ultramar tg 1 Togo th 3 Tailândia tj 1 Tadjiquistão tk 1 Ilha Tokelau tl 1 Timor Leste tm 1 Turcomenistão tn 1 Tunísia to 1 Tonga tp 1 Timor Leste tr 3 Turquia tt 3 Trinidade e Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzânia ua 3 Ucrânia ug 3 Uganda uk 3 Reino Unido um 1 Territórios americanos de ultramar us 4 Estados Unidos da América uy 3 Uruguai uz 1 Uzbequistão va 1 Cidade do Vaticano vc 1 Ilhas de Saint Vincent e Grenadines ve 3 Venezuela vg 1 Ilhas Virgens Britânicas vi 1 Ilhas Virgens vn 1 Vietnã vu 1 Vanuatu wf 1 Ilhas Wallis e Futuna ws 1 Samoa ye 1 Iêmen yt 1 Ilha Mayotte yu 3 Iugoslávia za 3 África do Sul zm 1 Zâmbia zr 1 República Democrática do Congo zw 3 Zimbábue analog-ce-6.0.17/lang/cat.lng000066400000000000000000000335561406366436600156570ustar00rootroot00000000000000############################################################################### ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## ## Catalan version by Francesc Burrull i Mestres, 26 Jan 1999, 4 Dec 1999, ## 23 Jan 2001. e-mail: fburrull@mat.upc.es ## ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Diumenge Dilluns Dimarts Dimecres Dijous Divendres Dissabte Gen. Feb. Mar. Abr. Mai. Jun. Jul. Ago. Set. Oct. Nov. Des. ## Next some standard common words. ## Abbreviation for "week beginning" setm. d'inici any ## Quarter of a year trimestre mes dia dies h. minut minuts segon segons byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes petició peticions data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data hora hora primera data primera hora última data última hora fitxer fitxers màquina màquines servidor virtual servidors virtuals directori directoris domini dominis organització organitzacions extensió extensions URL URLs Navegador Navegadors Sistema Operatiu Sistemes Operatius ## (= operating system, operating systems) tamany busca terme busca termes lloc llocs usuari usuaris cod. d'estat cods. d'estats Estadístiques del Servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Informe General ## The time reports, plus "busiest" strings (at the bottom of each report) Informe anual Any de màxima ocupació: Informe trimestral Trimestre de màxima ocupació Informe Mensual Mes de tràfic màxim: Informe Setmanal Setmana de tràfic màxim: Resum Diari Informe Diari Dia de tràfic màxim: Informe Horari Resum Horari Hora del resum setmanal Hora de tràfic màxim: Informe de quart d'hora Resum de quart d'hora Quart d'hora de tràfic màxim: Informe de cada cinc minutos Resum de cinc minuts Cinc minuts de tràfic màxim: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Informe de Hosts host hosts m Informe de redireccions de màquina màquina màquines f Informe de fallades de màquina màquina màquines f Informe de Directoris directori directoris m Informe de Tipus de Fitxers extensió extensións f Informe de Peticions fitxer sol.licitat fitxers sol.licitats m Informe de redireccionaments fitxer fitxers m Informe de fallades en una petició fitxer fitxers m Informe de Remitents URL remitent URLs remitents m Informe de llocs Remitents lloc remitent llocs remitents m Informe de remitents redireccionats URL remitent URLs remitents m Informe d'errors de remitents URL remitent URLs remitents m Informe de peticions buscades petició peticions m Informe de paraules buscades paraula buscada paraules buscades f Informe de peticions de cerques internes cerca cerques f Informe de paraules de cerques internes cerca paraula cerca paraules f Informe de servidors virtuals servidor virtual servidors virtuals m Informe de redireccions de màquines virtuals màquina virtual màquines virtuals f Informe de fallades de màquines virtuals màquina virtual màquines virtuals f Informe d'usuaris usuari usuaris m Informe de redireccions d'usuaris usuari usuaris m Informe d'accés d'usuaris usuari usuaris m Resum de Navegadors navegador navegadors m Informe de Navegadors navegador navegadors m Informe de sistema operatiu sistema operatiu sistemes operatius m Informe de Dominis domini dominis m Informe d'organitzacions organització organitzacions m Informe de codis d'estat codi d'estat codis d'estat m Informe del temps de procés Informe del tamany de fitxers ## Used at the bottom of the report Aquesta anàlisi estadística l'ha generada Temps d'execució Menys de 1 ## Used in the time reports Cada unitat representa o una fracció petició d'una pàgina peticions de pàgines ## Used at the bottom of each non-time report: need m, f & n genders no llistats no llistades * ## Used on the pie charts: again need m, f & n genders Altre Altra * ## Used at the top of the report Dia i hora de l'inicialització: Anàlisi de peticions des del fins al ## Used in the General Summary Peticions exitoses Promig de peticions exitoses per dia Peticions exitoses per pàgina Promig de peticions exitoses per pàgina per dia Línies sense codi d'estat en el fitxer log Peticions fallades Peticions de redireccionament Peticions amb codi d'estat informatiu Fitxers diferents sol.licitats Màquines diferents ateses Línies invàlides en el fitxer log Entrades no sol.licitades en el fitxer log Transferència total Promig de transferència per dia Les imatges en parèntesi es refereixen als 7 dies al últims 7 dies Anar a Inici ## Some special phrases for particular reports. [adreça numèrica no resolta] [domini no facilitat] [domini desconegut] [directori arrel] [sense directori] [sense extensió] [directoris] Windows desconegut Altres Unix Robots S.O. desconegut ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) Num. pet. pet. 7 dies %pet. % pet. 7 dies Pags. pàgs. 7 dies %Pags. % pags. 7 dies bytes ?bytes bytes 7 dies ?bytes 7 dies %bytes % bytes 7 dies num. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Fent llistat dels primers %s Fent llistat de las primeres %s * Fent llistat de los %d primers %s Fent llistat de les %d primeres %s * Fent llistat dels %s Fent llistat de les %s * ## "by" in the phrase "listing the top 3 files BY number of requests" per ## All requests WITH AT LEAST 10 requests amb almenys ## Different ways of doing floors petició en els últims 7 dies peticions en els últims 7 dies petició d'una pàgina en els últims 7 dies peticions de pàgines en els últims 7 dies petició redireccionada peticions redireccionades petició redireccionada en els últims 7 dies peticions redireccionada en els últims 7 dies petició fallada peticions fallades petició fallada en els últims 7 dies peticions fallades en els últims 7 dies % del tràfic en els últims 7 dies % del tràfic % del màxim volum de tràfic % del màxim volum de tràfic en els últims 7 dies byte de tràfic bytes de tràfic ## ?bytes represents kbytes, Mbytes etc. ?bytes de tràfic byte de tràfic en els últims 7 dies bytes de tràfic en els últims 7 dies ?bytes de tràfic en els últims 7 dies sol.licitat des de amb una sol.licitut redireccionada des de amb una sol.licitut fallada des de amb primera petició des de amb primera petició redireccionada des de amb primera petició fallada des de ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenats por ordenades per * ## Used at the top of each report Aquest informe conté dades de ## Used in pie charts Les porcions estan dibuixades per ## different ways of sorting quantitat de tràfic quantitat de tràfic en els últims 7 dies % de peticions % de peticions en els últims 7 dies % del nombre màxim de peticions % del nombre màxim de peticions en els últims 7 dies nombre de peticions nombre de peticions en els últims 7 dies % de peticions de pàgines % de peticions de pàgines en els últims 7 dies % del nombre màxim de peticions de pàgines % del nombre màxim de peticions de pàgines en els últims 7 dies nombre de peticions de pàgines nombre de peticions de pàgines en els últims 7 dies % de peticions redireccionades % de peticions redireccionades en els últims 7 dies % del nombre màxim de peticions redireccionades % del nombre màxim de peticions redireccionades en els últims 7 dies nombre de peticions redireccionades nombre de peticions redireccionades en els últims 7 dies % de peticions fallades % de peticions fallades en els últims 7 dies % del nombre màxim de peticions fallades % del nombre màxim de peticions fallades en els últims 7 dies nombre de peticions fallades nombre de peticions fallades en els últims 7 dies hora de la última petició hora de la última petició redireccionada hora de la última petició fallada hora de la primera petició hora de la primera petició redireccionada hora de la primera petició fallada ## 3 other ways of sorting in m, f, & n per ordre alfabètic per ordre alfabètic * per ordre numèric per ordre numèric * desordenats desordenades * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%Y ## In Daily Summary %w ## In Hourly Report %d/%m/%Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%Y ## The date & time (D) column in non-time reports %d/%m/%Y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%Y a les %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continua amb la petició 101 Canviant protocols 1xx [Informació miscel.lània] 200 Bé 201 Creat 202 Acceptat per futur processat 203 Informació no autoritativa 204 Bé, però res a enviar 205 Reset del document 206 Contingut parcial 2xx Esdeveniments diversos 300 Múltiples documents disponibles 301 El document ha canviat de lloc de manera permanent 302 El document és en un altre lloc 303 Vegeu un altre document 304 No modificat des de l'última descàrrega 305 Utilitzeu proxy 306 Canvia proxy 307 El document ha canviat de lloc de manera temporal 3xx [Redireccions diverses] 400 Petició invàlida 401 Cal autentificació 402 Cal fer el pagament 403 Accés prohibit 404 Document no trobat 405 Mètode no permès 406 Document inacceptable pel client 407 Cal autentificació del proxy 408 Temps de petició esgotat 409 Conflicte entre la petició i l'estat del recurs 410 Document desaparegut de manera permanent 411 Cal la longitud 412 Precondició fallada 413 Petició massa llarga 414 Nom de fitxer sol.licitat massa llarg 415 Tipus de medi no suportat 416 Rang sol.licitat invàlid 417 Expectació fallada 4xx [Errors diversos de client/usuari] 500 Error intern del servidor 501 Tipus sol.licitat no suportat 502 Error de l'enllaç de pujada al servidor 503 Servei temporalment no disponible 504 Temps esgotat en la porta d'enllaç (gateway) 505 Versió de HTTP no suportada 506 Redirecció fallada 5xx [Errors diversos del servidor] xxx [Desconegut] analog-ce-6.0.17/lang/cata.lng000066400000000000000000000335651406366436600160200ustar00rootroot00000000000000############################################################################### ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## ## Catalan version by Francesc Burrull i Mestres, 26 Jan 1999, 4 Dec 1999, ## 23 Jan 2001. e-mail: fburrull@mat.upc.es ## ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Diumenge Dilluns Dimarts Dimecres Dijous Divendres Dissabte Gen. Feb. Mar. Abr. Mai. Jun. Jul. Ago. Set. Oct. Nov. Des. ## Next some standard common words. ## Abbreviation for "week beginning" setm. d'inici any ## Quarter of a year trimestre mes dia dies h. minut minuts segon segons byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes peticio peticions data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data hora hora primera data primera hora ultima data ultima hora fitxer fitxers maquina maquines servidor virtual servidors virtuals directori directoris domini dominis organitzacio organitzacions extensio extensions URL URLs Navegador Navegadors Sistema Operatiu Sistemes Operatius ## (= operating system, operating systems) tamany busca terme busca termes lloc llocs usuari usuaris cod. d'estat cods. d'estats Estadistiques del Servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Informe General ## The time reports, plus "busiest" strings (at the bottom of each report) Informe anual Any de maxima ocupacio: Informe trimestral Trimestre de maxima ocupacio Informe Mensual Mes de trafic maxim: Informe Setmanal Setmana de trafic maxim: Resum Diari Informe Diari Dia de trafic maxim: Informe Horari Resum Horari Hora del resum setmanal Hora de trafic maxim: Informe de quart d'hora Resum de quart d'hora Quart d'hora de trafic maxim: Informe de cada cinc minutos Resum de cinc minuts Cinc minuts de trafic maxim: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Informe de Hosts host hosts m Informe de redireccions de maquina maquina maquines f Informe de fallades de maquina maquina maquines f Informe de Directoris directori directoris m Informe de Tipus de Fitxers extensio extensions f Informe de Peticions fitxer sol.licitat fitxers sol.licitats m Informe de redireccionaments fitxer fitxers m Informe de fallades en una peticio fitxer fitxers m Informe de Remitents URL remitent URLs remitents m Informe de llocs Remitents lloc remitent llocs remitents m Informe de remitents redireccionats URL remitent URLs remitents m Informe d'errors de remitents URL remitent URLs remitents m Informe de peticions buscades peticio peticions m Informe de paraules buscades paraula buscada paraules buscades f Informe de peticions de cerques internes cerca cerques f Informe de paraules de cerques internes cerca paraula cerca paraules f Informe de servidors virtuals servidor virtual servidors virtuals m Informe de redireccions de maquines virtuals maquina virtual maquines virtuals f Informe de fallades de maquines virtuals maquina virtual maquines virtuals f Informe d'usuaris usuari usuaris m Informe de redireccions d'usuaris usuari usuaris m Informe d'acces d'usuaris usuari usuaris m Resum de Navegadors navegador navegadors m Informe de Navegadors navegador navegadors m Informe de sistema operatiu sistema operatiu sistemes operatius m Informe de Dominis domini dominis m Informe d'organitzacions organitzacio organitzacions m Informe de codis d'estat codi d'estat codis d'estat m Informe del temps de proces Informe del tamany de fitxers ## Used at the bottom of the report Aquesta analisi estadistica l'ha generada Temps d'execucio Menys de 1 ## Used in the time reports Cada unitat representa o una fraccio peticio d'una pagina peticions de pagines ## Used at the bottom of each non-time report: need m, f & n genders no llistats no llistades * ## Used on the pie charts: again need m, f & n genders Altre Altra * ## Used at the top of the report Dia i hora de l'inicialitzacio: Analisi de peticions des del fins al ## Used in the General Summary Peticions exitoses Promig de peticions exitoses per dia Peticions exitoses per pagina Promig de peticions exitoses per pagina per dia Linies sense codi d'estat en el fitxer log Peticions fallades Peticions de redireccionament Peticions amb codi d'estat informatiu Fitxers diferents sol.licitats Maquines diferents ateses Linies invalides en el fitxer log Entrades no sol.licitades en el fitxer log Transferencia total Promig de transferencia per dia Les imatges en parentesi es refereixen als 7 dies al ultims 7 dies Anar a Inici ## Some special phrases for particular reports. [adre(cs)a numerica no resolta] [domini no facilitat] [domini desconegut] [directori arrel] [sense directori] [sense extensio] [directoris] Windows desconegut Altres Unix Robots S.O. desconegut ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) Num. pet. pet. 7 dies %pet. % pet. 7 dies Pags. pags. 7 dies %Pags. % pags. 7 dies bytes ?bytes bytes 7 dies ?bytes 7 dies %bytes % bytes 7 dies num. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Fent llistat dels primers %s Fent llistat de las primeres %s * Fent llistat de los %d primers %s Fent llistat de les %d primeres %s * Fent llistat dels %s Fent llistat de les %s * ## "by" in the phrase "listing the top 3 files BY number of requests" per ## All requests WITH AT LEAST 10 requests amb almenys ## Different ways of doing floors peticio en els ultims 7 dies peticions en els ultims 7 dies peticio d'una pagina en els ultims 7 dies peticions de pagines en els ultims 7 dies peticio redireccionada peticions redireccionades peticio redireccionada en els ultims 7 dies peticions redireccionada en els ultims 7 dies peticio fallada peticions fallades peticio fallada en els ultims 7 dies peticions fallades en els ultims 7 dies % del trafic en els ultims 7 dies % del trafic % del maxim volum de trafic % del maxim volum de trafic en els ultims 7 dies byte de trafic bytes de trafic ## ?bytes represents kbytes, Mbytes etc. ?bytes de trafic byte de trafic en els ultims 7 dies bytes de trafic en els ultims 7 dies ?bytes de trafic en els ultims 7 dies sol.licitat des de amb una sol.licitut redireccionada des de amb una sol.licitut fallada des de amb primera peticio des de amb primera peticio redireccionada des de amb primera peticio fallada des de ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenats por ordenades per * ## Used at the top of each report Aquest informe conte dades de ## Used in pie charts Les porcions estan dibuixades per ## different ways of sorting quantitat de trafic quantitat de trafic en els ultims 7 dies % de peticions % de peticions en els ultims 7 dies % del nombre maxim de peticions % del nombre maxim de peticions en els ultims 7 dies nombre de peticions nombre de peticions en els ultims 7 dies % de peticions de pagines % de peticions de pagines en els ultims 7 dies % del nombre maxim de peticions de pagines % del nombre maxim de peticions de pagines en els ultims 7 dies nombre de peticions de pagines nombre de peticions de pagines en els ultims 7 dies % de peticions redireccionades % de peticions redireccionades en els ultims 7 dies % del nombre maxim de peticions redireccionades % del nombre maxim de peticions redireccionades en els ultims 7 dies nombre de peticions redireccionades nombre de peticions redireccionades en els ultims 7 dies % de peticions fallades % de peticions fallades en els ultims 7 dies % del nombre maxim de peticions fallades % del nombre maxim de peticions fallades en els ultims 7 dies nombre de peticions fallades nombre de peticions fallades en els ultims 7 dies hora de la ultima peticio hora de la ultima peticio redireccionada hora de la ultima peticio fallada hora de la primera peticio hora de la primera peticio redireccionada hora de la primera peticio fallada ## 3 other ways of sorting in m, f, & n per ordre alfabetic per ordre alfabetic * per ordre numeric per ordre numeric * desordenats desordenades * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%Y ## In Daily Summary %w ## In Hourly Report %d/%m/%Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%Y ## The date & time (D) column in non-time reports %d/%m/%Y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%Y a les %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continua amb la peticio 101 Canviant protocols 1xx [Informacio miscel.lania] 200 Be 201 Creat 202 Acceptat per futur processat 203 Informacio no autoritativa 204 Be, pero res a enviar 205 Reset del document 206 Contingut parcial 2xx Esdeveniments diversos 300 Multiples documents disponibles 301 El document ha canviat de lloc de manera permanent 302 El document es en un altre lloc 303 Vegeu un altre document 304 No modificat des de l'ultima descarrega 305 Utilitzeu proxy 306 Canvia proxy 307 El document ha canviat de lloc de manera temporal 3xx [Redireccions diverses] 400 Peticio invalida 401 Cal autentificacio 402 Cal fer el pagament 403 Acces prohibit 404 Document no trobat 405 Metode no permes 406 Document inacceptable pel client 407 Cal autentificacio del proxy 408 Temps de peticio esgotat 409 Conflicte entre la peticio i l'estat del recurs 410 Document desaparegut de manera permanent 411 Cal la longitud 412 Precondicio fallada 413 Peticio massa llarga 414 Nom de fitxer sol.licitat massa llarg 415 Tipus de medi no suportat 416 Rang sol.licitat invalid 417 Expectacio fallada 4xx [Errors diversos de client/usuari] 500 Error intern del servidor 501 Tipus sol.licitat no suportat 502 Error de l'enlla(cs) de pujada al servidor 503 Servei temporalment no disponible 504 Temps esgotat en la porta d'enlla(cs) (gateway) 505 Versio de HTTP no suportada 506 Redireccio fallada 5xx [Errors diversos del servidor] xxx [Desconegut] analog-ce-6.0.17/lang/catadom.tab000066400000000000000000000120661406366436600164770ustar00rootroot00000000000000aero 2 Industria del Transport Aeri arpa 1 Arpanet (Agenc. de Invest. de Proj. Avanc.) biz 2 Negocis com 2 Comercial coop 2 Cooperatives edu 2 USA Educacional gov 2 USA Governamental info 2 Informacio int 2 Organitzacions Internacionals mil 2 USA Militar museum 2 Museus name 3 Persones net 2 XARXA (Network) org 2 Organitzacions pro 3 Professionals ac 1 Illa d'Ascensio ad 2 Andorra ae 3 Emirats Arabs Units af 1 Afganistan ag 2 Antiga i Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antillas Holandeses ao 1 Angola aq 1 Antartida ar 3 Argentina as 1 Samoa America at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijan ba 3 Bosnia-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgica bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrein bi 1 Burundi bj 1 Benin bm 1 Bermudas bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brasil bs 1 Bahamas bt 1 Bhutan bv 1 Illes de Bouvet bw 1 Botswana by 1 Bielorussia bz 1 Belice ca 3 Canada cc 1 Illes Cocos (Keeling Islands) cd 1 Republica Democratica del Congo cf 1 Republica Centreafricana cg 1 Congo ch 2 Suiza ci 1 Costa d'Ivory ck 1 Illes Cook cl 2 Chile cm 1 Camerun cn 3 China co 3 Colombia cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Illa de Nadal (Christmas Island) cy 3 Chipre cz 2 Republica Xeca de 2 Alemania dj 1 Djibouti dk 2 Dinamarca dm 2 Dominica do 3 Republica Dominicana dz 1 Argelia ec 3 Ecuador ee 2 Estonia eg 3 Egipte eh 1 Sahara Occidental er 1 Eritrea es 2 Espanya et 1 Etiopia fi 2 Finlandia fj 3 Fiji fk 1 Falkland Islands (Illes Malvinas) fm 1 Micronesia fo 1 Illes de Faroe fr 2 Franca fx 1 Franca (Territori Europeu) ga 1 Gabon gb 1 Gran Bretanya gd 1 Granada ge 1 Georgia gf 1 Guaiana Francesa gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenlandia gm 1 Gambia gn 1 Guinea gp 1 Guadelupe (Francesa) gq 1 Guinea Ecuatorial gr 2 Grecia gs 1 Illes S. Georgia & S. Sandwich gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Illes Heard y McDonald hn 2 Honduras hr 2 Croacia ht 1 Haiti hu 2 Hungria id 3 Indonesia ie 2 Irlanda il 3 Israel im 1 Illa de Man in 3 India io 1 Territori Britanic de l'Ocea Indic (British Indian Ocean Territory) iq 1 Iraq ir 1 Iran, Republica Islamica de is 2 Islandia it 2 Italia je 1 Jersey jm 3 Jamaica jo 3 Jorda (Jordania) jp 3 Japo ke 3 Kenya kg 1 Kyrgyzstan kh 1 Cambodia ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts & Nevis Anguilla kp 1 Corea del nord (PR Democratic de Corea) kr 3 Corea del sud (Republica de Corea) kw 3 Kuwait ky 1 Illes Caiman kz 1 Kazakhstan la 1 Laos (Rep. Dem. del poble Lao) lb 3 El Liba lc 1 Santa Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lithuania lu 2 Luxemburg lv 2 Latvia ly 1 Libia (Jamahiriya Arab Libi) ma 1 Marroc mc 2 Monaco md 1 Moldova (Republica de Moldova) mg 1 Madagascar mh 1 Illes Marshall mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macau mp 1 Illes Nortenyes de Mariana (Northern Mariana Islands) mq 1 Martinique (Francesa) mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Maurici mv 1 Maldives mw 1 Malawi mx 3 Mexic my 3 Malasia mz 1 Mozambic na 1 Namibia nc 1 Nueva Caledonia (Francesa) ne 1 Niger nf 1 Illa Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Holanda no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nova Zelanda om 1 Oman pa 3 Panama pe 3 Peru pf 1 Polinesia Francesa pg 3 Papua Nova Guinea ph 3 Filipinas pk 3 Pakistan pl 3 Polonia pm 1 Saint Pierre y Miquelon pn 1 Illa Pitcairn pr 1 Puerto Rico pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Rumania ru 2 Russia (Federacio Rusa) rw 1 Rwanda sa 3 Arabia Saudita sb 1 Illes Solomon sc 1 Seychelles sd 1 Sudan se 2 Suecia sg 3 Singapur sh 1 Santa Helena si 2 Elovenia sj 1 Illes Svalbard i Jan Mayen sk 2 Eslovaquia (Republica Eslovaca) sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Santo Tomas i Principe su 2 Unio Sovietica (Antiga URSS) sv 3 El Salvador sy 1 Siria sz 1 Swaziland tc 1 Illes Turcas i Caicos td 1 Chad tf 1 Territoris Francesos del Sud tg 1 Togo th 3 Tailandia tj 1 Tajikistan tk 1 Tokelau tl 1 Timor Oriental tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Timor Oriental tr 3 Turquia tt 3 Trinidad y Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukrania ug 3 Uganda uk 3 Regne Unit um 1 USA Illes Remotes Menors (US Minor Outlying Islands) us 4 Estats Units uy 3 Uruguay uz 1 Uzbekistan va 1 Vatica vc 1 San Vincente i Granadinas ve 3 Venezuela vg 1 Illes Verges (Britaniques) vi 1 Illes Verges (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Illes Wallis i Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Yugoslavia za 3 Africa del Sud zm 1 Zambia zw 3 Zimbabwe analog-ce-6.0.17/lang/catdom.tab000066400000000000000000000120661406366436600163360ustar00rootroot00000000000000aero 2 Indústria del Transport Aeri arpa 1 Arpanet (Agenc. de Invest. de Proj. Avanç.) biz 2 Negocis com 2 Comercial coop 2 Cooperatives edu 2 USA Educacional gov 2 USA Governamental info 2 Informació int 2 Organitzacions Internacionals mil 2 USA Militar museum 2 Museus name 3 Persones net 2 XARXA (Network) org 2 Organitzacions pro 3 Professionals ac 1 Illa d'Ascensió ad 2 Andorra ae 3 Emirats Árabs Units af 1 Afganistan ag 2 Antiga i Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antillas Holandeses ao 1 Angola aq 1 Antàrtida ar 3 Argentina as 1 Samoa Americà at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijan ba 3 Bosnia-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Bèlgica bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrein bi 1 Burundi bj 1 Benin bm 1 Bermudas bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brasil bs 1 Bahamas bt 1 Bhutan bv 1 Illes de Bouvet bw 1 Botswana by 1 Bielorussia bz 1 Belice ca 3 Canadà cc 1 Illes Cocos (Keeling Islands) cd 1 República Democratica del Congo cf 1 República Centreafricana cg 1 Congo ch 2 Suiza ci 1 Costa d'Ivory ck 1 Illes Cook cl 2 Chile cm 1 Camerún cn 3 China co 3 Colombia cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Illa de Nadal (Christmas Island) cy 3 Chipre cz 2 República Xeca de 2 Alemania dj 1 Djibouti dk 2 Dinamarca dm 2 Dominica do 3 República Dominicana dz 1 Argelia ec 3 Ecuador ee 2 Estonia eg 3 Egipte eh 1 Sahara Occidental er 1 Eritrea es 2 Espanya et 1 Etiopía fi 2 Finlandia fj 3 Fiji fk 1 Falkland Islands (Illes Malvinas) fm 1 Micronesia fo 1 Illes de Faroe fr 2 França fx 1 França (Territori Europeu) ga 1 Gabon gb 1 Gran Bretanya gd 1 Granada ge 1 Georgia gf 1 Guaiana Francesa gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenlandia gm 1 Gambia gn 1 Guinea gp 1 Guadelupe (Francesa) gq 1 Guinea Ecuatorial gr 2 Grecia gs 1 Illes S. Georgia & S. Sandwich gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Illes Heard y McDonald hn 2 Honduras hr 2 Croacia ht 1 Haití hu 2 Hungría id 3 Indonesia ie 2 Irlanda il 3 Israel im 1 Illa de Man in 3 India io 1 Territori Britànic de l'Oceà Indic (British Indian Ocean Territory) iq 1 Iraq ir 1 Irán, República Islàmica de is 2 Islandia it 2 Italia je 1 Jersey jm 3 Jamaica jo 3 Jordà (Jordania) jp 3 Japó ke 3 Kenya kg 1 Kyrgyzstan kh 1 Cambodia ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts & Nevis Anguilla kp 1 Corea del nord (PR Democràtic de Corea) kr 3 Corea del sud (República de Corea) kw 3 Kuwait ky 1 Illes Caimàn kz 1 Kazakhstan la 1 Laos (Rep. Dem. del poble Lao) lb 3 El Líba lc 1 Santa Lucía li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lithuania lu 2 Luxemburg lv 2 Latvia ly 1 Libia (Jamahiriya Arab Libi) ma 1 Marroc mc 2 Mónaco md 1 Moldova (República de Moldova) mg 1 Madagascar mh 1 Illes Marshall mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macau mp 1 Illes Nortenyes de Mariana (Northern Mariana Islands) mq 1 Martinique (Francesa) mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Maurici mv 1 Maldives mw 1 Malawi mx 3 Méxic my 3 Malasia mz 1 Mozambic na 1 Namibia nc 1 Nueva Caledonia (Francesa) ne 1 Niger nf 1 Illa Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Holanda no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nova Zelanda om 1 Omàn pa 3 Panamà pe 3 Perú pf 1 Polinesia Francesa pg 3 Papua Nova Guinea ph 3 Filipinas pk 3 Pakistán pl 3 Polonia pm 1 Saint Pierre y Miquelon pn 1 Illa Pitcairn pr 1 Puerto Rico pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Rumanía ru 2 Russia (Federació Rusa) rw 1 Rwanda sa 3 Arabia Saudita sb 1 Illes Solomón sc 1 Seychelles sd 1 Sudan se 2 Suecia sg 3 Singapur sh 1 Santa Helena si 2 Elovenia sj 1 Illes Svalbard i Jan Mayen sk 2 Eslovaquia (República Eslovaca) sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Santo Tomás i Príncipe su 2 Unió Sovietica (Antiga URSS) sv 3 El Salvador sy 1 Siria sz 1 Swaziland tc 1 Illes Turcas i Caicos td 1 Chad tf 1 Territoris Francesos del Sud tg 1 Togo th 3 Tailandia tj 1 Tajikistan tk 1 Tokelau tl 1 Timor Oriental tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Timor Oriental tr 3 Turquia tt 3 Trinidad y Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukrania ug 3 Uganda uk 3 Regne Unit um 1 USA Illes Remotes Menors (US Minor Outlying Islands) us 4 Estats Units uy 3 Uruguay uz 1 Uzbekistan va 1 Vaticà vc 1 San Vincente i Granadinas ve 3 Venezuela vg 1 Illes Verges (Britàniques) vi 1 Illes Verges (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Illes Wallis i Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Yugoslavia za 3 África del Sud zm 1 Zambia zw 3 Zimbabwe analog-ce-6.0.17/lang/cn.lng000066400000000000000000000243551406366436600155050ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ## *GB2312 ## Abbreviations for the day and month names. ÖÜÈÕ ÖÜÒ» Öܶþ ÖÜÈý ÖÜËÄ ÖÜÎå ÖÜÁù Ò»Ô ¶þÔ ÈýÔ ËÄÔ ÎåÔ ÁùÔ ÆßÔ °ËÔ ¾ÅÔ ʮÔ ʮһÔ ʮ¶þÔ ## Next some standard common words. ## Abbreviation for "week beginning" ÿÖÜ Äê ## Quarter of a year ¼¾ Ô ÈÕ Ìì Сʱ ·ÖÖÓ ·ÖÖÓ Ãë Ãë Byte Bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes ÇëÇó ÇëÇó ÈÕÆÚ ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ÈÕÆÚ Ê±¼ä ʱ¼ä ×îÔçÈÕÆÚ ×îÔçʱ¼ä ×î½üÈÕÆÚ ×î½üʱ¼ä µµ°¸ µµ°¸ Ö÷»ú Ö÷»ú ÐéÄâÖ÷»ú ÐéÄâÖ÷»ú Ŀ¼ Ŀ¼ ÍøÓò ÍøÓò ×éÖ¯ ×éÖ¯ À©Õ¹Ãû À©Õ¹Ãû URL URLs ä¯ÀÀÆ÷ ä¯ÀÀÆ÷Êý ²Ù×÷ϵͳ ²Ù×÷ϵͳ ## (= operating system, operating systems) ´óС ¼ìË÷×Ö ¼ìË÷×Ö¸öÊý ÍøÕ¾ ÍøÕ¾ ʹÓÃÕß Ê¹ÓÃÕß ×´Ì¬´úÂë ״̬´úÂë Web Server ͳ¼Æ: ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports ×ܸÅÒª±¨¸æ ## The time reports, plus "busiest" strings (at the bottom of each report) ÿÄ걨¸æ ¸ß·åÄê: ÿ¼¾±¨¸æ ¸ß·å¼¾ ÿÔ±¨¸æ ¸ß·åÔÂ: ÿÖܱ¨¸æ ¸ß·åÖÜ: ¿ªÊ¼ÓÚ Ã¿ÈÕ±¨¸æ¸ÅÒª ÿÈÕ±¨¸æ ¸ß·åÈÕ: ÿСʱ±¨¸æ ÿСʱ±¨¸æ¸ÅÒª ±¾ÖÜÿСʱ±¨¸æ ¸ß·åСʱ: ÿ¿Ì(15·ÖÖÓ)±¨¸æ ÿ¿Ì(15·ÖÖÓ)±¨¸æ¸ÅÒª ¸ß·åÒ»¿Ì: Îå·ÖÖÓ±¨¸æ Îå·ÖÖÓ±¨¸æ¸ÅÒª ¸ß·åÎå·ÖÖÓ: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Ö÷»ú±¨¸æ Ö÷»ú Ö÷»ú n Ö÷»úÖØÐµ¼Ïò±¨¸æ Ö÷»ú Ö÷»ú n Ö÷»úʧ°Ü±¨¸æ Ö÷»ú Ö÷»ú n Ŀ¼±¨¸æ Ŀ¼ Ŀ¼ n ÎļþÀàÐͱ¨¸æ À©Õ¹Ãû À©Õ¹Ãû n ÇëÇó±¨¸æ µµ°¸ µµ°¸ n ÖØÐµ¼Ïò±¨¸æ µµ°¸ µµ°¸ n ʧ°Ü±¨¸æ µµ°¸ µµ°¸ n À´Ô´ÍøÒ³±¨¸æ Á¬½áµÄ URL Á¬½áµÄ URLs n À´Ô´ÍøÕ¾±¨¸æ Á¬½áµÄÍøÕ¾ Á¬½áµÄÍøÕ¾ n ÖØÐµ¼ÏòÁ¬½á(Redirected Referrer)±¨¸æ Á¬½áµÄ URL Á¬½áµÄ URLs n ʧ°ÜÁ¬½áµã(Referrer)±¨¸æ Á¬½áµÄ URL Á¬½áµÄ URLs n ËÑѰ¼ìË÷±¨¸æ ¼ìË÷ ¼ìË÷ n ¼ìË÷×Ö±¨¸æ ¼ìË÷×Ö ¼ìË÷×Ö n ÄÚ²¿ËÑѰ¼ìË÷±¨¸æ ¼ìË÷ ¼ìË÷ n ÄÚ²¿¼ìË÷×Ö±¨¸æ ¼ìË÷×Ö ¼ìË÷×Ö n ÐéÄâÖ÷»ú±¨¸æ ÐéÄâÖ÷»ú ÐéÄâÖ÷»úÊý n ÐéÄâÖ÷»úÖØÐµ¼Ïò±¨¸æ ÐéÄâÖ÷»ú ÐéÄâÖ÷»ú n ÐéÄâÖ÷»úʧ°Ü±¨¸æ ÐéÄâÖ÷»ú ÐéÄâÖ÷»ú n ʹÓÃÕß±¨¸æ ʹÓÃÕß Ê¹ÓÃÕß n ʹÓÃÕßÖØÐµ¼Ïò±¨¸æ ʹÓÃÕß Ê¹ÓÃÕß n ʹÓÃÕßʧ°Ü±¨¸æ ʹÓÃÕß Ê¹ÓÃÕß n ä¯ÀÀÆ÷¸ÅÒª±¨¸æ ä¯ÀÀÆ÷ ä¯ÀÀÆ÷ n ä¯ÀÀÆ÷±¨¸æ ä¯ÀÀÆ÷ ä¯ÀÀÆ÷ n ²Ù×÷ϵͳ±¨¸æ ²Ù×÷ϵͳ ²Ù×÷ϵͳ n ÍøÓò±¨¸æ ÍøÓò ÍøÓò n À´Ô´×éÖ¯µ¥Î»±¨¸æ ×éÖ¯µ¥Î» ×éÖ¯µ¥Î» n ״̬´úÂ뱨¸æ ״̬´úÂë ״̬´úÂë n ´¦Àíʱ¼ä±¨¸æ µµ°¸´óС±¨¸æ ## Used at the bottom of the report ´Ëͳ¼ÆÒԴ˲úÉú: Ö´ÐÐʱ¼ä СÓÚ1 ## Used in the time reports ÿµ¥Î» ´ú±í »òδÂúµÄ²¿·Ö Ò³ÇëÇó Ò³ÇëÇó ## Used at the bottom of each non-time report: need m, f & n genders * * ûÓÐÁгö ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report ³ÌÐò¿ªÊ¼ÓÚ ·ÖÎöÇëÇó×Ô µ½ ## Used in the General Summary È«²¿³É¹¦ÇëÇó ÿÌìÆ½¾ù³É¹¦ÇëÇó Ò³ÇëÇóÈ«²¿³É¹¦ÇëÇó ÿÈÕÆ½¾ù³É¹¦Ò³ÇëÇó ²»º¬×´Ì¬´úÂëµÄ¼Í¼ÐÐÊý È«²¿µÄʧ°ÜÇëÇó ±»×ªÏòµÄÇëÇó º¬×´Ì¬´úÂëµÄÇëÇó ÏàÒì²»ÖØ¸´µÄÇëÇó ÏàÒì²»ÖØ¸´µÄÀ´·ÃÖ÷»ú »µµôµÄ¼Í¼ÐÐÊý ÎÞÓõļͼÊý ×Ü´«ÊäÁ¿ ƽ¾ùÿÌì´«ÊäÁ¿ À¨ºÅÄÚµÄÊýÖµ±íʾ ÆßÌìÖÁ ×îºóÆßÌì Ö±½ÓÌøµ½ ¶¥¶Ë ## Some special phrases for particular reports. [ÎÞ·¨·´½âµÄµØÖ·] [ÎÞÍøÓò] [Î´ÖªÍøÓò] [¸ùĿ¼] [ûÓÐĿ¼] [ÎÞÀ©Õ¹Ãû] [Ŀ¼Êý] δ֪µÄ Windows ÆäËü Unix ÍøÒ³»úÆ÷ÈË Robots δ֪µÄ²Ù×÷ϵͳ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Áгö×îÉÏÃæµÄ %s * * Áгö×îÉÏÃæµÄ %d %s * * Áгö %s ## "by" in the phrase "listing the first 3 files BY number of requests" ÒÀ ## All requests WITH AT LEAST 10 requests ÖÁÉÙÓÐ ## Different ways of doing floors ×î½üÆßÌìÄÚµÄÇëÇó ×î½üÆßÌìÄÚµÄÇëÇó ×î½üÆßÌìÄÚÒ³ÇëÇó ×î½üÆßÌìÄÚÒ³ÇëÇó ÖØÐµ¼ÏòÇëÇó ÖØÐµ¼ÏòÇëÇó ×î½üÆßÌìÖØÐµ¼ÏòµÄÇëÇó ×î½üÆßÌìÖØÐµ¼ÏòµÄÇëÇó ʧ°ÜÇëÇó ʧ°ÜÇëÇó ×î½üÆßÌìÄÚµÄʧ°ÜÇëÇó ×î½üÆßÌìÄÚµÄʧ°ÜÇëÇó %Á÷Á¿ %×î½üÆßÌìÄÚµÄÁ÷Á¿ %×î´óÁ÷Á¿ %×î½üÆßÌìÄÚµÄ×î´óÁ÷Á¿ Á÷Á¿(byte) Á÷Á¿(bytes) ## ?bytes represents kbytes, Mbytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days ÇëÇó×Ô´Ó ÖØÐµ¼ÏòÇëÇó×Ô´Ó Ê§°ÜÇëÇó×Ô´Ó µÚÒ»´ÎÇëÇóÔÚ µÚÒ»´ÎÖØÐµ¼ÏòÇëÇóÔÚ µÚÒ»´Îʧ°ÜÇëÇóÔÚ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ÅÅÐò: ## Used at the top of each report Õâ·Ý±¨¸æ°üÀ¨ÁË ## Used in pie charts ´ËͼÐλæÖƸù¾Ý: ## different ways of sorting Á÷Á¿ ×î½üÆßÌìÄÚµÄÁ÷Á¿ %ÇëÇó %×î½üÆßÌìÄÚµÄÇëÇó %×î´óÇëÇó %×î½üÆßÌìÄÚµÄ×î´óÇëÇó ÇëÇóÊý ×î½üÆßÌìÄÚµÄÇëÇóÊý %¶ÔÒ³ÇëÇóÊý %×î½üÆßÌìÄÚ¶ÔÒ³ÇëÇóÊý %×î´ó¶ÔÒ³ÇëÇóÊý %×î½üÆßÌìÄÚ×î´ó¶ÔÒ³ÇëÇóÊý Ò³ÇëÇóÊý ×î½üÆßÌìÄÚ¶ÔÒ³ÇëÇóÊý %ÖØÐµ¼ÏòÇëÇóÊý %×î½üÆßÌìÄÚÖØÐµ¼ÏòÇëÇóÊý %×î´óÖØÐµ¼ÏòÇëÇóÊý %×î½üÆßÌìÄÚ×î´óÖØÐµ¼ÏòÇëÇóÊý ÖØÐµ¼ÏòÇëÇóÊý ×î½üÆßÌìÄÚÖØÐµ¼ÏòÇëÇóÊý %ʧ°ÜÇëÇóÊý %×î½üÆßÌìÄÚʧ°ÜÇëÇóÊý %ʧ°ÜÇëÇó×î´óÊý %×î½üÆßÌìÄÚ×î´óʧ°ÜÇëÇóÊý ʧ°ÜÇëÇóÊý ×î½üÆßÌìÄÚʧ°ÜÇëÇóÊý ×î½üÇëÇóʱ¼ä ×î½üתÏòÇëÇóʱ¼ä ×î½üʧ°ÜÇëÇóʱ¼ä µÚÒ»´ÎÇëÇóʱ¼ä µÚÒ»´ÎÖØÐµ¼Ïòʱ¼ä µÚÒ»´Îʧ°ÜÇëÇóʱ¼ä ## 3 other ways of sorting in m, f, & n * * °´×Öĸ˳ÐòÅÅÐò * * °´Êý×Ö´óСÅÅÐò * * δÅÅÐò ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y %H:%n ## "Program started at" and "Analysed requests from" %w, %m %D %Y %H:%n ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %H:%n-%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %H:%n-%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %m/%d/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %m/%d/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 ¼ÌÐøÇëÇó 101 תÏòЭÒé 1xx [¸÷ÖÖÐÅÏ¢] 200 ³É¹¦ 201 ´´½¨ 202 ±»Î´À´½ø³Ì½ÓÊÜ 203 ÎÞÊÚȨÐÅÏ¢ 204 ³É¹¦£¬µ«ÎÞÐÅÏ¢´«µÝ 205 ÖØ×éÎļþ 206 ²¿·ÖÄÚÈÝ 2xx [¸÷Öֳɹ¦] 300 ¶àÖÖÎļþÔ¤±¸ 301 ÎļþÓÀ¾ÃÒÆ¶¯ 302 ÎļþÔڱ𴦠303 ¿´ÆäËûÎļþ 304 ×ÔÉϴμìË÷ºóÎÞ¸üР305 ÓôúÀí 306 תÏò´úÀí 307 ÎļþÔÝÊ±ÒÆ¶¯ 3xx [¶àÖÖתÏò] 400 ʧ°ÜÇëÇó 401 ÐèÒªÊÚȨ 402 ÐèÒª¸¶¿î 403 ½ûÖ¹·ÃÎÊ 404 ÎļþûÓÐÕÒµ½ 405 ·½·¨²»ÔÊÐí 406 ¶Ô¿Í»§Î޿ɽÓÊÜÎļþ 407 ÐèÒª´úÀíÊÚȨ 408 ÇëÇó³¬Ê± 409 ÇëÇóºÍ×ÊԴ״̬³åÍ» 410 ÎļþÓÀ¾ÃÏûʧ 411 ÐèÒª³¤¶È 412 ÊÂÏÈ×¼±¸Ê§°Ü 413 ÇëÇó¹ý³¤ 414 ÇëÇóÎļþÃû¹ý³¤ 415 ²»±»Ö§³ÖµÄýÌåÀàÐÍ 416 ÇëÇó·¶Î§²»ºÏ·¨ 417 Ô¤ÆÚʧ°Ü 4xx [¶àÖÖ¿Í»§/Óû§´íÎó] 500 ÄÚ²¿·þÎñÆ÷´íÎó 501 ÇëÇóÀàÐͲ»±»Ö§³Ö 502 ÉÏÓηþÎñÆ÷´íÎó 503 ·þÎñÔÝʱֹͣ 504 Íø¹Ø³¬Ê± 505 HTTP°æ±¾²»±»Ö§³Ö 506 תÏòʧ°Ü 5xx [¶àÖÖ·þÎñÆ÷´íÎó] xxx [δ֪] analog-ce-6.0.17/lang/cndesc.txt000066400000000000000000000061171406366436600163770ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Õⲿ·ÝµÄ±¨¸æÒÔÄêΪµ¥Î»×÷ͳ¼Æ. # Quarterly Report Õⲿ·ÝµÄ±¨¸æÒÔ¼¾Îªµ¥Î»×÷ͳ¼Æ. # Monthly Report Õⲿ·ÝµÄ±¨¸æÒÔÔÂΪµ¥Î»×÷ͳ¼Æ. # Weekly Report Õⲿ·ÝµÄ±¨¸æÒÔÖÜΪµ¥Î»×÷ͳ¼Æ. # Daily Report Õⲿ·ÝµÄ±¨¸æÒÔÌìΪµ¥Î»×÷ͳ¼Æ. # Hourly Report Õⲿ·ÝµÄ±¨¸æÒÔСʱΪµ¥Î»×÷ͳ¼Æ. # Quarter-Hour Report Õⲿ·ÝµÄ±¨¸æÒÔ¿Ì(15·ÖÖÓ)Ϊµ¥Î»×÷ͳ¼Æ. # Five-Minute Report Õⲿ·ÝµÄ±¨¸æÒÔÎå·ÖÖÓΪµ¥Î»×÷ͳ¼Æ. # Daily Summary Õⲿ·ÝµÄ±¨¸æ½«ËùÓмǼÒÔÿÖܸ÷ÈÕÇø·Ö×÷¼Ó×Üͳ¼Æ. # Hourly Summary Õⲿ·ÝµÄ±¨¸æ½«ËùÓмǼÒÔÿÌì¸÷¸öÐ¡Ê±Çø·Ö×÷¼Ó×Üͳ¼Æ. # Hour of the Week Summary Õⲿ·ÝµÄ±¨¸æ½«±¾ÖÜËùÓмǼÒÔÿÌì¸÷¸öÐ¡Ê±Çø·Ö×÷¼Ó×Üͳ¼Æ. # Quarter-Hour Summary Õⲿ·ÝµÄ±¨¸æ½«ËùÓмǼÒÔÿÌìÖеÄÿ15·ÖÖÓÇø·Ö×÷¼Ó×Üͳ¼Æ. # Five-Minute Summary Õⲿ·ÝµÄ±¨¸æ½«ËùÓмǼÒÔÿÌìÖеÄÿ5·ÖÖÓÇø·Ö×÷¼Ó×Üͳ¼Æ. # General Summary Õⲿ·ÝµÄ±¨¸æÏÔʾ×ÜÌåͳ¼ÆÐÅÏ¢. # Request Report Õⲿ·ÝµÄ±¨¸æÁгö±¾ÍøÕ¾Éϵĵµ°¸. # Redirection Report Õⲿ·ÝµÄ±¨¸æÁгöÔì³ÉÇëÇó±»µ¼ÏòÁíÒ»µµ°¸µÄµµ°¸. (ͨ³£Ôì³ÉµÄÔ­ÒòÓÐ: Ŀ¼×îºóÃæÉÙÁËбÏß/, »òÊÇÇ¿ÆÈÖØÐµ¼ÏòµÄ CGI ³ÌÐò) # Failure Report Õⲿ·ÝµÄ±¨¸æÁгöÔì³ÉÇëÇóʧ°ÜµÄÎļþÃû³Æ, ÀýÈçÕÒ²»µ½µµ°¸. # File Type Report Õⲿ·ÝµÄ±¨¸æÁгö±»ÇëÇóµÄµµ°¸µÄÀ©Õ¹Ãû. # Directory Report Õⲿ·ÝµÄ±¨¸æÁгö±»ÇëÇóµµ°¸ËùÊôµÄĿ¼. (ÁгöµÄĿ¼°üÀ¨Æä×ÓĿ¼µÄ¼Ç¼) # Host Report Õⲿ·ÝµÄ±¨¸æÁгöËͳöÇëÇóµÄÖ÷»úµØÖ·. # Host Redirection Report Õⲿ·ÝµÄ±¨¸æÁгö±»ÖØÐµ¼ÏòµÄÖ÷»úµØÖ·. # Host Failure Report Õⲿ·ÝµÄ±¨¸æÁгöËͳöʧ°ÜÇëÇóµÄÖ÷»ú. # Domain Report Õⲿ·ÝµÄ±¨¸æÁгöÍøÕ¾²Î·ÃÕßµÄÀ´Ô´¹ú¼Ò. # Referrer Report Õⲿ·ÝµÄ±¨¸æÁгö±¾ÍøÕ¾µÄÁ¬½áµã. (Referrer, ¼´Á¬ÖÁ±¾ÍøÕ¾ÄÚµµ°¸µÄÍøÒ³ÆäλÖÃ, »òÊDZ¾ÍøÕ¾ÉÏÓаüÀ¨Í¼Æ¬µÄÍøÒ³µÈ) # Referring Site Report Õⲿ·ÝµÄ±¨¸æÁгöÁ¬½áÖÁ±¾Õ¾ÄÚµµ°¸µÄÖ÷»úͳ¼Æ. # Redirected Referrer Report Õⲿ·ÝµÄ±¨¸æÁгöÔì³É±»ÖØÐµ¼ÏòµÄÇëÇóµÄÀ´Ô´. # Failed Referrer Report Õⲿ·ÝµÄ±¨¸æÁгöÁ¬½áÖÁ±¾Õ¾ÄÚÒѲ»´æÔÚµµ°¸µÄÁ¬½áµãͳ¼Æ. # Browser Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßËùʹÓõÄä¯ÀÀÆ÷. # Virtual Host Report Õⲿ·ÝµÄ±¨¸æÁгö¸ö±ðÐéÄâÖ÷»úµÄ¼Ç¼ͳ¼Æ. # Virtual Host Redirection Report Õⲿ·ÝµÄ±¨¸æÁгö¸ö±ðÐéÄâÖ÷»ú±»ÖØÐµ¼ÏòµÄÇëÇóͳ¼Æ. # Virtual Host Failure Report Õⲿ·ÝµÄ±¨¸æÁгö¸ö±ðÐéÄâÖ÷»úµÄʧ°ÜÇëÇóͳ¼Æ. # User Report Õⲿ·ÝµÄ±¨¸æÁгöËͳöÇëÇóµÄʹÓÃÕß(Èç¹û¿ÉÒÔÓÉÈÏÖ¤»ò cookie µÃµ½). # User Redirection Report Õⲿ·ÝµÄ±¨¸æÁгö±»ÖØÐµ¼ÏòµÄʹÓÃÕß. # User Failure Report Õⲿ·ÝµÄ±¨¸æÁгöËͳöʧ°ÜÇëÇóµÄʹÓÃÕß. # Organisation Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßµØÖ·ËùÊôµÄ×éÖ¯. # Search Query Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßÔÚËÑѰÒýÇæÖÐÁ¬µ½´ËÕ¾ËùʹÓõļìË÷Ìõ¼þ. # Search Word Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßÔÚËÑѰÒýÇæÖÐÁ¬µ½´ËÕ¾ËùʹÓõļìË÷¹Ø¼ü´Ê. # Internal Search Query Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßÔÚÕ¾ÄÚËùʹÓõļìË÷Ìõ¼þ. # Internal Search Word Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßÔÚÕ¾ÄÚËùʹÓõļìË÷¹Ø¼ü´Ê. # Browser Summary Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßËùʹÓõÄä¯ÀÀÆ÷ͳ¼Æ. # Operating System Report Õⲿ·ÝµÄ±¨¸æÁгö²Î·ÃÕßËùʹÓõIJÙ×÷ϵͳͳ¼Æ. # File Size Report Õⲿ·ÝµÄ±¨¸æÁгö±»ÇëÇóµÄµµ°¸´óСͳ¼Æ. # Status Code Report Õⲿ·ÝµÄ±¨¸æÁгö HTTP ״̬´úÂëµÄͳ¼Æ. # Processing Time Report Õⲿ·ÝµÄ±¨¸æÁгö³É¹¦µÄÇëÇó´¦ÀíËù»¨µÄʱ¼ä. analog-ce-6.0.17/lang/cndom.tab000066400000000000000000000170531406366436600161700ustar00rootroot00000000000000aero 2 Air Transport Industry º½ÌìÒµ arpa 1 Arpanet biz 2 Businesses ÉÌÒµ com 2 Commercial ÉÌÒµ coop 2 Co-operatives ºÏ×÷Éç(×éÖ¯) edu 2 ÃÀ¹ú½ÌÓýµ¥Î» gov 2 ÃÀ¹úÕþ¸®µ¥Î» info 2 Informational Ò»°ãÐÅÏ¢ int 2 International Treaty Organizations ¹ú¼Ê×éÖ¯ mil 2 ÃÀ¹ú¾üʵ¥Î» museum 2 Museums ²©Îï¹ÝµÈÕ¹ÀÀ»ú¹¹ name 3 Individuals ¸öÈËʹÓà net 2 Network ÍøÂç org 2 ·ÇÓªÀûÐÔ×éÖ¯ pro 3 Professionals רҵÈËÊ¿»ò»ú¹¹ ac 1 Ascension Island ÑÇÉ­ÐÀµº ad 2 Andorra °²µÀ¶û¹²ºÍ¹ú ae 3 United Arab Emirates °¢À­²®ÁªºÏ´ó¹«¹ú af 1 Afghanistan °¢¸»º¹ ag 2 Antigua and Barbuda °²µØ¿¨¼°°Í²¼´ï ai 1 Anguilla Ó¢Êô°²¹ÅÀ­µº al 1 Albania °¢¶û°ÍÄáÑÇ am 2 Armenia ÑÇÃÀÄáÑÇ an 1 Netherlands Antilles ºÉÊô°²µØÀï˹Ⱥµº ao 1 Angola °²¸çÀ­ aq 1 Antartica Äϼ«ÖÞ ar 3 Argentina °¢¸ùÍ¢ as 1 American Samoa ÃÀÊôÈøÄ¦ÑÇ at 3 Austria °ÂµØÀû au 3 Australia °Ä´óÀûÑÇ aw 1 Aruba °¢Â³°Íµº az 1 Azerbaijan ÑÇÈû°ÝÈ» ba 3 Bosnia and Herzegovina ²¨Î÷ÄáÑÇ-ºÕ×ȹûάÑÇ bb 2 Barbados °Í±´¶à bd 1 Bangladesh ÃϼÓÀ­¹²ºÍ¹ú be 2 Belgium ±ÈÀûʱ bf 1 Burkina Faso ²¼»ùÄÇ·¨Ë÷ bg 2 Bulgaria ±£¼ÓÀûÑÇ bh 1 Bahrain °ÍÁÖ bi 1 Burundi ÆÑ¡µØ bj 1 Benin ±´ÄÏ bm 1 Bermuda °ÙĽ´ïȺµº bn 1 Brunei Darussalam ÎÄÀ³ bo 3 Bolivia ²£ÀûάÑÇ br 3 Brazil °ÍÎ÷ bs 1 Bahamas °Í¹þÂí bt 1 Bhutan ²»µ¤ bv 1 Bouvet Island ²¼Íþµº bw 1 Botswana ²¨ÔúÄǹ²ºÍ¹ú by 1 Belarus °×¶íÂÞ˹ bz 1 Belize ±´Àï˹ ca 2 Canada ¼ÓÄôó cc 1 Cocos (Keeling) Islands ¿Û¿Û˹Ⱥµº cd 1 Democratic Republic of the Congo ¸Õ¹ûÃñÖ÷¹²ºÍ¹ú cf 1 Central African Republic Öзǹ²ºÍ¹ú cg 1 Republic of Congo ¸Õ¹û ch 2 Switzerland ÈðÊ¿ ci 1 Ivory Coast (Cote d'Ivoire) ÏóÑÀº£°¶¹²ºÍ¹ú ck 1 Cook Islands ¿â¿ËȺµº cl 2 Chile ÖÇÀû cm 1 Cameroon ¿¦Âó¡ cn 3 China Öйú co 3 Colombia ¸çÂ×±ÈÑÇ cr 3 Costa Rica ¸ç˹´ïÀè¼Ó cu 1 Cuba ¹Å°Í cv 1 Cape Verde άµÂ½Ç cx 1 Christmas Island Ê¥µ®µº cy 3 Cyprus ÈûÆÕÀÕ˹ cz 2 Czech Republic ½Ý¿Ë¹²ºÍ¹ú de 2 Germany µÂ¹ú dj 1 Djibouti ¼ª²¼µØ dk 2 Denmark µ¤Âó dm 2 Dominica ¶àÃ×Äá¿Ë do 2 Dominican Republic ¶àÃ×Äá¿Ë¹²ºÍ¹ú dz 1 Algeria °¢¶û¼°ÀûÑÇ ec 3 Ecuador ¶ò¹Ï¶à¶û ee 2 Estonia °®É³ÄáÑÇ eg 3 Egypt °£¼° eh 1 Western Sahara Î÷Èö¹þÀ­ er 1 Eritrea ¶òÁ¢ÌØÀïÑÇ es 2 Spain Î÷°àÑÀ et 1 Ethiopia °£Èû¶í±ÈÑÇ fi 2 Finland ·ÒÀ¼ fj 3 Fiji 쳼à fk 1 Falkland Islands (Malvina) Ó¢Êô¸£¿ËÀ¼Èºµº fm 1 Federal State of Micronesia ÃÜ¿ËÂÞÎ÷ÄáÑÇ fo 1 Faroe Islands ·ÇÂåȺµº fr 2 France ·¨¹ú ga 1 Gabon ¼ÓÅí gd 1 Grenada ¸ñÈðÄÉ´ï ge 1 Georgia ÇÇÖÎÑÇ gf 1 French Guiana ·¨Êô¸ÇÑÇÄÇ gg 1 Guernsey Ó¢Êô¹¢Î÷µº gh 3 Ghana åÈÄÉ gi 1 Gibraltar Ö±²¼ÂÞÍÓ gl 1 Greenland ¸ñÁêÀ¼ gm 1 Gambia ¸Ê±ÈÑÇ gn 1 Guinea ¼¸ÄÚÑÇ gp 1 Guadeloupe (French) ·¨Êô¹Ï´ï·µº gq 1 Equatorial Guinea ³àµÀ¼¸ÄÚÑÇ gr 2 Greece Ï£À° gs 1 South Georgia and the South Sandwich Islands ÄÏÇÇÖÎÑǼ°ÄÏÈýÃ÷ÖÎȺµº gt 3 Guatemala ¹ÏµØÂíÀ­ gu 1 Guam (USA) ¹Øµº gw 1 Guinea-Bissau ¼¸ÄÚÑDZÈÉܹ²ºÍ¹ú gy 1 Guyana ¸ÇÑÇÄÇ hk 3 Hong Kong Ïã¸Û hm 1 Heard and McDonald Islands ºÕµÂÂóµ±ÀÍȺµº hn 2 Honduras ºé¶¼À­Ë¹ hr 2 Croatia (Hrvatske) ¿ËÂÞ°£Î÷ÑÇ ht 1 Haiti º£µØ hu 2 Hungary ÐÙÑÀÀû id 3 Indonesia Ó¡Äá ie 2 Ireland °®¶ûÀ¼ il 3 Israel ÒÔÉ«ÁÐ im 1 Isle of Man Âü³Çµº in 3 India Ó¡¶È io 1 British Indian Ocean Territory Ó¢ÊôÓ¡¶ÈÑóÁìµØ iq 1 Iraq ÒÁÀ­¿Ë ir 1 Iran ÒÁÀÊ is 2 Iceland ±ùµº it 2 Italy Òâ´óÀû je 1 Jersey Ó¢ÊôÔóÎ÷µº jm 3 Jamaica ÑÀÂò¼Ó jo 3 Jordan Ô¼µ© jp 3 Japan ÈÕ±¾ ke 3 Kenya ¿ÏÑÇ kg 1 Kyrgyzstan ¼ª¶û¼ªË¹ kh 1 Cambodia ¼íÆÒÕ¯ ki 1 Kiribati ¼ªÀï°Í˹¹²ºÍ¹ú km 1 Comoros ¿ÆÄ¦Âå kn 1 Saint Kitts & Nevis Ê¥¿ËÀï˹¶à¸£¼°Äáά˹ kp 1 North Korea (Democratic People's Republic of Korea) ±±º« kr 3 South Korea (Republic of Korea) ÄϺ« kw 3 Kuwait ¿ÆÍþÌØ ky 1 Cayman Islands ¿ªÂüȺµº kz 1 Kazakhstan ¹þÈø¿Ë la 1 Laos å¼¹ú lb 3 Lebanon Àè°ÍÄÛ lc 1 Saint Lucia ʥ·Î÷Ñǵº li 2 Liechtenstein ÁÐÖ§¶ØË¹µÇ lk 1 Sri Lanka ˹ÀïÀ¼¿¨ lr 1 Liberia Àµ±ÈÈðÑÇ ls 1 Lesotho ÀµË÷ÍÐ lt 2 Lithuania Á¢ÌÕÍð lu 2 Luxembourg ¬ɭ±¤ lv 2 Latvia À­ÍÑάÑÇ ly 1 Libya Arab Jamahiriya Àû±ÈÑÇ ma 1 Morocco ĦÂå¸ç mc 2 Monaco ĦÄɸç md 1 Moldova Ħ¶û´ïάÑÇ mg 1 Madagascar Âí´ï¼Ó˹¼Ó mh 1 Marshall Islands ÂíÉܶûȺµº mk 3 Macedonia ÂíÆä¶Ù ml 1 Mali ÂíÀû mm 1 Myanmar Ãåµé mn 1 Mongolia ÃɹŠmo 1 Macau °ÄÃÅ mp 1 Northern Mariana Islands ±±ÂíÀï°²ÄÉȺµº mq 1 Martinique (French) ·¨ÊôÂíÌáÄᵺ mr 1 Mauritania éÀûËþÄáÑÇ ms 1 Montserrat ÃÉÌØÉ«À­Ìصº mt 3 Malta Âí¶ûËû mu 1 Mauritius Ä£ÀïÎ÷˹ mv 1 Maldives Âí¶û´ú·ò mw 1 Malawi ÂíÀ­Íþ mx 3 Mexico Ä«Î÷¸ç my 3 Malaysia ÂíÀ´Î÷ÑÇ mz 1 Mozambique ĪÈý±È¿Ë na 1 Namibia ÄÇÃ×±ÈÑÇ nc 1 New Caledonia (French) п¦Àï¶àÄáÑÇȺµº ne 1 Niger ÄáÈÕ nf 1 Norfolk Island ŵ¸£¿Ëµº ng 1 Nigeria Äμ°ÀûÑÇ ni 3 Nicaragua Äá¼ÓÀ­¹Ï nl 2 Netherlands ºÉÀ¼ no 2 Norway ŲÍþ np 1 Nepal Äá²´¶û nr 1 Nauru ŵ³ nu 2 Niue ŦÍþµº nz 3 New Zealand ŦÎ÷À¼ om 1 Oman °¢Âü pa 3 Panama °ÍÄÃÂí pe 3 Peru ÃØÂ³ pf 1 Polynesia (French) ·¨Êô²£ÀïÄáÎ÷ÑÇ pg 3 Papua New Guinea °Í²¼Ð¼¸ÄÚÑÇ ph 3 Philippines ·ÆÂɱö pk 3 Pakistan °Í»ù˹̹ pl 3 Poland ²¨À¼ pm 1 Saint Pierre and Miquelon ʥƥµº pn 1 Pitcairn Island Æ¤ÌØ¿µµº pr 1 Puerto Rico ÃÀÊô²¨¶àÀè¸÷ ps 1 Palestinian Territories °ÍÀÕ˹̹ÁìµØ pt 2 Portugal ÆÏÌÑÑÀ pw 1 Palau ²¯Áð py 3 Paraguay °ÍÀ­¹ç qa 1 Qatar ¿¨´ï re 1 Reunion Island (French) ÁôÄáÍú ro 2 Romania ÂÞÂíÄáÑÇ ru 2 Russia ¶íÂÞ˹ rw 1 Rwanda ¬Íú´ï sa 3 Saudi Arabia É³ÌØ°¢À­²® sb 1 Solomon Islands ËùÂÞÃÅȺµº sc 1 Seychelles Èûϯ¶ûȺµº sd 1 Sudan ËÕµ¤ se 2 Sweden Èðµä sg 3 Singapore ÐÂ¼ÓÆÂ sh 1 Saint Helena Ê¥ºÕÀÕÄõº si 2 Slovenia ˹ÂåάÄáÑÅ sj 1 Svalbard and Jan Mayen Islands Àä°¶¼°ÑëÂó¶÷Ⱥµº sk 2 Slovak Republic ˹Âå·¥¿Ë¹²ºÍ¹ú sl 1 Sierra Leone ʨ×Óɽ sm 1 San Marino Ê¥ÂíÀûŵ sn 1 Senegal ÈûÄÚ¼Ó¶û so 1 Somalia Ë÷ÂíÀï sr 1 Suriname ËÕÀûÄÏĪ st 1 Sao Tome and Principe Ê¥¶àÃÀÆÕÁÖÎ÷±È sv 3 El Salvador Èø¶ûÍß¶à sy 1 Syria Arab Republic ÐðÀûÑÇ sz 1 Swaziland Ê·Íß¼ÃÀ¼ tc 1 Turks and Caicos Islands ÍÁ¿Ë˹¼°¿ª¿ÆË¹Èºµº td 1 Chad ²éµÂ tf 1 French Southern Territories ·¨¹úÄÏ·½ÁìµØ tg 1 Togo ¶à¸ç th 3 Thailand Ì©¹ú tj 1 Tajikistan Ëþ¼ª¿Ë tk 1 Tokelau ÍпËÀÍȺµº tl 1 East Timor ¶«µÛãë tm 1 Turkmenistan ÍÁ¿âÂü tn 1 Tunisia Í»ÄáÎ÷ÑÇ to 1 Tonga ¶«¼Ó tp 1 East Timor ¶«µÛãë tr 3 Turkey ÍÁ¶úÆä tt 3 Trinidad and Tobago ǧÀï´ïÍб´¸ç tv 1 Tuvalu ÍÂÍß³Ⱥµº tw 3 Taiwan ̨Íå tz 1 Tanzania ̹ÉÐÄáÑÇ ua 3 Ukraine ÎÚ¿ËÀ¼ ug 3 Uganda Îڸɴï uk 3 United Kingdom Ó¢¹ú um 1 US Minor Outlying Islands ÃÀ¹úÍ⵺ us 4 United States ÃÀ¹ú uy 3 Uruguay ÎÚÀ­¹ç uz 1 Uzbekistan ÎÚ×ȱð¿Ë˹̹ va 1 Vatican City State èóµÙ¸Ô vc 1 Saint Vincent & Grenadines Ê¥ÎÄÉ­¼°¸ñÈðÄǶ¡ ve 3 Venezuela ίÄÚÈðÀ­ vg 1 Virgin Islands (British) Ó¢Êôά¾©Èºµº vi 1 Virgin Islands (USA) ÃÀÊôά¾©Èºµº vn 1 Vietnam Ô½ÄÏ vu 1 Vanuatu ÍßÄÇͼ¹²ºÍ¹ú wf 1 Wallis and Futuna Islands ÍßÀû˹ºÍ¸£¶ÅÄÉȺµº ws 1 Western Samoa ÈøÄ¦ÑÇ ye 1 Yemen Ò¶ÃÅ yt 1 Mayotte ĦÑÇÌØ yu 3 Yugoslavia ÄÏ˹À­·ò za 3 South Africa ÄÏ·Ç zm 1 Zambia ÉбÈÑÇ zr 1 Zaire ÈøÒÁ zw 3 Zimbabwe ÐÁ°ÍÍþ analog-ce-6.0.17/lang/cz.lng000066400000000000000000000324501406366436600155140ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Czech language files made by Jan Simek (Jan.Simek@email.cz) ## and Karel Fajkus (http://www.volny.cz/lomax/feedback.html) (v3 -> v4 -> v5). ## Any comments welcome ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. Ne Po Út St Èt Pá So led úno bøe dub kvì èer ènc srp záø øíj lis pro ## Next some standard common words. ## Abbreviation for "week beginning" týden zaè. rok ## Quarter of a year ètvrtletí mìsíc den dní h. minuta minuty sekunda sekund byte bytù ## ?bytes represents kbytes, Mbytes etc. ?bytù po¾adavek po¾adavkù datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum èas èas první datum první èas naposledy naposledy soubor souborù poèítaè (host) poèítaèù (hosts) virtuální server virtuální servery adresáø adresáøù doména domén organizace organizací pøípona pøípon URL URL prohlí¾eè prohlí¾eèù operaèní systém operaèních systémù ## (= operating system, operating systems) objem hledané slovo hledaných slov server serverù u¾ivatel u¾ivatelù kód kódù Statistiky web serveru ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Celkový pøehled ## The time reports, plus "busiest" strings (at the bottom of each report) Roèní pøehled Nejvytí¾enìj¹í rok: Ètvrtletní pøehled Nejvytí¾enìj¹í ètvrtletí: Mìsíèní pøehled Nejvytí¾enìj¹í mìsíc: Týdenní pøehled Nejvytí¾enìj¹í týden: týden zaèínající Denní souhrn Denní pøehled Nejvytí¾enìj¹í den: Hodinový pøehled Hodinový souhrn Souhrn týdne po hodinách Nejvytí¾enìj¹í hodina: Ètvrthodinový pøehled Ètvrthodinový souhrn Nejvytí¾enìj¹í ètvrthodinka: Pìtiminutový pøehled Pìtiminutový souhrn Nejvytí¾enìj¹í pìtiminutovka: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Pøehled poèítaèù poèítaè (host) poèítaèù (hosts) n Pøehled pøesmìrovaných poèítaèù poèítaè (host) poèítaèù (hosts) n Pøehled chybujících poèítaèù poèítaè (host) poèítaèù (hosts) n Pøehled adresáøù adresáø adresáøù n Pøehled typù souborù pøípona pøípon n Pøehled po¾adavkù po¾adovaný soubor po¾adovaných souborù n Pøehled pøesmìrovaných souborù pøesmìrovaný soubor pøesmìrovaných souborù n Pøehled chybných po¾adavkù chybný po¾adavek chybných po¾adavkù n Pøehled odkazujících stránek odkazující URL odkazujících URL n Pøehled odkazujících serverù odkazující server odkazujících serverù n Pøehled pøesmìrovaných odkazovaných stránek odkazované URL odkazovaných URL n Pøehled chybných odkazù odkazované URL odkazovaných URL n Pøehled hledaných dotazù dotaz dotazù n Pøehled hledaných slov slovo dotazù slov dotazù n Pøehled internì hledaných dotazù dotaz dotazù n Pøehled internì hledaných slov slovo dotazù slov dotazù n Pøehled virtuálních serverù virtuální server virtuálních serverù n Pøehled pøesmìrovaných virtuálních serverù virtuální server virtuálních serverù n Pøehled chybujících virtuálních serverù virtuální server virtuálních serverù n Pøehled u¾ivatelù u¾ivatel u¾ivatelù n Pøehled pøesmìrovaných u¾ivatelù u¾ivatel u¾ivatelù n Pøehled chybujících u¾ivatelù u¾ivatel u¾ivatelù n Souhrn prohlí¾eèù prohlí¾eè prohlí¾eèù n Pøehled prohlí¾eèù prohlí¾eè prohlí¾eèù n Pøehled operaèních systémù operaèní systém operaèních systémù n Pøehled domén doména domén n Pøehled organizací organizace organizací n Pøehled návratových kódù návratový kód návratových kódù n Pøehled èasu zpracování Pøehled velikosti souborù ## Used at the bottom of the report Tuto analýzu vytvoøil Èas zpracování Ménì ne¾ 1 ## Used in the time reports Ka¾dý dílek pøedstavuje (pøíp. jejich èást) po¾adavek na stránku po¾adavkù na stránky ## Used at the bottom of each non-time report: need m, f & n genders neuveden neuvedena neuvedeno ## Used on the pie charts: again need m, f & n genders ostatní ostatní ostatní ## Used at the top of the report Program byl spu¹tìn: Analýza po¾adavkù od do ## Used in the General Summary Úspì¹né po¾adavky Denní prùmìr úspì¹ných po¾adavkù Úspì¹né po¾adavky na stránky Denní prùmìr úspì¹ných po¾adavkù na stránky Poèet záznamù v logu bez návratového kódu Chybné po¾adavky Pøesmìrované po¾adavky Po¾adavky informativního charakteru (kódy 201-206) Rùzných po¾adovaných souborù Rùzných obslou¾ených poèítaèù (hosts) Po¹kozené záznamy v logu Nechtìné záznamy v logu Objem pøenesených dat Denní prùmìr pøenesených dat Hodnoty v závorkách odpovídají 7 dnùm pøed posledním 7 dnùm Pøesun na Zaèátek ## Some special phrases for particular reports. [nerozli¹ené numerické adresy] [doména neudána] [neznámá doména] [koøenový adresáø] [¾ádný adresáø] [¾ádná pøípona] [adresáøe] Neznámé Windows Jiný Unix Roboty OS neznámý ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) po¾adavkù po¾adavkù za 7 dní % po¾adavkù % po¾adavkù za 7 dní stran stran za 7 dní % stran % stran za 7 dní bytù ?bytù bytù za 7 dní ?bytù za 7 dní % bytù % bytù za 7 dní poøadí ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Výpis prvních %s * * Výpis prvních %d %s * * Výpis %s ## "by" in the phrase "listing the top 3 files BY number of requests" podle ## All requests WITH AT LEAST 10 requests s alespoò ## Different ways of doing floors po¾adavek za posledních 7 dní po¾adavkù za posledních 7 dní po¾adavek na stránku za posledních 7 dní po¾adavkù na stránky za posledních 7 dní pøesmìrovaný po¾adavek pøesmìrovaných po¾adavkù pøesmìrovaný po¾adavek za posledních 7 dní pøesmìrovaných po¾adavkù za posledních 7 dní chybný po¾adavek chybných po¾adavkù chybný po¾adavek za posledních 7 dní chybných po¾adavkù za posledních 7 dní % provozu % provozu za posledních 7 dní % maxima provozu % maxima provozu za posledních 7 dní bytu provozu bytù provozu ## ?bytes represents kbytes, Mbytes etc. ?bytù provozu bytu provozu za posledních 7 dní bytù provozu za posledních 7 dní ?bytù provozu za posledních 7 dní po¾adováno od s pøesmìrovaným po¾adavkem od s chybným po¾adavkem od s prvním po¾adavkem od s prvním pøesmìrovaným po¾adavkem od s prvním chybným po¾adavkem od ## Now "sorted by": again, in m, f & n (only needed in plural though) setøídìn podle setøídìna podle setøídìno podle ## Used at the top of each report Tento pøehled obsahuje data z ## Used in pie charts Výseèe jsou vykresleny podle ## different ways of sorting objemu pøenesených dat objemu pøenesených dat za posledních 7 dní % po¾adavkù % po¾adavkù za posledních 7 dní % maximálního poètu po¾adavkù % maximálního poètu po¾adavkù za posledních 7 dní poètu po¾adavkù poètu po¾adavkù za posledních 7 dní % po¾adavkù na stránky % po¾adavkù na stránky za posledních 7 dní % maximálního poètu po¾adavkù na stránky % maximálního poètu po¾adavkù na stránky za posledních 7 dní poètu po¾adavkù na stránky poètu po¾adavkù na stránky za posledních 7 dní % pøesmìrovaných po¾adavkù % pøesmìrovaných po¾adavkù za posledních 7 dní % maximálního poètu pøesmìrovaných po¾adavkù % maximálního poètu pøesmìrovaných po¾adavkù za posledních 7 dní poètu pøesmìrovaných po¾adavkù poètu pøesmìrovaných po¾adavkù za posledních 7 dní % chybných po¾adavkù % chybných po¾adavkù za posledních 7 dní % maximálního poètu chybných po¾adavkù % maximálního poètu chybných po¾adavkù za posledních 7 dní poètu chybných po¾adavkù poètu chybných po¾adavkù za posledních 7 dní èasu posledního po¾adavku èasu posledního pøesmìrovaného po¾adavku èasu posledního chybného po¾adavku èasu prvního po¾adavku èasu prvního pøesmìrovaného po¾adavku èasu prvního chybného po¾adavku ## 3 other ways of sorting in m, f, & n setøídìn abecednì setøídìna abecednì setøídìno abecednì setøídìn numericky setøídìna numericky setøídìno numericky nesetøídìn nesetøídìna nesetøídìno ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m %Y %H:%n ## "Program started at" and "Analysed requests from" %w %D.%m %Y %H:%n ## In Daily Report %d.%m '%y ## In Daily Summary %w ## In Hourly Report %d.%m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d.%m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m '%y ## The date & time (D) column in non-time reports %d.%m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Rùzné informaèní] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Rùzné úspì¹né] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Rùzná pøesmìrování] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Rùzné klientské/u¾ivatelské chyby] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Rùzné chyby serveru] xxx [Neznámé] analog-ce-6.0.17/lang/cz1.lng000066400000000000000000000324521406366436600155770ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Czech language files made by Jan Simek (Jan.Simek@email.cz) ## and Karel Fajkus (http://www.volny.cz/lomax/feedback.html) (v3 -> v4 -> v5). ## Any comments welcome ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1250 ## Abbreviations for the day and month names. Ne Po Út St Èt Pá So led úno bøe dub kvì èer ènc srp záø øíj lis pro ## Next some standard common words. ## Abbreviation for "week beginning" týden zaè. rok ## Quarter of a year ètvrtletí mìsíc den dní h. minuta minuty sekunda sekund byte bytù ## ?bytes represents kbytes, Mbytes etc. ?bytù požadavek požadavkù datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum èas èas první datum první èas naposledy naposledy soubor souborù poèítaè (host) poèítaèù (hosts) virtuální server virtuální servery adresáø adresáøù doména domén organizace organizací pøípona pøípon URL URL prohlížeè prohlížeèù operaèní systém operaèních systémù ## (= operating system, operating systems) objem hledané slovo hledaných slov server serverù uživatel uživatelù kód kódù Statistiky web serveru ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Celkový pøehled ## The time reports, plus "busiest" strings (at the bottom of each report) Roèní pøehled Nejvytíženìjší rok: Ètvrtletní pøehled Nejvytíženìjší ètvrtletí: Mìsíèní pøehled Nejvytíženìjší mìsíc: Týdenní pøehled Nejvytíženìjší týden: týden zaèínající Denní souhrn Denní pøehled Nejvytíženìjší den: Hodinový pøehled Hodinový souhrn Souhrn týdne po hodinách Nejvytíženìjší hodina: Ètvrthodinový pøehled Ètvrthodinový souhrn Nejvytíženìjší ètvrthodinka: Pìtiminutový pøehled Pìtiminutový souhrn Nejvytíženìjší pìtiminutovka: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Pøehled poèítaèù poèítaè (host) poèítaèù (hosts) n Pøehled pøesmìrovaných poèítaèù poèítaè (host) poèítaèù (hosts) n Pøehled chybujících poèítaèù poèítaè (host) poèítaèù (hosts) n Pøehled adresáøù adresáø adresáøù n Pøehled typù souborù pøípona pøípon n Pøehled požadavkù požadovaný soubor požadovaných souborù n Pøehled pøesmìrovaných souborù pøesmìrovaný soubor pøesmìrovaných souborù n Pøehled chybných požadavkù chybný požadavek chybných požadavkù n Pøehled odkazujících stránek odkazující URL odkazujících URL n Pøehled odkazujících serverù odkazující server odkazujících serverù n Pøehled pøesmìrovaných odkazovaných stránek odkazované URL odkazovaných URL n Pøehled chybných odkazù odkazované URL odkazovaných URL n Pøehled hledaných dotazù dotaz dotazù n Pøehled hledaných slov slovo dotazù slov dotazù n Pøehled internì hledaných dotazù dotaz dotazù n Pøehled internì hledaných slov slovo dotazù slov dotazù n Pøehled virtuálních serverù virtuální server virtuálních serverù n Pøehled pøesmìrovaných virtuálních serverù virtuální server virtuálních serverù n Pøehled chybujících virtuálních serverù virtuální server virtuálních serverù n Pøehled uživatelù uživatel uživatelù n Pøehled pøesmìrovaných uživatelù uživatel uživatelù n Pøehled chybujících uživatelù uživatel uživatelù n Souhrn prohlížeèù prohlížeè prohlížeèù n Pøehled prohlížeèù prohlížeè prohlížeèù n Pøehled operaèních systémù operaèní systém operaèních systémù n Pøehled domén doména domén n Pøehled organizací organizace organizací n Pøehled návratových kódù návratový kód návratových kódù n Pøehled èasu zpracování Pøehled velikosti souborù ## Used at the bottom of the report Tuto analýzu vytvoøil Èas zpracování Ménì než 1 ## Used in the time reports Každý dílek pøedstavuje (pøíp. jejich èást) požadavek na stránku požadavkù na stránky ## Used at the bottom of each non-time report: need m, f & n genders neuveden neuvedena neuvedeno ## Used on the pie charts: again need m, f & n genders ostatní ostatní ostatní ## Used at the top of the report Program byl spuštìn: Analýza požadavkù od do ## Used in the General Summary Úspìšné požadavky Denní prùmìr úspìšných požadavkù Úspìšné požadavky na stránky Denní prùmìr úspìšných požadavkù na stránky Poèet záznamù v logu bez návratového kódu Chybné požadavky Pøesmìrované požadavky Požadavky informativního charakteru (kódy 201-206) Rùzných požadovaných souborù Rùzných obsloužených poèítaèù (hosts) Poškozené záznamy v logu Nechtìné záznamy v logu Objem pøenesených dat Denní prùmìr pøenesených dat Hodnoty v závorkách odpovídají 7 dnùm pøed posledním 7 dnùm Pøesun na Zaèátek ## Some special phrases for particular reports. [nerozlišené numerické adresy] [doména neudána] [neznámá doména] [koøenový adresáø] [žádný adresáø] [žádná pøípona] [adresáøe] Neznámé Windows Jiný Unix Roboty OS neznámý ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) požadavkù požadavkù za 7 dní % požadavkù % požadavkù za 7 dní stran stran za 7 dní % stran % stran za 7 dní bytù ?bytù bytù za 7 dní ?bytù za 7 dní % bytù % bytù za 7 dní poøadí ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Výpis prvních %s * * Výpis prvních %d %s * * Výpis %s ## "by" in the phrase "listing the top 3 files BY number of requests" podle ## All requests WITH AT LEAST 10 requests s alespoò ## Different ways of doing floors požadavek za posledních 7 dní požadavkù za posledních 7 dní požadavek na stránku za posledních 7 dní požadavkù na stránky za posledních 7 dní pøesmìrovaný požadavek pøesmìrovaných požadavkù pøesmìrovaný požadavek za posledních 7 dní pøesmìrovaných požadavkù za posledních 7 dní chybný požadavek chybných požadavkù chybný požadavek za posledních 7 dní chybných požadavkù za posledních 7 dní % provozu % provozu za posledních 7 dní % maxima provozu % maxima provozu za posledních 7 dní bytu provozu bytù provozu ## ?bytes represents kbytes, Mbytes etc. ?bytù provozu bytu provozu za posledních 7 dní bytù provozu za posledních 7 dní ?bytù provozu za posledních 7 dní požadováno od s pøesmìrovaným požadavkem od s chybným požadavkem od s prvním požadavkem od s prvním pøesmìrovaným požadavkem od s prvním chybným požadavkem od ## Now "sorted by": again, in m, f & n (only needed in plural though) setøídìn podle setøídìna podle setøídìno podle ## Used at the top of each report Tento pøehled obsahuje data z ## Used in pie charts Výseèe jsou vykresleny podle ## different ways of sorting objemu pøenesených dat objemu pøenesených dat za posledních 7 dní % požadavkù % požadavkù za posledních 7 dní % maximálního poètu požadavkù % maximálního poètu požadavkù za posledních 7 dní poètu požadavkù poètu požadavkù za posledních 7 dní % požadavkù na stránky % požadavkù na stránky za posledních 7 dní % maximálního poètu požadavkù na stránky % maximálního poètu požadavkù na stránky za posledních 7 dní poètu požadavkù na stránky poètu požadavkù na stránky za posledních 7 dní % pøesmìrovaných požadavkù % pøesmìrovaných požadavkù za posledních 7 dní % maximálního poètu pøesmìrovaných požadavkù % maximálního poètu pøesmìrovaných požadavkù za posledních 7 dní poètu pøesmìrovaných požadavkù poètu pøesmìrovaných požadavkù za posledních 7 dní % chybných požadavkù % chybných požadavkù za posledních 7 dní % maximálního poètu chybných požadavkù % maximálního poètu chybných požadavkù za posledních 7 dní poètu chybných požadavkù poètu chybných požadavkù za posledních 7 dní èasu posledního požadavku èasu posledního pøesmìrovaného požadavku èasu posledního chybného požadavku èasu prvního požadavku èasu prvního pøesmìrovaného požadavku èasu prvního chybného požadavku ## 3 other ways of sorting in m, f, & n setøídìn abecednì setøídìna abecednì setøídìno abecednì setøídìn numericky setøídìna numericky setøídìno numericky nesetøídìn nesetøídìna nesetøídìno ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m %Y %H:%n ## "Program started at" and "Analysed requests from" %w %D.%m %Y %H:%n ## In Daily Report %d.%m '%y ## In Daily Summary %w ## In Hourly Report %d.%m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d.%m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m '%y ## The date & time (D) column in non-time reports %d.%m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Rùzné informaèní] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Rùzné úspìšné] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Rùzná pøesmìrování] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Rùzné klientské/uživatelské chyby] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Rùzné chyby serveru] xxx [Neznámé] analog-ce-6.0.17/lang/cz1a.lng000066400000000000000000000324461406366436600157430ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Czech language files made by Jan Simek (Jan.Simek@email.cz) ## and Karel Fajkus (http://www.volny.cz/lomax/feedback.html) (v3 -> v4 -> v5). ## Any comments welcome ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Ne Po Ut St Ct Pa So led uno bre dub kve cer cnc srp zar rij lis pro ## Next some standard common words. ## Abbreviation for "week beginning" tyden zac. rok ## Quarter of a year ctvrtleti mesic den dni h. minuta minuty sekunda sekund byte bytu ## ?bytes represents kbytes, Mbytes etc. ?bytu pozadavek pozadavku datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum cas cas prvni datum prvni cas naposledy naposledy soubor souboru pocitac (host) pocitacu (hosts) virtualni server virtualni servery adresar adresaru domena domen organizace organizaci pripona pripon URL URL prohlizec prohlizecu operacni system operacnich systemu ## (= operating system, operating systems) objem hledane slovo hledanych slov server serveru uzivatel uzivatelu kod kodu Statistiky web serveru ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Celkovy prehled ## The time reports, plus "busiest" strings (at the bottom of each report) Rocni prehled Nejvytizenejsi rok: Ctvrtletni prehled Nejvytizenejsi ctvrtleti: Mesicni prehled Nejvytizenejsi mesic: Tydenni prehled Nejvytizenejsi tyden: tyden zacinajici Denni souhrn Denni prehled Nejvytizenejsi den: Hodinovy prehled Hodinovy souhrn Souhrn tydne po hodinach Nejvytizenejsi hodina: Ctvrthodinovy prehled Ctvrthodinovy souhrn Nejvytizenejsi ctvrthodinka: Petiminutovy prehled Petiminutovy souhrn Nejvytizenejsi petiminutovka: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Prehled pocitacu pocitac (host) pocitacu (hosts) n Prehled presmerovanych pocitacu pocitac (host) pocitacu (hosts) n Prehled chybujicich pocitacu pocitac (host) pocitacu (hosts) n Prehled adresaru adresar adresaru n Prehled typu souboru pripona pripon n Prehled pozadavku pozadovany soubor pozadovanych souboru n Prehled presmerovanych souboru presmerovany soubor presmerovanych souboru n Prehled chybnych pozadavku chybny pozadavek chybnych pozadavku n Prehled odkazujicich stranek odkazujici URL odkazujicich URL n Prehled odkazujicich serveru odkazujici server odkazujicich serveru n Prehled presmerovanych odkazovanych stranek odkazovane URL odkazovanych URL n Prehled chybnych odkazu odkazovane URL odkazovanych URL n Prehled hledanych dotazu dotaz dotazu n Prehled hledanych slov slovo dotazu slov dotazu n Prehled interne hledanych dotazu dotaz dotazu n Prehled interne hledanych slov slovo dotazu slov dotazu n Prehled virtualnich serveru virtualni server virtualnich serveru n Prehled presmerovanych virtualnich serveru virtualni server virtualnich serveru n Prehled chybujicich virtualnich serveru virtualni server virtualnich serveru n Prehled uzivatelu uzivatel uzivatelu n Prehled presmerovanych uzivatelu uzivatel uzivatelu n Prehled chybujicich uzivatelu uzivatel uzivatelu n Souhrn prohlizecu prohlizec prohlizecu n Prehled prohlizecu prohlizec prohlizecu n Prehled operacnich systemu operacni system operacnich systemu n Prehled domen domena domen n Prehled organizaci organizace organizaci n Prehled navratovych kodu navratovy kod navratovych kodu n Prehled casu zpracovani Prehled velikosti souboru ## Used at the bottom of the report Tuto analyzu vytvoril Cas zpracovani Mene nez 1 ## Used in the time reports Kazdy dilek predstavuje (prip. jejich cast) pozadavek na stranku pozadavku na stranky ## Used at the bottom of each non-time report: need m, f & n genders neuveden neuvedena neuvedeno ## Used on the pie charts: again need m, f & n genders ostatni ostatni ostatni ## Used at the top of the report Program byl spusten: Analyza pozadavku od do ## Used in the General Summary Uspesne pozadavky Denni prumer uspesnych pozadavku Uspesne pozadavky na stranky Denni prumer uspesnych pozadavku na stranky Pocet zaznamu v logu bez navratoveho kodu Chybne pozadavky Presmerovane pozadavky Pozadavky informativniho charakteru (kody 201-206) Ruznych pozadovanych souboru Ruznych obslouzenych pocitacu (hosts) Poskozene zaznamy v logu Nechtene zaznamy v logu Objem prenesenych dat Denni prumer prenesenych dat Hodnoty v zavorkach odpovidaji 7 dnum pred poslednim 7 dnum Presun na Zacatek ## Some special phrases for particular reports. [nerozlisene numericke adresy] [domena neudana] [neznama domena] [korenovy adresar] [zadny adresar] [zadna pripona] [adresare] Nezname Windows Jiny Unix Roboty OS neznamy ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) pozadavku pozadavku za 7 dni % pozadavku % pozadavku za 7 dni stran stran za 7 dni % stran % stran za 7 dni bytu ?bytu bytu za 7 dni ?bytu za 7 dni % bytu % bytu za 7 dni poradi ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Vypis prvnich %s * * Vypis prvnich %d %s * * Vypis %s ## "by" in the phrase "listing the top 3 files BY number of requests" podle ## All requests WITH AT LEAST 10 requests s alespon ## Different ways of doing floors pozadavek za poslednich 7 dni pozadavku za poslednich 7 dni pozadavek na stranku za poslednich 7 dni pozadavku na stranky za poslednich 7 dni presmerovany pozadavek presmerovanych pozadavku presmerovany pozadavek za poslednich 7 dni presmerovanych pozadavku za poslednich 7 dni chybny pozadavek chybnych pozadavku chybny pozadavek za poslednich 7 dni chybnych pozadavku za poslednich 7 dni % provozu % provozu za poslednich 7 dni % maxima provozu % maxima provozu za poslednich 7 dni bytu provozu bytu provozu ## ?bytes represents kbytes, Mbytes etc. ?bytu provozu bytu provozu za poslednich 7 dni bytu provozu za poslednich 7 dni ?bytu provozu za poslednich 7 dni pozadovano od s presmerovanym pozadavkem od s chybnym pozadavkem od s prvnim pozadavkem od s prvnim presmerovanym pozadavkem od s prvnim chybnym pozadavkem od ## Now "sorted by": again, in m, f & n (only needed in plural though) setriden podle setridena podle setrideno podle ## Used at the top of each report Tento prehled obsahuje data z ## Used in pie charts Vysece jsou vykresleny podle ## different ways of sorting objemu prenesenych dat objemu prenesenych dat za poslednich 7 dni % pozadavku % pozadavku za poslednich 7 dni % maximalniho poctu pozadavku % maximalniho poctu pozadavku za poslednich 7 dni poctu pozadavku poctu pozadavku za poslednich 7 dni % pozadavku na stranky % pozadavku na stranky za poslednich 7 dni % maximalniho poctu pozadavku na stranky % maximalniho poctu pozadavku na stranky za poslednich 7 dni poctu pozadavku na stranky poctu pozadavku na stranky za poslednich 7 dni % presmerovanych pozadavku % presmerovanych pozadavku za poslednich 7 dni % maximalniho poctu presmerovanych pozadavku % maximalniho poctu presmerovanych pozadavku za poslednich 7 dni poctu presmerovanych pozadavku poctu presmerovanych pozadavku za poslednich 7 dni % chybnych pozadavku % chybnych pozadavku za poslednich 7 dni % maximalniho poctu chybnych pozadavku % maximalniho poctu chybnych pozadavku za poslednich 7 dni poctu chybnych pozadavku poctu chybnych pozadavku za poslednich 7 dni casu posledniho pozadavku casu posledniho presmerovaneho pozadavku casu posledniho chybneho pozadavku casu prvniho pozadavku casu prvniho presmerovaneho pozadavku casu prvniho chybneho pozadavku ## 3 other ways of sorting in m, f, & n setriden abecedne setridena abecedne setrideno abecedne setriden numericky setridena numericky setrideno numericky nesetriden nesetridena nesetrideno ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m %Y %H:%n ## "Program started at" and "Analysed requests from" %w %D.%m %Y %H:%n ## In Daily Report %d.%m '%y ## In Daily Summary %w ## In Hourly Report %d.%m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d.%m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m '%y ## The date & time (D) column in non-time reports %d.%m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Ruzne informacni] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Ruzne uspesne] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Ruzna presmerovani] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Ruzne klientske/uzivatelske chyby] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Ruzne chyby serveru] xxx [Nezname] analog-ce-6.0.17/lang/cza.lng000066400000000000000000000324461406366436600156620ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Czech language files made by Jan Simek (Jan.Simek@email.cz) ## and Karel Fajkus (http://www.volny.cz/lomax/feedback.html) (v3 -> v4 -> v5). ## Any comments welcome ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Ne Po Ut St Ct Pa So led uno bre dub kve cer cnc srp zar rij lis pro ## Next some standard common words. ## Abbreviation for "week beginning" tyden zac. rok ## Quarter of a year ctvrtleti mesic den dni h. minuta minuty sekunda sekund byte bytu ## ?bytes represents kbytes, Mbytes etc. ?bytu pozadavek pozadavku datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum cas cas prvni datum prvni cas naposledy naposledy soubor souboru pocitac (host) pocitacu (hosts) virtualni server virtualni servery adresar adresaru domena domen organizace organizaci pripona pripon URL URL prohlizec prohlizecu operacni system operacnich systemu ## (= operating system, operating systems) objem hledane slovo hledanych slov server serveru uzivatel uzivatelu kod kodu Statistiky web serveru ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Celkovy prehled ## The time reports, plus "busiest" strings (at the bottom of each report) Rocni prehled Nejvytizenejsi rok: Ctvrtletni prehled Nejvytizenejsi ctvrtleti: Mesicni prehled Nejvytizenejsi mesic: Tydenni prehled Nejvytizenejsi tyden: tyden zacinajici Denni souhrn Denni prehled Nejvytizenejsi den: Hodinovy prehled Hodinovy souhrn Souhrn tydne po hodinach Nejvytizenejsi hodina: Ctvrthodinovy prehled Ctvrthodinovy souhrn Nejvytizenejsi ctvrthodinka: Petiminutovy prehled Petiminutovy souhrn Nejvytizenejsi petiminutovka: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Prehled pocitacu pocitac (host) pocitacu (hosts) n Prehled presmerovanych pocitacu pocitac (host) pocitacu (hosts) n Prehled chybujicich pocitacu pocitac (host) pocitacu (hosts) n Prehled adresaru adresar adresaru n Prehled typu souboru pripona pripon n Prehled pozadavku pozadovany soubor pozadovanych souboru n Prehled presmerovanych souboru presmerovany soubor presmerovanych souboru n Prehled chybnych pozadavku chybny pozadavek chybnych pozadavku n Prehled odkazujicich stranek odkazujici URL odkazujicich URL n Prehled odkazujicich serveru odkazujici server odkazujicich serveru n Prehled presmerovanych odkazovanych stranek odkazovane URL odkazovanych URL n Prehled chybnych odkazu odkazovane URL odkazovanych URL n Prehled hledanych dotazu dotaz dotazu n Prehled hledanych slov slovo dotazu slov dotazu n Prehled interne hledanych dotazu dotaz dotazu n Prehled interne hledanych slov slovo dotazu slov dotazu n Prehled virtualnich serveru virtualni server virtualnich serveru n Prehled presmerovanych virtualnich serveru virtualni server virtualnich serveru n Prehled chybujicich virtualnich serveru virtualni server virtualnich serveru n Prehled uzivatelu uzivatel uzivatelu n Prehled presmerovanych uzivatelu uzivatel uzivatelu n Prehled chybujicich uzivatelu uzivatel uzivatelu n Souhrn prohlizecu prohlizec prohlizecu n Prehled prohlizecu prohlizec prohlizecu n Prehled operacnich systemu operacni system operacnich systemu n Prehled domen domena domen n Prehled organizaci organizace organizaci n Prehled navratovych kodu navratovy kod navratovych kodu n Prehled casu zpracovani Prehled velikosti souboru ## Used at the bottom of the report Tuto analyzu vytvoril Cas zpracovani Mene nez 1 ## Used in the time reports Kazdy dilek predstavuje (prip. jejich cast) pozadavek na stranku pozadavku na stranky ## Used at the bottom of each non-time report: need m, f & n genders neuveden neuvedena neuvedeno ## Used on the pie charts: again need m, f & n genders ostatni ostatni ostatni ## Used at the top of the report Program byl spusten: Analyza pozadavku od do ## Used in the General Summary Uspesne pozadavky Denni prumer uspesnych pozadavku Uspesne pozadavky na stranky Denni prumer uspesnych pozadavku na stranky Pocet zaznamu v logu bez navratoveho kodu Chybne pozadavky Presmerovane pozadavky Pozadavky informativniho charakteru (kody 201-206) Ruznych pozadovanych souboru Ruznych obslouzenych pocitacu (hosts) Poskozene zaznamy v logu Nechtene zaznamy v logu Objem prenesenych dat Denni prumer prenesenych dat Hodnoty v zavorkach odpovidaji 7 dnum pred poslednim 7 dnum Presun na Zacatek ## Some special phrases for particular reports. [nerozlisene numericke adresy] [domena neudana] [neznama domena] [korenovy adresar] [zadny adresar] [zadna pripona] [adresare] Nezname Windows Jiny Unix Roboty OS neznamy ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) pozadavku pozadavku za 7 dni % pozadavku % pozadavku za 7 dni stran stran za 7 dni % stran % stran za 7 dni bytu ?bytu bytu za 7 dni ?bytu za 7 dni % bytu % bytu za 7 dni poradi ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Vypis prvnich %s * * Vypis prvnich %d %s * * Vypis %s ## "by" in the phrase "listing the top 3 files BY number of requests" podle ## All requests WITH AT LEAST 10 requests s alespon ## Different ways of doing floors pozadavek za poslednich 7 dni pozadavku za poslednich 7 dni pozadavek na stranku za poslednich 7 dni pozadavku na stranky za poslednich 7 dni presmerovany pozadavek presmerovanych pozadavku presmerovany pozadavek za poslednich 7 dni presmerovanych pozadavku za poslednich 7 dni chybny pozadavek chybnych pozadavku chybny pozadavek za poslednich 7 dni chybnych pozadavku za poslednich 7 dni % provozu % provozu za poslednich 7 dni % maxima provozu % maxima provozu za poslednich 7 dni bytu provozu bytu provozu ## ?bytes represents kbytes, Mbytes etc. ?bytu provozu bytu provozu za poslednich 7 dni bytu provozu za poslednich 7 dni ?bytu provozu za poslednich 7 dni pozadovano od s presmerovanym pozadavkem od s chybnym pozadavkem od s prvnim pozadavkem od s prvnim presmerovanym pozadavkem od s prvnim chybnym pozadavkem od ## Now "sorted by": again, in m, f & n (only needed in plural though) setriden podle setridena podle setrideno podle ## Used at the top of each report Tento prehled obsahuje data z ## Used in pie charts Vysece jsou vykresleny podle ## different ways of sorting objemu prenesenych dat objemu prenesenych dat za poslednich 7 dni % pozadavku % pozadavku za poslednich 7 dni % maximalniho poctu pozadavku % maximalniho poctu pozadavku za poslednich 7 dni poctu pozadavku poctu pozadavku za poslednich 7 dni % pozadavku na stranky % pozadavku na stranky za poslednich 7 dni % maximalniho poctu pozadavku na stranky % maximalniho poctu pozadavku na stranky za poslednich 7 dni poctu pozadavku na stranky poctu pozadavku na stranky za poslednich 7 dni % presmerovanych pozadavku % presmerovanych pozadavku za poslednich 7 dni % maximalniho poctu presmerovanych pozadavku % maximalniho poctu presmerovanych pozadavku za poslednich 7 dni poctu presmerovanych pozadavku poctu presmerovanych pozadavku za poslednich 7 dni % chybnych pozadavku % chybnych pozadavku za poslednich 7 dni % maximalniho poctu chybnych pozadavku % maximalniho poctu chybnych pozadavku za poslednich 7 dni poctu chybnych pozadavku poctu chybnych pozadavku za poslednich 7 dni casu posledniho pozadavku casu posledniho presmerovaneho pozadavku casu posledniho chybneho pozadavku casu prvniho pozadavku casu prvniho presmerovaneho pozadavku casu prvniho chybneho pozadavku ## 3 other ways of sorting in m, f, & n setriden abecedne setridena abecedne setrideno abecedne setriden numericky setridena numericky setrideno numericky nesetriden nesetridena nesetrideno ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m %Y %H:%n ## "Program started at" and "Analysed requests from" %w %D.%m %Y %H:%n ## In Daily Report %d.%m '%y ## In Daily Summary %w ## In Hourly Report %d.%m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d.%m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m '%y ## The date & time (D) column in non-time reports %d.%m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Ruzne informacni] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Ruzne uspesne] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Ruzna presmerovani] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Ruzne klientske/uzivatelske chyby] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Ruzne chyby serveru] xxx [Nezname] analog-ce-6.0.17/lang/de.lng000066400000000000000000000334611406366436600154730ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. So Mo Di Mi Do Fr Sa Jan Feb Mär Apr Mai Jun Jul Aug Sep Okt Nov Dez ## Next some standard common words. ## Abbreviation for "week beginning" Woche ab Jahr ## Quarter of a year Quartal Monate Tag Tage Stunde Minute Minuten Sekunde Sekunden Byte Bytes ## ?bytes represents kbytes, Mbytes etc. ?Bytes Anfrage Anfragen Datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 Datum Uhrzeit Zeit erster Zugriff erster Zugriff letzter Zugriff letzter Zugriff Datei Dateien Host Hosts virtueller Server virtuelle Server Verzeichnis Verzeichnisse Domäne Domänen Organisation Organisationen Erweiterung Erweiterungen URL URL's Browser Browser Betriebsystem Betriebsysteme ## (= operating system, operating systems) Dateigröße Suchbegriff Suchbegriffe WWW-Server WWW-Server Benutzer Benutzer Status code Status codes Server Statistiken für ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Zusammenfassung ## The time reports, plus "busiest" strings (at the bottom of each report) Jährlicher Bericht stärkstes Jahr: Quartals Bericht stärkstes Quartal: Monatsbericht Monat mit der stärksten Nutzung: Wochenbericht Woche mit der stärksten Nutzung: Wochentage Übersicht Tagesbericht Tag mit der stärksten Nutzung: Stündlicher Bericht Tageszeit Übersicht Uhrzeit der Wochenübersicht Uhrzeit mit der stärksten Nutzung: Viertelstündlicher Bericht Viertelstündlicher Bericht Viertelstunde mit der stärksten Nutzung: 5-minütiger Bericht 5-minütiger Bericht Die 5 Minuten mit der stärksten Nutzung: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Bericht Hosts Hosts m Host Umleitungs Bericht Hosts Hosts n Hosts Ausfallbericht Hosts Hosts n Verzeichnisbericht Verzeichnisses Verzeichnisse n Dateityp Bericht Dateityp Dateitypen m Anfrage Bericht verlangten Datei verlangten Dateien f Umgeleitete Anfragen Datei Dateien f Fehler Bericht Datei Dateien f Verweis Bericht verweisenden URL verweisenden URLs f Server Verweisbericht verweisenden Server verweisenden Server m Umleitungs Verweisbericht verweisenden URL verweisenden URLs f Verweis Fehlerbericht verweisenden URL verweisenden URLs f Suchanfrage Bericht Anfrage Anfragen f Suchbegriff Bericht Suchbegriffs Suchbegriffe m Interner Frage Bericht Frage Fragen n Interner Suchwort Bericht Suchwort Suchwörter n Virtueller Server Bericht Virtueller Server Virtuelle Server m Virtueller Server Umleitungsbericht Virtueller Server Virtuelle Server n Virtueller Serverfehler Bericht Virtueller Server Virtuelle Server n Benutzer Bericht Benutzers Benutzer m Benutzer Umleitungsbericht Benutzer Benutzer n Benutzer Fehlerbericht Benutzers Benutzer m Browser Übersicht Browsers Browser m Browser Bericht Browsers Browser m Betriebsystem Bericht Betriebsystems Betriebsysteme n Domänen Bericht Domäne Domänen f Organisationsbericht Organisation Organisationen f Statuscodebericht Statuscodes Statuscodes m Bearbeitungszeit Bericht Dateigrößen Übersicht ## Used at the bottom of the report Diese Statistik wurde erzeugt durch Laufzeit Unter einer ## Used in the time reports Jede Einheit entspricht oder einem Teil davon Seitenanfrage Seitenanfragen ## Used at the bottom of each non-time report: need m, f & n genders nicht angezeigt nicht angezeigt nicht angezeigt ## Used on the pie charts: again need m, f & n genders Andere Andere Andere ## Used at the top of the report Programmstart: Auswertungszeitraum: bis ## Used in the General Summary Erfolgreich bearbeitete Anfragen Durchschnittlich bearbeitete Anfragen pro Tag Erfolgreich bearbeitete Seitenanfragen Durchschnittlich bearbeitete Seitenanfragen pro Tag Logfile Einträge ohne Status Code Fehlgeschlagene Anfragen Umgeleitete Anfragen Anfragen mit informativem Status Code Anzahl unterschiedlicher verlangter Dateien Anzahl unterschiedlicher anfragender Hosts Unlesbare Zeilen in der Logdatei Nicht verwendete Einträge in der Logdatei Menge verschickter Daten Durchschnittliche Menge verschickter Daten pro Tag Zahlen in Klammern beziehen sich auf die 7 Tage bis letzten 7 Tage Andere Statistiken Anfang ## Some special phrases for particular reports. [Nicht auflösbare numerische Adressen] [keine Domäne angegeben] [unbekannte Domäne] [Root-Verzeichnis] [kein Verzeichnis] [keine Extension] [Verzeichnisse] unbekannt Windows anderes Unix Robots unbekanntes Betriebsystem ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #Anf. 7 Tage Anfrage %Anf. %7-Tage Anfrage Seit. 7-Tage Seiten %Seit %7-Tage Seiten Bytes ?Bytes 7-Tage Bytes 7-Tage ?Bytes %Bytes %7-Tage Bytes Nr. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Ausgabe des ersten %s Ausgabe der ersten %s Ausgabe des ersten %s Ausgabe der ersten %d %s Ausgabe der ersten %d %s Ausgabe der ersten %d %s Ausgabe aller %s Ausgabe aller %s Ausgabe aller %s ## "by" in the phrase "listing the top 3 files BY number of requests" gewichtet nach ## All requests WITH AT LEAST 10 requests mit mindestens ## Different ways of doing floors Anfrage in den letzten 7 Tagen Anfragen in den letzten 7 Tagen Anfrage einer Seite in den letzten 7 Tagen Anfragen einer Seite in den letzten 7 Tagen umgeleitete Anfrage umgeleitete Anfragen umgeleitete Anfrage in den letzten 7 Tagen umgeleitete Anfragen in den letzten 7 Tagen fehlgeschlagene Anfrage fehlgeschlagene Anfragen fehlgeschlagene Anfrage in den letzten 7 Tagen fehlgeschlagene Anfragen in den letzten 7 Tagen % des Transfervolumens % des Transfervolumens in den letzten 7 Tagen % des größten Transfervolumens % des maximalen Transfervolumens in den letzten 7 Tagen Byte gesendeten Daten Bytes gesendeten Daten ## ?bytes represents kbytes, Mbytes etc. ?Bytes gesendeten Daten Byte gesendeten Daten in den letzten 7 Tagen Bytes gesendeten Daten in den letzten 7 Tagen ?Bytes gesendeten Daten in den letzten 7 Tagen Anfragen seit mit umgeleiteter Anfrage seit mit fehlgeschlagener Anfrage seit mit erster Anfrage seit mit erster Umleitungs-Anfrage seit mit erster fehlgeschlagener Anfrage seit ## Now "sorted by": again, in m, f & n (only needed in plural though) sortiert nach sortiert nach sortiert nach ## Used at the top of each report Dieser Bericht beinhaltet Daten aus ## Used in pie charts Grafik erstellt aus ## different ways of sorting Transfervolumen Transfervolumen in den letzten 7 Tagen % der Anfragen % der Anfragen in den letzten 7 Tagen % der maximalen Anzahl an Anfragen % der maximalen Anzahl von Anfragen in den letzten 7 Tagen Gesamtanzahl der Anfragen die Anzahl der Anfragen in den letzten 7 Tagen % der Seitenanfragen % der Seitenanfragen in den letzten 7 Tagen % der maximalen Anzahl an Seitenanfragen % der maximalen Anzahl von Seitenanfragen in den letzten 7 Tagen Anzahl der Seitenanfragen Anzahl der Anfragen auf Seiten in den letzten 7 Tagen % der umgeleiteten Anfragen % der umgeleiteten Anfragen in den letzten 7 Tagen % der maximalen Anzahl umgeleiteter Anfragen % der maximalen Anzahl von umgeleiteten Anfragen in den letzten 7 Tagen Anzahl umgeleiteter Anfragen die Anzahl der umgeleiteten Anfragen in den letzten 7 Tagen % der fehlgeschlagenen Anfragen % der fehlgeschlagenen Anfragen in den letzten 7 Tagen % der maximalen Anzahl fehlgeschlagener Anfragen % der maximalen Anzahl fehlgeschlagener Anfragen in den letzten 7 Tagen Anzahl fehlgeschlagener Anfragen die Anzahle der fehlgeschlagenen Anfragen in den letzten 7 Tagen Uhrzeit der letzten Anfrage Uhrzeit der letzten umgeleiteten Anfrage Uhrzeit der letzten fehlgeschlagenen Anfrage Uhrzeit der ersten Anfrage Uhrzeit der ersten umgeleiteten Anfrage Uhrzeit der ersten fehlgeschlagenen Anfrage ## 3 other ways of sorting in m, f, & n alphabetisch sortiert alphabetisch sortiert alphabetisch sortiert numerisch sortiert numerisch sortiert numerisch sortiert unsortiert unsortiert unsortiert ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. morgens abends ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m %Y %H:%n ## "Program started at" and "Analysed requests from" %w, %D. %m %Y %H:%n ## In Daily Report %d. %m %y ## In Daily Summary %w ## In Hourly Report %d. %m %y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d. %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m %y ## The date & time (D) column in non-time reports %d. %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Anfragen fortsetzen 101 Protokollwechsel 1xx [verschiedene Mitteilungen] 200 OK 201 Erzeugt 202 Zur weiteren Bearbeitung angenommen 203 Nicht maßgebliche Information 204 OK, aber nichts zu übermittteln 205 Dokument zurückgesetzt 206 Partieller Inhalt 2xx [Verschiedene Erfolgsmeldungen] 300 Mehrere Dokumente vorhanden 301 Dokument dauerhaft verlegt 302 Dokument befindet sich anderswo 303 Siehe anderes Dokument 304 Unverändert seit dem letzten Zugriff 305 Proxy benutzen 306 Proxy wechseln 307 Dokument vorübergehend verlegt 3xx [Verschiedene Umleitungen] 400 Inkorrekte Anfrage 401 Authentifizierung erforderlich 402 Bezahlung erforderlich 403 Zugriff verboten 404 Dokument nicht gefunden 405 Methode nicht erlaubt 406 Dokument vom Client nicht akzeptiert 407 Proxy-Authentifizierung erforderlich 408 Zeitüberschreitung bei Anfrage 409 Anfrage widerspricht dem Zustand der Resource 410 Dokument dauerhaft entfernt 411 Länge erforderlich 412 Voraussetzungen nicht erfüllt 413 Anfrage zu lang 414 Gewünschter Dateiname zu lang 415 Nicht unterstütztes Medium 416 Ungültiger Anfragebereich 417 Annahme gescheitert 4xx [Verschiedene Client-/Benutzerfehler] 500 Serverfehler 501 Anfragetyp nicht unterstützt 502 Fehler bei Server weiter oberhalb 503 Dient zeitweise nicht verfügbar 504 Zeitüberschreitung am Gateway 505 HTTP-Version nicht unterstützt 506 Umleitung gescheitert 5xx [Verschiedene Serverfehler] xxx [Unbekannt] analog-ce-6.0.17/lang/dea.lng000066400000000000000000000335421406366436600156340ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. So Mo Di Mi Do Fr Sa Jan Feb Mae Apr Mai Jun Jul Aug Sep Okt Nov Dez ## Next some standard common words. ## Abbreviation for "week beginning" Woche ab Jahr ## Quarter of a year Quartal Monate Tag Tage Stunde Minute Minuten Sekunde Sekunden Byte Bytes ## ?bytes represents kbytes, Mbytes etc. ?Bytes Anfrage Anfragen Datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 Datum Uhrzeit Zeit erster Zugriff erster Zugriff letzter Zugriff letzter Zugriff Datei Dateien Host Hosts virtueller Server virtuelle Server Verzeichnis Verzeichnisse Domaene Domaenen Organisation Organisationen Erweiterung Erweiterungen URL URL's Browser Browser Betriebsystem Betriebsysteme ## (= operating system, operating systems) Dateigroesse Suchbegriff Suchbegriffe WWW-Server WWW-Server Benutzer Benutzer Status code Status codes Server Statistiken fuer ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Zusammenfassung ## The time reports, plus "busiest" strings (at the bottom of each report) Jaehrlicher Bericht staerkstes Jahr: Quartals Bericht staerkstes Quartal: Monatsbericht Monat mit der staerksten Nutzung: Wochenbericht Woche mit der staerksten Nutzung: Wochentage Uebersicht Tagesbericht Tag mit der staerksten Nutzung: Stuendlicher Bericht Tageszeit Uebersicht Uhrzeit der Wochenuebersicht Uhrzeit mit der staerksten Nutzung: Viertelstuendlicher Bericht Viertelstuendlicher Bericht Viertelstunde mit der staerksten Nutzung: 5-minuetiger Bericht 5-minuetiger Bericht Die 5 Minuten mit der staerksten Nutzung: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Bericht Hosts Hosts m Host Umleitungs Bericht Hosts Hosts n Host Ausfallbericht Hosts Hosts n Verzeichnisbericht Verzeichnisses Verzeichnisse n Dateityp Bericht Dateityp Dateitypen m Anfrage Bericht verlangten Datei verlangten Dateien f Umgeleitete Anfragen Datei Dateien f Fehler Bericht Datei Dateien f Verweis Bericht verweisenden URL verweisenden URLs f Server Verweisbericht verweisenden Server verweisenden Server m Umleitungs Verweisbericht verweisenden URL verweisenden URLs f Verweis Fehlerbericht verweisenden URL verweisenden URLs f Suchanfrage Bericht Anfrage Anfragen f Suchbegriff Bericht Suchbegriffs Suchbegriffe m Interner Frage Bericht Frage Fragen n Interner Suchwort Bericht Suchwort Suchwoerter n Virtueller Server Bericht Virtueller Server Virtuelle Server m Virtueller Server Umleitungsbericht Virtueller Server Virtuelle Server n Virtueller Serverfehler Bericht Virtueller Server Virtuelle Server n Benutzer Bericht Benutzers Benutzer m Benutzer Umleitungsbericht Benutzer Benutzer n Benutzer Fehlerbericht Benutzers Benutzer m Browser Uebersicht Browsers Browser m Browser Bericht Browsers Browser m Betriebsystem Bericht Betriebsystems Betriebsysteme n Domaenen Bericht Domaene Domaenen f Organisationsbericht Organisation Organisationen f Statuscodebericht Statuscodes Statuscodes m Bearbeitungszeit Bericht Dateigroessen Uebersicht ## Used at the bottom of the report Diese Statistik wurde erzeugt durch Laufzeit Unter einer ## Used in the time reports Jede Einheit entspricht oder einem Teil davon Seitenanfrage Seitenanfragen ## Used at the bottom of each non-time report: need m, f & n genders nicht angezeigt nicht angezeigt nicht angezeigt ## Used on the pie charts: again need m, f & n genders Andere Andere Andere ## Used at the top of the report Programmstart: Auswertungszeitraum: bis ## Used in the General Summary Erfolgreich bearbeitete Anfragen Durchschnittlich bearbeitete Anfragen pro Tag Erfolgreich bearbeitete Seitenanfragen Durchschnittlich bearbeitete Seitenanfragen pro Tag Logfile Eintraege ohne Status Code Fehlgeschlagene Anfragen Umgeleitete Anfragen Anfragen mit informativem Status Code Anzahl unterschiedlicher verlangter Dateien Anzahl unterschiedlicher anfragender Hosts Unlesbare Zeilen in der Logdatei Nicht verwendete Eintraege in der Logdatei Menge verschickter Daten Durchschnittliche Menge verschickter Daten pro Tag Zahlen in Klammern beziehen sich auf die 7 Tage bis letzten 7 Tage Andere Statistiken Anfang ## Some special phrases for particular reports. [Nicht aufloesbare numerische Adressen] [keine Domaene angegeben] [unbekannte Domaene] [Root-Verzeichnis] [kein Verzeichnis] [keine Extension] [Verzeichnisse] unbekannt Windows anderes Unix Robots unbekanntes Betriebsystem ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #Anf. 7 Tage Anfrage %Anf. %7-Tage Anfrage Seit. 7-Tage Seiten %Seit %7-Tage Seiten Bytes ?Bytes 7-Tage Bytes 7-Tage ?Bytes %Bytes %7-Tage Bytes Nr. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Ausgabe des ersten %s Ausgabe der ersten %s Ausgabe des ersten %s Ausgabe der ersten %d %s Ausgabe der ersten %d %s Ausgabe der ersten %d %s Ausgabe aller %s Ausgabe aller %s Ausgabe aller %s ## "by" in the phrase "listing the top 3 files BY number of requests" gewichtet nach ## All requests WITH AT LEAST 10 requests mit mindestens ## Different ways of doing floors Anfrage in den letzten 7 Tagen Anfragen in den letzten 7 Tagen Anfrage einer Seite in den letzten 7 Tagen Anfragen einer Seite in den letzten 7 Tagen umgeleitete Anfrage umgeleitete Anfragen umgeleitete Anfrage in den letzten 7 Tagen umgeleitete Anfragen in den letzten 7 Tagen fehlgeschlagene Anfrage fehlgeschlagene Anfragen fehlgeschlagene Anfrage in den letzten 7 Tagen fehlgeschlagene Anfragen in den letzten 7 Tagen % des Transfervolumens % des Transfervolumens in den letzten 7 Tagen % des groessten Transfervolumens % des maximalen Transfervolumens in den letzten 7 Tagen Byte gesendeten Daten Bytes gesendeten Daten ## ?bytes represents kbytes, Mbytes etc. ?Bytes gesendeten Daten Byte gesendeten Daten in den letzten 7 Tagen Bytes gesendeten Daten in den letzten 7 Tagen ?Bytes gesendeten Daten in den letzten 7 Tagen Anfragen seit mit umgeleiteter Anfrage seit mit fehlgeschlagener Anfrage seit mit erster Anfrage seit mit erster Umleitungs-Anfrage seit mit erster fehlgeschlagener Anfrage seit ## Now "sorted by": again, in m, f & n (only needed in plural though) sortiert nach sortiert nach sortiert nach ## Used at the top of each report Dieser Bericht beinhaltet Daten aus ## Used in pie charts Grafik erstellt aus ## different ways of sorting Transfervolumen Transfervolumen in den letzten 7 Tagen % der Anfragen % der Anfragen in den letzten 7 Tagen % der maximalen Anzahl an Anfragen % der maximalen Anzahl von Anfragen in den letzten 7 Tagen Gesamtanzahl der Anfragen die Anzahl der Anfragen in den letzten 7 Tagen % der Seitenanfragen % der Seitenanfragen in den letzten 7 Tagen % der maximalen Anzahl an Seitenanfragen % der maximalen Anzahl von Seitenanfragen in den letzten 7 Tagen Anzahl der Seitenanfragen Anzahl der Anfragen auf Seiten in den letzten 7 Tagen % der umgeleiteten Anfragen % der umgeleiteten Anfragen in den letzten 7 Tagen % der maximalen Anzahl umgeleiteter Anfragen % der maximalen Anzahl von umgeleiteten Anfragen in den letzten 7 Tagen Anzahl umgeleiteter Anfragen die Anzahl der umgeleiteten Anfragen in den letzten 7 Tagen % der fehlgeschlagenen Anfragen % der fehlgeschlagenen Anfragen in den letzten 7 Tagen % der maximalen Anzahl fehlgeschlagener Anfragen % der maximalen Anzahl fehlgeschlagener Anfragen in den letzten 7 Tagen Anzahl fehlgeschlagener Anfragen die Anzahle der fehlgeschlagenen Anfragen in den letzten 7 Tagen Uhrzeit der letzten Anfrage Uhrzeit der letzten umgeleiteten Anfrage Uhrzeit der letzten fehlgeschlagenen Anfrage Uhrzeit der ersten Anfrage Uhrzeit der ersten umgeleiteten Anfrage Uhrzeit der ersten fehlgeschlagenen Anfrage ## 3 other ways of sorting in m, f, & n alphabetisch sortiert alphabetisch sortiert alphabetisch sortiert numerisch sortiert numerisch sortiert numerisch sortiert unsortiert unsortiert unsortiert ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. morgens abends ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m %Y %H:%n ## "Program started at" and "Analysed requests from" %w, %D. %m %Y %H:%n ## In Daily Report %d. %m %y ## In Daily Summary %w ## In Hourly Report %d. %m %y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d. %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m %y ## The date & time (D) column in non-time reports %d. %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Anfragen fortsetzen 101 Protokollwechsel 1xx [verschiedene Mitteilungen] 200 OK 201 Erzeugt 202 Zur weiteren Bearbeitung angenommen 203 Nicht massgebliche Information 204 OK, aber nichts zu uebermittteln 205 Dokument zurueckgesetzt 206 Partieller Inhalt 2xx [Verschiedene Erfolgsmeldungen] 300 Mehrere Dokumente vorhanden 301 Dokument dauerhaft verlegt 302 Dokument befindet sich anderswo 303 Siehe anderes Dokument 304 Unveraendert seit dem letzten Zugriff 305 Proxy benutzen 306 Proxy wechseln 307 Dokument voruebergehend verlegt 3xx [Verschiedene Umleitungen] 400 Inkorrekte Anfrage 401 Authentifizierung erforderlich 402 Bezahlung erforderlich 403 Zugriff verboten 404 Dokument nicht gefunden 405 Methode nicht erlaubt 406 Dokument vom Client nicht akzeptiert 407 Proxy-Authentifizierung erforderlich 408 Zeitueberschreitung bei Anfrage 409 Anfrage widerspricht dem Zustand der Resource 410 Dokument dauerhaft entfernt 411 Laenge erforderlich 412 Voraussetzungen nicht erfuellt 413 Anfrage zu lang 414 Gewuenschter Dateiname zu lang 415 Nicht unterstuetztes Medium 416 Ungueltiger Anfragebereich 417 Annahme gescheitert 4xx [Verschiedene Client-/Benutzerfehler] 500 Serverfehler 501 Anfragetyp nicht unterstuetzt 502 Fehler bei Server weiter oberhalb 503 Dient zeitweise nicht verfuegbar 504 Zeitueberschreitung am Gateway 505 HTTP-Version nicht unterstuetzt 506 Umleitung gescheitert 5xx [Verschiedene Serverfehler] xxx [Unbekannt] analog-ce-6.0.17/lang/deadom.tab000066400000000000000000000112271406366436600163160ustar00rootroot00000000000000ad 2 Andorra ae 3 Vereinigte Arabische Emirate af 1 Afghanistan ag 2 Antigua und Barbuda ai 1 Anguilla al 1 Albanien am 2 Armenien an 1 Niederlaendische Antillen ao 1 Angola aq 1 Antarktis ar 3 Argentinien arpa 1 Arpanet as 1 Amerikanisch-Samoa at 3 Oesterreich au 3 Australien aw 1 Aruba az 1 Aserbaidschan ba 3 Bosnien und Herzegowina bb 2 Barbados bd 1 Bangladesch be 3 Belgien bf 1 Burkina Faso bg 2 Bulgarien bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivien br 3 Brasilien bs 1 Bahamas bt 1 Bhutan bv 1 Bouvetinsel bw 1 Botsuana by 1 Belarus (Weissrussland) bz 1 Belize ca 3 Kanada cc 1 Kokosinseln cd 1 Demokratische Republik Kongo cf 1 Zentralafrikanische Republik cg 1 Kongo ch 2 Schweiz ci 1 Elfenbeinkueste ck 1 Cookinseln cl 2 Chile cm 1 Kamerun cn 3 China co 3 Kolumbien com 2 Kommerzieller Bereich cr 3 Costa Rica cs 3 Serbien und Montenegro cu 2 Kuba cv 1 Kap Verde cx 2 Weihnachtsinsel cy 3 Zypern cz 2 Tschechische Republik de 2 Deutschland dj 1 Dschibuti dk 2 Daenemark dm 2 Dominica do 3 Dominikanische Republik dz 1 Algerien ec 3 Ecuador edu 2 Bildungsbereich ee 2 Estland eg 3 Aegypten eh 1 Westsahara er 1 Eritrea es 2 Spanien et 1 Aethiopien fi 2 Finnland fj 3 Fidschi fk 1 Falklandinseln fm 1 Mikronesien fo 1 Faeroeer fr 2 Frankreich fx 1 Frankreich (Europaeisches Territorium) ga 1 Gabun gb 1 Grossbritannien gd 1 Grenada ge 1 Georgien gf 1 Franzoesisch-Guayana gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambia gn 1 Guinea gov 2 USA Regierungsbereich gp 1 Guadeloupe gq 1 Aequatorialguinea gr 2 Griechenland gs 1 Suedgeorgien und Suedliche Sandwichinseln gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 Heard und McDonaldinseln hn 2 Honduras hr 2 Kroatien ht 1 Haiti hu 2 Ungarn id 3 Indonesien ie 2 Irland il 3 Israel in 3 Indien int 1 Internationale Organisationen io 1 Britisches Territorium im Indischen Ozean iq 1 Irak ir 1 Iran is 2 Island it 2 Italien jm 3 Jamaika jo 3 Jordanien jp 3 Japan ke 3 Kenia kg 1 Kirgisistan kh 1 Kambodscha ki 1 Kiribati km 1 Komoren kn 1 St. Kitts und Nevis kp 1 Nordkorea kr 3 Suedkorea kw 3 Kuwait ky 1 Kaimaninseln kz 1 Kasachstan la 1 Laos lb 3 Libanon lc 1 St. Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litauen lu 2 Luxemburg lv 2 Lettland ly 1 Libyen ma 1 Marokko mc 2 Monaco md 1 Moldawien mg 1 Madagakar mh 1 Marshallinseln mil 2 USA Militaerbereich mk 3 Mazedonien ml 1 Mali mm 1 Myanmar mn 1 Mongolei mo 1 Macau mp 1 Noerdliche Marianen mq 1 Martinique mr 1 Mauretanien ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Malediven mw 1 Malawi mx 3 Mexico my 3 Malaysia mz 1 Mosambik na 1 Namibia nc 1 Neukaledonien ne 1 Niger net 2 Netze nf 1 Norfolkinsel ng 1 Nigeria ni 3 Nicaragua nl 2 Niederlande no 2 Norwegen np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Neuseeland om 1 Oman org 2 nichtkommerzielle Organisationen pa 3 Panama pe 3 Peru pf 1 Franzoesisch-Polynesien pg 3 Papua Neuguinea ph 3 Philippinen pk 3 Pakistan pl 3 Polen pm 1 St. Pierre und Miquelon pn 1 Pitcairninseln pr 1 Puerto Rico pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Katar re 1 Reunion ro 2 Rumaenien ru 2 Russische Foederation rw 1 Ruanda sa 3 Saudi-Arabien sb 1 Salomonen sc 1 Seychellen sd 1 Sudan se 2 Schweden sg 3 Singapur sh 1 St. Helena si 2 Slowenien sj 1 Svalbard und Jan Mayen sk 2 Slowakei sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Sao Tome und Principe su 2 ehemalige UdSSR sv 3 El Salvador sy 1 Syrien sz 1 Swasiland tc 1 Turks- und Caicosinseln td 1 Tschad tf 1 Franzoesische Gebiete im suedlichen Indischen Ozean tg 1 Togo th 3 Thailand tj 1 Tadschikistan tk 1 Tokelau tl 1 Timor-Leste tm 1 Turkmenistan tn 1 Tunesien to 1 Tonga tp 1 Timor-Leste tr 3 Tuerkei tt 3 Trinidad und Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tansania ua 3 Ukraine ug 3 Uganda uk 3 Grossbritannien um 1 Kleinere amerikanische Ueberseeinseln us 4 Vereinigte Staaten uy 3 Uruguay uz 1 Usbekistan va 1 Vatikanstadt vc 1 St. Vincent und die Grenadinen ve 3 Venezuela vg 1 Britische Jungferninseln vi 1 Amerikanische Jungferninseln vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis und Futuna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Serbien und Montenegro za 3 Suedafrika zm 1 Sambia zr 1 ehemaliges Zaire zw 3 Simbabwe analog-ce-6.0.17/lang/dedom.tab000066400000000000000000000111721406366436600161540ustar00rootroot00000000000000ad 2 Andorra ae 3 Vereinigte Arabische Emirate af 1 Afghanistan ag 2 Antigua und Barbuda ai 1 Anguilla al 1 Albanien am 2 Armenien an 1 Niederländische Antillen ao 1 Angola aq 1 Antarktis ar 3 Argentinien arpa 1 Arpanet as 1 Amerikanisch-Samoa at 3 Österreich au 3 Australien aw 1 Aruba az 1 Aserbaidschan ba 3 Bosnien und Herzegowina bb 2 Barbados bd 1 Bangladesch be 3 Belgien bf 1 Burkina Faso bg 2 Bulgarien bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivien br 3 Brasilien bs 1 Bahamas bt 1 Bhutan bv 1 Bouvetinsel bw 1 Botsuana by 1 Belarus (Weißrußland) bz 1 Belize ca 3 Kanada cc 1 Kokosinseln cd 1 Demokratische Republik Kongo cf 1 Zentralafrikanische Republik cg 1 Kongo ch 2 Schweiz ci 1 Elfenbeinküste ck 1 Cookinseln cl 2 Chile cm 1 Kamerun cn 3 China co 3 Kolumbien com 2 Kommerzieller Bereich cr 3 Costa Rica cs 3 Serbien und Montenegro cu 2 Kuba cv 1 Kap Verde cx 2 Weihnachtsinsel cy 3 Zypern cz 2 Tschechische Republik de 2 Deutschland dj 1 Dschibuti dk 2 Dänemark dm 2 Dominica do 3 Dominikanische Republik dz 1 Algerien ec 3 Ecuador edu 2 Bildungsbereich ee 2 Estland eg 3 Ägypten eh 1 Westsahara er 1 Eritrea es 2 Spanien et 1 Äthiopien fi 2 Finnland fj 3 Fidschi fk 1 Falklandinseln fm 1 Mikronesien fo 1 Färöer fr 2 Frankreich fx 1 Frankreich (Europäisches Territorium) ga 1 Gabun gb 1 Großbritannien gd 1 Grenada ge 1 Georgien gf 1 Französisch-Guayana gh 3 Ghana gi 1 Gibraltar gl 1 Grönland gm 1 Gambia gn 1 Guinea gov 2 USA Regierungsbereich gp 1 Guadeloupe gq 1 Äquatorialguinea gr 2 Griechenland gs 1 Südgeorgien und Südliche Sandwichinseln gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 Heard und McDonaldinseln hn 2 Honduras hr 2 Kroatien ht 1 Haiti hu 2 Ungarn id 3 Indonesien ie 2 Irland il 3 Israel in 3 Indien int 1 Internationale Organisationen io 1 Britisches Territorium im Indischen Ozean iq 1 Irak ir 1 Iran is 2 Island it 2 Italien jm 3 Jamaika jo 3 Jordanien jp 3 Japan ke 3 Kenia kg 1 Kirgisistan kh 1 Kambodscha ki 1 Kiribati km 1 Komoren kn 1 St. Kitts und Nevis kp 1 Nordkorea kr 3 Südkorea kw 3 Kuwait ky 1 Kaimaninseln kz 1 Kasachstan la 1 Laos lb 3 Libanon lc 1 St. Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litauen lu 2 Luxemburg lv 2 Lettland ly 1 Libyen ma 1 Marokko mc 2 Monaco md 1 Moldawien mg 1 Madagakar mh 1 Marshallinseln mil 2 USA Militärbereich mk 3 Mazedonien ml 1 Mali mm 1 Myanmar mn 1 Mongolei mo 1 Macau mp 1 Nördliche Marianen mq 1 Martinique mr 1 Mauretanien ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Malediven mw 1 Malawi mx 3 Mexico my 3 Malaysia mz 1 Mosambik na 1 Namibia nc 1 Neukaledonien ne 1 Niger net 2 Netze nf 1 Norfolkinsel ng 1 Nigeria ni 3 Nicaragua nl 2 Niederlande no 2 Norwegen np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Neuseeland om 1 Oman org 2 nichtkommerzielle Organisationen pa 3 Panama pe 3 Peru pf 1 Französisch-Polynesien pg 3 Papua Neuguinea ph 3 Philippinen pk 3 Pakistan pl 3 Polen pm 1 St. Pierre und Miquelon pn 1 Pitcairninseln pr 1 Puerto Rico pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Katar re 1 Réunion ro 2 Rumänien ru 2 Russische Föderation rw 1 Ruanda sa 3 Saudi-Arabien sb 1 Salomonen sc 1 Seychellen sd 1 Sudan se 2 Schweden sg 3 Singapur sh 1 St. Helena si 2 Slowenien sj 1 Svalbard und Jan Mayen sk 2 Slowakei sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 São Tomé und Príncipe su 2 ehemalige UdSSR sv 3 El Salvador sy 1 Syrien sz 1 Swasiland tc 1 Turks- und Caicosinseln td 1 Tschad tf 1 Französische Gebiete im südlichen Indischen Ozean tg 1 Togo th 3 Thailand tj 1 Tadschikistan tk 1 Tokelau tl 1 Timor-Leste tm 1 Turkmenistan tn 1 Tunesien to 1 Tonga tp 1 Timor-Leste tr 3 Türkei tt 3 Trinidad und Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tansania ua 3 Ukraine ug 3 Uganda uk 3 Großbritannien um 1 Kleinere amerikanische Überseeinseln us 4 Vereinigte Staaten uy 3 Uruguay uz 1 Usbekistan va 1 Vatikanstadt vc 1 St. Vincent und die Grenadinen ve 3 Venezuela vg 1 Britische Jungferninseln vi 1 Amerikanische Jungferninseln vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis und Futuna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Serbien und Montenegro za 3 Südafrika zm 1 Sambia zr 1 ehemaliges Zaire zw 3 Simbabwe analog-ce-6.0.17/lang/deform.html000066400000000000000000000170661406366436600165460ustar00rootroot00000000000000 Analog Berichtsformular

Analog Berichtsformular


1. Auswahl der Berichte

Die Bedeutung der einzelnen Berichte sind auf der analog Homepage beschrieben.

Welche Berichte sollen erstellt werden?


[Ein] [Aus] Allgemeine Übersicht
[Ein] [Aus] Monatsbericht
[Ein] [Aus] Wochenbericht
[Ein] [Aus] Tagesübersicht
[Ein] [Aus] Tagesbericht
[Ein] [Aus] Stündliche Übersicht
[Ein] [Aus] Domänenbericht
[Ein] [Aus] Hostsbericht
[Ein] [Aus] Verzeichnisbericht
[Ein] [Aus] Dateitypenbericht
[Ein] [Aus] Anfragenbericht
[Ein] [Aus] Dateigrößenbericht
[Ein] [Aus] Anfragerbericht
[Ein] [Aus] Browser Übersicht
[Ein] [Aus] Browserbericht
[Ein] [Aus] Statuscodebericht

Jetzt kann man das Programm starten:

oder die folgenden Felder ausfüllen, um individuelle Berichte zu erstellen.

Folgende Eingaben werden akzeptiert:
bedeutet: 10 Megabytes
bedeutet: die 50 (nach Bytes) größten Elemente


2. Optionen für detaillierte Berichte

Optionen für den Domänenbericht

Sortierung des Domänen Berichts
Berücksichtigung aller Domänen mit mindestens

Optionen für den Hostbericht

Sortierung des Hostberichts
Berücksichtigung aller Hosts mit mindestens

Optionen für den Verzeichnisbericht

Sortierung des Verzeichnisberichts
Berücksichtigung aller Verzeichnisse mit mindestens

Optionen für den Anfragenbericht

Sortierung des Anfragenberichts
Berücksichtigung aller Dateien mit mindestens
Anzeigen:

3. Teilauswertung der Logdatei

nach Datum:
Auswertung eines Zeitraums.Dabei das Anfangs- und Enddatum im Format yymmdd eingeben;
z.B. 980301 für den 1.März 1998
oder nur ein Feld zur Begrenzung des Zeitraums ausfüllen.
Von bis

nach Dateien:
Nur nach folgenden Dateien suchen (Liste, getrennt durch Kommata; darf Platzhalter, z.B. * , enthalten):

folgende Dateien nicht berücksichtigen:


4. Darststellung

Name ihrer Organisation (Für die Überschrift bzw. Seitentitel)

Adresse der Homepage Ihrer Organisation (falls keine vorhanden, bitte leer lassen)
URL:


analog-ce-6.0.17/lang/dk.lng000066400000000000000000000316321406366436600154770ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. søn man tir ons tor fre lør jan feb mar apr maj jun jul aug sep okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" uge start år ## Quarter of a year kvartal måned dag dage kl minut minutter sekund sekunder byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes forespørgsel forespørgsler dato ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dato tidspunkt tid første dato første gang sidste dato sidste tidspunkt fil filer virtuel vært virtuelle værter vært værter katalog kataloger domæne domæner organisation organisationer filsuffiks filsuffikser URL URLs browser browsers OS OS'er ## (= operating system, operating systems) størrelse søgeterm søgetermer site sites bruger brugere statuskode statuskoder Web Server Statistik for ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Generel rapport ## The time reports, plus "busiest" strings (at the bottom of each report) Årlig rapport Mest travle år: Kvartalsrapport Mest travle kvartal: Månedlig rapport Mest travle måned: Ugentlig rapport Mest travle uge: uge start: Daglig oversigt Daglig rapport Mest travle dag: Time rapport Time oversigt Tid i ugen oversigt Mest travle time: Kvartersrapport Kvarters oversigt Mest travle kvarter: Femminuttersrapport Femminutters oversigt Mest travle fem minutter: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Værtrapport vært værter n Omdirigerede værtrapport Vært Værter n Vært fejlrapport Vært Værter n Katalog rapport katalog kataloger n Filtype rapport filsuffiks filsuffikser n Forespørgselsrapport fil filer n Omdirigeringer fil filer n Fejlrapport fil filer n Refererende adresserapport refererende URL refererende URLs n Refererende sites refererende site refererende sites n Omdirigerede refererende forespørgsler refererende URL refererende URLs n Mislykkede refererende forespørgsler refererende URL refererende URLs n Søgerapport søgning søgninger n Søgeordrapport søgeord søgeord n Intern søgerapport søgning søgninger n Intern søgeordrapport søgeord søgeord n Virtuelle værter virtuel vært virtuelle værter n Omdirigerede virtuel vært rapport Virtuel vært Virtuelle værter n n Virtuel vært fejlrapport Virtuel vært Virtuelle værter n Brugerrapport bruger brugere n Omdirigerede brugerrapport bruger brugere n Mislykkede brugerforespørgsler bruger brugere n Browser oversigt browser browsere n Browser rapport browser browsere n Operativsystemrapport operativsystem operativsystemer n Domæne rapport domæne domæner n Organisationsrapport organisation organisationer n Statuskode rapport statuskode statuskoder n Behandlingstidsrapport Filstørrelser ## Used at the bottom of the report Denne analyse blev produceret af Analysetid Under 1 ## Used in the time reports Hver enhed repræsenterer eller en del heraf sideforespørgsel sideforespørgsler ## Used at the bottom of each non-time report: need m, f & n genders ikke listet ikke listet ikke listet ## Used on the pie charts: again need m, f & n genders Andet Andet Andet ## Used at the top of the report Program start: Analyserede forespørgsler fra til ## Used in the General Summary ##7 dage til Totalt antal opfyldte forespørgsler Antal opfyldte forespørgsler pr. dag (gennemsnit) Totalt antal opfyldte forespørgsler for sider Antal opfyldte forespørgsler for sider pr. dag (gennemsnit) Logfil-linier uden statuskode Totalt antal uopfyldte forespørgsler Totalt antal omdirigerede forespørgsler Forespørgsler med informationsbærende statuskode Antal enkelte filer forespurgt Antal enkelte værter betjent Ugyldige logfil linier Uønskede logfil indførsler Total mængde data overført Overførte data pr. dag (gennemsnit) Tallene i parentes refererer til den sidste 7 dags periode sluttende den de sidste 7 dage Gå til Top ## Some special phrases for particular reports. [ikke-oversatte numeriske adresser] [domæne ikke angivet] [ukendt domæne] [rod katalog] [intet katalog] [intet suffiks] [kataloger] Ukendt Windows Andet Unix Robotter OS ukendt ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #henv 7-dage henv %henv %7-dage henv sider 7-dage sider %sider %7-dage sider bytes ?bytes 7-dage bytes 7-dage ?bytes %bytes %7-dage bytes ant ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Udskriver det første %s * * Udskriver de første %d %s * * Udskriver %s ## "by" in the phrase "listing the top 3 files BY number of requests" efter ## All requests WITH AT LEAST 10 requests med mindst ## Different ways of doing floors forespørgsel i de sidste 7 dage forespørgsler i de sidste 7 dage forespørgsel efter en side i de sidste 7 dage forespørgsler efter sider i de sidste 7 dage omdirigerede forespørgsel omdirigerede forespørgsler omdirigerede forespørgsel i de sidste 7 dage omdirigerede forespørgsler i de sidste 7 dage mislykket forespørgsel mislykkede forespørgsler mislykket forespørgsel i de sidste 7 dage mislykkede forespørgsler i de sidste 7 dage % trafik % af trafikken i de sidste 7 dage % af maks. trafikmængde % af maks. trafikken i de sidste 7 dage byte trafikken forespurgt siden ## ?bytes represents kbytes, Mbytes etc. ?bytes trafikken byte trafik i de sidste 7 dage bytes trafik i de sidste 7 dage ?bytes trafik i de sidste 7 dage med en omdirigeret forespørgsel siden med en mislykket forespørgsel siden bytes trafik med første forespørgsel siden med første omdirigerede forespørgsel siden med første mislykkede forespørgsel siden ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorteret efter ## Used at the top of each report Denne rapport indeholder data fra ## Used in pie charts Skiverne viser ## different ways of sorting mængde trafik mængde trafik de sidste 7 dage % af forespørgslerne % af forespørgslene i de sidste 7 dage % af maks. antal forespørgsler % af maks. antal forespørgsler de sidste 7 dage antal forespørgsler antal forespørgsler de sidste 7 dage % af sideforespørgsler % af forespørgsler for sider de sidste 7 dage % af maks. antal sideforespørgsler % af maks. antal forespørgsler for sider de sidste 7 dage antal sideforespørgsler antal forespørgsler for sider de sidste 7 dage % af omdirigerede forespørgsler % af omdirigerede forespørgsler de sidste 7 dage % af maks. antal omdirigerede forespørgsler % af maks. antal omdirigerede forespørgsler de sidste 7 dage antal omdirigerede forespørgsler antal omdirigerede forespørgsler de sidste 7 dage % af mislykkede forespørgsler % af mislykkede forespørgsler de sidste 7 dage % af maks. antal mislykkede forespørgsler % af maks. antal af mislykkede forespørgsler de sidste 7 dage antal mislykkede forespørgsler antal mislykkede forespørgsler de sidste 7 dage tidspunkt for sidste forespørgsel tidspunkt for sidste omdirigerede forespørgsel tidspunkt for sidste mislykket forespørgsel tidspunkt for første forespørgsel tidspunkt for første omdirigerede forespørgsel tidspunkt for første mislykket forspørgsel ## 3 other ways of sorting in m, f, & n * * sorteret alfabetisk * * sorteret numerisk * * usorteret ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m. %Y %H:%n ## "Program started at" and "Analysed requests from" %w %D. %m. %Y %H:%n ## In Daily Report %d.%m.%y ## In Daily Summary %w ## In Hourly Report %d.%m.%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m.%y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/dka.lng000066400000000000000000000317651406366436600156470ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. soe man tir ons tor fre lor jan feb mar apr maj jun jul aug sep okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" uge start aar ## Quarter of a year kvartal maaned dag dage kl minut minutter sekund sekunder byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes forespoergsel forespoergsler dato ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dato tidspunkt tid foerste dato foerste gang sidste dato sidste tidspunkt fil filer virtuel vaert virtuelle vaerter vaert vaerter katalog kataloger domaene domaener organisation organisationer filsuffiks filsuffikser URL URLs browser browsers OS OS'er ## (= operating system, operating systems) stoerrelse soegeterm soegetermer site sites bruger brugere statuskode statuskoder Web Server Statistik for ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Generel rapport ## The time reports, plus "busiest" strings (at the bottom of each report) Aarlig rapport Mest travle aar: Kvartalsrapport Mest travle kvartal: Maanedlig rapport Mest travle maaned: Ugentlig rapport Mest travle uge: uge start: Daglig oversigt Daglig rapport Mest travle dag: Time rapport Time oversigt Tid i ugen oversigt Mest travle time: Kvartersrapport Kvarters oversigt Mest travle kvarter: Femminuttersrapport Femminutters oversigt Mest travle fem minutter: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Vaertrapport vaert vaerter n Omdirigerede vaertrapport Vaert Vaerter n Vaert fejlrapport Vaert Vaerter n Katalog rapport katalog kataloger n Filtype rapport filsuffiks filsuffikser n Forespoergselsrapport fil filer n Omdirigeringer fil filer n Fejlrapport fil filer n Refererende adresserapport refererende URL refererende URLs n Refererende sites refererende site refererende sites n Omdirigerede refererende forespoergsler refererende URL refererende URLs n Mislykkede refererende forespoergsler refererende URL refererende URLs n Soegerapport soegning soegninger n Soegeordrapport soegeord soegeord n Intern soegerapport soegning soegninger n Intern soegeordrapport soegeord soegeord n Virtuelle vaerter virtuel vaert virtuelle vaerter n Omdirigerede virtuel vaert rapport Virtuel vaert Virtuelle vaerter n n Virtuel vaert fejlrapport Virtuel vaert Virtuelle vaerter n Brugerrapport bruger brugere n Omdirigerede brugerrapport bruger brugere n Mislykkede brugerforespoergsler bruger brugere n Browser oversigt browser browsere n Browser rapport browser browsere n Operativsystemrapport operativsystem operativsystemer n Domaene rapport domaene domaener n Organisationsrapport organisation organisationer n Statuskode rapport statuskode statuskoder n Behandlingstidsrapport Filstoerrelser ## Used at the bottom of the report Denne analyse blev produceret af Analysetid Under 1 ## Used in the time reports Hver enhed repraesenterer eller en del heraf sideforespoergsel sideforespoergsler ## Used at the bottom of each non-time report: need m, f & n genders ikke listet ikke listet ikke listet ## Used on the pie charts: again need m, f & n genders Andet Andet Andet ## Used at the top of the report Program start: Analyserede forespoergsler fra til ## Used in the General Summary Totalt antal opfyldte forespoergsler Antal opfyldte forespoergsler pr. dag (gennemsnit) Totalt antal opfyldte forespoergsler for sider Antal opfyldte forespoergsler for sider pr. dag (gennemsnit) Logfil-linier uden statuskode Totalt antal uopfyldte forespoergsler Totalt antal omdirigerede forespoergsler Forespoergsler med informationsbaerende statuskode Antal enkelte filer forespurgt Antal enkelte vaerter betjent Ugyldige logfil linier Uoenskede logfil indfoersler Total maengde data overfoert Overfoerte data pr. dag (gennemsnit) Tallene i parentes refererer til 7 dage til de sidste 7 dage Gaa til Top ## Some special phrases for particular reports. [ikke-oversatte numeriske adresser] [domaene ikke angivet] [ukendt domaene] [rod katalog] [intet katalog] [intet suffiks] [kataloger] Ukendt Windows Andet Unix Robotter OS ukendt ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #henv 7-dage henv %henv %7-dage henv sider 7-dage sider %sider %7-dage sider bytes ?bytes 7-dage bytes 7-dage ?bytes %bytes %7-dage bytes ant ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Udskriver det foerste %s * * Udskriver de foerste %d %s * * Udskriver %s ## "by" in the phrase "listing the top 3 files BY number of requests" efter ## All requests WITH AT LEAST 10 requests med mindst ## Different ways of doing floors forespoergsel i de sidste 7 dage forespoergsler i de sidste 7 dage forespoergsel efter en side i de sidste 7 dage forespoergsler efter sider i de sidste 7 dage omdirigerede forespoergsel omdirigerede forespoergsler omdirigerede forespoergsel i de sidste 7 dage omdirigerede forespoergsler i de sidste 7 dage mislykket forespoergsel mislykkede forespoergsler mislykket forespoergsel i de sidste 7 dage mislykkede forespoergsler i de sidste 7 dage % trafik % af trafikken i de sidste 7 dage % af maks. trafikmaengde % af maks. trafikken i de sidste 7 dage byte trafikken forespurgt siden ## ?bytes represents kbytes, Mbytes etc. ?bytes trafikken byte trafik i de sidste 7 dage bytes trafik i de sidste 7 dage ?bytes trafik i de sidste 7 dage med en omdirigeret forespoergsel siden med en mislykket forespoergsel siden bytes trafik med foerste forespoergsel siden med foerste omdirigerede forespoergsel siden med foerste mislykkede forespoergsel siden ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorteret efter ## Used at the top of each report Denne rapport indeholder data fra ## Used in pie charts Skiverne viser ## different ways of sorting maengde trafik maengde trafik de sidste 7 dage % af forespoergslerne % af forespoergslene i de sidste 7 dage % af maks. antal forespoergsler % af maks. antal forespoergsler de sidste 7 dage antal forespoergsler antal forespoergsler de sidste 7 dage % af sideforespoergsler % af forespoergsler for sider de sidste 7 dage % af maks. antal sideforespoergsler % af maks. antal forespoergsler for sider de sidste 7 dage antal sideforespoergsler antal forespoergsler for sider de sidste 7 dage % af omdirigerede forespoergsler % af omdirigerede forespoergsler de sidste 7 dage % af maks. antal omdirigerede forespoergsler % af maks. antal omdirigerede forespoergsler de sidste 7 dage antal omdirigerede forespoergsler antal omdirigerede forespoergsler de sidste 7 dage % af mislykkede forespoergsler % af mislykkede forespoergsler de sidste 7 dage % af maks. antal mislykkede forespoergsler % af maks. antal af mislykkede forespoergsler de sidste 7 dage antal mislykkede forespoergsler antal mislykkede forespoergsler de sidste 7 dage tidspunkt for sidste forespoergsel tidspunkt for sidste omdirigerede forespoergsel tidspunkt for sidste mislykket forespoergsel tidspunkt for foerste forespoergsel tidspunkt for foerste omdirigerede forespoergsel tidspunkt for foerste mislykket forspoergsel ## 3 other ways of sorting in m, f, & n * * sorteret alfabetisk * * sorteret numerisk * * usorteret ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m. %Y %H:%n ## "Program started at" and "Analysed requests from" %w %D. %m. %Y %H:%n ## In Daily Report %d.%m.%y ## In Daily Summary %w ## In Hourly Report %d.%m.%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m.%y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/es.lng000066400000000000000000000346351406366436600155160ustar00rootroot00000000000000############################################################################### ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## By J. L. García, July 2001, based on earlier versions by Alfredo Sola, ## Alexander Velasquez, Nelson Tactuk and Javier Kohan. ## Comments and corrections to jlg@grafika.com.mx ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Dom Lun Mar Mié Jue Vie Sáb Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic ## Next some standard common words. ## Abbreviation for "week beginning" com. de sem. año ## Quarter of a year trimestre mes día días hr minuto minutos segundo segundos byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes petición peticiones fecha ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 fecha hora hora primera fecha primera hora última fecha última hora archivo archivos sistema sistemas servidor virtual servidores virtuales directorio directorios dominio dominios organización organizaciones extensión extensiones URL URLs Navegador Navegadores SO SO ## (= operating system, operating systems) tamaño término buscado términos buscados sitio sitios usuario usuarios cód. de estado códs. de estado Estadísticas del servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Resumen general ## The time reports, plus "busiest" strings (at the bottom of each report) Reporte Anual Año de mayor tráfico: Reporte Trimestral Trimestre de mayor tráfico: Informe mensual Mes de mayor tráfico: Informe semanal Semana de mayor tráfico: Resumen diario Informe diario Día de mayor tráfico: Informe horario Resumen horario Reporte por hora de la semana Hora de mayor tráfico: Informe de cuarto de hora Resumen por cuarto de hora Cuarto de hora de mayor tráfico: Informe de cada cinco minutos Resumen de cada cinco minutos Cinco minutos de mayor tráfico: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings. and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Informe de Sistemas sistema sistemas m Reporte de Redirección de Sistema sistema sistemas m Reporte de Falla de Sistema sistema sistemas m Informe de Directorios directorio directorios m Informe de Tipos de Archivo extensión extensiones f Informe de peticiones archivo archivos m Informe de redireccionamientos archivo archivos m Informe de fallos en una petición archivo archivos m Informe de remitentes URL remitente URLs remitentes m Informe de sitios remitentes sitio remitente sitios remitentes m Informe de remitentes redirecionados URL remitente URLs remitentes m Informe de errores de remitentes URL del remitente URLs de remitentes m Reporte de Preguntas de Búsqueda pregunta preguntas f Reporte de Palabras de Buscadas palabra buscada palabras buscadas f Reporte Interno de Preguntas de Búsqueda pregunta preguntas f Reporte Interno de Palabras Buscadas palabra buscada palabras buscadas f Informe de servidores virtuales servidor virtual servidores virtuales m Reporte de Redirección de Servidores Virtuales servidor virtual servidores virtuales m Reporte de Falla de Servidor Virtual servidor virtual servidores virtuales m Informe de usuarios usuario usuarios m Reporte de Redirección de Usuarios usuario usuarios m Informe de errores de usuarios usuario usuarios m Resumen de navegadores navegador navegadores m Informe de navegadores navegador navegadores m Informe de Sistemas Operativos sistema operativo sistemas operativos m Informe de dominios dominio dominios m Informe de organización organización organizaciones f Informe de códigos de estado código de estado códigos de estado m Informe de tiempo de procesamiento Informe de tamaño de archivos ## Used at the bottom of the report Este análisis estadístico fue generado por Tiempo de ejecución Menos de 1 ## Used in the time reports Cada unidad representa o fracción petición de una página peticiones por páginas ## Used at the bottom of each non-time report: need m, f & n genders no listados no listadas * ## Used on the pie charts: again need m, f & n genders Otro Otro * ## Used at the top of the report Programa iniciado a las Análisis de peticiones del al ## Used in the General Summary Peticiones exitosas Promedio de peticiones exitosas por día Peticiones exitosas por página Promedio de peticiones exitosas por página por día Líneas sin código de estado en el archivo de registros Peticiones no logradas Peticiones redireccionadas Peticiones con código de estado informativo Archivos diferentes solicitados Sistemas diferentes atendidos Líneas no válidas en el archivo de registros Entradas no solicitadas en el archivo de registros Transferencia total Promedio de transferencia por día Los números entre paréntesis se refieren a 7 días al los últimos 7 días Ir a Arriba ## Some special phrases for particular reports. [direcciones numéricas sin resolver] [dominio sin indicar] [dominio desconocido] [directorio raíz] [sin directorio] [sin extensión] [directorios] Windows desconocido Otro Unix Robots Sistema Operativo desconocido ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) No. pet. pets. 7-dias %pet. %pets 7-dias Págs. págs. 7-dias %Págs. %págs. 7-dias bytes ?bytes bytes 7-dias ?bytes 7-dias %bytes %bytes 7-dias no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Listado de los primeros %s Listado de las primeras %s * Listado de los %d primeros %s Listado de las %d primeras %s * Listado de los %s Listado de las %s * ## "by" in the phrase "listing the top 3 files BY number of requests" por ## All requests WITH AT LEAST 10 requests que representan, por lo menos, ## Different ways of doing floors petición en los últimos 7 días peticiones en los últimos 7 días petición por una página en los últimos 7 días peticiones por página en los últimos 7 días petición redireccionada peticiones redireccionadas petición redireccionada en los últimos 7 días peticiones redireccionadas en los últimos 7 días petición no lograda peticiones no logradas petición no lograda en los últimos 7 días peticiones no logradas en los últimos 7 días % del tráfico % del tráfico en los últimos 7 días % de la cantidad máxima de tráfico % de la cantidad máxima de tráfico en los últimos 7 días byte de tráfico bytes de tráfico ## ?bytes represents kbytes, Mbytes etc. ?bytes de tráfico byte de tráfico en los últimos 7 días bytes de tráfico en los últimos 7 días ?bytes de tráfico en los últimos 7 días con una petición desde con una petición redireccionada desde con una petición no lograda desde con una primera petición desde con una primera petición redireccionada desde con una primera petición no lograda desde ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenados por ordenadas por * ## Used at the top of each report Este reporte contiene datos de ## Used in pie charts Las áreas están dibujadas por ## different ways of sorting cantidad de tráfico cantidad de tráfico en los últimos 7 días % de peticiones % de peticiones en los últimos 7 días % del número máximo de peticiones % del número máximo de peticiones en los últimos 7 días número de peticiones número de peticiones en los últimos 7 días % de peticiones por páginas % de peticiones por páginas en los últimos 7 días % del número máximo de peticiones por páginas % del número máximo de peticiones por páginas en los últimos 7 días número de peticiones por páginas número de peticiones por páginas en los últimos 7 días % de peticiones redireccionadas % de peticiones redireccionadas en los últimos 7 días % del número máximo de peticiones redireccionadas % del número máximo de peticiones redireccionadas en los últimos 7 días número de peticiones redireccionadas número de peticiones redireccionadas en los últimos 7 días % de peticiones no logradas % de peticiones no logradas en los últimos 7 días % del número máximo de peticiones no logradas % del número máximo de peticiones no logradas en los últimos 7 días número de peticiones no logradas número de peticiones no logradas en los últimos 7 días hora de la última petición hora de la última petición redireccionada hora de la última petición no lograda hora de la primera petición hora de la primera petición redireccionada hora de la primera petición no lograda ## 3 other ways of sorting in m, f, & n por orden alfabético por orden alfabético por orden alfabético por orden numérico por orden numérico por orden numérico desordenados desordenadas * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D/%m/%Y %j:%n %a ## "Program started at" and "Analysed requests from" %w/%D/%m/%Y %j:%n %a ## In Daily Report %d/%m/%Y ## In Daily Summary %w ## In Hourly Report %d/%m/%Y %H:%n%x%I:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o %b ## In Quarter-Hour and Five-Minute Reports %d/%m/%Y %H:%n%x%I:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n%x%I:%o %b ## In Weekly Report %d/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%Y ## The date & time (D) column in non-time reports %d/%m/%Y %j:%n %a ## In non-time reports: "including all files with requests since [date]" %d/%m/%Y a las %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continuar la petición 101 Protocolos de conmutación 1xx [Varios mensajes informativos] 200 OK 201 Creado 202 Aceptado para procesamiento ulterior 203 Información no autorizada 204 OK, pero nada para enviar 205 Restablecer el documento 206 Contenido parcial 2xx [Varias operaciones logradas] 300 Múltiples documentos disponibles 301 Documento desplazado permanentemente 302 Documento encontrado en otro lado 303 Véase otro documento 304 Sin modificar desde el último acceso 305 Usar un servidor alterno 306 Cambiar de servidor alterno 307 Documento desplazado temporalmente 3xx [Varios redireccionamientos] 400 petición incorrecta 401 Se requiere autenticación 402 Se requiere pago 403 Acceso prohibido 404 Documento no encontrado 405 Método no permitido 406 Documento no aceptable para el cliente 407 Se requiere autenticación del servidor alterno 408 petición interrumpida 409 Conflicto de la petición con el estado del recurso 410 Documento definitivamente inaccesible 411 Duración requerida 412 Fallo de la precondición 413 petición demasiado larga 414 Nombre de archivo requerido demasiado largo 415 Tipo de medio no soportado 416 El rango solicitado no es válido 417 Expectación no lograda 4xx [Varios errores cliente/usuario] 500 Error interno del servidor 501 Tipo de petición no soportada 502 Error en dirección del servidor 503 Servicio no disponible temporalmente 504 Pasarela interrumpida 505 Versión HTTP no suportada 506 Redirección no lograda 5xx [Varios errores de servidor] xxx [Desconocido] analog-ce-6.0.17/lang/esa.lng000066400000000000000000000346331406366436600156550ustar00rootroot00000000000000############################################################################### ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## By J. L. Garcia, July 2001, based on earlier versions by Alfredo Sola, ## Alexander Velasquez, Nelson Tactuk and Javier Kohan. ## Comments and corrections to jlg@grafika.com.mx ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Dom Lun Mar Mie Jue Vie Sab Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic ## Next some standard common words. ## Abbreviation for "week beginning" com. de sem. ano ## Quarter of a year trimestre mes dia dias hr minuto minutos segundo segundos byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes peticion peticiones fecha ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 fecha hora hora primera fecha primera hora ultima fecha ultima hora archivo archivos sistema sistemas servidor virtual servidores virtuales directorio directorios dominio dominios organizacion organizaciones extension extensiones URL URLs Navegador Navegadores SO SO ## (= operating system, operating systems) tamano termino buscado terminos buscados sitio sitios usuario usuarios cod. de estado cods. de estado Estadisticas del servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Resumen general ## The time reports, plus "busiest" strings (at the bottom of each report) Reporte Anual Ano de mayor trafico: Reporte Trimestral Trimestre de mayor trafico: Informe mensual Mes de mayor trafico: Informe semanal Semana de mayor trafico: Resumen diario Informe diario Dia de mayor trafico: Informe horario Resumen horario Reporte por hora de la semana Hora de mayor trafico: Informe de cuarto de hora Resumen por cuarto de hora Cuarto de hora de mayor trafico: Informe de cada cinco minutos Resumen de cada cinco minutos Cinco minutos de mayor trafico: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings. and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Informe de Sistemas sistema sistemas m Reporte de Redireccion de Sistema sistema sistemas m Reporte de Falla de Sistema sistema sistemas m Informe de Directorios directorio directorios m Informe de Tipos de Archivo extension extensiones f Informe de peticiones archivo archivos m Informe de redireccionamientos archivo archivos m Informe de fallos en una peticion archivo archivos m Informe de remitentes URL remitente URLs remitentes m Informe de sitios remitentes sitio remitente sitios remitentes m Informe de remitentes redirecionados URL remitente URLs remitentes m Informe de errores de remitentes URL del remitente URLs de remitentes m Reporte de Preguntas de Busqueda pregunta preguntas f Reporte de Palabras de Buscadas palabra buscada palabras buscadas f Reporte Interno de Preguntas de Busqueda pregunta preguntas f Reporte Interno de Palabras Buscadas palabra buscada palabras buscadas f Informe de servidores virtuales servidor virtual servidores virtuales m Reporte de Redireccion de Servidores Virtuales servidor virtual servidores virtuales m Reporte de Falla de Servidor Virtual servidor virtual servidores virtuales m Informe de usuarios usuario usuarios m Reporte de Redireccion de Usuarios usuario usuarios m Informe de errores de usuarios usuario usuarios m Resumen de navegadores navegador navegadores m Informe de navegadores navegador navegadores m Informe de Sistemas Operativos sistema operativo sistemas operativos m Informe de dominios dominio dominios m Informe de organizacion organizacion organizaciones f Informe de codigos de estado codigo de estado codigos de estado m Informe de tiempo de procesamiento Informe de tamano de archivos ## Used at the bottom of the report Este analisis estadistico fue generado por Tiempo de ejecucion Menos de 1 ## Used in the time reports Cada unidad representa o fraccion peticion de una pagina peticiones por paginas ## Used at the bottom of each non-time report: need m, f & n genders no listados no listadas * ## Used on the pie charts: again need m, f & n genders Otro Otro * ## Used at the top of the report Programa iniciado a las Analisis de peticiones del al ## Used in the General Summary Peticiones exitosas Promedio de peticiones exitosas por dia Peticiones exitosas por pagina Promedio de peticiones exitosas por pagina por dia Lineas sin codigo de estado en el archivo de registros Peticiones no logradas Peticiones redireccionadas Peticiones con codigo de estado informativo Archivos diferentes solicitados Sistemas diferentes atendidos Lineas no validas en el archivo de registros Entradas no solicitadas en el archivo de registros Transferencia total Promedio de transferencia por dia Los numeros entre parentesis se refieren a 7 dias al los ultimos 7 dias Ir a Arriba ## Some special phrases for particular reports. [direcciones numericas sin resolver] [dominio sin indicar] [dominio desconocido] [directorio raiz] [sin directorio] [sin extension] [directorios] Windows desconocido Otro Unix Robots Sistema Operativo desconocido ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) No. pet. pets. 7-dias %pet. %pets 7-dias Pags. pags. 7-dias %Pags. %pags. 7-dias bytes ?bytes bytes 7-dias ?bytes 7-dias %bytes %bytes 7-dias no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Listado de los primeros %s Listado de las primeras %s * Listado de los %d primeros %s Listado de las %d primeras %s * Listado de los %s Listado de las %s * ## "by" in the phrase "listing the top 3 files BY number of requests" por ## All requests WITH AT LEAST 10 requests que representan, por lo menos, ## Different ways of doing floors peticion en los ultimos 7 dias peticiones en los ultimos 7 dias peticion por una pagina en los ultimos 7 dias peticiones por pagina en los ultimos 7 dias peticion redireccionada peticiones redireccionadas peticion redireccionada en los ultimos 7 dias peticiones redireccionadas en los ultimos 7 dias peticion no lograda peticiones no logradas peticion no lograda en los ultimos 7 dias peticiones no logradas en los ultimos 7 dias % del trafico % del trafico en los ultimos 7 dias % de la cantidad maxima de trafico % de la cantidad maxima de trafico en los ultimos 7 dias byte de trafico bytes de trafico ## ?bytes represents kbytes, Mbytes etc. ?bytes de trafico byte de trafico en los ultimos 7 dias bytes de trafico en los ultimos 7 dias ?bytes de trafico en los ultimos 7 dias con una peticion desde con una peticion redireccionada desde con una peticion no lograda desde con una primera peticion desde con una primera peticion redireccionada desde con una primera peticion no lograda desde ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenados por ordenadas por * ## Used at the top of each report Este reporte contiene datos de ## Used in pie charts Las areas estan dibujadas por ## different ways of sorting cantidad de trafico cantidad de trafico en los ultimos 7 dias % de peticiones % de peticiones en los ultimos 7 dias % del numero maximo de peticiones % del numero maximo de peticiones en los ultimos 7 dias numero de peticiones numero de peticiones en los ultimos 7 dias % de peticiones por paginas % de peticiones por paginas en los ultimos 7 dias % del numero maximo de peticiones por paginas % del numero maximo de peticiones por paginas en los ultimos 7 dias numero de peticiones por paginas numero de peticiones por paginas en los ultimos 7 dias % de peticiones redireccionadas % de peticiones redireccionadas en los ultimos 7 dias % del numero maximo de peticiones redireccionadas % del numero maximo de peticiones redireccionadas en los ultimos 7 dias numero de peticiones redireccionadas numero de peticiones redireccionadas en los ultimos 7 dias % de peticiones no logradas % de peticiones no logradas en los ultimos 7 dias % del numero maximo de peticiones no logradas % del numero maximo de peticiones no logradas en los ultimos 7 dias numero de peticiones no logradas numero de peticiones no logradas en los ultimos 7 dias hora de la ultima peticion hora de la ultima peticion redireccionada hora de la ultima peticion no lograda hora de la primera peticion hora de la primera peticion redireccionada hora de la primera peticion no lograda ## 3 other ways of sorting in m, f, & n por orden alfabetico por orden alfabetico por orden alfabetico por orden numerico por orden numerico por orden numerico desordenados desordenadas * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D/%m/%Y %j:%n %a ## "Program started at" and "Analysed requests from" %w/%D/%m/%Y %j:%n %a ## In Daily Report %d/%m/%Y ## In Daily Summary %w ## In Hourly Report %d/%m/%Y %H:%n%x%I:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o %b ## In Quarter-Hour and Five-Minute Reports %d/%m/%Y %H:%n%x%I:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n%x%I:%o %b ## In Weekly Report %d/%m/%Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%Y ## The date & time (D) column in non-time reports %d/%m/%Y %j:%n %a ## In non-time reports: "including all files with requests since [date]" %d/%m/%Y a las %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continuar la peticion 101 Protocolos de conmutacion 1xx [Varios mensajes informativos] 200 OK 201 Creado 202 Aceptado para procesamiento ulterior 203 Informacion no autorizada 204 OK, pero nada para enviar 205 Restablecer el documento 206 Contenido parcial 2xx [Varias operaciones logradas] 300 Multiples documentos disponibles 301 Documento desplazado permanentemente 302 Documento encontrado en otro lado 303 Vease otro documento 304 Sin modificar desde el ultimo acceso 305 Usar un servidor alterno 306 Cambiar de servidor alterno 307 Documento desplazado temporalmente 3xx [Varios redireccionamientos] 400 peticion incorrecta 401 Se requiere autenticacion 402 Se requiere pago 403 Acceso prohibido 404 Documento no encontrado 405 Metodo no permitido 406 Documento no aceptable para el cliente 407 Se requiere autenticacion del servidor alterno 408 peticion interrumpida 409 Conflicto de la peticion con el estado del recurso 410 Documento definitivamente inaccesible 411 Duracion requerida 412 Fallo de la precondicion 413 peticion demasiado larga 414 Nombre de archivo requerido demasiado largo 415 Tipo de medio no soportado 416 El rango solicitado no es valido 417 Expectacion no lograda 4xx [Varios errores cliente/usuario] 500 Error interno del servidor 501 Tipo de peticion no soportada 502 Error en direccion del servidor 503 Servicio no disponible temporalmente 504 Pasarela interrumpida 505 Version HTTP no suportada 506 Redireccion no lograda 5xx [Varios errores de servidor] xxx [Desconocido] analog-ce-6.0.17/lang/esadesc.txt000066400000000000000000000113021406366436600165370ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Este reporte enlista la actividad en cada ano. # Quarterly Report Este reporte enlista la actividad en cada trimestre. # Monthly Report Este reporte enlista la actividad en cada mes. # Weekly Report Este reporte enlista la actividad en cada semana. # Daily Report Este reporte enlista la actividad en cada dia. # Hourly Report Este reporte enlista la actividad en cada hora. # Quarter-Hour Report Este reporte enlista la actividad en periodos de cuarto de hora. # Five-Minute Report Este reporte enlista la actividad en periodos de cada cinco minutos. # Daily Summary Este reporte enlista la actividad total por cada dia de la semana, sumados por todas las semanas en el reporte. # Hourly Summary Este reporte enlista la actividad total por cada hora de la semana, sumados por todos los dias en el reporte. # Hour of the Week Summary Este reporte enlista la actividad total por cada hora de la semana, sumando todas las semanas en el reporte. # Quarter-Hour Summary Este reporte enlista la actividad total por periodos de cuarto de hora del dia, sumados por todos los dias en el reporte. # Five-Minute Summary Este reporte enlista la actividad en periodos de cada cinco minutos, sumados por todos los dias en el reporte. # General Summary Este reporte contiene estadisticas globales. # Request Report Este reporte enlista los archivos en el sitio. # Redirection Report Este reporte enlista los archivos causantes que peticiones fueran redireccionadas a otro archivo. ( Usualmente directorios sin la diagonal final, o scripts CGI que forzaron redireccionamientos.) # Failure Report Este reporte enlista los acrchivos que causaron peticiones no logradas, por ejemplo archivos no encontrados. # File Type Report Este reporte enlista las extensiones de los archivos pedidos. # Directory Report Este reporte enlista los directorios desde los cuales fueron pedidos los archivos. (Los numeros por cada directorio incluyen el total de sus subdirectorios.) # Host Report Este reporte enlista las computadoras desde las cuales se pidieron archivos. # Host Redirection Report Este reporte enlista las computadoras que fueron redireccionadas a otro archivo. # Host Failure Report Este reporte enlista las computadoras que encontraron peticiones no logradas. # Domain Report Este reporte enlista los paises de las computadoras que pidieron archivos. # Referrer Report Este reporte enlista los remitentes (de donde la gente siguio el enlace, o paginas que incluyen imagenes de este sitio). # Referring Site Report Este reporte enlista de que servidores siguio el enlace la gente. # Redirected Referrer Report este reporte enlista los remitentes que causaron peticiones redireccionadas. # Failed Referrer Report Este reporte enlista los remitentes que contienen enlaces rotos al sitio. # Browser Report Este reporte enlista los naegadores usados por los visitantes. # Virtual Host Report Este reporte enlista la actividad en cada uno de los dominios virtuales en el sitio. # Virtual Host Redirection Report Este reporte enlista las peticiones redireccionadas a cada uno de los dominios virtuales. # Virtual Host Failure Report Este reporte enlista las peticiones no logradas a cada uno de los dominios virtuales. # User Report Este reporte enlista a los usuarios que pidieron archivos, si los usuarios han sido autenticados o pueden ser identificados por galletas. # User Redirection Report Este reporte enlista a los usuarios quienes fueron redireccionados a otro archivo. # User Failure Report Este reporte enlista a los usuarios quienes encontraron peticiones no logradas. # Organisation Report Este reporte enlista las organizaciones de las computadoras quienes pidieron archivos. # Search Query Report Este reporte enlista cuales preguntas la gente uso en los motores de busqueda para encontrar el sitio. # Search Word Report Este reporte enlista cuales palabras la gente uso en los motores de busqueda para encontrar el sitio. # Internal Search Query Report Este reporte enlista cuales preguntas la gente uso en scripts dentro del sitio. # Internal Search Word Report Este reporte enlista cuales palabras la gente uso en scripts dentro del sitio. # Browser Summary Este reporte enlista los proveedores de los navegadores de los visitantes. # Operating System Report Este reporte enlista los sistemas operativos usados por los visitantes. # File Size Report Este reporte enlista los tamanos de los archivos. # Status Code Report Este reporte enlista los codigos de estado HTTP de todas las peticiones. # Processing Time Report Este reporte enlista los tiempos tomados para procesar peticiones exitosas. analog-ce-6.0.17/lang/esadom.tab000066400000000000000000000115271406366436600163400ustar00rootroot00000000000000ad 2 Andorra ae 3 Emiratos Arabes Unidos af 1 Afganistan ag 2 Antigua y Barbuda ai 1 Anguila al 1 Albania am 2 Armenia an 1 Antillas Holandesas ao 1 Angola aq 1 Antartida ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijan ba 3 Bosnia-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgica bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazil bs 1 Bahamas bt 1 Butan bv 1 Isla Bouvet bw 1 Botswana by 1 Bielorusia bz 1 Belice ca 3 Canada cc 1 Cocos - Isla Keeling cd 1 Zaire cf 1 Republica de Africa Central cg 1 Republica de Congo (Zaire) ch 2 Suiza ci 1 Costa de Marfil ck 1 Islas de Cook (Rarotonga) cl 2 Chile cm 1 Camerun cn 3 China co 3 Colombia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Islas Navidad cy 3 Chipre cz 2 Republica Checa de 2 Alemania dj 1 Yibuti dk 2 Dinamarca dm 2 Dominica do 3 Republica Dominicana dz 1 Algeria ec 3 Ecuador edu 2 Educativo ee 2 Estonia eg 3 Egipto eh 1 Sahara Occidental er 1 Eritrea es 2 Espana et 1 Etiopia fi 2 Finlandia fj 3 Fiji fk 1 Islas Malvinas fm 1 Micronesia fo 1 Islas Faroe fr 2 Francia fx 1 Francia (Territorio Europeo) ga 1 Gabon gb 1 Reino Unido gd 1 Granada ge 1 Georgia gf 1 Guyana Francesa gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenlandia gm 1 Gambia gn 1 Guinea gov 2 Gobierno gp 1 Guadalupe gq 1 Guinea Ecuatorial gr 2 Grecia gs 1 Georgia del Sur e Islas Sandwich del Sur gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Islas Heard y McDonald hn 2 Honduras hr 2 Croacia ht 1 Haiti hu 2 Hungria id 3 Indonesia ie 2 Irlanda il 3 Israel im 1 Isla de Man in 3 India int 1 Internacional io 1 Territorio Oceanico Indio-Britanico iq 1 Irak ir 1 Iran is 2 Islandia it 2 Italia je 1 Jersey jm 3 Jamaica jo 3 Jordania jp 3 Japon ke 3 Kenya kg 1 Kyrgyzstan kh 1 Camboya ki 1 Kiribati km 1 Comoros kn 1 San Kitts y Nevis kp 1 Korea del Norte kr 3 Korea del Sur kw 3 Kuwait ky 1 Islas Caiman kz 1 Kazakhstan la 1 Laos lb 3 Libano lc 1 Santa Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lituania lu 2 Luxemburgo lv 2 Letonia ly 1 Libia ma 1 Marruecos mc 2 Monaco md 1 Moldova mg 1 Madagascar mh 1 Islas Marshall mil 2 Militar mk 3 Macedonia (Antigua Republica Yugoslava) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macau mp 1 Islas Marianas del Norte mq 1 Martinica mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Isla Mauricio mv 1 Islas Maldivas mw 1 Malawi mx 3 Mexico my 3 Malasia mz 1 Mozambique na 1 Namibia nc 1 Nueva Caledonia ne 1 Niger net 2 Red nf 1 Isla Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Paises Bajos (Holanda) no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Isla Niue nz 3 Nueva Zelanda om 1 Oman org 2 Organizaciones sin fines de lucro pa 3 Panama pe 3 Peru pf 1 Polinesia Francesa pg 3 Papua Nueva-Guinea ph 3 Filipinas pk 3 Pakistan pl 3 Polonia pm 1 San Pierre y Miquelon pn 1 Isla Pitcairn pr 1 Puerto Rico ps 3 Territorio Palestino Ocupado pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Catar re 1 Isla Reunion ro 2 Rumania ru 2 Rusia rw 1 Rwanda sa 3 Arabia Saudita sb 1 Islas Salomon sc 1 Islas Seychelles sd 1 Sudan se 2 Suecia sg 3 Singapur sh 1 Santa Helena si 2 Eslovenia sj 1 Islas Svalbard y Jan Mayen sk 2 Eslovaquia sl 1 Sierra Leona sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Saint Tome and Principe su 2 Antigua USSR sv 3 El Salvador sy 1 Siria sz 1 Swazilandia tc 1 Islas Turks y Caicos td 1 Chad tf 1 Territorios Surenos de Francia tg 1 Togo th 3 Tailandia tj 1 Tajikistan tk 1 Islas Tokelau tl 1 Timor Oriental tm 1 Turkmenistan tn 1 Tunez to 1 Tonga tp 1 Timor Oriental tr 3 Turquia tt 3 Trinidad y Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ucrania ug 3 Uganda uk 3 Reino Unido um 1 Islas menores remotas de USA us 4 Estados Unidos uy 3 Uruguay uz 1 Uzbekistan va 1 Ciudad del Vaticano vc 1 San Vicente y Granadinas ve 3 Venezuela vg 1 Islas Virgenes (Britanicas) vi 1 Islas Virgenes (USA) vn 1 Vietnam vu 1 Vanautu (Nuevas Hebridas) wf 1 Islas Wallis y Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Yugoeslavia za 3 Africa del Sur zm 1 Zambia zr 1 Zaire zw 3 Zimbabwe analog-ce-6.0.17/lang/esdesc.txt000066400000000000000000000113021406366436600163760ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Este reporte enlista la actividad en cada año. # Quarterly Report Este reporte enlista la actividad en cada trimestre. # Monthly Report Este reporte enlista la actividad en cada mes. # Weekly Report Este reporte enlista la actividad en cada semana. # Daily Report Este reporte enlista la actividad en cada día. # Hourly Report Este reporte enlista la actividad en cada hora. # Quarter-Hour Report Este reporte enlista la actividad en períodos de cuarto de hora. # Five-Minute Report Este reporte enlista la actividad en períodos de cada cinco minutos. # Daily Summary Este reporte enlista la actividad total por cada día de la semana, sumados por todas las semanas en el reporte. # Hourly Summary Este reporte enlista la actividad total por cada hora de la semana, sumados por todos los días en el reporte. # Hour of the Week Summary Este reporte enlista la actividad total por cada hora de la semana, sumando todas las semanas en el reporte. # Quarter-Hour Summary Este reporte enlista la actividad total por períodos de cuarto de hora del día, sumados por todos los días en el reporte. # Five-Minute Summary Este reporte enlista la actividad en períodos de cada cinco minutos, sumados por todos los días en el reporte. # General Summary Este reporte contiene estadísticas globales. # Request Report Este reporte enlista los archivos en el sitio. # Redirection Report Este reporte enlista los archivos causantes que peticiones fueran redireccionadas a otro archivo. ( Usualmente directorios sin la diagonal final, o scripts CGI que forzaron redireccionamientos.) # Failure Report Este reporte enlista los acrchivos que causaron peticiones no logradas, por ejemplo archivos no encontrados. # File Type Report Este reporte enlista las extensiones de los archivos pedidos. # Directory Report Este reporte enlista los directorios desde los cuáles fueron pedidos los archivos. (Los números por cada directorio incluyen el total de sus subdirectorios.) # Host Report Este reporte enlista las computadoras desde las cuáles se pidieron archivos. # Host Redirection Report Este reporte enlista las computadoras que fueron redireccionadas a otro archivo. # Host Failure Report Este reporte enlista las computadoras que encontraron peticiones no logradas. # Domain Report Este reporte enlista los países de las computadoras que pidieron archivos. # Referrer Report Este reporte enlista los remitentes (de donde la gente siguió el enlace, o páginas que incluyen imágenes de éste sitio). # Referring Site Report Este reporte enlista de qué servidores siguió el enlace la gente. # Redirected Referrer Report este reporte enlista los remitentes que causaron peticiones redireccionadas. # Failed Referrer Report Este reporte enlista los remitentes que contienen enlaces rotos al sitio. # Browser Report Este reporte enlista los naegadores usados por los visitantes. # Virtual Host Report Este reporte enlista la actividad en cada uno de los dominios virtuales en el sitio. # Virtual Host Redirection Report Este reporte enlista las peticiones redireccionadas a cada uno de los dominios virtuales. # Virtual Host Failure Report Este reporte enlista las peticiones no logradas a cada uno de los dominios virtuales. # User Report Este reporte enlista a los usuarios que pidieron archivos, si los usuarios han sido autenticados o pueden ser identificados por galletas. # User Redirection Report Este reporte enlista a los usuarios quienes fueron redireccionados a otro archivo. # User Failure Report Este reporte enlista a los usuarios quienes encontraron peticiones no logradas. # Organisation Report Este reporte enlista las organizaciones de las computadoras quienes pidieron archivos. # Search Query Report Este reporte enlista cuáles preguntas la gente usó en los motores de búsqueda para encontrar el sitio. # Search Word Report Este reporte enlista cuáles palabras la gente usó en los motores de búsqueda para encontrar el sitio. # Internal Search Query Report Este reporte enlista cuáles preguntas la gente usó en scripts dentro del sitio. # Internal Search Word Report Este reporte enlista cuáles palabras la gente usó en scripts dentro del sitio. # Browser Summary Este reporte enlista los proveedores de los navegadores de los visitantes. # Operating System Report Este reporte enlista los sistemas operativos usados por los visitantes. # File Size Report Este reporte enlista los tamaños de los archivos. # Status Code Report Este reporte enlista los códigos de estado HTTP de todas las peticiones. # Processing Time Report Este reporte enlista los tiempos tomados para procesar peticiones exitosas. analog-ce-6.0.17/lang/esdom.tab000066400000000000000000000115271406366436600161770ustar00rootroot00000000000000ad 2 Andorra ae 3 Emiratos Arabes Unidos af 1 Afganistán ag 2 Antigua y Barbuda ai 1 Anguila al 1 Albania am 2 Armenia an 1 Antillas Holandesas ao 1 Angola aq 1 Antártida ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaiján ba 3 Bosnia-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Bélgica bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazil bs 1 Bahamas bt 1 Bután bv 1 Isla Bouvet bw 1 Botswana by 1 Bielorusia bz 1 Belice ca 3 Canada cc 1 Cocos - Isla Keeling cd 1 Zaire cf 1 República de Africa Central cg 1 República de Congo (Zaire) ch 2 Suiza ci 1 Costa de Marfil ck 1 Islas de Cook (Rarotonga) cl 2 Chile cm 1 Camerún cn 3 China co 3 Colombia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Islas Navidad cy 3 Chipre cz 2 República Checa de 2 Alemania dj 1 Yibuti dk 2 Dinamarca dm 2 Dominica do 3 República Dominicana dz 1 Algeria ec 3 Ecuador edu 2 Educativo ee 2 Estonia eg 3 Egipto eh 1 Sahara Occidental er 1 Eritrea es 2 España et 1 Etiopía fi 2 Finlandia fj 3 Fiji fk 1 Islas Malvinas fm 1 Micronesia fo 1 Islas Faroe fr 2 Francia fx 1 Francia (Territorio Europeo) ga 1 Gabón gb 1 Reino Unido gd 1 Granada ge 1 Georgia gf 1 Guyana Francesa gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenlandia gm 1 Gambia gn 1 Guinea gov 2 Gobierno gp 1 Guadalupe gq 1 Guinea Ecuatorial gr 2 Grecia gs 1 Georgia del Sur e Islas Sandwich del Sur gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Islas Heard y McDonald hn 2 Honduras hr 2 Croacia ht 1 Haití hu 2 Hungría id 3 Indonesia ie 2 Irlanda il 3 Israel im 1 Isla de Man in 3 India int 1 Internacional io 1 Territorio Oceánico Indio-Británico iq 1 Irak ir 1 Irán is 2 Islandia it 2 Italia je 1 Jersey jm 3 Jamaica jo 3 Jordania jp 3 Japón ke 3 Kenya kg 1 Kyrgyzstán kh 1 Camboya ki 1 Kiribati km 1 Comoros kn 1 San Kitts y Nevis kp 1 Korea del Norte kr 3 Korea del Sur kw 3 Kuwait ky 1 Islas Caimán kz 1 Kazakhstán la 1 Laos lb 3 Líbano lc 1 Santa Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lituania lu 2 Luxemburgo lv 2 Letonia ly 1 Libia ma 1 Marruecos mc 2 Mónaco md 1 Moldova mg 1 Madagascar mh 1 Islas Marshall mil 2 Militar mk 3 Macedonia (Antigua República Yugoslava) ml 1 Malí mm 1 Myanmar mn 1 Mongolia mo 1 Macau mp 1 Islas Marianas del Norte mq 1 Martinica mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Isla Mauricio mv 1 Islas Maldivas mw 1 Malawi mx 3 México my 3 Malasia mz 1 Mozambique na 1 Namibia nc 1 Nueva Caledonia ne 1 Níger net 2 Red nf 1 Isla Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Países Bajos (Holanda) no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Isla Niue nz 3 Nueva Zelanda om 1 Omán org 2 Organizaciones sin fines de lucro pa 3 Panamá pe 3 Perú pf 1 Polinesia Francesa pg 3 Papua Nueva-Guinea ph 3 Filipinas pk 3 Pakistán pl 3 Polonia pm 1 San Pierre y Miquelon pn 1 Isla Pitcairn pr 1 Puerto Rico ps 3 Territorio Palestino Ocupado pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Catar re 1 Isla Reunión ro 2 Rumania ru 2 Rusia rw 1 Rwanda sa 3 Arabia Saudita sb 1 Islas Salomón sc 1 Islas Seychelles sd 1 Sudán se 2 Suecia sg 3 Singapur sh 1 Santa Helena si 2 Eslovenia sj 1 Islas Svalbard y Jan Mayen sk 2 Eslovaquia sl 1 Sierra Leona sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Saint Tome and Principe su 2 Antigua USSR sv 3 El Salvador sy 1 Siria sz 1 Swazilandia tc 1 Islas Turks y Caicos td 1 Chad tf 1 Territorios Sureños de Francia tg 1 Togo th 3 Tailandia tj 1 Tajikistán tk 1 Islas Tokelau tl 1 Timor Oriental tm 1 Turkmenistán tn 1 Túnez to 1 Tonga tp 1 Timor Oriental tr 3 Turquía tt 3 Trinidad y Tobago tv 1 Tuvalu tw 3 Taiwán tz 1 Tanzania ua 3 Ucrania ug 3 Uganda uk 3 Reino Unido um 1 Islas menores remotas de USA us 4 Estados Unidos uy 3 Uruguay uz 1 Uzbekistán va 1 Ciudad del Vaticano vc 1 San Vicente y Granadinas ve 3 Venezuela vg 1 Islas Vírgenes (Británicas) vi 1 Islas Vírgenes (USA) vn 1 Vietnam vu 1 Vanautu (Nuevas Hébridas) wf 1 Islas Wallis y Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Yugoeslavia za 3 Africa del Sur zm 1 Zambia zr 1 Zaire zw 3 Zimbabwe analog-ce-6.0.17/lang/esform.html000066400000000000000000000231531406366436600165570ustar00rootroot00000000000000 Interfaz de Formularios de Analog

Interfaz de Formularios de Analog


1. Selección de Informes

Consulte la página principal de analog para la descripción de los distintos informes.

Que informes desea ver ?


[Si] [No] Resumen General
[Si] [No] Informe Mensual
[Si] [No] Informe Semanal
[Si] [No] Resumen Diario
[Si] [No] Informe Diario
[Si] [No] Resumen por Horas
[Si] [No] Informe por Dominios
[Si] [No] Informe por Organizaciones
[Si] [No] Informe por Directorios
[Si] [No] Informe por tipo de Archivos.
[Si] [No] Informe por Peticiones
[Si] [No] Informe por Tamaño de Archivos
[Si] [No] Informe por Remitentes
[Si] [No] Informe por Consultas de Búsquedas
[Si] [No] Informe por Búsquedas de palabras.
[Si] [No] Resumen por Navegador.
[Si] [No] Informe por Sistema Operativo.
[Si] [No] Informe por Código de Retorno

Ahora ya puede ejecutar el programa:
O puede completar las siguientes opciones para informes individuales. Puede usar bytes para indicar 10 Megabytes; también para indicar los 50 items con más bytes.


2. Opciones para el informe detallado

Opciones del Informe por Dominios

Ordenar el Informe por Dominios
Incluir todos los dominios con al menos

Opciones del Informe por Organizaciones

Ordenar el Informe por Organizaciones
Incluir todas las Organizaciones con al menos

Opciones del Informe por Directorios

Ordenar el Informe por Directorios
Incluir todos los directorios con al menos

Opciones del Informe por Peticiones

Ordenar el Informe por Peticiones
Incluir todos los archivos con al menos
Mostrar

Opciones del Informe por Remitentes

Ordenar el Informe por Remitentes
Incluir todos los Remitentes con al menos

3. Analizando sólo una parte del archivo de registro

Sólo ciertas fechas
Puede analizar sólo las peticiones entre ciertas fechas. Ingrese el rango de fechas más abajo de la siguiente manera aammdd; ej., 980301 para el 1ro de Marzo de 1998 (o llene sólo una casilla para limitar el rango de fechas en un solo sentido).
Desde hasta

Sólo ciertos archivos
Sólo considerar los siguientes archivos (lista, separada por comas; puede contener el caracter comodín *)

Ignorar los siguientes archivos


4. Presentación

El nombre de su organización (para el título de la página)

La página principal de su Organización
URL:


analog-ce-6.0.17/lang/fi.lng000066400000000000000000000323731406366436600155020ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Su Ma Ti Ke To Pe La Tam Hel Maa Huh Tou Kes Hei Elo Syy Lok Mar Jou ## Next some standard common words. ## Abbreviation for "week beginning" viikko alk. vuosi ## Quarter of a year vuosineljännes kuukausi päivä päivää tunti minuutti minuuttia sekunti sekuntia tavu tavut ## ?bytes represents kbytes, Mbytes etc. ?tavua pyyntö pyynnöt pvm. ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 päivä aika aika ensimmäinen pvm. ensimmäinen aika viimeinen pvm. viimeinen aika tiedosto tiedostot isäntäkone isäntäkoneet näennäiskone näennäiskoneet hakemisto hakemistot domain domainit organisaatio organisaatiot pääte päätteet URL URLit selain selaimet käyttöjärjestelmä käyttöjärjestelmät ## (= operating system, operating systems) koko hakusana hakusanat sivusto sivustot käyttäjä käyttäjät paluukoodi paluukoodit WWW-palvelintilastot osoitteelle ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Tiivistelmä ## The time reports, plus "busiest" strings (at the bottom of each report) Vuosiraportti Kiireisin vuosi: Neljännesvuosiraportti Kiireisin vuosineljännes: Kuukausiraportti Kiireisin kuukausi: Viikkoraportti Kiireisin viikko: viikon alku Päiväyhteenveto Päiväraportti Kiireisin päivä: Tuntiraportti Tuntiyhteenveto Tunnit viikoittain yhteenveto Kiireisin tunti: Neljännestuntiraportti Neljännestuntiyhteenveto Tunnin kiireisin neljännes: Viisiminuuttisraportti Viisiminuuttisyhteenveto Kiireisimmät viisi minuuttia: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Isäntäkoneraportti isäntäkone isäntäkonetta n Uudelleenohjausraportti isäntäkone isäntäkonetta n Isäntäkoneen epäonnistumisraportti isäntäkone isäntäkonetta n Hakemistoraportti hakemisto hakemistoa n Tiedostolajiraportti pääte päätettä n Pyyntöraportti tiedosto tiedostoa n Uudelleenohjausraportti tiedosto tiedostoa n Virheraportti tiedosto tiedostoa n Viittausraportti viittaava URL viittaavaa URLia n Viittaussivustoraportti viittaava sivusto viittaavaa sivustoa n Uudelleenohjattujen viitteusten raportti viittaava URL viittaavaa URLia n Epäonnistuneiden viittausten raportti viittaava URL viittaavaa URLia n Hakukyselyraportti haku hakua n Hakusanaraportti hakusana hakusanaa n Sisäinen hakukyselyraportti haku hakua n Sisäinen hakusanaraportti hakusana hakusanaa n Näennäiskoneraportti näennäiskone näennäiskonetta n Näennäiskoneen uudelleenohjausraportti näennäiskone näennäiskonetta n Näennäiskoneen epäonnistumisraportti näennäiskone näennäiskonetta n Käyttäjäraportti käyttäjä käyttäjää n Käyttäjän uudelleenohjausraportti käyttäjä käyttäjää n Käyttäjän virheraportti käyttäjä käyttäjää n Selainyhteenveto selain selainta n Seleinraportti selain selainta n Käyttöjärjestelmäraportti käyttöjärjestelmä käyttöjärjestelmää n Domainraportti domain domainia n Organisaatioraportti organisaatio organisaatiota n Paluukoodiraportti paluukoodi paluukoodia n Suoritusaikaraportti Tiedostokokoraportti ## Used at the bottom of the report Tämän analyysin teki Suoritusaika Alle 1 ## Used in the time reports Kukin yksikkö vastaa tai sen osaa sivun pyyntöä sivun pyyntöä ## Used at the bottom of each non-time report: need m, f & n genders * * ei luetteloitu ## Used on the pie charts: again need m, f & n genders * * Muut ## Used at the top of the report Ohjelman käynnistysaika Analysoidut pyynnöt ajalta - ## Used in the General Summary Onnistuneet pyynnöt Keskimäärin onnistuneita pyyntöjä päivässä Onnistuneita sivujen pyyntöjä Onnistuneita sivujen pyyntöjä keskimäärin päivässä Lokitiedoston rivejä ilman tilakoodia Epäonnistuneet pyynnöt Uudelleenohjatut pyynnöt Pyynnöt joissa tiedottava paluukoodi Erilliset tiedostojen pyynnöt Erillisiä isäntäkoneita palveltu Virheellisiä lokitiedoston rivejä Ei-toivottuja lokitiedoston rivejä Tietoa siirretty Keskimääräinen tiedonsiirto päivässä Suluissa olevat lukumäärät viittaavat 7 päivän jaksoon, joka päättyi edelliseen 7 päivään Mene Alkuun ## Some special phrases for particular reports. [tunnistamattomat numeromuotoiset osoitteet] [piirinimiä ei saatu] [tuntemattomat hallintapiirit] [juurihakemisto] [ei hakemistoa] [ei päätettä] [hakemistot] Tuntematon Windows Muu Unix Robotit Tuntematon käyttöjärjestelmä ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) pyynnöt 7 päivän pyynnöt %pyynnöt %7 päivän pyynnöt sivut 7 päivän sivut %sivut %7 päivän sivut tavut ?tavut 7 päivän tavut 7 päivän ?tavut %tavut %7 päivän tavut nro. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Luettelossa suosituimmat %s * * Luettelossa suosituimmat %d %s * * Luettelossa %s ## "by" in the phrase "listing the top 3 files BY number of requests" numerona ## All requests WITH AT LEAST 10 requests joissa vähintään ## Different ways of doing floors pyyntö viimeisinä 7 päivänä pyynnöt viimeisinä 7 päivänä sivun pyyntö viimeisinä 7 päivänä sivun pyynnöt viimeisinä 7 päivänä uudelleenohjattu pyyntö uudelleenohjatut pyynnöt uudelleenohjattu pyyntö viimeisinä 7 päivänä uudelleenohjatut pyynnöt viimeisinä 7 päivänä epäonnistunut pyyntö epäonnistuneet pyynnöt epäonnistunut pyyntö viimeisinä 7 päivänä epäonnistuneet pyynnöt viimeisinä 7 päivänä % liikenteestä % liikenteestä viimeisinä 7 päivänä % maksimi liikennemäärästä % maksimi liikennemäärästä viimeisinä 7 päivänä tavu liikennettä tavua liikennettä ## ?bytes represents kbytes, Mbytes etc. ?tavua liikennettä tavu liikennettä viimeisinä 7 päivänä tavua liikennettä viimeisinä 7 päivänä ?tavua liikennettä viimeisinä 7 päivänä jossa pyyntö lähtien jossa uudelleenohjattu pyyntö lähtien jossa epäonnistunut pyyntö lähtien jossa ensimmäinen pyyntö lähtien jossa ensimmäinen uudelleenohjattu pyyntö lähtien jossa ensimmäinen epäonnistunut pyyntö lähtien ## Now "sorted by": again, in m, f & n (only needed in plural though) * * järjestysperusteena ## Used at the top of each report Tässä raportissa on tietoa: ## Used in pie charts Kiilojen kuvaus: ## different ways of sorting liikennemäärä liikennemäärä viimeisinä 7 päivänä % pyynnöistä % pyynnöistä viimeisinä 7 päivänä % maksimimäärästä pyyntöjä % maksimimäärästä pyyntöjä viimeisinä 7 päivänä pyyntöjen määrä pyyntöjen määrä viimeisinä 7 päivänä % sivun pyynnöistä % sivun pyynnöistä viimeisinä 7 päivänä % maksimimäärästä sivun pyyntöjä % maksimimäärästä sivun pyyntöjä viimeisinä 7 päivänä sivun pyyntöjen määrä sivun pyyntöjen määrä viimeisinä 7 päivänä % uudelleenohjatuista pyynnöistä % uudelleenohjatuista pyynnöistä viimeisinä 7 päivänä % maksimimäärästä uudelleenohjattuja pyyntöjä % maksimimäärästä uudelleenohjattuja pyyntöjä viimeisinä 7 päivänä uudelleenohjattujen pyyntöjen määrä uudelleenohjattujen pyyntöjen määrä viimeisinä 7 päivänä % epäonnistuneista pyynnöistä % epäonnistuneista pyynnöistä viimeisinä 7 päivänä % maksimimäärästä epäonnistuneita pyyntöjä % maksimimäärästä epäonnistuneita pyyntöjä viimeisinä 7 päivänä epäonnistuneiden pyyntöjen määrä epäonnistuneiden pyyntöjen määrä viimeisinä 7 päivänä viimeisen pyynnön ajankohta viimeisen uudelleenohjatun pyynnön ajankohta viimeisen epäonnistuneen pyynnön ajankohta ensimmäisen pyynnön ajankohta ensimmäisen uudelleenohjatun pyynnön ajankohta ensimmäisen epäonnistuneen pyynnön ajankohta ## 3 other ways of sorting in m, f, & n * * aakkosjärjestyksessä * * numerojärjestyksessä * * järjestämättä ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m.%Y %H:%n ## "Program started at" and "Analysed requests from" %w, %D.%m.%Y %H:%n ## In Daily Report %d. %m %Y ## In Daily Summary %w ## In Hourly Report %d. %m %Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m %Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m %Y ## The date & time (D) column in non-time reports %d. %m %Y %H:%n ## In non-time reports: "listing files with requests since [date]" %d. %m %Y klo %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Jatka 101 Protokollavaihto 1xx [Tiedoteluontoinen] 200 OK 201 Luotu 202 Hyväksytty toimenpiteitä varten 203 Auktorisiomaton tieto 204 OK, ei lähetettävää 205 Tyhjennetty dokumentti 206 Osittainen sisältö 2xx [Onnistunut pyyntö (määrittelemätön)] 300 Useita dokumentteja saatavilla 301 Siirretty pysyvästi 302 Tieto on muualla 303 Viite toiseen dokumenttiin 304 Ei muutosta edellisen pyynnön jälkeen 305 Käytä välityspalvelinta 306 Vaihda välityspalvelinta 307 Siirretty väliaikaisesti 3xx [Sekalaisia oheita] 400 Virheellinen pyyntö 401 Salasanaa tarvitaan 402 Maksua tarvitaan 403 Pääsy kielletty 404 Dokumenttia ei löytynyt 405 Menetelmää ei sallita 406 Selain ei hyväksy dokumenttia 407 Välityspalvelimen tulee lähettää tunnistetiedot 408 Aikakatkaisu 409 Pyyntö on ristiriidassa resurssin kanssa 410 Dokumentti pysyvästi poistettu 411 Pituus on määritettävä 412 Ehto ei toteutunut 413 Liian pitkä pyyntö 414 Tiedostonimi liian pitkä 415 Tuntematon tiedostomuoto 416 Sopimaton pyyntöalue 417 Odotus epäonnistui 4xx [Sekalaisia virheitä] 500 Palvelimen sisäinen virhe 501 Pyyntöä ei tueta 502 Vastaanottopalvelimen virhe 503 Palvelu väliaikaisesti poissa käytöstä 504 Välitysaikakatkaisu 505 HTTP versio ei tuettu 506 Uudelleenohjaus epäonnistui 5xx [Sekalaisia palvelinvirheitä] xxx [Tuntemattomia] analog-ce-6.0.17/lang/fia.lng000066400000000000000000000323711406366436600156410ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Su Ma Ti Ke To Pe La Tam Hel Maa Huh Tou Kes Hei Elo Syy Lok Mar Jou ## Next some standard common words. ## Abbreviation for "week beginning" viikko alk. vuosi ## Quarter of a year vuosineljannes kuukausi paiva paivaa tunti minuutti minuuttia sekunti sekuntia tavu tavut ## ?bytes represents kbytes, Mbytes etc. ?tavua pyynto pyynnot pvm. ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 paiva aika aika ensimmainen pvm. ensimmainen aika viimeinen pvm. viimeinen aika tiedosto tiedostot isantakone isantakoneet naennaiskone naennaiskoneet hakemisto hakemistot domain domainit organisaatio organisaatiot paate paatteet URL URLit selain selaimet kayttojarjestelma kayttojarjestelmat ## (= operating system, operating systems) koko hakusana hakusanat sivusto sivustot kayttaja kayttajat paluukoodi paluukoodit WWW-palvelintilastot osoitteelle ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Tiivistelma ## The time reports, plus "busiest" strings (at the bottom of each report) Vuosiraportti Kiireisin vuosi: Neljannesvuosiraportti Kiireisin vuosineljannes: Kuukausiraportti Kiireisin kuukausi: Viikkoraportti Kiireisin viikko: viikon alku Paivayhteenveto Paivaraportti Kiireisin paiva: Tuntiraportti Tuntiyhteenveto Tunnit viikoittain yhteenveto Kiireisin tunti: Neljannestuntiraportti Neljannestuntiyhteenveto Tunnin kiireisin neljannes: Viisiminuuttisraportti Viisiminuuttisyhteenveto Kiireisimmat viisi minuuttia: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Isantakoneraportti isantakone isantakonetta n Uudelleenohjausraportti isantakone isantakonetta n Isantakoneen epaonnistumisraportti isantakone isantakonetta n Hakemistoraportti hakemisto hakemistoa n Tiedostolajiraportti paate paatetta n Pyyntoraportti tiedosto tiedostoa n Uudelleenohjausraportti tiedosto tiedostoa n Virheraportti tiedosto tiedostoa n Viittausraportti viittaava URL viittaavaa URLia n Viittaussivustoraportti viittaava sivusto viittaavaa sivustoa n Uudelleenohjattujen viitteusten raportti viittaava URL viittaavaa URLia n Epaonnistuneiden viittausten raportti viittaava URL viittaavaa URLia n Hakukyselyraportti haku hakua n Hakusanaraportti hakusana hakusanaa n Sisainen hakukyselyraportti haku hakua n Sisainen hakusanaraportti hakusana hakusanaa n Naennaiskoneraportti naennaiskone naennaiskonetta n Naennaiskoneen uudelleenohjausraportti naennaiskone naennaiskonetta n Naennaiskoneen epaonnistumisraportti naennaiskone naennaiskonetta n Kayttajaraportti kayttaja kayttajaa n Kayttajan uudelleenohjausraportti kayttaja kayttajaa n Kayttajan virheraportti kayttaja kayttajaa n Selainyhteenveto selain selainta n Seleinraportti selain selainta n Kayttojarjestelmaraportti kayttojarjestelma kayttojarjestelmaa n Domainraportti domain domainia n Organisaatioraportti organisaatio organisaatiota n Paluukoodiraportti paluukoodi paluukoodia n Suoritusaikaraportti Tiedostokokoraportti ## Used at the bottom of the report Taman analyysin teki Suoritusaika Alle 1 ## Used in the time reports Kukin yksikko vastaa tai sen osaa sivun pyyntoa sivun pyyntoa ## Used at the bottom of each non-time report: need m, f & n genders * * ei luetteloitu ## Used on the pie charts: again need m, f & n genders * * Muut ## Used at the top of the report Ohjelman kaynnistysaika Analysoidut pyynnot ajalta - ## Used in the General Summary Onnistuneet pyynnot Keskimaarin onnistuneita pyyntoja paivassa Onnistuneita sivujen pyyntoja Onnistuneita sivujen pyyntoja keskimaarin paivassa Lokitiedoston riveja ilman tilakoodia Epaonnistuneet pyynnot Uudelleenohjatut pyynnot Pyynnot joissa tiedottava paluukoodi Erilliset tiedostojen pyynnot Erillisia isantakoneita palveltu Virheellisia lokitiedoston riveja Ei-toivottuja lokitiedoston riveja Tietoa siirretty Keskimaarainen tiedonsiirto paivassa Suluissa olevat lukumaarat viittaavat 7 paivan jaksoon, joka paattyi edelliseen 7 paivaan Mene Alkuun ## Some special phrases for particular reports. [tunnistamattomat numeromuotoiset osoitteet] [piirinimia ei saatu] [tuntemattomat hallintapiirit] [juurihakemisto] [ei hakemistoa] [ei paatetta] [hakemistot] Tuntematon Windows Muu Unix Robotit Tuntematon kayttojarjestelma ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) pyynnot 7 paivan pyynnot %pyynnot %7 paivan pyynnot sivut 7 paivan sivut %sivut %7 paivan sivut tavut ?tavut 7 paivan tavut 7 paivan ?tavut %tavut %7 paivan tavut nro. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Luettelossa suosituimmat %s * * Luettelossa suosituimmat %d %s * * Luettelossa %s ## "by" in the phrase "listing the top 3 files BY number of requests" numerona ## All requests WITH AT LEAST 10 requests joissa vahintaan ## Different ways of doing floors pyynto viimeisina 7 paivana pyynnot viimeisina 7 paivana sivun pyynto viimeisina 7 paivana sivun pyynnot viimeisina 7 paivana uudelleenohjattu pyynto uudelleenohjatut pyynnot uudelleenohjattu pyynto viimeisina 7 paivana uudelleenohjatut pyynnot viimeisina 7 paivana epaonnistunut pyynto epaonnistuneet pyynnot epaonnistunut pyynto viimeisina 7 paivana epaonnistuneet pyynnot viimeisina 7 paivana % liikenteesta % liikenteesta viimeisina 7 paivana % maksimi liikennemaarasta % maksimi liikennemaarasta viimeisina 7 paivana tavu liikennetta tavua liikennetta ## ?bytes represents kbytes, Mbytes etc. ?tavua liikennetta tavu liikennetta viimeisina 7 paivana tavua liikennetta viimeisina 7 paivana ?tavua liikennetta viimeisina 7 paivana jossa pyynto lahtien jossa uudelleenohjattu pyynto lahtien jossa epaonnistunut pyynto lahtien jossa ensimmainen pyynto lahtien jossa ensimmainen uudelleenohjattu pyynto lahtien jossa ensimmainen epaonnistunut pyynto lahtien ## Now "sorted by": again, in m, f & n (only needed in plural though) * * jarjestysperusteena ## Used at the top of each report Tassa raportissa on tietoa: ## Used in pie charts Kiilojen kuvaus: ## different ways of sorting liikennemaara liikennemaara viimeisina 7 paivana % pyynnoista % pyynnoista viimeisina 7 paivana % maksimimaarasta pyyntoja % maksimimaarasta pyyntoja viimeisina 7 paivana pyyntojen maara pyyntojen maara viimeisina 7 paivana % sivun pyynnoista % sivun pyynnoista viimeisina 7 paivana % maksimimaarasta sivun pyyntoja % maksimimaarasta sivun pyyntoja viimeisina 7 paivana sivun pyyntojen maara sivun pyyntojen maara viimeisina 7 paivana % uudelleenohjatuista pyynnoista % uudelleenohjatuista pyynnoista viimeisina 7 paivana % maksimimaarasta uudelleenohjattuja pyyntoja % maksimimaarasta uudelleenohjattuja pyyntoja viimeisina 7 paivana uudelleenohjattujen pyyntojen maara uudelleenohjattujen pyyntojen maara viimeisina 7 paivana % epaonnistuneista pyynnoista % epaonnistuneista pyynnoista viimeisina 7 paivana % maksimimaarasta epaonnistuneita pyyntoja % maksimimaarasta epaonnistuneita pyyntoja viimeisina 7 paivana epaonnistuneiden pyyntojen maara epaonnistuneiden pyyntojen maara viimeisina 7 paivana viimeisen pyynnon ajankohta viimeisen uudelleenohjatun pyynnon ajankohta viimeisen epaonnistuneen pyynnon ajankohta ensimmaisen pyynnon ajankohta ensimmaisen uudelleenohjatun pyynnon ajankohta ensimmaisen epaonnistuneen pyynnon ajankohta ## 3 other ways of sorting in m, f, & n * * aakkosjarjestyksessa * * numerojarjestyksessa * * jarjestamatta ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m.%Y %H:%n ## "Program started at" and "Analysed requests from" %w, %D.%m.%Y %H:%n ## In Daily Report %d. %m %Y ## In Daily Summary %w ## In Hourly Report %d. %m %Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m %Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m %Y ## The date & time (D) column in non-time reports %d. %m %Y %H:%n ## In non-time reports: "listing files with requests since [date]" %d. %m %Y klo %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Jatka 101 Protokollavaihto 1xx [Tiedoteluontoinen] 200 OK 201 Luotu 202 Hyvaksytty toimenpiteita varten 203 Auktorisiomaton tieto 204 OK, ei lahetettavaa 205 Tyhjennetty dokumentti 206 Osittainen sisalto 2xx [Onnistunut pyynto (maarittelematon)] 300 Useita dokumentteja saatavilla 301 Siirretty pysyvasti 302 Tieto on muualla 303 Viite toiseen dokumenttiin 304 Ei muutosta edellisen pyynnon jalkeen 305 Kayta valityspalvelinta 306 Vaihda valityspalvelinta 307 Siirretty valiaikaisesti 3xx [Sekalaisia oheita] 400 Virheellinen pyynto 401 Salasanaa tarvitaan 402 Maksua tarvitaan 403 Paasy kielletty 404 Dokumenttia ei loytynyt 405 Menetelmaa ei sallita 406 Selain ei hyvaksy dokumenttia 407 Valityspalvelimen tulee lahettaa tunnistetiedot 408 Aikakatkaisu 409 Pyynto on ristiriidassa resurssin kanssa 410 Dokumentti pysyvasti poistettu 411 Pituus on maaritettava 412 Ehto ei toteutunut 413 Liian pitka pyynto 414 Tiedostonimi liian pitka 415 Tuntematon tiedostomuoto 416 Sopimaton pyyntoalue 417 Odotus epaonnistui 4xx [Sekalaisia virheita] 500 Palvelimen sisainen virhe 501 Pyyntoa ei tueta 502 Vastaanottopalvelimen virhe 503 Palvelu valiaikaisesti poissa kaytosta 504 Valitysaikakatkaisu 505 HTTP versio ei tuettu 506 Uudelleenohjaus epaonnistui 5xx [Sekalaisia palvelinvirheita] xxx [Tuntemattomia] analog-ce-6.0.17/lang/fiadom.tab000066400000000000000000000120361406366436600163230ustar00rootroot00000000000000aero 2 ilmakuljetus arpa 1 Arpanetin vanha tunnus biz 2 liiketoiminta com 2 kaupalliset yritykset coop 2 osuustoiminta edu 2 USA:n tutkimus ja koulutus gov 2 USA:n hallinto info 2 informaatio int 2 kansainvaliset jarjestot mil 2 USA:n puolustushallinto museum 2 museot name 3 yksityishenkilot net 2 tietoverkot org 2 jarjestot pro 3 ammatinharjoittajat ac 1 Ascension ad 2 Andorra ae 3 Arabiemiirikunnat af 1 Afganistan ag 2 Antigua ja Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Alankomaiden Antillit ao 1 Angola aq 1 Antarktis ar 3 Argentiina as 1 Amerikan Samoa at 3 Itavalta au 3 Australia aw 1 Aruba az 1 Azerbaidzhan ba 3 Bosnia-Hertsegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgia bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasilia bs 1 Bahama bt 1 Bhutan bv 1 Bouvet'nsaari bw 1 Botswana by 1 Valko-Venaja bz 1 Belize ca 3 Kanada cc 1 Kookossaaret cd 1 Kongon demokraattinen tasavalta cf 1 Keski-Afrikka cg 1 Kongo ch 2 Sveitsi ci 1 Norsunluurannikko ck 1 Cookin saaret cl 2 Chile cm 1 Kamerun cn 3 Kiina co 3 Kolumbia cr 3 Costa Rica cu 2 Kuuba cv 1 Kap Verde cx 2 Joulusaari cy 3 Kypros cz 2 Tshekki de 2 Saksa dj 1 Djibouti dk 2 Tanska dm 2 Dominica do 3 Dominikaaninen tasavalta dz 1 Algeria ec 3 Ecuador ee 2 Viro eg 3 Egypti eh 1 Lansi-Sahara er 1 Eritrea es 2 Espanja et 1 Etiopia fi 2 Suomi fj 3 Fidzhi fk 1 Falklandinsaaret fm 1 Mikronesia fo 1 Farsaaret fr 2 Ranska fx 1 Ranska (emamaa) ga 1 Gabon gb 1 Yhdistynyt kuningaskunta gd 1 Grenada ge 1 Georgia gf 1 Ranskan Guayana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Gronlanti gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Paivantasaajan Guinea gr 2 Kreikka gs 1 Etela-Georgia ja Etela-Sandwichsaaret gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 Heard- ja McDonaldsaaret hn 2 Honduras hr 2 Kroatia ht 1 Haiti hu 2 Unkari id 3 Indonesia ie 2 Irlanti il 3 Israel im 1 Mansaari in 3 Intia io 1 Brittilainen Intian valtameren alue iq 1 Irak ir 1 Iran is 2 Islanti it 2 Italia je 1 Jersey jm 3 Jamaika jo 3 Jordania jp 3 Japani ke 3 Kenia kg 1 Kirgisia kh 1 Kambodzha ki 1 Kiribati km 1 Komorit kn 1 Saint Kitts ja Nevis kp 1 Korean kansantasavalta kr 3 Korean tasavalta kw 3 Kuwait ky 1 Caymansaaret kz 1 Kazakstan la 1 Laos lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Liettua lu 2 Luxemburg lv 2 Latvia ly 1 Libya ma 1 Marokko mc 2 Monaco md 1 Moldova mg 1 Madagaskar mh 1 Marshallsaaret mk 3 Makedonia (entinen Jugoslavian tasavalta) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Pohjois-Mariaanit mq 1 Martinique mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Malediivit mw 1 Malawi mx 3 Meksiko my 3 Malesia mz 1 Mosambik na 1 Namibia nc 1 Uusi-Kaledonia ne 1 Niger nf 1 Norfolkinsaari ng 1 Nigeria ni 3 Nicaragua nl 2 Alankomaat no 2 Norja np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Uusi-Seelanti om 1 Oman pa 3 Panama pe 3 Peru pf 1 Ranskan Polynesia pg 3 Papua-Uusi-Guinea ph 3 Filippiinit pk 3 Pakistan pl 3 Puola pm 1 Saint-Pierre ja Miquelon pn 1 Pitcairn pr 1 Puerto Rico ps 3 Palestiinan itsehallintoalue pt 2 Portugali pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Romania ru 2 Venaja rw 1 Ruanda sa 3 Saudi-Arabia sb 1 Salomonsaaret sc 1 Seychellit sd 1 Sudan se 2 Ruotsi sg 3 Singapore sh 1 Saint Helena si 2 Slovenia sj 1 Huippuvuoret ja Jan Mayen sk 2 Slovakia sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Sao Tome ja Principe su 2 entinen Neuvostoliitto sv 3 El Salvador sy 1 Syyria sz 1 Swazimaa tc 1 Turks- ja Caicossaaret td 1 Tshad tf 1 Ranskan etelaiset alueet tg 1 Togo th 3 Thaimaa tj 1 Tadzhikistan tk 1 Tokelau tl 1 Ita-Timor tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Ita-Timor tr 3 Turkki tt 3 Trinidad ja Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tansania ua 3 Ukraina ug 3 Uganda uk 3 Yhdistynyt kuningaskunta um 1 Yhdysvaltain Tyynenmeren erillissaaret us 4 Yhdysvallat uy 3 Uruguay uz 1 Uzbekistan va 1 Vatikaani vc 1 Saint Vincent ja Grenadiinit ve 3 Venezuela vg 1 Brittilaiset Neitsytsaaret vi 1 Yhdysvaltain Neitsytsaaret vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis- ja Futunasaaret ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavia za 3 Etela-Afrikka zm 1 Sambia zr 1 Kongon kansantasavalta zw 3 Zimbabwe analog-ce-6.0.17/lang/fidom.tab000066400000000000000000000120361406366436600161620ustar00rootroot00000000000000aero 2 ilmakuljetus arpa 1 Arpanetin vanha tunnus biz 2 liiketoiminta com 2 kaupalliset yritykset coop 2 osuustoiminta edu 2 USA:n tutkimus ja koulutus gov 2 USA:n hallinto info 2 informaatio int 2 kansainväliset järjestöt mil 2 USA:n puolustushallinto museum 2 museot name 3 yksityishenkilöt net 2 tietoverkot org 2 järjestöt pro 3 ammatinharjoittajat ac 1 Ascension ad 2 Andorra ae 3 Arabiemiirikunnat af 1 Afganistan ag 2 Antigua ja Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Alankomaiden Antillit ao 1 Angola aq 1 Antarktis ar 3 Argentiina as 1 Amerikan Samoa at 3 Itävalta au 3 Australia aw 1 Aruba az 1 Azerbaidzhan ba 3 Bosnia-Hertsegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgia bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasilia bs 1 Bahama bt 1 Bhutan bv 1 Bouvet'nsaari bw 1 Botswana by 1 Valko-Venäjä bz 1 Belize ca 3 Kanada cc 1 Kookossaaret cd 1 Kongon demokraattinen tasavalta cf 1 Keski-Afrikka cg 1 Kongo ch 2 Sveitsi ci 1 Norsunluurannikko ck 1 Cookin saaret cl 2 Chile cm 1 Kamerun cn 3 Kiina co 3 Kolumbia cr 3 Costa Rica cu 2 Kuuba cv 1 Kap Verde cx 2 Joulusaari cy 3 Kypros cz 2 Tshekki de 2 Saksa dj 1 Djibouti dk 2 Tanska dm 2 Dominica do 3 Dominikaaninen tasavalta dz 1 Algeria ec 3 Ecuador ee 2 Viro eg 3 Egypti eh 1 Länsi-Sahara er 1 Eritrea es 2 Espanja et 1 Etiopia fi 2 Suomi fj 3 Fidzhi fk 1 Falklandinsaaret fm 1 Mikronesia fo 1 Färsaaret fr 2 Ranska fx 1 Ranska (emämaa) ga 1 Gabon gb 1 Yhdistynyt kuningaskunta gd 1 Grenada ge 1 Georgia gf 1 Ranskan Guayana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Grönlanti gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Päiväntasaajan Guinea gr 2 Kreikka gs 1 Etelä-Georgia ja Etelä-Sandwichsaaret gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 Heard- ja McDonaldsaaret hn 2 Honduras hr 2 Kroatia ht 1 Haiti hu 2 Unkari id 3 Indonesia ie 2 Irlanti il 3 Israel im 1 Mansaari in 3 Intia io 1 Brittiläinen Intian valtameren alue iq 1 Irak ir 1 Iran is 2 Islanti it 2 Italia je 1 Jersey jm 3 Jamaika jo 3 Jordania jp 3 Japani ke 3 Kenia kg 1 Kirgisia kh 1 Kambodzha ki 1 Kiribati km 1 Komorit kn 1 Saint Kitts ja Nevis kp 1 Korean kansantasavalta kr 3 Korean tasavalta kw 3 Kuwait ky 1 Caymansaaret kz 1 Kazakstan la 1 Laos lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Liettua lu 2 Luxemburg lv 2 Latvia ly 1 Libya ma 1 Marokko mc 2 Monaco md 1 Moldova mg 1 Madagaskar mh 1 Marshallsaaret mk 3 Makedonia (entinen Jugoslavian tasavalta) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Pohjois-Mariaanit mq 1 Martinique mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Malediivit mw 1 Malawi mx 3 Meksiko my 3 Malesia mz 1 Mosambik na 1 Namibia nc 1 Uusi-Kaledonia ne 1 Niger nf 1 Norfolkinsaari ng 1 Nigeria ni 3 Nicaragua nl 2 Alankomaat no 2 Norja np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Uusi-Seelanti om 1 Oman pa 3 Panama pe 3 Peru pf 1 Ranskan Polynesia pg 3 Papua-Uusi-Guinea ph 3 Filippiinit pk 3 Pakistan pl 3 Puola pm 1 Saint-Pierre ja Miquelon pn 1 Pitcairn pr 1 Puerto Rico ps 3 Palestiinan itsehallintoalue pt 2 Portugali pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Réunion ro 2 Romania ru 2 Venäjä rw 1 Ruanda sa 3 Saudi-Arabia sb 1 Salomonsaaret sc 1 Seychellit sd 1 Sudan se 2 Ruotsi sg 3 Singapore sh 1 Saint Helena si 2 Slovenia sj 1 Huippuvuoret ja Jan Mayen sk 2 Slovakia sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 São Tomé ja Príncipe su 2 entinen Neuvostoliitto sv 3 El Salvador sy 1 Syyria sz 1 Swazimaa tc 1 Turks- ja Caicossaaret td 1 Tshad tf 1 Ranskan eteläiset alueet tg 1 Togo th 3 Thaimaa tj 1 Tadzhikistan tk 1 Tokelau tl 1 Itä-Timor tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Itä-Timor tr 3 Turkki tt 3 Trinidad ja Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tansania ua 3 Ukraina ug 3 Uganda uk 3 Yhdistynyt kuningaskunta um 1 Yhdysvaltain Tyynenmeren erillissaaret us 4 Yhdysvallat uy 3 Uruguay uz 1 Uzbekistan va 1 Vatikaani vc 1 Saint Vincent ja Grenadiinit ve 3 Venezuela vg 1 Brittiläiset Neitsytsaaret vi 1 Yhdysvaltain Neitsytsaaret vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis- ja Futunasaaret ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavia za 3 Etelä-Afrikka zm 1 Sambia zr 1 Kongon kansantasavalta zw 3 Zimbabwe analog-ce-6.0.17/lang/fr.lng000066400000000000000000000337221406366436600155120ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## Fichier de langue francaise pour analog 6.0. ## Peut ou non fonctionner avec une autre version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Dim Lun Mar Mer Jeu Ven Sam Jan Fév Mars Avr Mai Juin Juil Août Sept Oct Nov Déc ## Next some standard common words. ## Abbreviation for "week beginning" sem début. Année ## Quarter of a year trimestre mois jour jours heure minute minutes seconde secondes octet octets ## ?bytes represents kbytes, Mbytes etc. ?octets requête requêtes date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date heure heure première date première heure dernière date dernière heure fichier fichiers hôte hôtes hôte virtuel hôtes virtuels répertoire répertoires domaine domaines organisation organisations extension extensions URL URL navigateur navigateur OS OS ## (= operating system, operating systems) taille Terme recherché Termes recherchés site sites utilisateur utilisateurs code statut codes statut Statistiques du serveur Web ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo- méga- giga- tera- peta- exa- zeta- yotta- ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Résumé général ## The time reports, plus "busiest" strings (at the bottom of each report) Rapport annuel Année la plus active Rapport trimestriel Trimestre le plus actif Rapport mensuel Mois le plus actif : Rapport hebdomadaire Semaine la plus active : commençant le Résumé quotidien Rapport quotidien Jour le plus actif : Rapport horaire Résumé horaire Résumé horaire par semaine Heure la plus active : Rapport par quart d'heure Résumé par quart d'heure Quart d'heure le plus actif de l'heure : Rapport par 5 minutes Résumé par tranche de 5 minutes 5 minutes les plus actives : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Rapport par hôte hôte hôtes m Rapport de redirection des hôtes hôte hôtes m Rapport d'échec par hôte hôte hôtes m Rapport par répertoire répertoire répertoires m Rapport par type de fichier extension extensions f Rapport par fichier demandé fichier fichiers m Rapport par redirection fichier fichiers m Rapport par fichiers en erreur fichier fichiers m Rapport par provenance URL de provenance URL de provenance m Rapport par site de provenance site de provenance sites de provenance m Rapport par redirection de provenance URL de provenance URL de provenance m Rapport par erreur de provenance URL de provenance URL de provenance m Rapport par requête de recherche requête requêtes f Rapport par mot-clé de recherche mot-clé mot-clés m Rapport par requête de recherche interne requête requêtes f Rapport par mot-clé de recherche interne mot-clé mot-clés m Rapport par hôte virtuel hôte virtuel hôtes virtuels m Rapport par redirection d'hôte virtuel hôte virtuel hôtes virtuels m Rapport d'échec par hôte virtuel hôte virtuel hôtes virtuels m Rapport par utilisateur utilisateur utilisateurs m Rapport par redirection d'utilisateur utilisateur utilisateurs m Rapport des erreurs par utilisateur utilisateur utilisateurs m Résumé par navigateur navigateur navigateurs m Rapport par navigateur navigateur navigateurs m Rapport par système d'exploitation système d'exploitation systèmes d'exploitation m Rapport par domaine domaine domaines m Rapport par organisation organisation organisations f Rapport par code statut code statut codes statut m Rapport par temps de traitement Rapport par taille de fichier ## Used at the bottom of the report Cette analyse a été produite par Temps d'exécution Moins d'une ## Used in the time reports Chaque unité représente ou une fraction requête d'une page requêtes de pages ## Used at the bottom of each non-time report: need m, f & n genders non listés non listées non listés ## Used on the pie charts: again need m, f & n genders Autres Autres Autres ## Used at the top of the report Programme lancé le Requêtes analysées du au ## Used in the General Summary Requêtes réussies Moyenne journalière des requêtes réussies Requêtes de pages réussies Moyenne journalière des requêtes de pages réussies Lignes de journal sans code statut Requêtes ayant échoué Requêtes redirigées Requêtes avec statut informatif Fichiers distincts demandés Hôtes distincts servis Lignes invalides dans le fichier journal Lignes non désirées dans le fichier journal Données transférées Quantité moyenne journalière de données transférées Les chiffres entre parenthèses font référence aux 7 jours se terminant le 7 derniers jours Aller à Début ## Some special phrases for particular reports. [Adresses numériques non résolues] [domaine non indiqué] [domaine inconnu] [répertoire racine] [pas de répertoire] [pas d'extension] [répertoires] Windows inconnu Autre Unix Robots OS inconnu ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) Nb de req. req/7 jours % de req. req/7 jours pages pages/7 jours % de pages % pages/7 jr octets ?octets octets/7 jr ?octets/7 jr % octets % octets/7 jr nb. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Affichage des %s premiers Affichage des %s premières * Affichage des %d premiers %s Affichage des %d premières %s * Affichage des %s Affichage des %s * ## "by" in the phrase "listing the top 3 files BY number of requests" par ## All requests WITH AT LEAST 10 requests représentant au moins ## Different ways of doing floors requête dans les 7 derniers jours requêtes dans les 7 derniers jours requête de page dans les 7 derniers jours requêtes de page dans les 7 derniers jours requête redirigée requêtes redirigées requête redirigée dans les 7 derniers jours requêtes redirigées dans les 7 derniers jours requête en erreur requêtes en erreur requête en erreur dans les 7 derniers jours requêtes en erreur dans les 7 derniers jours % du trafic % du trafic dans les 7 derniers jours % du trafic maximum % du trafic maximum dans les 7 derniers jours octet de trafic octets de trafic ## ?bytes represents kbytes, Mbytes etc. ?octets de trafic octet de trafic dans les 7 derniers jours octets de trafic dans les 7 derniers jours ?octets de trafic dans les 7 derniers jours demandées depuis avec une requête redirigée depuis avec une requête en erreur depuis avec la première requête depuis avec la première requête redirigée depuis avec la première requête en erreur depuis ## Now "sorted by": again, in m, f & n (only needed in plural though) triés par triées par * ## Used at the top of each report Ce rapport contient les données sur ## Used in pie charts Les parts sont tracées par ## different ways of sorting la quantité de trafic la quantité de trafic dans les 7 derniers jours % des requêtes % des requêtes dans les 7 derniers jours % du nombre maximum de requêtes % du nombre maximum de requêtes dans les 7 derniers jours le nombre de requêtes le nombre de requêtes dans les 7 derniers jours % des requêtes de pages % des requêtes de pages dans les 7 derniers jours % du nombre maximum de requêtes de pages % du nombre maximum de requêtes de pages dans les 7 derniers jours le nombre de requêtes de pages le nombre de requêtes de pages dans les 7 derniers jours % des requêtes redirigées % des requêtes redirigées dans les 7 derniers jours % du nombre maximum des requêtes redirigées % du nombre maximum des requêtes redirigées dans les 7 derniers jours le nombre de requêtes redirigées le nombre de requêtes redirigées dans les 7 derniers jours % des requêtes ayant échoué % des requêtes ayant échoué dans les 7 derniers jours % du nombre maximum des requêtes ayant échoué % du nombre maximum des requêtes ayant échoué dans les 7 derniers jours le nombre de requêtes ayant échoué le nombre de requêtes ayant échoué dans les 7 derniers jours l'heure de la dernière requête l'heure de la dernière requête redirigée l'heure de la dernière requête ayant échoué l'heure de la première requête l'heure de la première requête redirigée l'heure de la première requête ayant échoué ## 3 other ways of sorting in m, f, & n triés par ordre alphabétique triées par ordre alphabétique * triés par ordre numérique triées par ordre numérique * non triés non triées * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w %D %m %Y à %H:%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %H:%n%x%I:%o ## In Hourly Summary %H ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continuez la requête 101 Changement de protocole accepté 1xx [Divers messages informatifs] 200 OK 201 Créé 202 Accepté pour traitement ultérieur 203 Information de seconde main (Non-authoritative) 204 OK, mais rien à envoyer 205 Reset document 206 Contenu partiel 2xx [Diverses opérations réussies] 300 Multiples documents disponibles 301 Document définitivement déplacé 302 Document trouvé ailleurs 303 Voir autre document 304 Non modifié depuis le dernier accès 305 Utiliser un proxy 306 Changer de proxy 307 Document déplacé temporairement 3xx [Diverses redirections] 400 Requête incorrecte 401 Authentification requise 402 Paiement requis 403 Accès interdit 404 Document non trouvé 405 Méthode non autorisée 406 Document non acceptable par le client 407 Identifiez vous sur le proxy 408 Requête : temps depassé 409 La requête est en conflit avec l'état de la ressource 410 Document définitivement inaccessible 411 Longueur requise 412 Echec de la précondition 413 Requête trop longue 414 Nom de fichier demandé trop long 415 Type de media non supporté 416 L'en-tête "range" requis est invalide 417 L'en-tête "Expect" ne peut être satisfait 4xx [Diverses erreurs du client/utilisateur] 500 Erreur interne du serveur 501 Type de requête non supporté 502 Erreur du serveur amont 503 Service temporairement indisponible 504 Passerelle : Temps depassé 505 Version de HTTP non supportée 506 Echec de la redirection 5xx [Diverses erreurs du serveur] xxx [Inconnu] analog-ce-6.0.17/lang/fra.lng000066400000000000000000000337201406366436600156510ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## Fichier de langue francaise pour analog 6.0. ## Peut ou non fonctionner avec une autre version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Dim Lun Mar Mer Jeu Ven Sam Jan Fev Mars Avr Mai Juin Juil Aout Sept Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" sem debut. Annee ## Quarter of a year trimestre mois jour jours heure minute minutes seconde secondes octet octets ## ?bytes represents kbytes, Mbytes etc. ?octets requete requetes date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date heure heure premiere date premiere heure derniere date derniere heure fichier fichiers hote hotes hote virtuel hotes virtuels repertoire repertoires domaine domaines organisation organisations extension extensions URL URL navigateur navigateur OS OS ## (= operating system, operating systems) taille Terme recherche Termes recherches site sites utilisateur utilisateurs code statut codes statut Statistiques du serveur Web ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo- mega- giga- tera- peta- exa- zeta- yotta- ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Resume general ## The time reports, plus "busiest" strings (at the bottom of each report) Rapport annuel Annee la plus active Rapport trimestriel Trimestre le plus actif Rapport mensuel Mois le plus actif : Rapport hebdomadaire Semaine la plus active : commencant le Resume quotidien Rapport quotidien Jour le plus actif : Rapport horaire Resume horaire Resume horaire par semaine Heure la plus active : Rapport par quart d'heure Resume par quart d'heure Quart d'heure le plus actif de l'heure : Rapport par 5 minutes Resume par tranche de 5 minutes 5 minutes les plus actives : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Rapport par hote hote hotes m Rapport de redirection des hotes hote hotes m Rapport d'echec par hote hote hotes m Rapport par repertoire repertoire repertoires m Rapport par type de fichier extension extensions f Rapport par fichier demande fichier fichiers m Rapport par redirection fichier fichiers m Rapport par fichiers en erreur fichier fichiers m Rapport par provenance URL de provenance URL de provenance m Rapport par site de provenance site de provenance sites de provenance m Rapport par redirection de provenance URL de provenance URL de provenance m Rapport par erreur de provenance URL de provenance URL de provenance m Rapport par requete de recherche requete requetes f Rapport par mot-cle de recherche mot-cle mot-cles m Rapport par requete de recherche interne requete requetes f Rapport par mot-cle de recherche interne mot-cle mot-cles m Rapport par hote virtuel hote virtuel hotes virtuels m Rapport par redirection d'hote virtuel hote virtuel hotes virtuels m Rapport d'echec par hote virtuel hote virtuel hotes virtuels m Rapport par utilisateur utilisateur utilisateurs m Rapport par redirection d'utilisateur utilisateur utilisateurs m Rapport des erreurs par utilisateur utilisateur utilisateurs m Resume par navigateur navigateur navigateurs m Rapport par navigateur navigateur navigateurs m Rapport par systeme d'exploitation systeme d'exploitation systemes d'exploitation m Rapport par domaine domaine domaines m Rapport par organisation organisation organisations f Rapport par code statut code statut codes statut m Rapport par temps de traitement Rapport par taille de fichier ## Used at the bottom of the report Cette analyse a ete produite par Temps d'execution Moins d'une ## Used in the time reports Chaque unite represente ou une fraction requete d'une page requetes de pages ## Used at the bottom of each non-time report: need m, f & n genders non listes non listees non listes ## Used on the pie charts: again need m, f & n genders Autres Autres Autres ## Used at the top of the report Programme lance le Requetes analysees du au ## Used in the General Summary Requetes reussies Moyenne journaliere des requetes reussies Requetes de pages reussies Moyenne journaliere des requetes de pages reussies Lignes de journal sans code statut Requetes ayant echoue Requetes redirigees Requetes avec statut informatif Fichiers distincts demandes Hotes distincts servis Lignes invalides dans le fichier journal Lignes non desirees dans le fichier journal Donnees transferees Quantite moyenne journaliere de donnees transferees Les chiffres entre parentheses font reference aux 7 jours se terminant le 7 derniers jours Aller a Debut ## Some special phrases for particular reports. [Adresses numeriques non resolues] [domaine non indique] [domaine inconnu] [repertoire racine] [pas de repertoire] [pas d'extension] [repertoires] Windows inconnu Autre Unix Robots OS inconnu ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) Nb de req. req/7 jours % de req. req/7 jours pages pages/7 jours % de pages % pages/7 jr octets ?octets octets/7 jr ?octets/7 jr % octets % octets/7 jr nb. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Affichage des %s premiers Affichage des %s premieres * Affichage des %d premiers %s Affichage des %d premieres %s * Affichage des %s Affichage des %s * ## "by" in the phrase "listing the top 3 files BY number of requests" par ## All requests WITH AT LEAST 10 requests representant au moins ## Different ways of doing floors requete dans les 7 derniers jours requetes dans les 7 derniers jours requete de page dans les 7 derniers jours requetes de page dans les 7 derniers jours requete redirigee requetes redirigees requete redirigee dans les 7 derniers jours requetes redirigees dans les 7 derniers jours requete en erreur requetes en erreur requete en erreur dans les 7 derniers jours requetes en erreur dans les 7 derniers jours % du trafic % du trafic dans les 7 derniers jours % du trafic maximum % du trafic maximum dans les 7 derniers jours octet de trafic octets de trafic ## ?bytes represents kbytes, Mbytes etc. ?octets de trafic octet de trafic dans les 7 derniers jours octets de trafic dans les 7 derniers jours ?octets de trafic dans les 7 derniers jours demandees depuis avec une requete redirigee depuis avec une requete en erreur depuis avec la premiere requete depuis avec la premiere requete redirigee depuis avec la premiere requete en erreur depuis ## Now "sorted by": again, in m, f & n (only needed in plural though) tries par triees par * ## Used at the top of each report Ce rapport contient les donnees sur ## Used in pie charts Les parts sont tracees par ## different ways of sorting la quantite de trafic la quantite de trafic dans les 7 derniers jours % des requetes % des requetes dans les 7 derniers jours % du nombre maximum de requetes % du nombre maximum de requetes dans les 7 derniers jours le nombre de requetes le nombre de requetes dans les 7 derniers jours % des requetes de pages % des requetes de pages dans les 7 derniers jours % du nombre maximum de requetes de pages % du nombre maximum de requetes de pages dans les 7 derniers jours le nombre de requetes de pages le nombre de requetes de pages dans les 7 derniers jours % des requetes redirigees % des requetes redirigees dans les 7 derniers jours % du nombre maximum des requetes redirigees % du nombre maximum des requetes redirigees dans les 7 derniers jours le nombre de requetes redirigees le nombre de requetes redirigees dans les 7 derniers jours % des requetes ayant echoue % des requetes ayant echoue dans les 7 derniers jours % du nombre maximum des requetes ayant echoue % du nombre maximum des requetes ayant echoue dans les 7 derniers jours le nombre de requetes ayant echoue le nombre de requetes ayant echoue dans les 7 derniers jours l'heure de la derniere requete l'heure de la derniere requete redirigee l'heure de la derniere requete ayant echoue l'heure de la premiere requete l'heure de la premiere requete redirigee l'heure de la premiere requete ayant echoue ## 3 other ways of sorting in m, f, & n tries par ordre alphabetique triees par ordre alphabetique * tries par ordre numerique triees par ordre numerique * non tries non triees * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w %D %m %Y a %H:%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %H:%n%x%I:%o ## In Hourly Summary %H ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continuez la requete 101 Changement de protocole accepte 1xx [Divers messages informatifs] 200 OK 201 Cree 202 Accepte pour traitement ulterieur 203 Information de seconde main (Non-authoritative) 204 OK, mais rien a envoyer 205 Reset document 206 Contenu partiel 2xx [Diverses operations reussies] 300 Multiples documents disponibles 301 Document definitivement deplace 302 Document trouve ailleurs 303 Voir autre document 304 Non modifie depuis le dernier acces 305 Utiliser un proxy 306 Changer de proxy 307 Document deplace temporairement 3xx [Diverses redirections] 400 Requete incorrecte 401 Authentification requise 402 Paiement requis 403 Acces interdit 404 Document non trouve 405 Methode non autorisee 406 Document non acceptable par le client 407 Identifiez vous sur le proxy 408 Requete : temps depasse 409 La requete est en conflit avec l'etat de la ressource 410 Document definitivement inaccessible 411 Longueur requise 412 Echec de la precondition 413 Requete trop longue 414 Nom de fichier demande trop long 415 Type de media non supporte 416 L'en-tete "range" requis est invalide 417 L'en-tete "Expect" ne peut etre satisfait 4xx [Diverses erreurs du client/utilisateur] 500 Erreur interne du serveur 501 Type de requete non supporte 502 Erreur du serveur amont 503 Service temporairement indisponible 504 Passerelle : Temps depasse 505 Version de HTTP non supportee 506 Echec de la redirection 5xx [Diverses erreurs du serveur] xxx [Inconnu] analog-ce-6.0.17/lang/fradesc.txt000066400000000000000000000110331406366436600165400ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Ce rapport liste l'activite de chaque annee. # Quarterly Report Ce rapport liste l'activite de chaque trimestre. # Monthly Report Ce rapport liste l'activite de chaque mois. # Weekly Report Ce rapport liste l'activite de chaque semaine. # Daily Report Ce rapport liste l'activite de chaque jour. # Hourly Report Ce rapport liste l'activite de chaque heure. # Quarter-Hour Report Ce rapport liste l'activite par periodes de 4 heures. # Five-Minute Report Ce rapport liste l'activite par periodes de 5 minutes. # Daily Summary Ce rapport liste l'activite totale par jour de la semaine, additionnee sur toutes les semaines du rapport. # Hourly Summary Ce rapport liste l'activite totale par heure du jour, additionnee sur tous les jours du rapport. # Hour of the Week Summary Ce rapport liste l'activite totale par heure de la semaine, additionnee sur toutes les semaines du rapport. # Quarter-Hour Summary Ce rapport liste l'activite totale par periodes quotidiennes de 4 heures, additionnee sur tous les jours du rapport. # Five-Minute Summary Ce rapport liste l'activite totale par periodes quotidiennes de 5 minutes, additionnee sur tous les jours du rapport. # General Summary Ce rapport contient des statistiques generales. # Request Report Ce rapport liste les fichiers du site. # Redirection Report Ce rapport liste les fichiers pour lesquelles les requetes ont ete redirigees vers un autre fichier. (En general des repertoires auxquels manque le slash '/' final, ou des scripts CGI qui forcent des redirections.) # Failure Report Ce rapport liste les fichiers qui ont cause des erreurs, par exemple les fichiers non trouves. # File Type Report Ce rapport liste les extensions des fichiers demandes. # Directory Report Ce rapport liste les repertoires contenant les fichiers demandes. (Les chiffres de chaque repertoire incluent tous ceux de ses sous-repertoires). # Host Report Ce rapport liste les ordinateurs qui ont demande des fichiers. # Host Redirection Report Ce rapport liste les ordinateurs qui ont ete rediriges vers d'autres fichiers. # Host Failure Report Ce rapport liste les ordinateurs qui ont vu des requetes d'echec. # Domain Report Ce rapport liste les pays des ordinateurs qui ont demande des fichiers. # Referrer Report Ce rapport liste les referents (liens que les gens ont suivis ou pages qui incluaient des images de ce site). # Referring Site Report Ce rapport liste les serveurs a partir desquels les gens ont suivi des liens. # Redirected Referrer Report Ce rapport liste les referents qui ont provoque des requetes de redirection. # Failed Referrer Report Ce rapport liste les referents qui contenaient des liens brises vers ce site. # Browser Report Ce rapport liste les navigateurs utilises par les visiteurs. # Virtual Host Report Ce rapport liste l'activite de chaque domaine virtuel de ce site. # Virtual Host Redirection Report Ce rapport liste les requetes de redirection de chaque domaine virtuel. # Virtual Host Failure Report Ce rapport liste les requetes d'echec de chaque domaine virtuel. # User Report Ce rapport liste les utilisateurs qui ont demande des fichiers, s'ils ont ete authentifies ou s'ils ont pu etre identifies par des cookies. # User Redirection Report Ce rapport liste les utilisateurs qui ont ete rediriges vers un autre fichier. # User Failure Report Ce rapport liste les utilisateurs ayant rencontre des requetes d'echec. # Organisation Report Ce rapport liste les organisations des ordinateurs ayant demande des fichiers. # Search Query Report Ce rapport liste les termes de recherche que les gens ont utilises dans les moteurs de recherche pour trouver ce site. # Search Word Report Ce rapport liste quels mots les gens ont utilises dans les moteurs de recherche pour trouver ce site. # Internal Search Query Report Ce rapport liste quels termes de recherche les gens ont utilises dans les scripts de ce site. # Internal Search Word Report Ce rapport liste quels mots les gens ont utilises dans les scripts de ce site. # Browser Summary Ce rapport liste les fournisseurs des navigateurs utilises par les visiteurs. # Operating System Report Ce rapport liste les systemes d'exploitation utilises par les visiteurs. # File Size Report Ce rapport liste les tailles des fichiers. # Status Code Report Ce rapport liste les codes de statut HTTP pour toutes les requetes. # Processing Time Report Ce rapport liste les temps pris pour traiter les requetes reussies. analog-ce-6.0.17/lang/fradom.tab000066400000000000000000000116261406366436600163400ustar00rootroot00000000000000aero 2 industrie aeronautique arpa 1 Arpanet biz 2 entreprises com 2 commercial coop 2 cooperatives edu 2 education (E.-U.) gov 2 gouvernement (E.-U.) info 2 renseignements int 1 organisations internationales mil 2 militaire (E.-U.) museum 2 musees name 3 personnes net 2 network (reseau) org 2 organisations non commerciales pro 3 professionnels ac 1 Ile de l'Ascension ad 2 Andorre ae 3 Emirats Arabes Unis af 1 Afghanistan ag 2 Antigua-et-Barbuda ai 1 Anguilla al 1 Albanie am 2 Armenie an 1 Antilles Neerlandaises ao 1 Angola aq 1 Antarctique ar 3 Argentine as 1 Samoa Americain at 3 Autriche au 3 Australie aw 1 Aruba az 1 Azerbaidjan ba 3 Bosnie-Herzegovine bb 2 La Barbade bd 1 Bangladesh be 3 Belgique bf 1 Burkina Faso bg 2 Bulgarie bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermudes bn 1 Brunei Darussalam bo 3 Bolivie br 3 Bresil bs 1 Bahamas bt 1 Bhoutan bv 1 Ile Bouvet bw 1 Botswana by 1 Bielorussie bz 1 Belize ca 3 Canada cc 1 Iles Cocos (Keeling) cd 1 Republique democratique du Congo cf 1 Republique Centrafricaine cg 1 Congo ch 2 Suisse ci 1 Cote D'Ivoire ck 1 Iles Cook cl 2 Chili cm 1 Cameroun cn 3 Chine co 3 Colombie cr 3 Costa Rica cs 3 Serbie et Montenegro cu 2 Cuba cv 1 Cap-Vert cx 2 Ile Christmas cy 3 Chypre cz 2 Republique Tcheque de 2 Allemagne dj 1 Djibouti dk 2 Danemark dm 2 Dominique do 3 Republique Dominicaine dz 1 Algerie ec 3 Equateur ee 2 Estonie eg 3 Egypte eh 1 Sahara Occidental er 1 Erythree es 2 Espagne et 1 Ethiopie fi 2 Finlande fj 3 Fidji fk 1 Malouines (Iles Falkland) fm 1 Micronesie fo 1 Iles Feroe fr 2 France fx 1 France (metropolitaine) ga 1 Gabon gb 1 Grande-Bretagne gd 1 Grenade ge 1 Georgie gf 1 Guyane Francaise gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambie gn 1 Guinee gp 1 Guadeloupe (France) gq 1 Guinee-Equatoriale gr 2 Grece gs 1 Iles Georgie du Sud et Sandwich du Sud gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinee-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Iles Heard et McDonald hn 2 Honduras hr 2 Croatie ht 1 Haiti hu 2 Hongrie id 3 Indonesie ie 2 Irlande il 3 Israel im 1 Ile de Man in 3 Inde io 1 Territoire Britannique de l'Ocean Indien iq 1 Iraq ir 1 Iran is 2 Islande it 2 Italie je 1 Jersey jm 3 Jamaique jo 3 Jordanie jp 3 Japon ke 3 Kenya kg 1 Kirghizstan kh 1 Cambodge ki 1 Kiribati km 1 Iles Comores kn 1 Saint-Kitts-et-Nevis kp 1 Coree du Nord kr 3 Coree du Sud kw 3 Koweit ky 1 Iles Cayman kz 1 Kazakhstan la 1 Laos lb 3 Liban lc 1 Sainte-Lucie li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lithuanie lu 2 Luxembourg lv 2 Lettonie ly 1 Libye ma 1 Maroc mc 2 Monaco md 1 Moldavie mg 1 Madagascar mh 1 Iles Marshall mk 3 Macedoine ml 1 Mali mm 1 Myanmar mn 1 Mongolie mo 1 Macao mp 1 Iles Mariannes du Nord mq 1 Martinique (France) mr 1 Mauritanie ms 1 Montserrat mt 3 Malte mu 1 Ile Maurice mv 1 Maldives mw 1 Malawi mx 3 Mexique my 3 Malaysie mz 1 Mozambique na 1 Namibie nc 1 Nouvelle Caledonie (France) ne 1 Niger nf 1 Ile Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Pays-Bas no 2 Norvege np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nouvelle-Zelande om 1 Oman pa 3 Panama pe 3 Perou pf 1 Polynesie Francaise pg 3 Papouasie Nouvelle-Guinee ph 3 Philippines pk 3 Pakistan pl 3 Pologne pm 1 Saint-Pierre-et-Miquelon pn 1 Ile Pitcairn pr 1 Porto Rico ps 3 Territoire Palestinien Occupe pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion (France) ro 2 Roumanie ru 2 Russie rw 1 Rwanda sa 3 Arabie Saoudite sb 1 Iles Salomon sc 1 Seychelles sd 1 Soudan se 2 Suede sg 3 Singapour sh 1 Sainte-Helene si 2 Slovenie sj 1 Iles Svalbard et Jan Mayen sk 2 Republique Slovaque sl 1 Sierra Leone sm 1 Saint-Marin sn 1 Senegal so 1 Somalie sr 1 Surinam st 1 Sao Tome e Principe su 2 ex-URSS sv 3 Salvador sy 1 Syrie sz 1 Swaziland tc 1 Iles Turks-et-Caicos td 1 Tchad tf 1 Territoires Francais du Sud tg 1 Togo th 3 Thailande tj 1 Tadjikistan tk 1 Tokelau tl 1 Timor Oriental tm 1 Turkmenistan tn 1 Tunisie to 1 Tonga tp 1 Timor Oriental tr 3 Turquie tt 3 Trinite-et-Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzanie ua 3 Ukraine ug 3 Ouganda uk 3 Royaume-Uni um 1 Iles Mineures Eloignees des E.-U. us 4 Etats-Unis uy 3 Uruguay uz 1 Ouzbekistan va 1 Vatican vc 1 Saint-Vincent-et-les-Grenadines ve 3 Venezuela vg 1 Iles Vierges (R.-U.) vi 1 Iles Vierges (E.-U.) vn 1 Vietnam vu 1 Vanuatu wf 1 Iles Wallis-et-Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Yougoslavie za 3 Afrique du Sud zm 1 Zambie zr 1 Republique Democratique du Congo zw 3 Zimbabwe analog-ce-6.0.17/lang/frdesc.txt000066400000000000000000000110331406366436600163770ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Ce rapport liste l'activité de chaque année. # Quarterly Report Ce rapport liste l'activité de chaque trimestre. # Monthly Report Ce rapport liste l'activité de chaque mois. # Weekly Report Ce rapport liste l'activité de chaque semaine. # Daily Report Ce rapport liste l'activité de chaque jour. # Hourly Report Ce rapport liste l'activité de chaque heure. # Quarter-Hour Report Ce rapport liste l'activité par périodes de 4 heures. # Five-Minute Report Ce rapport liste l'activité par périodes de 5 minutes. # Daily Summary Ce rapport liste l'activité totale par jour de la semaine, additionnée sur toutes les semaines du rapport. # Hourly Summary Ce rapport liste l'activité totale par heure du jour, additionnée sur tous les jours du rapport. # Hour of the Week Summary Ce rapport liste l'activité totale par heure de la semaine, additionnée sur toutes les semaines du rapport. # Quarter-Hour Summary Ce rapport liste l'activité totale par périodes quotidiennes de 4 heures, additionnée sur tous les jours du rapport. # Five-Minute Summary Ce rapport liste l'activité totale par périodes quotidiennes de 5 minutes, additionnée sur tous les jours du rapport. # General Summary Ce rapport contient des statistiques générales. # Request Report Ce rapport liste les fichiers du site. # Redirection Report Ce rapport liste les fichiers pour lesquelles les requêtes ont été redirigées vers un autre fichier. (En général des répertoires auxquels manque le slash '/' final, ou des scripts CGI qui forcent des redirections.) # Failure Report Ce rapport liste les fichiers qui ont causé des erreurs, par exemple les fichiers non trouvés. # File Type Report Ce rapport liste les extensions des fichiers demandés. # Directory Report Ce rapport liste les répertoires contenant les fichiers demandés. (Les chiffres de chaque répertoire incluent tous ceux de ses sous-répertoires). # Host Report Ce rapport liste les ordinateurs qui ont demandé des fichiers. # Host Redirection Report Ce rapport liste les ordinateurs qui ont été redirigés vers d'autres fichiers. # Host Failure Report Ce rapport liste les ordinateurs qui ont vu des requêtes d'échec. # Domain Report Ce rapport liste les pays des ordinateurs qui ont demandé des fichiers. # Referrer Report Ce rapport liste les référents (liens que les gens ont suivis ou pages qui incluaient des images de ce site). # Referring Site Report Ce rapport liste les serveurs à partir desquels les gens ont suivi des liens. # Redirected Referrer Report Ce rapport liste les référents qui ont provoqué des requêtes de redirection. # Failed Referrer Report Ce rapport liste les référents qui contenaient des liens brisés vers ce site. # Browser Report Ce rapport liste les navigateurs utilisés par les visiteurs. # Virtual Host Report Ce rapport liste l'activité de chaque domaine virtuel de ce site. # Virtual Host Redirection Report Ce rapport liste les requêtes de redirection de chaque domaine virtuel. # Virtual Host Failure Report Ce rapport liste les requêtes d'échec de chaque domaine virtuel. # User Report Ce rapport liste les utilisateurs qui ont demandé des fichiers, s'ils ont été authentifiés ou s'ils ont pu être identifiés par des cookies. # User Redirection Report Ce rapport liste les utilisateurs qui ont été redirigés vers un autre fichier. # User Failure Report Ce rapport liste les utilisateurs ayant rencontré des requêtes d'échec. # Organisation Report Ce rapport liste les organisations des ordinateurs ayant demandé des fichiers. # Search Query Report Ce rapport liste les termes de recherche que les gens ont utilisés dans les moteurs de recherche pour trouver ce site. # Search Word Report Ce rapport liste quels mots les gens ont utilisés dans les moteurs de recherche pour trouver ce site. # Internal Search Query Report Ce rapport liste quels termes de recherche les gens ont utilisés dans les scripts de ce site. # Internal Search Word Report Ce rapport liste quels mots les gens ont utilisés dans les scripts de ce site. # Browser Summary Ce rapport liste les fournisseurs des navigateurs utilisés par les visiteurs. # Operating System Report Ce rapport liste les systèmes d'exploitation utilisés par les visiteurs. # File Size Report Ce rapport liste les tailles des fichiers. # Status Code Report Ce rapport liste les codes de statut HTTP pour toutes les requêtes. # Processing Time Report Ce rapport liste les temps pris pour traiter les requêtes réussies. analog-ce-6.0.17/lang/frdom.tab000066400000000000000000000116261406366436600161770ustar00rootroot00000000000000aero 2 industrie aéronautique arpa 1 Arpanet biz 2 entreprises com 2 commercial coop 2 coopératives edu 2 éducation (É.-U.) gov 2 gouvernement (É.-U.) info 2 renseignements int 1 organisations internationales mil 2 militaire (É.-U.) museum 2 musées name 3 personnes net 2 network (réseau) org 2 organisations non commerciales pro 3 professionnels ac 1 Île de l'Ascension ad 2 Andorre ae 3 Émirats Arabes Unis af 1 Afghanistan ag 2 Antigua-et-Barbuda ai 1 Anguilla al 1 Albanie am 2 Arménie an 1 Antilles Néerlandaises ao 1 Angola aq 1 Antarctique ar 3 Argentine as 1 Samoa Américain at 3 Autriche au 3 Australie aw 1 Aruba az 1 Azerbaïdjan ba 3 Bosnie-Herzégovine bb 2 La Barbade bd 1 Bangladesh be 3 Belgique bf 1 Burkina Faso bg 2 Bulgarie bh 1 Bahrain bi 1 Burundi bj 1 Bénin bm 1 Bermudes bn 1 Brunei Darussalam bo 3 Bolivie br 3 Brésil bs 1 Bahamas bt 1 Bhoutan bv 1 Île Bouvet bw 1 Botswana by 1 Biélorussie bz 1 Belize ca 3 Canada cc 1 Îles Cocos (Keeling) cd 1 République démocratique du Congo cf 1 République Centrafricaine cg 1 Congo ch 2 Suisse ci 1 Côte D'Ivoire ck 1 Îles Cook cl 2 Chili cm 1 Cameroun cn 3 Chine co 3 Colombie cr 3 Costa Rica cs 3 Serbie et Monténégro cu 2 Cuba cv 1 Cap-Vert cx 2 Île Christmas cy 3 Chypre cz 2 République Tchèque de 2 Allemagne dj 1 Djibouti dk 2 Danemark dm 2 Dominique do 3 République Dominicaine dz 1 Algérie ec 3 Équateur ee 2 Estonie eg 3 Egypte eh 1 Sahara Occidental er 1 Erythrée es 2 Espagne et 1 Ethiopie fi 2 Finlande fj 3 Fidji fk 1 Malouines (Îles Falkland) fm 1 Micronésie fo 1 Îles Féroé fr 2 France fx 1 France (métropolitaine) ga 1 Gabon gb 1 Grande-Bretagne gd 1 Grenade ge 1 Géorgie gf 1 Guyane Française gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambie gn 1 Guinée gp 1 Guadeloupe (France) gq 1 Guinée-Équatoriale gr 2 Grèce gs 1 Îles Georgie du Sud et Sandwich du Sud gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinée-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Îles Heard et McDonald hn 2 Honduras hr 2 Croatie ht 1 Haïti hu 2 Hongrie id 3 Indonésie ie 2 Irlande il 3 Israël im 1 Île de Man in 3 Inde io 1 Territoire Britannique de l'Océan Indien iq 1 Iraq ir 1 Iran is 2 Islande it 2 Italie je 1 Jersey jm 3 Jamaïque jo 3 Jordanie jp 3 Japon ke 3 Kenya kg 1 Kirghizstan kh 1 Cambodge ki 1 Kiribati km 1 Îles Comores kn 1 Saint-Kitts-et-Nevis kp 1 Corée du Nord kr 3 Corée du Sud kw 3 Koweït ky 1 Îles Cayman kz 1 Kazakhstan la 1 Laos lb 3 Liban lc 1 Sainte-Lucie li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lithuanie lu 2 Luxembourg lv 2 Lettonie ly 1 Libye ma 1 Maroc mc 2 Monaco md 1 Moldavie mg 1 Madagascar mh 1 Îles Marshall mk 3 Macédoine ml 1 Mali mm 1 Myanmar mn 1 Mongolie mo 1 Macao mp 1 Îles Mariannes du Nord mq 1 Martinique (France) mr 1 Mauritanie ms 1 Montserrat mt 3 Malte mu 1 Île Maurice mv 1 Maldives mw 1 Malawi mx 3 Mexique my 3 Malaysie mz 1 Mozambique na 1 Namibie nc 1 Nouvelle Calédonie (France) ne 1 Niger nf 1 Île Norfolk ng 1 Nigéria ni 3 Nicaragua nl 2 Pays-Bas no 2 Norvège np 1 Népal nr 1 Nauru nu 2 Niue nz 3 Nouvelle-Zélande om 1 Oman pa 3 Panama pe 3 Pérou pf 1 Polynésie Française pg 3 Papouasie Nouvelle-Guinée ph 3 Philippines pk 3 Pakistan pl 3 Pologne pm 1 Saint-Pierre-et-Miquelon pn 1 Île Pitcairn pr 1 Porto Rico ps 3 Territoire Palestinien Occupé pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Réunion (France) ro 2 Roumanie ru 2 Russie rw 1 Rwanda sa 3 Arabie Saoudite sb 1 Îles Salomon sc 1 Seychelles sd 1 Soudan se 2 Suède sg 3 Singapour sh 1 Sainte-Hélène si 2 Slovénie sj 1 Îles Svalbard et Jan Mayen sk 2 République Slovaque sl 1 Sierra Leone sm 1 Saint-Marin sn 1 Sénégal so 1 Somalie sr 1 Surinam st 1 São Tomé e Príncipe su 2 ex-URSS sv 3 Salvador sy 1 Syrie sz 1 Swaziland tc 1 Îles Turks-et-Caicos td 1 Tchad tf 1 Territoires Français du Sud tg 1 Togo th 3 Thaïlande tj 1 Tadjikistan tk 1 Tokelau tl 1 Timor Oriental tm 1 Turkménistan tn 1 Tunisie to 1 Tonga tp 1 Timor Oriental tr 3 Turquie tt 3 Trinité-et-Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzanie ua 3 Ukraine ug 3 Ouganda uk 3 Royaume-Uni um 1 Îles Mineures Éloignées des É.-U. us 4 États-Unis uy 3 Uruguay uz 1 Ouzbékistan va 1 Vatican vc 1 Saint-Vincent-et-les-Grenadines ve 3 Venezuela vg 1 Îles Vierges (R.-U.) vi 1 Îles Vierges (É.-U.) vn 1 Vietnam vu 1 Vanuatu wf 1 Îles Wallis-et-Futuna ws 1 Samoa ye 1 Yémen yt 1 Mayotte yu 3 Yougoslavie za 3 Afrique du Sud zm 1 Zambie zr 1 République Démocratique du Congo zw 3 Zimbabwe analog-ce-6.0.17/lang/frform.html000066400000000000000000000217721406366436600165640ustar00rootroot00000000000000 Interface formulaire d'Analog

Interface formulaire d'Analog


1. Choix des rapports à éditer

N.B. Ce formulaire ne fonctionnera pas - les boutons n'apparaîtront peut-être même pas - jusqu'à ce que vous l'ayiez configuré conformément aux instructions. Après quoi vous pourrez retirer ce paragraphe.
Voir la home page de Analog pour la signification des différents rapports.

Quels rapports voulez-vous obtenir ?


[On] [Off] Résumé général
[On] [Off] Rapport mensuel
[On] [Off] Rapport hebdomadaire
[On] [Off] Résumé journalier
[On] [Off] Rapport journalier
[On] [Off] Résumé horaire
[On] [Off] Rapport par domaine
[On] [Off] Rapport par organisation
[On] [Off] Rapport par répertoire
[On] [Off] Rapport par type de fichier
[On] [Off] Rapport par requête
[On] [Off] Rapport par taille de fichier
[On] [Off] Rapport par provenance
[On] [Off] Rapport par requête de recherche
[On] [Off] Rapport par mot-clé de recherche
[On] [Off] Résumé par navigateur
[On] [Off] Rapport par système d'exploitation
[On] [Off] Rapport par code statut

Vous pouvez maintenant lancer le programme:
Ou vous pouvez compléter les options ci dessous pour chaque rapport. Vous pouvez utiliser octets pour 10 Méga-octets; ou bien pour les 50 premiers éléments en nombre d'octets.


2. Options détaillées

Options du rapport par domaine

Trier le rapport par domaine
Inclure les domaines ayant au moins

Options du rapport par organisation

Trier le rapport par organisation
Inclure les organisations ayant au moins

Options du rapport par répertoire

Trier le rapport par répertoire
Inclure les répertoires ayant au moins

Options du rapport par fichier demandé

Trier le rapport par fichier demandé
Inclure les fichiers ayant au moins
Montrer

Options du rapport par provenance

Trier le rapport par provenance
Inclure les provenances ayant au moins

3. Analyser partiellement le fichier log

Seulement certaines dates
Vous pouvez n'analyser que les requêtes faites à certaines dates.
Entrez les dates de début et de fin ci-dessous sous la forme aammjj;
par exemple, 980301 pour le 1er Mars 1998, ou seulement l'une des deux dates
pour n'avoir qu'une date de début ou une date de fin.
De Jusqu'à

Seulement certains fichiers
Ne traiter que les fichiers suivants (entrez une liste de fichiers, séparés par des virgules; les noms peuvent contenir le caractère joker '*')

Ignorer les fichiers suivants


4. Disposition

Nom de votre organisation (pour le titre de la page)

Home page de votre organisation (laisser en blanc si aucune)
URL:


analog-ce-6.0.17/lang/gr.lng000066400000000000000000000346521406366436600155160ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## ÌåôÜöñáóç üñùí áðü ÄçìÞôñç ÎåíÜêç, Éïýíéïò 1998 êáé Ïêôþâñçò 1999. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-7 ## Abbreviations for the day and month names. Êõñ Äåõ Ôñé Ôåô Ðåì Ðáñ Óáâ Éáí Öåâ Ìáñ Áðñ Ìáé Éïí Éïë Áõã Óåð Ïêô Íïå Äåê ## Next some standard common words. ## Abbreviation for "week beginning" åâä. áñ÷. ++year++ ## Quarter of a year ++quarter++ ìÞíáò çìÝñá çìÝñåò ùñ ëåðôü ëåðôÜ äåõôåñüëåðôï äåõôåñüëåðôá øçöéïëÝîç øçöéïëÝîåéò ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ áßôçóç áéôÞóåéò çìåñïìçíßá ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 çìåñïìçíßá þñá ++time++ ðñþôç çìåñïìçíßá ðñþôç þñá ðñïçãïýìåíç çìåñïìçíßá ðñïçãïýìåíç þñá áñ÷åßï áñ÷åßá îåíéóôÞò îåíéóôÝò åéêïíéêüò îåíéóôÞò åéêïíéêïß îåíéóôÝò öÜêåëïò öÜêåëïé ðåñéï÷Þ ðåñéï÷Ýò ïñãáíéóìüò ïñãáíéóìïß åðÝêôáóç åðåêôÜóåéò URL URLs öõëëïìåôñçôÞò öõëëïìåôñçôÝò ëåéôïõñãéêü ëåéôïõñãéêÜ ## (= operating system, operating systems) ìÝãåèïò üñïò áíáæÞôçóçò üñïé áíáæÞôçóçò ôüðïò ôüðïé ÷ñÞóôçò ÷ñÞóôåò êùäéêüò êáôÜóôáóçò êùäéêïß êáôÜóôáóçò ÓôáôéóôéêÜ óôïé÷åßá äéáêïìéóôÞ Web ôïõ ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports ÃåíéêÞ Óýíïøç ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Ìçíéáßá ÁíáöïñÜ ÌÞíáò ìå ôçí õøçëüôåñç äñáóôçñéüôçôá: Åâäïìáäéáßá ÁíáöïñÜ ÅâäïìÜäá ìå ôçí õøçëüôåñç äñáóôçñéüôçôá: ÅâäïìÜäá ðïõ áñ÷ßæåé áðü ÊáèçìåñéíÞ Óýíïøç ÊáèçìåñéíÞ ÁíáöïñÜ ÇìÝñá ìå ôçí õøçëüôåñç äñáóôçñéüôçôá: Ùñéáßá ÁíáöïñÜ Ùñéáßá Óýíïøç ++Hour of the Week Summary++ ¿ñá ìå ôçí õøçëüôåñç äñáóôçñéüôçôá: ÁíáöïñÜ áíÜ ôÝôáñôï ++Quarter-Hour Summary++ ÔÝôáñôï ìå ôçí õøçëüôåñç äñáóôçñéüôçôá: ÁíáöïñÜ áíÜ ðåíôÜëåðôï ++Five-Minute Summary++ ÐåíôÜëåðôï ìå ôçí õøçëüôåñç äñáóôçñéüôçôá: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ÁíáöïñÜ Îåíéóôþí îåíéóôÞ îåíéóôþí m ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ ÁíáöïñÜ ÖáêÝëùí öáêÝëïõ öáêÝëùí m ÁíáöïñÜ Åéäþí Áñ÷åßïõ åðÝêôáóçò åðåêôÜóåùí f ÁíáöïñÜ ÁéôÞóåùí áñ÷åßïõ áñ÷åßùí n ÁíáöïñÜ ÁíáäñïìïëïãÞóåùí áñ÷åßïõ áñ÷åßùí n ÁíáöïñÜ Áðïôõ÷éþí áñ÷åßïõ áñ÷åßùí n ÁíáöïñÜ Ðáñáðïìðþí URL ðáñáðïìðÞò URL ðáñáðïìðÞò n ÁíáöïñÜ Ôïðïèåóéþí ðïõ ÐáñÝðåìøáí ôïðïèåóßáò ðïõ ðåñÝðåìøå ôïðïèåóéþí ðïõ ðáñÝðåìøáí f ÁíáöïñÜ ÁíáäñïìïëïãçìÝíïõ ÐáñáðÝìðôç URL ðáñáðïìðÞò URL ðáñáðïìðÞò n ÁíáöïñÜ Áðïôõ÷çìÝíùí Ðáñáðïìðþí URL ðáñáðïìðÞò URL ðáñáðïìðÞò n ÁíáöïñÜ ÅñùôçìÜôùí åñþôçìáôïò åñùôçìÜôùí n ÁíáöïñÜ ËÝîåùí ÁíáæÞôçóçò ëÝîçò åñùôÞìáôïò ëÝîåùí åñùôÞìáôïò f ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ ÁíáöïñÜ Åéêïíéêþí Îåíéóôþí åéêïíéêïý îåíéóôÞ åéêïíéêþí îåíéóôþí m ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ ÁíáöïñÜ ×ñçóôþí ÷ñÞóôç ÷ñçóôþí m ++User Redirection Report++ ++user++ ++users++ ++n++ ÁíáöïñÜ ÓöáëìÜôùí ×ñÞóôç ÷ñÞóôç ÷ñçóôþí m Óýíïøç Öõëëïìåôñçôþí öõëëïìåôñçôÞ öõëëïìåôñçôþí m ÁíáöïñÜ Öõëëïìåôñçôþí öõëëïìåôñçôÞ öõëëïìåôñçôþí m ÁíáöïñÜ Ëåéôïõñãéêþí ÓõóôçìÜôùí ëåéôïõñãéêïý óõóôÞìáôïò ëåéôïõñãéêþí óõóôçìÜôùí n ÁíáöïñÜ Ðåñéï÷þí ðåñéï÷Þò ðåñéï÷þí f ÁíáöïñÜ Ïñãáíéóìþí ïñãáíéóìïý ïñãáíéóìþí m ÁíáöïñÜ Êùäéêþí ÊáôÜóôáóçò êùäéêïý êáôÜóôáóçò êùäéêþí êáôÜóôáóçò m ÁíáöïñÜ ×ñüíïõ Åðåîåñãáóßáò ÁíáöïñÜ ìåãÝèïõò áñ÷åßùí ## Used at the bottom of the report ÁõôÞ ç áíÜëõóç ðáñÞ÷èç áðü ôï ×ñüíïò åêôÝëåóçò Ëéãüôåñï áðü 1 ## Used in the time reports ÊÜèå ìïíÜäá áíôéóôïé÷åß óå Þ ìÝñïò áßôçóç ãéá éóôéïóåëßäá áéôÞóåéò ãéá éóôéïóåëßäåò ## Used at the bottom of each non-time report: need m, f & n genders äåí öáßíïíôáé áíáëõôéêÜ äåí öáßíïíôáé áíáëõôéêÜ äåí öáßíïíôáé áíáëõôéêÜ ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Ôï ðñüãñáììá îåêßíçóå Áíáëýèçêáí áéôÞóåéò áðü Ýùò ## Used in the General Summary Åðéôõ÷çìÝíåò áéôÞóåéò ÌÝóïò üñïò åðéôõ÷çìÝíùí áéôÞóåùí áíÜ çìÝñá Åðéôõ÷çìÝíåò áéôÞóåéò ãéá éóôéïóåëßäåò ÌÝóïò üñïò åðéôõ÷çìÝíùí áéôÞóåùí ãéá éóôéïóåëßäåò áíÜ çìÝñá ÃñáììÝò áñ÷åßïõ Logfile ÷ùñßò êùäéêü êáôÜóôáóçò Áðïôõ÷çìÝíåò áéôÞóåéò ÁíáäñïìïëïãçìÝíåò áéôÞóåéò ÁéôÞóåéò ìå ðëçñïöïñéáêü êùäéêü êáôÜóôáóçò Îå÷ùñéóôÜ áñ÷åßá ðïõ áíáæçôÞèçêáí Îå÷ùñéóôïß îåíéóôÝò ðïõ åîõðçñåôÞèçêáí ÊáôåóôñáììÝíåò ãñáììÝò áñ÷åßïõ logfile Ìç ÷ñÞóéìåò êáôá÷ùñÞóåéò áñ÷åßïõ logfile Óýíïëï äåäïìÝíùí ðïõ ìåôáöÝñèçêáí ÌÝóïò üñïò äåäïìÝíùí ðïõ ìåôáöÝñèçêáí áíÜ çìÝñá Ïé áñéèìïß óå ðáñÝíèåóç áíáöÝñïíôáé óå 7 çìÝñåò Ýùò ôåëåõôáßåò 7 çìÝñåò ÐÞãáéíå ÊïñõöÞ ## Some special phrases for particular reports. [áñéèìçôéêÝò äéåõèýíóåéò ÷ùñßò áíôéóôïé÷ßá] [äåí äüèçêå ðåñéï÷Þ] [Üãíùóôç ðåñéï÷Þ] [áñ÷éêüò (root) öÜêåëïò] [÷ùñßò öÜêåëï] [÷ùñßò åðÝêôáóç] [öÜêåëïé] ¶ãíùóôï Windows ¶ëëï Unix ++Robots++ Ëåéôïõñãéêü Üãíùóôï ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #áéô. ++7-day reqs++ %áéô. ++%7-day reqs++ óåë. ++7-day pages++ %óåë. ++%7-day pages++ ëÝîåéò ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %ëÝîåùí ++%7-day bytes++ áñ. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Åêôýðùóç ôùí ðñþôùí %s Åêôýðùóç ôùí ðñþôùí %s Åêôýðùóç ôùí ðñþôùí %s Åêôýðùóç ôùí ðñþôùí %d %s Åêôýðùóç ôùí ðñþôùí %d %s Åêôýðùóç ôùí ðñþôùí %d %s Eêôýðùóç %s Eêôýðùóç %s Eêôýðùóç %s ## "by" in the phrase "listing the top 3 files BY number of requests" êáôÜ ## All requests WITH AT LEAST 10 requests ìå ôïõëÜ÷éóôïí ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ áíáäñïìïëïãçìÝíç áßôçóç áíáäñïìïëïãçìÝíåò áéôÞóåéò ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ áðïôõ÷çìÝíç áßôçóç áðïôõ÷çìÝíåò áéôÞóåéò ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % ôïõ öïñôßïõ ++% of the traffic in the last 7 days++ % ôïõ ìÝãéóôïõ ìåãÝèïõò öïñôßïõ ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ øçöéïëÝîåéò êßíçóçò ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ áéôÞèçêáí áðü ìå ìßá áíáäñïìïëïãçìÝíç áßôçóç áðü ìå ìßá áðïôõ÷çìÝíç áßôçóç áðü ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) ôáîéíïìçìÝíïé êáôÜ ôáîéíïìçìÝíåò êáôÜ ôáîéíïìçìÝíá êáôÜ ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting ôï ìÝãåèïò ôïõ öïñôßïõ ++the amount of traffic in the last 7 days++ % ôùí áéôÞóåùí ++% of the requests in the last 7 days++ % ôïõ ìÝãéóôïõ áñéèìïý áéôÞóåùí ++% of the maximum number of requests in the last 7 days++ ôïí áñéèìü áéôÞóåùí ++the number of requests in the last 7 days++ % ôùí áéôÞóåùí ãéá éóôéïóåëßäåò ++% of the requests for pages in the last 7 days++ % ôïõ ìÝãéóôïõ áñéèìïý áéôÞóåùí ãéá éóôéïóåëßäåò ++% of the maximum number of requests for pages in the last 7 days++ ôïí áñéèìü áéôÞóåùí ãéá éóôéïóåëßäåò ++the number of requests for pages in the last 7 days++ % ôùí áíáäñïìïëïãçìÝíùí áéôÞóåùí ++% of the redirected requests in the last 7 days++ % ôïõ ìÝãéóôïõ áñéèìïý áíáäñïìïëïãçìÝíùí áéôÞóåùí ++% of the maximum number of redirected requests in the last 7 days++ ôïí áñéèìü áíáäñïìïëïãçìÝíùí áéôÞóåùí ++the number of redirected requests in the last 7 days++ % ôùí áðïôõ÷çìÝíùí áéôÞóåùí ++% of the failed requests in the last 7 days++ % ôïõ ìÝãéóôïõ áñéèìïý áðïôõ÷çìÝíùí áéôÞóåùí ++% of the maximum number of failed requests in the last 7 days++ ôïí áñéèìü áðïôõ÷çìÝíùí áéôÞóåùí ++the number of failed requests in the last 7 days++ ï ÷ñüíïò ôçò ôåëåõôáßáò áßôçóçò ï ÷ñüíïò ôçò ôåëåõôáßáò áíáäñïìïëïãçìÝíçò áßôçóçò ï ÷ñüíïò ôçò ôåëåõôáßáò áðïôõ÷çìÝíçò áßôçóçò ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n ôáîéíïìçìÝíïé áëöáâçôéêÜ ôáîéíïìçìÝíåò áëöáâçôéêÜ ôáîéíïìçìÝíá áëöáâçôéêÜ ôáîéíïìçìÝíïé áñéèìçôéêÜ ôáîéíïìçìÝíåò áñéèìçôéêÜ ôáîéíïìçìÝíá áñéèìçôéêÜ áôáîéíüìçôïé áôáîéíüìçôåò áôáîéíüìçôá ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary ++%w++ ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 ÓõíÝ÷åéá áßôçóçò 101 ÌåôáãùãÞ ðñùôïêüëùí 1xx [ÄéÜöïñá ðëçñïöïñéáêÜ] 200 ÏÊ 201 ÄçìéïõñãÞèçêå 202 Áðïäåêôü ãéá ìåëëïíôéêÞ åðåîåñãáóßá 203 Ìç åîïõóéïäïôçìÝíç ðëçñïöïñßá 204 ÏÊ, áëëÜ ôßðïôá ðñïò áðïóôïëÞ 205 ÅðáíÜèåóç (Reset) åããñÜöïõ 206 Ìåñéêü ðåñéå÷üìåíï 2xx [ÄéÜöïñåò åðéôõ÷ßåò] 300 ÐïëëáðëÜ Ýããñáöá äéáèÝóéìá 301 Ôï Ýããñáöï ìåôáêéíÞèçêå ìüíéìá 302 Ôï Ýããñáöï âñÝèçêå áëëïý 303 Äåßôå Üëëï Ýããñáöï 304 Äåí Ý÷åé áëëÜîåé áðï ôçí ðñïçãïýìåíç áíÜêëçóç 305 ×ñçóéìïðïéÞóôå åíäéÜìåóï äéáêïìéóôÞ 306 ÌåôáãùãÞ åíäéÜìåóïõ äéáêïìéóôÞ 307 Ôï Ýããñáöï ìåôáêéíÞèçêå ðñïóùñéíÜ 3xx [ÄéÜöïñåò áíáäñïìïëïãÞóåéò] 400 ËÜèïò áßôçóç 401 Áðáñáßôçôç ç åîáêñßâùóç ôáõôüôçôáò 402 Áðáñáßôçôç ç ðëçñùìÞ 403 ÁðáãïñåõìÝíç ç ðñüóâáóç 404 Ôï Ýããñáöï äåí âñÝèçêå 405 Ìç åðéôñåðôÞ ìÝèïäïò 406 Ôï Ýããñáöï äåí åßíáé áðïäåêôü áðï ôïí ðåëÜôç 407 ×ñåéÜæåôáé åîáêñßâùóç ôáõôüôçôáò åíäéÜìåóïõ äéáêïìéóôÞ 408 ËÞîç ÷ñïíéêïý ïñßïõ áßôçóçò 409 Ç Üéôçóç óõãêñïýåôáé ìå ôçí êáôÜóôáóç ôïõ ðüñïõ 410 Ôï Ýããñáöï Ý÷åé öýãåé ìüíéìá 411 Áðáñáßôçôï ôï ìÞêïò 412 Ç ðñïûðüèåóç áðÝôõ÷å 413 Ç áßôçóç ðïëý ìåãÜëç 414 Ôï æçôïýìåíï Üíïìá áñ÷åßïõ ðïëý ìåãÜëï 415 Ôï åßäïò ìÝóïõ äåí õðïóôçñßæåôáé 416 Ôï áéôïýìåíï åýñïò ôéìþí äåí éó÷ýåé 417 Ç ðñïóäïêßá áðÝôõ÷å 4xx [ÄéÜöïñá óöÜëìáôá ðåëÜôç/÷ñÞóôç] 500 Åóùôåñéêü óöÜëìá äéáêïìéóôÞ 501 Ôï åßäïò áßôçóçò äåí õðïóôçñßæåôáé 502 ÓöÜëìá óå ðñïçãïýìåíï (upstream) äéáêïìéóôÞ 503 Ç õðçñåóßá ðñïóùñéíÜ äåí åßíáé äéáèÝóéìç 504 ËÞîç ÷ñïíéêïý ïñßïõ ðýëçò 505 Ç Ýêäïóç HTTP äåí õðïóôçñßæåôáé 506 Ç áíáäñïìïëüãçóç áðÝôõ÷å 5xx [ÄéÜöïñá óöÜëìáôá äéáêïìéóôÞ] xxx [¶ãíùóôï] analog-ce-6.0.17/lang/gra.lng000066400000000000000000000351401406366436600156500ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Translation into Greek and transliteration into (terrible) 'Greenglish': ## Dimitris Xenakis, June 1998 and October 1999. ## For the tranliteration of greek to ASCII, I just followed the position ## of the keys on the US keyboard. Hope that makes sense. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Kyr Deu Tri Tet Pem Par Sab Ian Feb Mar Apr Mai Ion Iol Ayg Sep Okt Noe Dek ## Next some standard common words. ## Abbreviation for "week beginning" ebd. arx. ++year++ ## Quarter of a year ++quarter++ mhnas hmera hmeres vr lepto lepta deyterolepto deyterolepta chfiolejh chfiolejeis ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ aithsh aithseis hmeromhnia ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 hmeromhnia vra ++time++ prvth hmeromhnia prvth vra prohgoymenh hmeromhnia prohgoymenh vra arxeio arxeia jenisths jenistes eikonikos jenisths eikonikoi jenistes fakelos fakeloi perioxh perioxes organismos organismoi epektash epektaseis URL URLs fyllometrhths fyllometrhtes leitoyrgiko leitoyrgika ## (= operating system, operating systems) megeuos oros anazhthshs oroi anazhthshs topos topoi xrhsths xrhstes kvdikos katastashs kvdikoi katastashs Statistika stoixeia ejyphrethth Web toy ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Genikh Synoch ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Mhniaia Anafora Mhnas me thn ychloterh drasthriothta: Ebdomadiaia Anafora Ebdomada me thn ychloterh drasthriothta: Ebdomada poy arxizei apo Kauhmerinh Synoch Kauhmerinh Anafora Hmera me thn ychloterh drasthriothta: Vriaia Anafora Vriaia Synoch ++Hour of the Week Summary++ Vra me thn ychloterh drasthriothta: Anafora ana tetarto ++Quarter-Hour Summary++ Tetarto me thn ychloterh drasthriothta: Anafora ana pentalepto ++Five-Minute Summary++ Pentalepto me thn ychloterh drasthriothta: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Anafora Jenistvn jenisth jenistvn m ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Anafora Fakelvn fakeloy fakelvn m Anafora Eidvn Arxeioy epektashs epektasevn f Anafora aithsevn arxeioy arxeivn n Anafora anadromologhsevn arxeioy árxeivn n Anafora apotyxivn arxeioy árxeivn n Anafora Parapompvn URL parapomphs URL parapomphs n Anafora topouesivn poy parepemcan topouesias poy parepemce topouesivn poy parepemcan f Anafora Anadromologhmenoy Parapempth URL parapomphs URL parapomphs n Anafora Apotyxhmenvn Parapompvn URL parapomphs URL parapomphs n Anafora Ervthmatvn ervthmatos ervthmatvn n Anafora Lexevn Anazhthshs lejhs ervthmatos lejevn ervthmatos f ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Anafora Eikonikvn Jenistvn eikonikoy jenisth eikonikvn jenistvn m ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Anafora Xrhstvn xrhsth xrhstvn m ++User Redirection Report++ ++user++ ++users++ ++n++ Anafora Sfalmatvn Xrhsth xrhsth xrhstvn m Synoch Fyllometrhtvn fyllometrhth fyllometrhtvn m Anafora Fyllometrhtvn fyllometrhth fyllometrhtvn m Anafora Leitoyrgikvn Systhmatvn leitoyrgikoy systhmatos leitoyrgikvn systhmatvn n Anafora Perioxvn perioxhs perioxvn f Anafora Organismvn organismoy organismvn m Anafora Kvdikvn Katastashs kvdikoy katastashs kvdikvn katastashs m Anafora Xronoy Epejergasias Anafora megeuoys arxeivn ## Used at the bottom of the report Ayth h analysh parhxuh apo to Xronos ekteleshs Ligotero apo 1 ## Used in the time reports Kaue monada antistoixei se h meros aithsh gia istioselida aithseis gia istioselides ## Used at the bottom of each non-time report: need m, f & n genders den fainontai analytika den fainontai analytika den fainontai analytika ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report To programma jekinhse Analyuhkan aithseis apo evs ## Used in the General Summary Epityxhmenes aithseis Mesos oros epityxhmenvn aithsevn ana hmera Epityxhmenes aithseis gia istioselides Mesos oros epityxhmenvn aithsevn gia istioselides ana hmera Grammes arxeioy Logfile xvris kvdiko katastashs Apotyxhmenes aithseis Anadromologhmenes aithseis Aithseis me plhroforiako kvdiko katastashs Jexvrista arxeia poy anazhthuhkan Jexvristoi jenistes poy ejyphrethuhkan Katestrammenes grammes arxeioy logfile Mh xrhsimes kataxvrhseis arxeioy logfile Synolo dedomenvn poy metaferuhkan Mesos oros dedomenvn poy metaferuhkan ana hmera Oi ariumoi se parenuesh anaferontai se 7 hmeres evs teleytaies 7 hmeres Phgaine Koryfh ## Some special phrases for particular reports. [ariumhtikes dieuynseis xvris antistoixia] [den douhke perioxh] [agvsth perioxh] [arxikos (root) fakelos] [xvris fakelo] [xvris epektash] [fakeloi] Agnvsto Windows Allo Unix ++Robots++ Leitoyrgiko agnvsto ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #ait. ++7-day reqs++ %ait. ++%7-day reqs++ sel. ++7-day pages++ %sel. ++%7-day pages++ lejeis ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %lejevn ++%7-day bytes++ ar. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Ektypvsh tvn prvtvn %s Ektypvsh tvn prvtvn %s Ektypvsh tvn prvtvn %s Ektypvsh tvn prvtvn %d %s Ektypvsh tvn prvtvn %d %s Ektypvsh tvn prvtvn %d %s Ektypvsh %s Ektypvsh %s Ektypvsh %s ## "by" in the phrase "listing the top 3 files BY number of requests" kata ## All requests WITH AT LEAST 10 requests me toylaxiston ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ anadromologhmenh aithsh anadromologhmenes aithseis ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ apotyxhmenh aithsh apotyxhmenes aithseis ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % toy fortioy ++% of the traffic in the last 7 days++ % toy megistoy megeuoys fortioy ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ chfiolejeis kinhshs ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ aithuhkan apo me mia andromologhmenh aithsh apo me mia apotyxhmenh aithsh apo ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) tajinomhmemoi kata tajinomhmenes kata tajinomhmena kata ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting to megeuos toy fortioy ++the amount of traffic in the last 7 days++ % tvn aithsevn ++% of the requests in the last 7 days++ % toy megistoy ariumoy aithsevn ++% of the maximum number of requests in the last 7 days++ ton ariumo aithsevn ++the number of requests in the last 7 days++ % tvn aithsevn gia istioselides ++% of the requests for pages in the last 7 days++ % toy megistoy ariumoy aithsevn gia istioselides ++% of the maximum number of requests for pages in the last 7 days++ ton ariumo aithsevn gia istioselides ++the number of requests for pages in the last 7 days++ % tvn anadromologhmenvn aithsevn ++% of the redirected requests in the last 7 days++ % toy megistoy ariumoy anadromologhmenvn aithsevn ++% of the maximum number of redirected requests in the last 7 days++ ton ariumo anadromologhmenvn aithsevn ++the number of redirected requests in the last 7 days++ % tvn apotyxhmenvn aithsevn ++% of the failed requests in the last 7 days++ % toy megistoy ariumoy apotyxhmenvn aithsevn ++% of the maximum number of failed requests in the last 7 days++ ton ariumo apotyxhmenvn aithsevn ++the number of failed requests in the last 7 days++ o xronos ths teleytaias aithshs o xronos ths teleytaias anadromologhmenhs aithshs o xronos ths teleytaias apotyxhmenhs aithshs ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n tajinomhmenoi alfabhtika tajinomhmenes alfabhtika tajinomhmena alfabhtika tajinomhmenoi ariumhtika tajinomhmenes ariumhtika tajinomhmena ariumhtika atajinomhtoi atajinomhtes atajinomhta ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary ++%w++ ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Synexeia aithshs 101 Metagvgh prvtokolon 1xx [Diafora plhroforiaka] 200 OK 201 Dhmioyrghuhke 202 Apodekto gia mellontikh epejergasia 203 Mh ejoysiodothmenh plhroforia 204 OK, alla tipota pros apostolh 205 Epanauesh (reset) eggrafoy 206 Meriko periexomeno 2xx [Diafores epityxies] 300 Pollapla eggrafa diauesima 301 To eggrafo metakinhuhke monima 302 To eggrafo breuhke alloy 303 Deite allo eggrafo 304 Den exei allaxei apo thn prohgoymenh anaklhsh 305 Xrhsimopoihste endiameso diakomisth 306 Metagvgh endiamsoy diakomisth 307 To eggrafo metakinhuhke prosvrina 3xx [Diafores anadromologhseis] 400 Lauos aithsh 401 Aparaithth h ejakribvsh taytothtas 402 Aparaithth h plhrvmh 403 Apagoreymenh h prosbash 404 To eggrafo den breuhke 405 Mh epitrepth meuodos 406 To eggrafo den einai apodekto apo ton pelath 407 Xreiazetai ejakribvsh taytothtas endiamesoy diakomisth 408 Lhjh xronikoy orioy aithshs 409 H aithsh sygkroyetai me thn katastash toy poroy 410 To eggrafo exei fygei monima 411 Aparaithto to mhkos 412 Proypouesh apetyxe 413 H aithsh poly megalh 414 To zhtoymeno onoma arxeioy poly megalo 415 To eidos mesoy den yposthrizetai 416 To aitoymeno eyros timvn den isxyei 417 H prosdokia apetyxe 4xx [Diafora sfalmata pelath/xrhsth] 500 Esvteriko sfalma diakomisth 501 To eidos aithshs den yposthrizetai 502 Sfalma se prohgoymeno (upstream) diakomisth 503 H yphresia prosvrina den einai diauesimh 504 Lhjh xronikoy orioy pylhs 505 H ekdosh HTTP den yposthrizetai 506 H anadromologhsh apetyxe 5xx [Diafora sfalmata diakomisth] xxx [Agnvsto] analog-ce-6.0.17/lang/hr.lng000066400000000000000000000324561406366436600155170ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## This Croatian translation was made by Tomo Sombolac . ## This is a preliminary version which still contains a few English phrases: ## suggestions for improvement welcome. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. Ned Pon Uto Sri Èet Pet Sub Sij Vel Ožu Tra Svi Lip Srp Kol Ruj Lis Stu Pro ## Next some standard common words. ## Abbreviation for "week beginning" Poè.tjed. ++year++ ## Quarter of a year ++quarter++ mjes. dan dani st minuta minute sekunda sekunde byte bytes ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ zahtjev zahtjevi dat. ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dan sat ++time++ prvi dan prvi sat poslj.dan poslj.sat dat. dat. dom. dom. prividni dom. prividni dom. mapa mape domena domene organizacija organizacije extension extensions URL URLi pregl. pregl. OS OSi ## (= operating system, operating systems) vel. traženi pojam traženi pojam site site kor. kor. stanje stanje Web Server statistika za ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Opæeniti sažet. ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Mjeseèno izvj. Najzaposleniji Tjedno izvj. Najzaposl.: poè. tjedna Dnevno izvj. Dnevno izvj. Najzaposl.: Satno izvj. Satni sažetak ++Hour of the Week Summary++ Najzaposl.: 15-minutno izvj. ++Quarter-Hour Summary++ Najzaposlenije: Pet-minutno izvj. ++Five-Minute Summary++ Najzaposlenijie: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Izvješæe o domacinu domacin domacini n ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Izvješæe o direktoriju direktorij direktoriji n Izvješæe o vrsti datoteka ekstenzija ekstenzije n Izvješæe o zahtjevu datoteka datoteke n Izvješæe o preusmjeravanju datoteka datoteke n Izvješæe o neuspjehu datoteka datoteke n Izvješæe o Referreru referring URL referring URLs n Izvješæe o Referring Site referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Izvješæe o upitu za traženje upit upiti n Izvješæe o rijeèi za traženje trazena rijec trazene rijeci n ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Izvješæe o prividnom domaæinu virtual host virtual hosts n ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Izvješæe o korisniku korisnik korisnici n ++User Redirection Report++ ++user++ ++users++ ++n++ Izvješæe o neuspjehu korisnika korisnik korisnici n Sažetak o preglednicima preglednik preglednici n Izvješæe o preglednicima preglednik preglednici n Izvješæe o operacijskim sustavima operacijski sustav operacijski sustavi n Izvješæe o domenama domena domene n Izvješæe o organizacijama organizacija organizacije n Izvješæe o šifri stanja šifra stanja šifre stanja n Izvješæe o vremenu obrade Izvješæe o velièini datoteke ## Used at the bottom of the report Ovu analizu je napravio Vrijeme obvrade Manje od 1 ## Used in the time reports Svaka jedinica predstavlja or part thereof zahtjev za stranicom zahtjevi za stranicama ## Used at the bottom of each non-time report: need m, f & n genders * * nije ispisano ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Program zapoèeo u Analizirani zahtjevi od do ## Used in the General Summary Uspješnih zahtjeva Prosjeèno uspješnih zahtjeva na dan Uspješnih zahtjeva za stranicama Uspješnih zahtjeva za stranicama na dan Linije u log-datoteci bez šifre stanja Neuspjelih zahtjeva preusmjerenih zahtjeva Zahtjeva s informativnom šifrom stanja Distinct files requested Distinct hosts served Ošteæenih linija u log-datoteci Neželjene stavke u log-datotekci Podataka prebaèeno Prosjeèno podataka prebaèeno na dan Brojke u zagradama odnose se na 7 dana do posljednjih 7 dana Idi na Vrh ## Some special phrases for particular reports. [neriješene brojèane adrese] [domena nije zadana] [nepoznata domena] [korijenski direktorij] [nema direktorija] [nema ekstenzije] [direktoriji] Nepoznati Windowsi Ostali Unix ++Robots++ OS nepoznat ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) zaht ++7-day reqs++ %zaht ++%7-day reqs++ str. ++7-day pages++ %str. ++%7-day pages++ byteova ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %byteova ++%7-day bytes++ br. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ispisujem prvih %s * * Ispisujem prvih %d %s * * Ispisujem %s ## "by" in the phrase "listing the top 3 files BY number of requests" prema ## All requests WITH AT LEAST 10 requests s najmanje ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ preusmjerenih zahtjeva preusmjerenih zahtjeva ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ nauspjelih zahtjeva nauspjelih zahtjeva ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % prometa ++% of the traffic in the last 7 days++ % naveæe kolièine prometa ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ byteova prometa ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ zatraženo od s preusmjerenim zahtjevom od s neuspjelim zahtjevom od ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortirano prema ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting kolièini prometa ++the amount of traffic in the last 7 days++ % broju zahtjeva ++% of the requests in the last 7 days++ % najveèoj kolièini zahtjeva ++% of the maximum number of requests in the last 7 days++ broju zahtjeva ++the number of requests in the last 7 days++ % zahtjeva za stranicama ++% of the requests for pages in the last 7 days++ % najveæeg broja zahtjeva za stranicama ++% of the maximum number of requests for pages in the last 7 days++ broju zahtjeva za stranicama ++the number of requests for pages in the last 7 days++ % preusmjerenih zahtjeva ++% of the redirected requests in the last 7 days++ % najveæeg broja preusmjerenih zahtjeva ++% of the maximum number of redirected requests in the last 7 days++ broj preusmjerenih zahtjeva ++the number of redirected requests in the last 7 days++ % neuspjelih zahtjeva ++% of the failed requests in the last 7 days++ % najveæeg broja neuspjelih zahtjeva ++% of the maximum number of failed requests in the last 7 days++ broj neuspjelih zahtjeva ++the number of failed requests in the last 7 days++ vrijeme zadnjeg zahtjeva vrijeme zadnjeg preusmjerenog zahtjeva vrijeme zadnjeg neuspjelog zahtjeva ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n * * svrstano po abecedi * * svrstano po brojevima * * nesvrstano ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m.%Y. %H:%n ## "Program started at" and "Analysed requests from" %w %D.%m.%Y. %H:%n ## In Daily Report %D.%m.%Y. ## In Daily Summary ++%w++ ## In Hourly Report %D.%m.%Y. %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %D.%m.%Y. %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %D.%m.%Y. ## In Monthly Report %m/%Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %D.%m.%Y. ## The date & time (D) column in non-time reports %D.%m.%Y. %H:%n ## In non-time reports: "including all files with requests since [date]" %D.%m.%Y. u %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/hu.cfg000066400000000000000000000032471406366436600154750ustar00rootroot00000000000000LANGUAGE HUNGARIAN TYPEOUTPUTALIAS .html ".html [Hypertext dokumentum]" TYPEOUTPUTALIAS .htm ".htm [Hypertext dokumentum]" TYPEOUTPUTALIAS .ps ".ps [PostScript]" TYPEOUTPUTALIAS .gz ".gz [Gzip tömörített file]" TYPEOUTPUTALIAS .html.gz ".html.gz [Gzippelt HTML]" TYPEOUTPUTALIAS .ps.gz ".ps.gz [Gzippelt PostScript]" TYPEOUTPUTALIAS .xbm ".xbm [X11 bittérkép]" TYPEOUTPUTALIAS .tar.gz ".tar.gz [Tömörített archívum]" TYPEOUTPUTALIAS .jpg ".jpg [JPEG kép]" TYPEOUTPUTALIAS .jpeg ".jpeg [JPEG kép]" TYPEOUTPUTALIAS .gif ".gif [GIF kép]" TYPEOUTPUTALIAS .xbm ".xbm [X bittérkép]" TYPEOUTPUTALIAS .txt ".txt [ASCII szöveg]" TYPEOUTPUTALIAS .class ".class [Java osztály]" TYPEOUTPUTALIAS .pdf ".pdf [Adobe Portable Document Format]" TYPEOUTPUTALIAS .zip ".zip [Zip archívum]" TYPEOUTPUTALIAS .hqx ".hqx [Macintosh archívum]" TYPEOUTPUTALIAS .exe ".exe [Program]" TYPEOUTPUTALIAS .wav ".wav [WAV hang]" TYPEOUTPUTALIAS .png ".png [PNG grafika]" TYPEOUTPUTALIAS .avi ".avi [AVI film]" TYPEOUTPUTALIAS .arc ".arc [Tömörített archívum]" TYPEOUTPUTALIAS .mid ".mid [MIDI zene]" TYPEOUTPUTALIAS .doc ".doc [Microsoft Word dokumentum]" TYPEOUTPUTALIAS .xls ".xls [Microsoft Excel dokumentum]" TYPEOUTPUTALIAS .ppt ".ppt [Microsoft PowerPoint dokumentum]" TYPEOUTPUTALIAS .rtf ".rtf [Rich Text]" TYPEOUTPUTALIAS .mov ".mov [Quick Time film]" TYPEOUTPUTALIAS .mpg ".mpg [MPEG film]" TYPEOUTPUTALIAS .mpeg ".mpeg [MPEG film]" TYPEOUTPUTALIAS .mp2 ".mp2 [MP2 audiófájl]" TYPEOUTPUTALIAS .mp3 ".mp3 [MP3 audiófájl]" TYPEOUTPUTALIAS .m3u ".m3u [WinAmp lejátszási lista]" analog-ce-6.0.17/lang/hu.lng000066400000000000000000000327301406366436600155150ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Hungarian translation for version 3 done by Laszlo Nemeth ## ## Corrected & updated for versions 4 and 5 by Andras Kemeny ## ## This language file hasn't been tested thoroughly, corrections are welcome! ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. vas hét kedd sze csüt pén szo jan feb márc ápr máj jún júl aug szept okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" hét eleje év ## Quarter of a year negyedév hónap nap nap ó. perc perc másodperc másodperc byte byte ## ?bytes represents kbytes, Mbytes etc. ?byte kérelem kérelem dátum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dátum idõ idõ elsõ dátum elsõ alkalom utolsó dátum utolsó alkalom fájl fájl host host virtuális host virtuális host könyvtár könyvtár domain domain szervezet szervezet kiterjesztés kiterjesztés URL URL böngészõ böngészõ op.rsz. op.rsz. ## (= operating system, operating systems) méret keresett kulcsszó keresett kulcsszó site site felhasználó felhasználó státuszkód státuszkód Web Szerver Statisztika: ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Általános összesítés ## The time reports, plus "busiest" strings (at the bottom of each report) Éves Jelentés Legaktívabb év: Negyedéves Jelentés Legaktívabb negyedév: Havi jelentés Legforgalmasabb hónap: Heti jelentés Legforgalmasabb hét: hét eleje Napi összesítés Napi jelentés Legforgalmasabb nap: Óránkénti jelentés Óránkénti összesítés A hét órái szerinti összesítés Legforgalmasabb óra: Negyedóránkénti jelentés Negyedóránkénti összesítés Legforgalmasabb negyedóra: Ötpercenkénti jelentés Ötpercenkénti összesítés Legforgalmasabb öt perc: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host szerinti jelentés host host n Host átirányítás szerinti jelentés host host n Host hibák szerinti jelentés host host n Könyvtár szerinti jelentés könyvtar könyvtar n Fájltípus szerinti jelentés kiterjesztés kiterjesztés n Kérelem szerinti jelentés fájl fájl n Átirányítások jelentése fájl fájl n Hibás lekérések jelentése fájl fájl n Hivatkozás szerinti jelentés hivatkozó URL hivatkozó URL n Hivatkozó site-ok jelentése hivatkozó site hivatkozó site n Átirányított hivatkozások szerinti jelentés hivatkozó URL hivatkozó URL n Hibás hivatkozások jelentése hivatkozó URL hivatkozó URL n Keresett kifejezések szerinti jelentés keresett kifejezés keresett kifejezés n Keresett kulcsszavak szerinti jelentés kulcsszó kulcsszó n Belsõ keresési kérelmek szerinti jelentés kérelem kérelem n Belsõ keresési kulcsszavak szerinti jelentés kulcsszó kulcsszó n Virtuális host szerinti jelentés virtuális host virtuális host n Virtuális host átirányítások szerinti jelentés virtuális host virtuális host n Virtuális host hibák szerinti jelentés virtuális host virtuális host n Felhasználó szerinti jelentés felhasználó felhasználó n Felhasználói átirányítások szerinti jelentés felhasználó felhasználó n Felhasználó szerinti hiba jelentése felhasználó felhasználó n Böngészõk szerinti összesítés böngészõ böngészõ n Böngészõk szerinti jelentés böngészõ böngészõ n A böngészõ operációs rendszere szerinti jelentés op.rsz. op.rsz. n Domain szerinti jelentés domain domain n Szervezet szerinti jelentés szervezet szervezet n Státuszkódok szerinti jelentés státuszkód státuszkód n Feldolgozási idõ szerinti jelentés File méret szerinti jelentés ## Used at the bottom of the report Az elemzést készítette: Futási idõ Kevesebb mint 1 ## Used in the time reports Minden egység vagy egy részét jelképezi oldal kérelmet oldal kérelmeit ## Used at the bottom of each non-time report: need m, f & n genders * * nincs felsorolva ## Used on the pie charts: again need m, f & n genders * * egyéb ## Used at the top of the report Futás kezdete Kérelmek analizálva: - ## Used in the General Summary Összes sikeres kérelem Átlagos sikeres napi kérelem Összes sikeres oldal kérelem Átlagos sikeres napi oldal kérelem Naplósorok státuszkód nélkül Sikertelen kérelem Átirányított kérelem Kérelem informácios státuszkóddal Különbözõ kért fájlok Különbözõ kiszolgált host-ok Hibás sorok a naplófájlban Nemkívant naplófájl bejegyzések Átvitt adat Átlagos napi adatátvitel A zárójeles számok utalnak: 7 nap utolsó 7 nap Ugrás Oldal teteje ## Some special phrases for particular reports. [feloldatlan IP-címek] [domain nincs megadva] [ismeretlen domain] [fõkönyvtár] [nincs könyvtár] [nincs kiterjesztés] [könyvtárak] ismeretlen verziójú Windows egyéb Unix variáns keresõrobotok ismeretlen operációs rendszer ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) kér. 7napos kér. %kér 7napos kér. oldal 7napos oldalak %oldal 7napos oldalak byte ?byte 7napos byte 7napos ?byte %byte 7napos byte srsz. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Az elsõ %s listázása * * Az elsõ %d %s listázása * * %s listázása ## "by" in the phrase "listing the top 3 files BY number of requests" a következõ szerint: ## All requests WITH AT LEAST 10 requests legalább ## Different ways of doing floors kérelem az elmúlt 7 nap során kérelem az elmúlt 7 nap során kérelem egy lapra az elmúlt 7 nap során kérelem lapokra az elmúlt 7 nap során átirányított kérelem átirányított kérelem átirányított kérelem az elmúlt 7 nap során átirányított kérelem az elmúlt 7 nap során hibás kérelem hibás kérelem hibás kérelem az elmúlt 7 nap során hibás kérelem az elmúlt 7 nap során % forgalommal % forgalommal az elmúlt 7 nap során a maximális forgalom %-a a maximális forgalom %-a az elmúlt 7 nap során byte-nyi forgalom byte-nyi forgalom ?byte-nyi forgalom byte-nyi forgalom az elmúlt 7 nap során byte-nyi forgalom az elmúlt 7 nap során ?byte-nyi forgalom az elmúlt 7 nap során kérelmezve átirányított kérelemmel hibás kérelemmel az elsõ kéréssel ez idõ óta: az elsõ átirányított kéréssel ez idõ óta: az elsõ hibás kéréssel ez idõ óta: ## Now "sorted by": again, in m, f & n (only needed in plural though) * * rendezve: ## Used at the top of each report E jelentés adatainak forrása: ## Used in pie charts A körcikkek felbontásának alapja: ## different ways of sorting forgalom a forgalom mértéke az elmúlt 7 nap során kérelmek %-a a kérelmek %-a az elmúlt 7 nap során maximális kérelemszám %-a a maximális kérelemszám %-a az elmúlt 7 nap során kérelmek száma a kérelmek száma az elmúlt 7 nap során oldalkérelmek %-a az oldalkérelmek %-a az elmúlt 7 nap során maximális oldalkérelem-szám %-a a maximális oldalkérelem-szám %-a az elmúlt 7 nap során oldalkérelem-szám az oldalkérelmek száma az elmúlt 7 nap során átirányított kérelmek %-a az átirányított kérelmek %-a az elmúlt 7 nap során átirányított kérelmek maximális számának %-a az átirányított kérelmek maximális számának %-a az elmúlt 7 nap során átirányított kérelmek száma az átirányított kérelmek száma az elmúlt 7 nap során hibás kérelmek %-a a hibás kérelmek %-a az elmúlt 7 nap során hibás kérelmek maximalis számának %-a a hibás kérelmek maximalis számának %-a az elmúlt 7 nap során hibás kérelmek száma a hibás kérelmek száma az elmúlt 7 nap során az utolsó kérelem ideje az utolsó átirányított kérelem ideje az utolsó hibás kérelem ideje az elsõ kérelem ideje az elsõ átirányított kérelem ideje az elsõ hibás kérelem ideje ## 3 other ways of sorting in m, f, & n * * betûrend szerint rendezve * * számsorrend szerint rendezve * * rendezetlen ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. de. du. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y. %m. %D. %H:%n ## "Program started at" and "Analysed requests from" %w, %Y. %m. %D. %H:%n ## In Daily Report %y.%m.%d ## In Daily Summary %w ## In Hourly Report %y.%m.%d %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %y.%m.%d %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %y.%m.%d ## In Monthly Report %Y. %m. ## In Quarterly Report %Y %m%x%l ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %y.%m.%d ## The date & time (D) column in non-time reports %y.%m.%d %H:%n ## In non-time reports: "including all files with requests since [date]" %y.%m.%d %H:%n óta ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Folytassa a kérelmet 101 Protokollváltás 1xx [egyéb informatív jellegû] 200 Rendben (OK) 201 Létrehozva 202 Továbbfeldolgozásra felvéve 203 Nemhivatalos információ 204 Rendben, de nincs mit küldeni 205 Dokumentum alaphelyzetbe állítva 206 Részleges tartalom 2xx [egyéb sikeres jellegû] 300 Több dokumentum is lekérhetõ 301 A dokumentum végérvényesen más helyre került 302 A dokumentum máshol található 303 Lásd másik dokumentum 304 Utolsó letöltés óta nem változott 305 Használjon proxy-t 306 Váltson proxy-t 307 A dokumentum átmenetileg más helyre került 3xx [egyéb átirányítás jellegû] 400 Hibás kérelem 401 Azonosítás szükséges 402 Csak fizetés ellenében 403 Hozzáférés megtiltva 404 A dokumentum nem található 405 Nem engedélyezett módszer 406 A dokumentumot a kliens nem tudja fogadni 407 Proxy azonosítás szükséges 408 Megadott idõhatáron túli kérelem 409 A kérelem ütközik az erõforrás állapotával 410 A dokumentum végérvényesen eltûnt 411 Kötelezõ hosszmegadás 412 Teljesíthetetlen elõfeltétel 413 Túl hosszú kérelem 414 A kérelmezett fájlnév túl hosszú 415 Nem támogatott médium 416 Érvénytelen kérelmezési tartomány 417 Hibás elvárás 4xx [egyéb kliens/szerver hiba] 500 Szerveren belüli hiba 501 Nem támogatott kérelemtípus 502 Hiba az upstream szerverben 503 A szolgáltatás átmenetileg szünetel 504 Átjáró idõtúllépés 505 Nem támogatott HTTP verzió 506 Hibás átirányítás 5xx [egyéb szerveroldali hiba] xxx [ismeretlen státuszkód] analog-ce-6.0.17/lang/hudom.tab000066400000000000000000000117041406366436600162010ustar00rootroot00000000000000ad 2 Andorra ae 3 Egyesült Arab Emirátus af 1 Afganisztán ag 2 Antigua és Barbados ai 1 Anguilla al 1 Albánia am 2 Örményország an 1 Holland Antillák ao 1 Angola aq 1 Antarktisz ar 3 Argentína arpa 1 Arpanet as 1 Amerikai Szamoa at 3 Ausztria au 3 Ausztrália aw 1 Aruba az 1 Azerbajdzsán ba 3 Bosznia-Hercegovina bb 2 Barbados bd 1 Banglades be 3 Belgium bf 1 Burkina Faso bg 2 Bulgária bh 1 Bahrein bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolívia br 3 Brazília bs 1 Bahamák bt 1 Bhután bv 1 Bouvet-sziget bw 1 Botswana by 1 Belorusszia bz 1 Belize ca 3 Kanada cc 1 Cocos (Keeling) Szigetek cd 1 Kongó Demokratikus Köztársaság cf 1 Középafrikai Köztársaság cg 1 Kongó ch 2 Svájc ci 1 Elefántcsontpart ck 1 Cook-szigetek cl 2 Chile cm 1 Kamerun cn 3 Kína co 3 Kolumbia com 2 Kereskedelmi domain cr 3 Costa Rica cu 2 Kuba cv 1 Cape Verde cx 2 Karácsony-sziget cy 3 Ciprus cz 2 Csehország de 2 Németország dj 1 Djibouti dk 2 Dánia dm 2 Dominika do 3 Dominikai Köztársaság dz 1 Algéria ec 3 Ecuador edu 2 USA oktatási domain ee 2 Észtország eg 3 Egyiptom eh 1 Nyugat-Szahara er 1 Eritrea es 2 Spanyolország et 1 Etiópia fi 2 Finnország fj 3 Fidzsi fk 1 Falkland-szigetek fm 1 Mikronézia fo 1 Faroe-szigetek fr 2 Franciaország fx 1 Franciaország (európai területek) ga 1 Gabon gb 1 Egyesült Királyság gd 1 Grenada ge 1 Georgia gf 1 Francia Guyana gg 1 Guernsey gh 3 Ghána gi 1 Gibraltár gl 1 Grönland gm 1 Gambia gn 1 Guinea gov 2 USA kormányzati domain gp 1 Guadeloupe (Franciaország) gq 1 Egyenlítõi Guinea gr 2 Görögország gs 1 D.-Georgia \& D-Szendvics-szigetek gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heard és McDonald szigetek hn 2 Honduras hr 2 Horvátország ht 1 Haiti hu 2 Magyarország id 3 Indonézia ie 2 Írország il 3 Izrael im 1 Man-sziget in 3 India int 1 Nemzetközi io 1 Brit Indiai Óceániai Terület iq 1 Irak ir 1 Irán is 2 Izland it 2 Olaszország je 1 Jersey jm 3 Jamaica jo 3 Jordánia jp 3 Japán ke 3 Kenya kg 1 Kirgizisztán kh 1 Kambodzsa ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts \& Nevis kp 1 Észak-Korea kr 3 Dél-Korea kw 3 Kuvait ky 1 Kajmán-szigetek kz 1 Kazahsztán la 1 Laosz lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Srí Lanka lr 1 Libéria ls 1 Lesotho lt 2 Litvánia lu 2 Luxemburg lv 2 Lettország ly 1 Líbia ma 1 Marokkó mc 2 Monaco md 1 Moldávia mg 1 Madagaszkár mh 1 Marshall-szigetek mil 2 USA Katonai domain mk 3 Macedónia ml 1 Mali mm 1 Myanmar mn 1 Mongólia mo 1 Makaó mp 1 Észak-Mariana Szigetek mq 1 Martinique (Franciaország) mr 1 Mauritánia ms 1 Montserrat mt 3 Málta mu 1 Mauritius mv 1 Maldív-szigetek mw 1 Malawi mx 3 Mexikó my 3 Malaysia (Malájföld) mz 1 Mozambique na 1 Namíbia nc 1 Új-Kaledónia (Franciaország) ne 1 Nigéria net 2 Hálózat nf 1 Norfolk-szigetek ng 1 Nigéria ni 3 Nicaragua nl 2 Hollandia no 2 Norvégia np 1 Nepál nr 1 Nauru nu 2 Niue nz 3 Új-Zéland om 1 Omán org 2 Nonprofit szervezet pa 3 Panama pe 3 Peru pf 1 Polinézia (Franciaország) pg 3 Pápua Új-Guinea ph 3 Philippinek pk 3 Pakisztán pl 3 Lengyelország pm 1 Saint Pierre és Miquelon pn 1 Pitcairn-sziget pr 1 Puerto Rico pt 2 Portugália pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion (Franciaország) ro 2 Románia ru 2 Oroszország rw 1 Ruanda sa 3 Szaud-Arábia sb 1 Salamon-szigetek sc 1 Seychelles sd 1 Szudán se 2 Svédország sg 3 Szingapúr sh 1 Szent Heléna si 2 Szlovénia sj 1 Svalbard és Jan Mayen Szigetek sk 2 Szlovákia sl 1 Sierra Leone sm 1 San Marino sn 1 Szenegál so 1 Szomália sr 1 Suriname st 1 Saint Tome és Principe su 2 volt Szovjetúnió sv 3 El Salvador sy 1 Szíria sz 1 Szváziföld tc 1 Turks és Caicos Szigetek td 1 Csád tf 1 Francia Déli Területek tg 1 Togo th 3 Thaiföld tj 1 Tadzsikisztán tk 1 Tokelau tl 1 Kelet-Timor tm 1 Türkmenisztán tn 1 Tunézia to 1 Tonga tp 1 Kelet-Timor tr 3 Törökország tt 3 Trinidad és Tobago tv 1 Tuvalu tw 3 Tajvan tz 1 Tanzánia ua 3 Ukrajna ug 3 Uganda uk 3 Anglia um 1 USA kisebb kintfekvõ szigetek us 4 Egyesült Államok uy 3 Uruguay uz 1 Üzbegisztán va 1 Vatikán vc 1 Saint Vincent \& Grenadines ve 3 Venezuela vg 1 Virgin-szigetek (Anglia) vi 1 Virgin-szigetek (USA) vn 1 Vietnám vu 1 Vanuatu wf 1 Wallis és Futuna Szigetek ws 1 Szamoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoszlávia za 3 Dél-Afrika zm 1 Zambia zr 1 Kongói Demokratikus Köztársaság zw 3 Zimbabwe analog-ce-6.0.17/lang/id.lng000066400000000000000000000317241406366436600154770ustar00rootroot00000000000000## Translated to Indonesian by Haris Hasanudin 2002-11-07 ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Minggu Senin Selasa Rabu Kamis Jumat Sabtu Jan Feb Mar Apr Mei Jun Jul Aug Sep Okt Nov Des ## Next some standard common words. ## Abbreviation for "week beginning" awal minggu tahun ## Quarter of a year kwartal bulan hari hari jam menit minutes detik detik byte bytes ## ?bytes represents kbytes, Mbytes etc. ?byte request requests tanggal ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 tanggal waktu waktu tanggal awal waktu awal tanggal akhir waktu akhir file files host hosts virtual host virtual hosts direktori direktori-direktori domain domains organisasi organisasi-organisasi ekstensi ekstensi-ekstensi URL URLs browser browsers OS OS's ## (= operating system, operating systems) ukuran search term search terms site sites user users status code status codes Statistik Web Server untuk ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Rangkuman Umum ## The time reports, plus "busiest" strings (at the bottom of each report) Laporan Tahunan Tahun tersibuk: Laporan Kwartal Kwartal tersibuk: Laporan Bulanan Bulan Tersibuk: Laporan Mingguan Minggu Tersibuk: minggu awal Rangkuman Harian Laporan Harian Hari Tersibuk: Laporan per Jam Rangkuman per Jam Rangkuman per Jam dalam Seminggu Jam Tersibuk: Laporan per Seperempat Jam Rangkuman per Seperempat Jam Tersibuk per Seperempat Jam: Laporan per Lima Menit Rangkuman per Lima Menit Tersibuk per Lima Menit: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Laporan Host host hosts n Laporan Host Redirection host hosts n Laporan Host Failure host hosts n Laporan Direktori directory directories n Laporan File Type extension extensions n Laporan Request file files n Laporan Redirection file files n Laporan Failure file files n Laporan Referrer referring URL referring URLs n Laporan Referring Site referring site referring sites n Laporan Redirected Referrer referring URL referring URLs n Laporan Failed Referrer referring URL referring URLs n Laporan Search Query query queries n Laporan Search Word query word query words n Laporan Internal Search Query query queries n Laporan Internal Search Word query word query words n Laporan Virtual Host virtual host virtual hosts n Laporan Virtual Host Redirection virtual host virtual hosts n Laporan Virtual Host Failure virtual host virtual hosts n Laporan User user users n Laporan User Redirection user users n Laporan User Failure user users n Rangkuman Browser browser browsers n Laporan Browser browser browsers n Laporan Operating System operating system operating systems n Laporan Domain domain domains n Laporan Organisasi organisasi organizations n Laporan Status Code status code status codes n Laporan Waktu Processing Laporan Ukuran File ## Used at the bottom of the report Analisis ini dibuat dengan Waktu Running Kurang dari 1 ## Used in the time reports Dalam unit menunjukkan atau bagian darinya request untuk satu page requests untuk beberapa pages ## Used at the bottom of each non-time report: need m, f & n genders * * tidak ada di list ## Used on the pie charts: again need m, f & n genders * * Lainnya ## Used at the top of the report Program mulai pada Analisa dilakukan dari sampai ## Used in the General Summary Requests yang sukses Rata-rata requests yang sukses per hari Requests yang sukses untuk pages Rata-rata requests yang sukses untuk pages per hari Logfile lines tanpa status code Requests gagal Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data yang ditransfer Rata-rata data yang ditransfer per hari Gambar dalam parentheses menunjukkan 7-hari period ending 7 hari terakhir Go To Top ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS tidak diketahui ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" dengan menggunakan ## All requests WITH AT LEAST 10 requests dengan sedikitnya ## Different ways of doing floors request dalam 7 hari terakhir requests dalam 7 hari terakhir request for a page dalam 7 hari terakhir requests for pages dalam 7 hari terakhir redirected request redirected requests redirected request dalam 7 hari terakhir redirected requests dalam 7 hari terakhir failed request failed requests failed request dalam 7 hari terakhir failed requests dalam 7 hari terakhir % dari traffic % dari traffic dalam 7 hari terakhir % dari maximum amount of traffic % dari maximum amount of traffic dalam 7 hari terakhir byte dari traffic bytes dari traffic ## ?bytes represents kbytes, Mbytes etc. ?bytes dari traffic byte dari traffic dalam 7 hari terakhir bytes dari traffic dalam 7 hari terakhir ?bytes dari traffic dalam 7 hari terakhir with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * diurut berdasarkan ## Used at the top of each report Laporan ini mengandung data dari ## Used in pie charts The wedges diplot dengan ## different ways of sorting jumlah traffic jumlah traffic dalam 7 hari terakhir % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days jumlah requests jumlah requests dalam 7 hari terakhir % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days jumlah requests for pages jumlah requests for pages dalam 7 hari terakhir % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests dalam 7 hari terakhir jumlah redirected requests jumlah redirected requests dalam 7 hari terakhir % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days jumlah failed requests jumlah failed requests dalam 7 hari terakhir waktu last request waktu last redirected request waktu last failed request waktu first request waktu first redirected request waktu first failed request ## 3 other ways of sorting in m, f, & n * * diurut berdasar abjad * * diurut berdasar nomor * * tidak diurut ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. AM PM ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y at %j:%n %a ## "Program started at" and "Analysed requests from" %w, %m %D %Y at %j:%n %a ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %j:%n %a%x%k:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n %a%x%k:%o %b ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %m/%d/%y ## The date & time (D) column in non-time reports %m/%d/%y %j:%n %a ## In non-time reports: "listing files with requests since [date]" %m/%d/%y at %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Berlanjut dengan request 101 Protokol Switching 1xx [Lain-lain : yang bersifat informasi] 200 OK 201 Tercipta 202 Diterima untuk proses selanjutnya 203 Bukan informasi yang terpercaya 204 OK, tapi tak ada yang dikirim 205 Reset dokumen 206 Bagian content 2xx [Lain-lain : successes] 300 Multiple dokumen tersedia 301 Dokumen pindah tetap 302 Dokumen ditemukan di lain tempat 303 Lihat dokumen lain 304 Tidak dirubah sejak last retrieval 305 Menggunakan proxy 306 Switch proxy 307 Dokumen pindah sementara 3xx [Lain-lain : redirections] 400 Bad request 401 Perlu keabsahan 402 Perlu pembayaran 403 Dilarang Access 404 Dokumen tidak ditemukan 405 Method tidak diizinkan 406 Dokumen tak bisa diterima client 407 Perlu Keabsahan Proxy 408 Request timeout 409 Request conflicts with state of resource 410 Dokumen hilang tetap 411 Perlu Panjang yang sesuai 412 Precondition failed 413 Request terlalu panjang 414 Requested filename too long 415 Media type tidak tersupport 416 Requested range not valid 417 Expectation failed 4xx [Lain-lain : client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 Versi HTTP tidak tersupport 506 Redirection failed 5xx [Lain-lain : server errors] xxx [Tidak dikenal] analog-ce-6.0.17/lang/ida.lng000066400000000000000000000317221406366436600156360ustar00rootroot00000000000000## Translated to Indonesian by Haris Hasanudin 2002-11-07 ## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Minggu Senin Selasa Rabu Kamis Jumat Sabtu Jan Feb Mar Apr Mei Jun Jul Aug Sep Okt Nov Des ## Next some standard common words. ## Abbreviation for "week beginning" awal minggu tahun ## Quarter of a year kwartal bulan hari hari jam menit minutes detik detik byte bytes ## ?bytes represents kbytes, Mbytes etc. ?byte request requests tanggal ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 tanggal waktu waktu tanggal awal waktu awal tanggal akhir waktu akhir file files host hosts virtual host virtual hosts direktori direktori-direktori domain domains organisasi organisasi-organisasi ekstensi ekstensi-ekstensi URL URLs browser browsers OS OS's ## (= operating system, operating systems) ukuran search term search terms site sites user users status code status codes Statistik Web Server untuk ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Rangkuman Umum ## The time reports, plus "busiest" strings (at the bottom of each report) Laporan Tahunan Tahun tersibuk: Laporan Kwartal Kwartal tersibuk: Laporan Bulanan Bulan Tersibuk: Laporan Mingguan Minggu Tersibuk: minggu awal Rangkuman Harian Laporan Harian Hari Tersibuk: Laporan per Jam Rangkuman per Jam Rangkuman per Jam dalam Seminggu Jam Tersibuk: Laporan per Seperempat Jam Rangkuman per Seperempat Jam Tersibuk per Seperempat Jam: Laporan per Lima Menit Rangkuman per Lima Menit Tersibuk per Lima Menit: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Laporan Host host hosts n Laporan Host Redirection host hosts n Laporan Host Failure host hosts n Laporan Direktori directory directories n Laporan File Type extension extensions n Laporan Request file files n Laporan Redirection file files n Laporan Failure file files n Laporan Referrer referring URL referring URLs n Laporan Referring Site referring site referring sites n Laporan Redirected Referrer referring URL referring URLs n Laporan Failed Referrer referring URL referring URLs n Laporan Search Query query queries n Laporan Search Word query word query words n Laporan Internal Search Query query queries n Laporan Internal Search Word query word query words n Laporan Virtual Host virtual host virtual hosts n Laporan Virtual Host Redirection virtual host virtual hosts n Laporan Virtual Host Failure virtual host virtual hosts n Laporan User user users n Laporan User Redirection user users n Laporan User Failure user users n Rangkuman Browser browser browsers n Laporan Browser browser browsers n Laporan Operating System operating system operating systems n Laporan Domain domain domains n Laporan Organisasi organisasi organizations n Laporan Status Code status code status codes n Laporan Waktu Processing Laporan Ukuran File ## Used at the bottom of the report Analisis ini dibuat dengan Waktu Running Kurang dari 1 ## Used in the time reports Dalam unit menunjukkan atau bagian darinya request untuk satu page requests untuk beberapa pages ## Used at the bottom of each non-time report: need m, f & n genders * * tidak ada di list ## Used on the pie charts: again need m, f & n genders * * Lainnya ## Used at the top of the report Program mulai pada Analisa dilakukan dari sampai ## Used in the General Summary Requests yang sukses Rata-rata requests yang sukses per hari Requests yang sukses untuk pages Rata-rata requests yang sukses untuk pages per hari Logfile lines tanpa status code Requests gagal Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data yang ditransfer Rata-rata data yang ditransfer per hari Gambar dalam parentheses menunjukkan 7-hari period ending 7 hari terakhir Go To Top ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS tidak diketahui ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" dengan menggunakan ## All requests WITH AT LEAST 10 requests dengan sedikitnya ## Different ways of doing floors request dalam 7 hari terakhir requests dalam 7 hari terakhir request for a page dalam 7 hari terakhir requests for pages dalam 7 hari terakhir redirected request redirected requests redirected request dalam 7 hari terakhir redirected requests dalam 7 hari terakhir failed request failed requests failed request dalam 7 hari terakhir failed requests dalam 7 hari terakhir % dari traffic % dari traffic dalam 7 hari terakhir % dari maximum amount of traffic % dari maximum amount of traffic dalam 7 hari terakhir byte dari traffic bytes dari traffic ## ?bytes represents kbytes, Mbytes etc. ?bytes dari traffic byte dari traffic dalam 7 hari terakhir bytes dari traffic dalam 7 hari terakhir ?bytes dari traffic dalam 7 hari terakhir with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * diurut berdasarkan ## Used at the top of each report Laporan ini mengandung data dari ## Used in pie charts The wedges diplot dengan ## different ways of sorting jumlah traffic jumlah traffic dalam 7 hari terakhir % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days jumlah requests jumlah requests dalam 7 hari terakhir % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days jumlah requests for pages jumlah requests for pages dalam 7 hari terakhir % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests dalam 7 hari terakhir jumlah redirected requests jumlah redirected requests dalam 7 hari terakhir % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days jumlah failed requests jumlah failed requests dalam 7 hari terakhir waktu last request waktu last redirected request waktu last failed request waktu first request waktu first redirected request waktu first failed request ## 3 other ways of sorting in m, f, & n * * diurut berdasar abjad * * diurut berdasar nomor * * tidak diurut ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. AM PM ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y at %j:%n %a ## "Program started at" and "Analysed requests from" %w, %m %D %Y at %j:%n %a ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %j:%n %a%x%k:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n %a%x%k:%o %b ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %m/%d/%y ## The date & time (D) column in non-time reports %m/%d/%y %j:%n %a ## In non-time reports: "listing files with requests since [date]" %m/%d/%y at %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Berlanjut dengan request 101 Protokol Switching 1xx [Lain-lain : yang bersifat informasi] 200 OK 201 Tercipta 202 Diterima untuk proses selanjutnya 203 Bukan informasi yang terpercaya 204 OK, tapi tak ada yang dikirim 205 Reset dokumen 206 Bagian content 2xx [Lain-lain : successes] 300 Multiple dokumen tersedia 301 Dokumen pindah tetap 302 Dokumen ditemukan di lain tempat 303 Lihat dokumen lain 304 Tidak dirubah sejak last retrieval 305 Menggunakan proxy 306 Switch proxy 307 Dokumen pindah sementara 3xx [Lain-lain : redirections] 400 Bad request 401 Perlu keabsahan 402 Perlu pembayaran 403 Dilarang Access 404 Dokumen tidak ditemukan 405 Method tidak diizinkan 406 Dokumen tak bisa diterima client 407 Perlu Keabsahan Proxy 408 Request timeout 409 Request conflicts with state of resource 410 Dokumen hilang tetap 411 Perlu Panjang yang sesuai 412 Precondition failed 413 Request terlalu panjang 414 Requested filename too long 415 Media type tidak tersupport 416 Requested range not valid 417 Expectation failed 4xx [Lain-lain : client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 Versi HTTP tidak tersupport 506 Redirection failed 5xx [Lain-lain : server errors] xxx [Tidak dikenal] analog-ce-6.0.17/lang/is.lng000066400000000000000000000315461406366436600155200ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Sun Mán Þri Mið Fim Fös Lau Jan Feb Mar Apr Maí Jún Júl Ágú Sep Okt Nóv Des ## Next some standard common words. ## Abbreviation for "week beginning" vika byr. ++year++ ## Quarter of a year ++quarter++ mánuður dagur dagar klst. mínúta mínútur sekúnda sekúndur biti bitar ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ beiðni beiðnir dags. ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dags tími ++time++ upphafs dagsetning upphafs tímasetning síð. dags síð. tími skrá skrár hýsill hýslar sýndar hýsill sýndar hýslar skráarsafn skráarsöfn lén léni fyrirtæki fyrirtæki viðbót viðbætur vefslóð vefslóðir rápari ráparar stýrikerfi stýrikerfi ## (= operating system, operating systems) stærð leitar skilyrði leitar skilyrði netsetur netsetur notandi notendur ástands tákn ástands tákn Vefþjóns Tákntölur fyrir ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Yfirlit ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Mánaðarleg skýrsla Virkasti mánuður: Vikuleg skýrsla Virkasta vika: Vika byrjar Daglegt Yfirlit Dagleg skýrsla Virkasti dagur: Klukkustundar skýrsla Klukkustundar Yfirlit ++Hour of the Week Summary++ Virkasti Klukkutími: Korters Skýrsla ++Quarter-Hour Summary++ Virkasta korter: Fimm-Mínútna skýrsla ++Five-Minute Summary++ Virkustu Fimm mínúturnar: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Hýsil Skýrsla hýsill hýslar n ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Skráarsafns Skýrsla skráarsafn skráarsöfn n Tegund skráar Skýrsla tegund tegundir n Beiðna Skýrsla skrá skráa n Beint annað Skýrsla skrá skráa n Mistaka Skýrsla skrá skráa n Vísunar Skýrsla Vísun Vefslóðar Vísun Vefslóða n Vísun Netseta Skýrsla Vísun netseturs Vísun netseta n Beint annað-Vísunar Skýrsla Vísun Vefslóðar Vísun Vefslóða n Mistókst Vísun Skýrsla Vísun Vefslóðar Vísun Vefslóða n Leitar skýrsla leit leit n Leitarorða skýrsla leitarorð leitarorð n ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Sýndar Hýsils Skýrsla sýndar hýsill sýndar hýslar n ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Notenda Skýrsla notandi notendur n ++User Redirection Report++ ++user++ ++users++ ++n++ Notanda Mistókst Skýrsla notandi notendur n Rápara Yfirlit rápari ráparar n Rápara Skýrsla rápari ráparar n Stýrikerfa skýrsla stýrikerfi stýrikerfi n Lén Skýrsla lén léni n Fyrirtækja skýrsla fyrirtæki fyrirtæki n Ástands Tákna Skýrsla ástands tákn ástands tákn n Vinnslutíma skýrsla Stærð skráa Skýrsla ## Used at the bottom of the report Þessi greining var gerð af Keyrslutími Minna en 1 ## Used in the time reports Hver eining táknar eða að hluta af beiðnir á síðu beiðnir á síður ## Used at the bottom of each non-time report: need m, f & n genders * * Ekki skráð ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Forrit fór í gang Greindi beiðnir frá til ## Used in the General Summary Árangurríkar beiðnir Meðal árangursríkar beiðnir á dag Árangursríkar beiðnir á síður Meðal árangursríkar beiðnir á síður á dag Skráðar línur án ástandstákns Beiðnir sem mistókust Beint áfram beiðnir Beiðnir með óformlegum Ástandstáknum Beiðnir um ákveðnar skrár Ákveðnum hýslum þjónað Brenglaðar skráargeymslulínur Óvelkomnar skráargeymsluviðbætur Gögn flutt Meðalmagn gagna flutt á dag Tölur í sviga vísa í 7 dagar til síðustu 7 daga Fara til Efst ## Some special phrases for particular reports. [óleystar ip-númera addressur] [domain ekki gefið] [óþekkt domain] [rótar skrá] [engin skrá] [engin framlenging] [skrár] Óþekkt Windows útgáfa Aðrar Unix útgáfur ++Robots++ Stýrikerfi óþekkt ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #beiðnir ++7-day reqs++ %beiðnir ++%7-day reqs++ síður ++7-day pages++ %síður ++%7-day pages++ bitar ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %bitar ++%7-day bytes++ númer ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Birting fyrstu %s * * Birting fyrstu %d %s * * Birting %s ## "by" in the phrase "listing the top 3 files BY number of requests" með ## All requests WITH AT LEAST 10 requests með a.m.k. ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ beint áfram beiðni beint áfram beiðnum ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ beiðni mistókst beiðnir mistókust ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % af virkni ++% of the traffic in the last 7 days++ % af mögulegri virkni ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ bitar af virkni ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ beiðnir síðan með áframvísaðri beiðni síðan með ólukkaðri beiðni síðan ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * raðað af ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting magn virkni ++the amount of traffic in the last 7 days++ % af beiðni ++% of the requests in the last 7 days++ % af hámarksbeiðni ++% of the maximum number of requests in the last 7 days++ magn beiðna ++the number of requests in the last 7 days++ % af beiðnum í síður ++% of the requests for pages in the last 7 days++ % af hámarks beiðnum í síður ++% of the maximum number of requests for pages in the last 7 days++ magn beiðna í síður ++the number of requests for pages in the last 7 days++ % af áframvísuðum beiðnum ++% of the redirected requests in the last 7 days++ % af hámarks áframvísuðum beiðnum ++% of the maximum number of redirected requests in the last 7 days++ magn áframvísaðra beiðna ++the number of redirected requests in the last 7 days++ % af beiðnum sem mistókust ++% of the failed requests in the last 7 days++ % af hámarks beiðnum sem mistókust ++% of the maximum number of failed requests in the last 7 days++ magn beiðna sem mistókust ++the number of failed requests in the last 7 days++ tími síðustu beiðni tími síðustu áframvísunar beiðni tími síðustu beiðni sem mistókst ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n * * raðað í stafrófsröð * * raðað í númeraröð * * óraðað ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary ++%w++ ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/isa.lng000066400000000000000000000315631406366436600156600ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Sun Man Thr Mid Fim Fos Lau Jan Feb Mar Apr Mai Jun Jul Agu Sep Okt Nov Des ## Next some standard common words. ## Abbreviation for "week beginning" vika byr. ++year++ ## Quarter of a year ++quarter++ manudur dagur dagar klst. minuta minutur sekunda sekundur biti bitar ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ beidni beidnir dags. ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dags timi ++time++ upphafs dagsetning upphafs timasetning sid. dags sid. timi skra skrar hysill hyslar syndar hysill syndar hyslar skraarsafn skraarsofn len leni fyrirtaeki fyrirtaeki vidbot vidbaetur vefslod vefslodir rapari raparar styrikerfi styrikerfi ## (= operating system, operating systems) staerd leitar skilyrdi leitar skilyrdi netsetur netsetur notandi notendur astands takn astands takn Vefthjons Takntolur fyrir ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Yfirlit ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Manadarleg skyrsla Virkasti manudur: Vikuleg skyrsla Virkasta vika: Vika byrjar Daglegt Yfirlit Dagleg skyrsla Virkasti dagur: Klukkustundar skyrsla Klukkustundar Yfirlit ++Hour of the Week Summary++ Virkasti Klukkutimi: Korters Skyrsla ++Quarter-Hour Summary++ Virkasta korter: Fimm-Minutna skyrsla ++Five-Minute Summary++ Virkustu Fimm minuturnar: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Hysil Skyrsla hysill hyslar n ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Skraarsafns Skyrsla skraarsafn skraarsofn n Tegund skraar Skyrsla tegund tegundir n Beidna Skyrsla skra skraa n Beint annad Skyrsla skra skraa n Mistaka Skyrsla skra skraa n Visunar Skyrsla Visun Vefslodar Visun Vefsloda n Visun Netseta Skyrsla Visun netseturs Visun netseta n Beint annad-Visunar Skyrsla Visun Vefslodar Visun Vefsloda n Mistokst Visun Skyrsla Visun Vefslodar Visun Vefsloda n Leitar skyrsla leit leit n Leitarorda skyrsla leitarord leitarord n ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Syndar Hysils Skyrsla syndar hysill syndar hyslar n ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Notenda Skyrsla notandi notendur n ++User Redirection Report++ ++user++ ++users++ ++n++ Notanda Mistokst Skyrsla notandi notendur n Rapara Yfirlit rapari raparar n Rapara Skyrsla rapari raparar n Styrikerfa skyrsla styrikerfi styrikerfi n Len Skyrsla len leni n Fyrirtaekja skyrsla fyrirtaeki fyrirtaeki n Astands Takna Skyrsla astands takn astands takn n Vinnslutima skyrsla Staerd skraa Skyrsla ## Used at the bottom of the report Thessi greining var gerd af Keyrslutimi Minna en 1 ## Used in the time reports Hver eining taknar eda ad hluta af beidnir a sidu beidnir a sidur ## Used at the bottom of each non-time report: need m, f & n genders * * Ekki skrad ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Forrit for i gang Greindi beidnir fra til ## Used in the General Summary Arangurrikar beidnir Medal arangursrikar beidnir a dag Arangursrikar beidnir a sidur Medal arangursrikar beidnir a sidur a dag Skradar linur an astandstakns Beidnir sem mistokust Beint afram beidnir Beidnir med oformlegum Astandstaknum Beidnir um akvednar skrar Akvednum hyslum thjonad Brengladar skraargeymslulinur Ovelkomnar skraargeymsluvidbaetur Gogn flutt Medalmagn gagna flutt a dag Tolur i sviga visa i 7 dagar til sidustu 7 daga Fara til Efst ## Some special phrases for particular reports. [oleystar ip-numera addressur] [domain ekki gefid] [othekkt domain] [rotar skra] [engin skra] [engin framlenging] [skrar] Othekkt Windows utgafa Adrar Unix utgafur ++Robots++ Styrikerfi othekkt ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #beidnir ++7-day reqs++ %beidnir ++%7-day reqs++ sidur ++7-day pages++ %sidur ++%7-day pages++ bitar ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %bitar ++%7-day bytes++ numer ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Birting fyrstu %s * * Birting fyrstu %d %s * * Birting %s ## "by" in the phrase "listing the top 3 files BY number of requests" med ## All requests WITH AT LEAST 10 requests med a.m.k. ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ beint afram beidni beint afram beidnum ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ beidni mistokst beidnir mistokust ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % af virkni ++% of the traffic in the last 7 days++ % af mogulegri virkni ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ bitar af virkni ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ beidnir sidan med aframvisadri beidni sidan med olukkadri beidni sidan ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * radad af ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting magn virkni ++the amount of traffic in the last 7 days++ % af beidni ++% of the requests in the last 7 days++ % af hamarksbeidni ++% of the maximum number of requests in the last 7 days++ magn beidna ++the number of requests in the last 7 days++ % af beidnum i sidur ++% of the requests for pages in the last 7 days++ % af hamarks beidnum i sidur ++% of the maximum number of requests for pages in the last 7 days++ magn beidna i sidur ++the number of requests for pages in the last 7 days++ % af aframvisudum beidnum ++% of the redirected requests in the last 7 days++ % af hamarks aframvisudum beidnum ++% of the maximum number of redirected requests in the last 7 days++ magn aframvisadra beidna ++the number of redirected requests in the last 7 days++ % af beidnum sem mistokust ++% of the failed requests in the last 7 days++ % af hamarks beidnum sem mistokust ++% of the maximum number of failed requests in the last 7 days++ magn beidna sem mistokust ++the number of failed requests in the last 7 days++ timi sidustu beidni timi sidustu aframvisunar beidni timi sidustu beidni sem mistokst ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n * * radad i stafrofsrod * * radad i numerarod * * oradad ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary ++%w++ ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/it.lng000066400000000000000000000331771406366436600155230ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Dom Lun Mar Mer Gio Ven Sab Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic ## Next some standard common words. ## Abbreviation for "week beginning" in. sett. anno ## Quarter of a year trimestre mese gio giorni hh minuto minuti secondo secondi byte byte ## ?bytes represents kbytes, Mbytes etc. ?bytes richiesta richieste data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data ora ora data primo accesso ora primo accesso data ultimo accesso ora ultimo accesso file file host host host virtuale host virtuali directory directory dominio domini organizzazione organizzazioni estensione estensioni URL URL browser browser sist.op. sist.op. ## (= operating system, operating systems) lunghezza chiave ricerca chiavi ricerca sito siti utente utenti codice di stato codici di stato Statistiche del Web Server per ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sommario generale ## The time reports, plus "busiest" strings (at the bottom of each report) Resoconto anni Anno con maggior traffico: Resoconto trimestri Trimestre con maggior traffico: Resoconto mesi Mese con maggior traffico: Resoconto settimane Settimana con maggior traffico: quella che inizia il Sommario giorni della settimana Resoconto giorni Giorno con maggior traffico: Resoconto ore Sommario ore del giorno Resoconto per ore della settimana Ora con maggior traffico: Resoconto quarti d'ora Resoconto per quarti d'ora Quarto d'ora con maggior traffico: Resoconto cinque minuti Resoconto per periodi di cinque minuti Cinque minuti con maggior traffico: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Resoconto host host host m Resoconto host richieste reindirizzate host host m Resoconto host richieste fallite host host m Resoconto directory directory directory f Resoconto tipi di file estensione estensioni f Resoconto richieste file file m Resoconto reindirizzamenti file file m Resoconto insuccessi file file m Resoconto provenienze richieste URL di provenienza URL di provenienza f Resoconto siti di provenienza sito di provenienza siti di provenienza m Resoconto provenienze richieste reindirizzate URL di provenienza URL di provenienza f Resoconto provenienze richieste fallite URL di provenienza URL di provenienza f Resoconto richieste ricerca ricerca ricerche f Resoconto parole ricerca parola cercata parole cercate f Resoconto ricerche interne ricerca ricerche f Resoconto chiavi per ricerche interne chiave di ricerca chiavi di ricerca f Resoconto host virtuali host virtuale host virtuali m Resoconto redirezione host virtuali host virtuale host virtuali m Resoconto insuccessi host virtuali host virtuale host virtuali m Resoconto utenti utente utenti m Resoconto redirezione utenti utente utenti m Resoconto insuccessi utenti utente utenti m Sommario browser browser browser m Resoconto browser browser browser m Resoconto sistemi operativi sistema operativo sistemi operativi m Resoconto domini dominio domini m Resoconto organizzazioni organizzazione organizzazioni f Resoconto codici di stato codice di stato codici di stato m Resoconto tempi di esecuzione Resoconto dimensione dei file ## Used at the bottom of the report Queste statistiche sono state prodotte da Tempo di esecuzione Meno di un ## Used in the time reports Ogni unità rappresenta o frazione richiesta di pagina richieste di pagine ## Used at the bottom of each non-time report: need m, f & n genders non elencati non elencate non elencati ## Used on the pie charts: again need m, f & n genders * * Altro ## Used at the top of the report Programma attivato Analizzate le richieste da a ## Used in the General Summary Richieste soddisfatte Media giornaliera di richieste soddisfatte Richieste di pagine soddisfatte Media giornaliera di richieste di pagine soddisfatte Linee nel log file senza codice di stato Richieste fallite Richieste reindirizzate Richieste con codice di stato informativo File distinti richiesti Host distinti serviti Linee non valide nel log file Registrazioni nel log file non desiderate Quantità totale di traffico Traffico medio giornaliero I valori in parentesi si riferiscono a i 7 giorni fino al gli ultimi 7 giorni Altre statistiche Inizio ## Some special phrases for particular reports. [indirizzo numerico non risolto] [dominio non fornito] [dominio sconosciuto] [directory principale] [nessuna directory] [nessuna estensione] [directory] Windows sconosciuto Altro Unix Robot Sist. op. sconosciuto ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7 giorni versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #rich rich 7 gg %rich %rich 7 gg #pag. pag. 7 gg %pag. %pag. 7 gg byte ?bytes byte 7 gg ?byte 7 gg %byte %byte 7 gg n. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Elenco del primo %s Elenco della prima %s * Elenco dei primi %d %s Elenco delle prime %d %s * Elenco dei %s Elenco delle %s Elenco degli %s ## "by" in the phrase "listing the top 3 files BY number of requests" in ordine di ## All requests WITH AT LEAST 10 requests con almeno ## Different ways of doing floors richiesta negli ultimi 7 giorni richieste negli ultimi 7 giorni richiesta di una pagina negli ultimi 7 giorni richieste di pagine negli ultimi 7 giorni richiesta reindirizzata richieste reindirizzate richiesta reindirizzata negli ultimi 7 giorni richieste reindirizzate negli ultimi 7 giorni richiesta fallita richieste fallite richiesta fallita negli ultimi 7 giorni richieste fallite negli ultimi 7 giorni % del traffico % del traffico negli ultimi 7 giorni % della massima quantità di traffico % della massima quantità di traffico negli ultimi 7 giorni byte di traffico byte di traffico ## ?bytes represents kbytes, Mbytes etc. ?byte di traffico byte di traffico negli ultimi 7 giorni byte di traffico negli ultimi 7 giorni ?byte di traffico negli ultimi 7 giorni richieste dal con una richiesta reindirizzata dal con una richiesta fallita dal con la prima richiesta dal con la prima richiesta reindirizzata dal con la prima richiesta fallita dal ## Now "sorted by": again, in m, f & n (only needed in plural though) in ordine di in ordine di in ordine di ## Used at the top of each report Questo resoconto contiene dati dal ## Used in pie charts Le aree sono disegnate per ## different ways of sorting traffico la quantità di traffico negli ultimi 7 giorni % delle richieste % delle richieste negli ultimi 7 giorni % del massimo numero di richieste % del numero massimo di richieste negli ultimi 7 giorni numero di richieste il numero of richieste negli ultimi 7 giorni % delle richieste di pagine % delle richieste di pagine negli ultimi 7 giorni % del massimo numero di richieste di pagine % del numero massimo di richieste di pagine negli ultimi 7 giorni numero di richieste di pagine il numero di richieste di pagine negli ultimi 7 giorni % di richieste reindirizzate % di richieste reindirizzate negli ultimi 7 giorni % del massimo numero di richieste reindirizzate % del massimo numero di richieste reindirizzate negli ultimi 7 giorni numero di richieste reindirizzate il numero di richieste reindirizzate negli ultimi 7 giorni % delle richieste fallite % delle richieste fallite negli ultimi 7 giorni % del massimo numero di richieste fallite % del numero massimo di richieste fallite negli ultimi 7 giorni numero di richieste fallite numero di richieste fallite negli ultimi 7 giorni momento dell'ultima richiesta momento dell'ultima richiesta reindirizzata momento dell'ultima richiesta fallita momento della prima richiesta momento della prima richiesta reindirizzata momento della prima richiesta fallita ## 3 other ways of sorting in m, f, & n in ordine alfabetico in ordine alfabetico in ordine alfabetico in ordine numerico in ordine numerico in ordine numerico in ordine casuale in ordine casuale in ordine casuale ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w %D-%m-%Y alle %H:%n ## In Daily Report %d-%m-%y ## In Daily Summary %w ## In Hourly Report %d-%m-%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d-%m-%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d-%m-%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d-%m-%y ## The date & time (D) column in non-time reports %d-%m-%y %H:%n ## In non-time reports: "including all files with requests since [date]" %w %D-%m-%Y alle %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/ita.lng000066400000000000000000000332021406366436600156510ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Dom Lun Mar Mer Gio Ven Sab Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic ## Next some standard common words. ## Abbreviation for "week beginning" in. sett. anno ## Quarter of a year trimestre mese gio giorni hh minuto minuti secondo secondi byte byte ## ?bytes represents kbytes, Mbytes etc. ?bytes richiesta richieste data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data ora ora data primo accesso ora primo accesso data ultimo accesso ora ultimo accesso file file host host host virtuale host virtuali directory directory dominio domini organizzazione organizzazioni estensione estensioni URL URL browser browser sist.op. sist.op. ## (= operating system, operating systems) lunghezza chiave ricerca chiavi ricerca sito siti utente utenti codice di stato codici di stato Statistiche del Web Server per ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sommario generale ## The time reports, plus "busiest" strings (at the bottom of each report) Resoconto anni Anno con maggior traffico: Resoconto trimestri Trimestre con maggior traffico: Resoconto mesi Mese con maggior traffico: Resoconto settimane Settimana con maggior traffico: quella che inizia il Sommario giorni della settimana Resoconto giorni Giorno con maggior traffico: Resoconto ore Sommario ore del giorno Resoconto per ore della settimana Ora con maggior traffico: Resoconto quarti d'ora Resoconto per quarti d'ora Quarto d'ora con maggior traffico: Resoconto cinque minuti Resoconto per periodi di cinque minuti Cinque minuti con maggior traffico: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Resoconto host host host m Resoconto host richieste reindirizzate host host m Resoconto host richieste fallite host host m Resoconto directory directory directory f Resoconto tipi di file estensione estensioni f Resoconto richieste file file m Resoconto reindirizzamenti file file m Resoconto insuccessi file file m Resoconto provenienze richieste URL di provenienza URL di provenienza f Resoconto siti di provenienza sito di provenienza siti di provenienza m Resoconto provenienze richieste reindirizzate URL di provenienza URL di provenienza f Resoconto provenienze richieste fallite URL di provenienza URL di provenienza f Resoconto richieste ricerca ricerca ricerche f Resoconto parole ricerca parola cercata parole cercate f Resoconto ricerche interne ricerca ricerche f Resoconto chiavi per ricerche interne chiave di ricerca chiavi di ricerca f Resoconto host virtuali host virtuale host virtuali m Resoconto redirezione host virtuali host virtuale host virtuali m Resoconto insuccessi host virtuali host virtuale host virtuali m Resoconto utenti utente utenti m Resoconto redirezione utenti utente utenti m Resoconto insuccessi utenti utente utenti m Sommario browser browser browser m Resoconto browser browser browser m Resoconto sistemi operativi sistema operativo sistemi operativi m Resoconto domini dominio domini m Resoconto organizzazioni organizzazione organizzazioni f Resoconto codici di stato codice di stato codici di stato m Resoconto tempi di esecuzione Resoconto dimensione dei file ## Used at the bottom of the report Queste statistiche sono state prodotte da Tempo di esecuzione Meno di un ## Used in the time reports Ogni unita` rappresenta o frazione richiesta di pagina richieste di pagine ## Used at the bottom of each non-time report: need m, f & n genders non elencati non elencate non elencati ## Used on the pie charts: again need m, f & n genders * * Altro ## Used at the top of the report Programma attivato Analizzate le richieste da a ## Used in the General Summary Richieste soddisfatte Media giornaliera di richieste soddisfatte Richieste di pagine soddisfatte Media giornaliera di richieste di pagine soddisfatte Linee nel log file senza codice di stato Richieste fallite Richieste reindirizzate Richieste con codice di stato informativo File distinti richiesti Host distinti serviti Linee non valide nel log file Registrazioni nel log file non desiderate Quantita` totale di traffico Traffico medio giornaliero I valori in parentesi si riferiscono a i 7 giorni fino al gli ultimi 7 giorni Altre statistiche Inizio ## Some special phrases for particular reports. [indirizzo numerico non risolto] [dominio non fornito] [dominio sconosciuto] [directory principale] [nessuna directory] [nessuna estensione] [directory] Windows sconosciuto Altro Unix Robot Sist. op. sconosciuto ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7 giorni versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #rich rich 7 gg %rich %rich 7 gg #pag. pag. 7 gg %pag. %pag. 7 gg byte ?bytes byte 7 gg ?byte 7 gg %byte %byte 7 gg n. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Elenco del primo %s Elenco della prima %s * Elenco dei primi %d %s Elenco delle prime %d %s * Elenco dei %s Elenco delle %s Elenco degli %s ## "by" in the phrase "listing the top 3 files BY number of requests" in ordine di ## All requests WITH AT LEAST 10 requests con almeno ## Different ways of doing floors richiesta negli ultimi 7 giorni richieste negli ultimi 7 giorni richiesta di una pagina negli ultimi 7 giorni richieste di pagine negli ultimi 7 giorni richiesta reindirizzata richieste reindirizzate richiesta reindirizzata negli ultimi 7 giorni richieste reindirizzate negli ultimi 7 giorni richiesta fallita richieste fallite richiesta fallita negli ultimi 7 giorni richieste fallite negli ultimi 7 giorni % del traffico % del traffico negli ultimi 7 giorni % della massima quantita` di traffico % della massima quantita` di traffico negli ultimi 7 giorni byte di traffico byte di traffico ## ?bytes represents kbytes, Mbytes etc. ?byte di traffico byte di traffico negli ultimi 7 giorni byte di traffico negli ultimi 7 giorni ?byte di traffico negli ultimi 7 giorni richieste dal con una richiesta reindirizzata dal con una richiesta fallita dal con la prima richiesta dal con la prima richiesta reindirizzata dal con la prima richiesta fallita dal ## Now "sorted by": again, in m, f & n (only needed in plural though) in ordine di in ordine di in ordine di ## Used at the top of each report Questo resoconto contiene dati dal ## Used in pie charts Le aree sono disegnate per ## different ways of sorting traffico la quantita` di traffico negli ultimi 7 giorni % delle richieste % delle richieste negli ultimi 7 giorni % del massimo numero di richieste % del numero massimo di richieste negli ultimi 7 giorni numero di richieste il numero of richieste negli ultimi 7 giorni % delle richieste di pagine % delle richieste di pagine negli ultimi 7 giorni % del massimo numero di richieste di pagine % del numero massimo di richieste di pagine negli ultimi 7 giorni numero di richieste di pagine il numero di richieste di pagine negli ultimi 7 giorni % di richieste reindirizzate % di richieste reindirizzate negli ultimi 7 giorni % del massimo numero di richieste reindirizzate % del massimo numero di richieste reindirizzate negli ultimi 7 giorni numero di richieste reindirizzate il numero di richieste reindirizzate negli ultimi 7 giorni % delle richieste fallite % delle richieste fallite negli ultimi 7 giorni % del massimo numero di richieste fallite % del numero massimo di richieste fallite negli ultimi 7 giorni numero di richieste fallite numero di richieste fallite negli ultimi 7 giorni momento dell'ultima richiesta momento dell'ultima richiesta reindirizzata momento dell'ultima richiesta fallita momento della prima richiesta momento della prima richiesta reindirizzata momento della prima richiesta fallita ## 3 other ways of sorting in m, f, & n in ordine alfabetico in ordine alfabetico in ordine alfabetico in ordine numerico in ordine numerico in ordine numerico in ordine casuale in ordine casuale in ordine casuale ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w %D-%m-%Y alle %H:%n ## In Daily Report %d-%m-%y ## In Daily Summary %w ## In Hourly Report %d-%m-%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d-%m-%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d-%m-%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d-%m-%y ## The date & time (D) column in non-time reports %d-%m-%y %H:%n ## In non-time reports: "including all files with requests since [date]" %w %D-%m-%Y alle %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/itadesc.txt000066400000000000000000000112751406366436600165550ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Questo rapporto elenca l'attivita` annuale. # Quarterly Report Questo rapporto elenca l'attivita` trimestrale. # Monthly Report Questo rapporto elenca l'attivita` mensile. # Weekly Report Questo rapporto elenca l'attivita` settimanale. # Daily Report Questo rapporto elenca l'attivita` giornaliera. # Hourly Report Questo rapporto elenca l'attivita` oraria. # Quarter-Hour Report Questo rapporto elenca l'attivita` per ogni periodo di 15 minuti. # Five-Minute Report Questo rapporto elenca l'attivita` per ogni periodo di 5 minuti. # Daily Summary Questo rapporto elenca l'attivita` per ogni giorno della settimana, calcolata cumulativamente su tutte le settimane analizzate. # Hourly Summary Questo rapporto elenca l'attivita` per ogni ora del giorno, calcolata cumulativamente su tutti i giorni analizzati. # Hour of the Week Summary Questo rapporto elenca l'attivita` per ogni ora della settimana, calcolata cumulativamente su tutte le settimane analizzate. # Quarter-Hour Summary Questo rapporto elenca l'attivita` per ogni quarto d'ora del giorno, calcolata cumulativamente su tutti i giorni analizzati. # Five-Minute Summary Questo rapporto elenca l'attivita` per ogni periodo di 5 minuti del giorno, calcolata cumulativamente su tutti i giorni analizzati. # General Summary Questo rapporto elenca le statistiche riepilogative generali. # Request Report Questo rapporto elenca i files richiesti sul sito. # Redirection Report Questo rapporto elenca i files che hanno richiesto una redirezione ad un altro file (solitamente directory senza la sbarra finale, o script CGI che forzano la redirezione). # Failure Report Questo rapporto elenca i files che hanno causato un insuccesso, per esempio files non trovati. # File Type Report Questo rapporto elenca le estensioni dei files richiesti sul sito. # Directory Report Questo rapporto elenca le directory dalle quali sono stati richiesti i files, comprese tutte le loro sottodirectory. # Host Report Questo rapporto elenca i computer che hanno richiesto files. # Host Redirection Report Questo rapporto elenca i computer che sono stati rediretti ad un altro file. # Host Failure Report Questo rapporto elenca i computer per i quali sono fallite le richieste. # Domain Report Questo rapporto elenca il dominio, geografico o internazionale, di provenienza delle richieste. # Referrer Report Questo rapporto elenca i referenti (da quali pagine sono stati inviati i visitatori, oppure le pagine che includono immagini di questo sito). # Referring Site Report Questo rapporto elenca da quali server i visitatori sono stati inviati. # Redirected Referrer Report Questo rapporto elenca i referenti che hanno causato una richiesta di redirezione. # Failed Referrer Report Questo rapporto elenca i referenti contenenti collegamenti errati a questo sito. # Browser Report Questo rapporto elenca la versione dettagliata dei browser usati dai visitatori. # Virtual Host Report Questo rapporto elenca l'attivita` di ognuno dei domini virtuali di questo server. # Virtual Host Redirection Report Questo rapporto elenca le richieste redirette ad ognuno dei domini virtuali di questo server. # Virtual Host Failure Report Questo rapporto elenca le richieste fallite per ognuno dei domini virtuali di questo server. # User Report Questo rapporto elenca gli utenti che hanno richiesto files, se sono stati autenticati con password o identificati con cookies. # User Redirection Report Questo rapporto elenca gli utenti che sono stati rediretti ad un altro file. # User Failure Report Questo rapporto elenca gli utenti ai quali sono fallite le richieste. # Organisation Report Questo rapporto elenca le organizzazioni dai cui computer sono stati richiesti files. # Search Query Report Questo rapporto elenca le richieste usate nei motori di ricerca per trovare questo sito. # Search Word Report Questo rapporto elenca le parole usate nei motori di ricerca per trovare questo sito. # Internal Search Query Report Questo rapporto elenca le richieste effettuate ai motori di ricerca interni a questo sito. # Internal Search Word Report Questo rapporto elenca le parole richieste ai motori di ricerca interni a questo sito. # Browser Summary Questo rapporto elenca il produttore dei browser usati dai visitatori. # Operating System Report Questo rapporto elenca i sistemi operativi usati dai visitatori. # File Size Report Questo rapporto elenca le dimensioni dei files. # Status Code Report Questo rapporto elenca il codice di stato HTTP di tutte le richieste. # Processing Time Report Questo rapporto elenca il tempo impiegato per processare le richieste. analog-ce-6.0.17/lang/itadom.tab000066400000000000000000000110411406366436600163340ustar00rootroot00000000000000ad 2 Andorra ae 3 Emirati Arabi Uniti af 1 Afghanistan ag 2 Antigua e Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antille Olandesi ao 1 Angola aq 1 Antartide ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americane at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaidjan ba 3 Bosnia-Erzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgio bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasile bs 1 Bahamas bt 1 Bhutan bv 1 Bouvet bw 1 Botswana by 1 Bielorussia bz 1 Belize ca 3 Canada cc 1 Isole Cocos (Keeling) cd 1 Repubblica Democratica del Congo cf 1 Repubblica Centafricana cg 1 Congo ch 2 Svizzera ci 1 Costa d'Avorio ck 1 Isole Cook cl 2 Cile cm 1 Camerun cn 3 Cina co 3 Colombia com 2 Commerciale cr 3 Costarica cu 2 Cuba cv 1 Capo Verde cx 2 Christmas Island cy 3 Cipro cz 2 Repubblica Ceca de 2 Germania dj 1 Gibuti dk 2 Danimarca dm 2 Dominica do 3 Repubblica Dominicana dz 1 Algeria ec 3 Ecuador edu 2 USA Educational ee 2 Estonia eg 3 Egitto eh 1 Sahara Occidentale er 1 Eritrea es 2 Spagna et 1 Etiopia fi 2 Finlandia fj 3 Isole Figi fk 1 Isole Falkland fm 1 Micronesia fo 1 Isole Faroer fr 2 Francia fx 1 Francia (Territorio Europeo) ga 1 Gabon gb 1 Regno Unito gd 1 Grenada ge 1 Georgia gf 1 Guyana Francese gg 1 Guernsey gh 3 Ghana gi 1 Gibilterra gl 1 Groenlandia gm 1 Gambia gn 1 Guinea gov 2 USA Governativi gp 1 Guadalupa (Francese) gq 1 Guinea Equatoriale gr 2 Grecia gs 1 Isole S. Georgia & S. Sandwich gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Isole Heard and McDonald hn 2 Honduras hr 2 Croazia ht 1 Haiti hu 2 Ungheria id 3 Indonesia ie 2 Irlanda il 3 Israele im 1 Isola di Man in 3 India int 1 Internazionale io 1 Territorio Inglese dell'Oceano Indiano iq 1 Iraq ir 1 Iran is 2 Islanda it 2 Italia je 1 Jersey jm 3 Giamaica jo 3 Giordania jp 3 Giappone ke 3 Kenya kg 1 Kyrgyzstan kh 1 Cambogia ki 1 Kiribati km 1 Comore kn 1 Saint Kitts & Nevis kp 1 Corea del Nord kr 3 Corea del Sud kw 3 Kuwait ky 1 Isole Cayman kz 1 Kazakhistan la 1 Laos lb 3 Libano lc 1 Santa Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lituania lu 2 Lussemburgo lv 2 Latvia ly 1 Libia ma 1 Marocco mc 2 Monaco md 1 Moldavia mg 1 Madagascar mh 1 Isole Marshall mil 2 USA Militare mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Isole Northern Mariana mq 1 Martinica (Francese) mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Maurizio mv 1 Maldive mw 1 Malawi mx 3 Messico my 3 Malesia mz 1 Mozambico na 1 Namibia nc 1 Nuova Caledonia (Francese) ne 1 Niger net 2 Network nf 1 Isola Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Olanda no 2 Norvegia np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nuova Zelanda om 1 Oman org 2 Organizzazioni Non-Profit pa 3 Panama pe 3 Peru` pf 1 Polinesia (Francese) pg 3 Papua Nuova Guinea ph 3 Filippine pk 3 Pakistan pl 3 Polonia pm 1 Saint Pierre e Miquelon pn 1 Isola Pitcairn pr 1 Portorico ps 3 Palestina pt 2 Portogallo pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion (Francese) ro 2 Romania ru 2 Russia rw 1 Ruanda sa 3 Arabia Saudita sb 1 Isole Solomon sc 1 Seychelles sd 1 Sudan se 2 Svezia sg 3 Singapore sh 1 Sant'Elena si 2 Slovenia sj 1 Isole Svalbard e Jan Mayen sk 2 Slovacchia sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Sao Tome` e Principe su 2 Ex Unione Sovietica sv 3 El Salvador sy 1 Siria sz 1 Swaziland tc 1 Isole Turks e Caicos td 1 Ciad tf 1 Territori della Francia del Sud tg 1 Togo th 3 Thailandia tj 1 Tadjikistan tk 1 Tokelau tl 1 Timor Est tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Timor Est tr 3 Turchia tt 3 Trinidad e Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ucraina ug 3 Uganda uk 3 Regno Unito um 1 USA Isole Minori us 4 Stati Uniti uy 3 Uruguay uz 1 Uzbekistan va 1 Citta` del Vaticano vc 1 Saint Vincent & Grenadines ve 3 Venezuela vg 1 Isole Vergini (Britanniche) vi 1 Isole Vergini (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Isole Wallis e Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Jugoslavia za 3 Sudafrica zm 1 Zambia zr 1 Repubblica Democratica del Congo zw 3 Zimbabwe analog-ce-6.0.17/lang/itdesc.txt000066400000000000000000000112571406366436600164140ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Questo rapporto elenca l'attività annuale. # Quarterly Report Questo rapporto elenca l'attività trimestrale. # Monthly Report Questo rapporto elenca l'attività mensile. # Weekly Report Questo rapporto elenca l'attività settimanale. # Daily Report Questo rapporto elenca l'attività giornaliera. # Hourly Report Questo rapporto elenca l'attività oraria. # Quarter-Hour Report Questo rapporto elenca l'attività per ogni periodo di 15 minuti. # Five-Minute Report Questo rapporto elenca l'attività per ogni periodo di 5 minuti. # Daily Summary Questo rapporto elenca l'attività per ogni giorno della settimana, calcolata cumulativamente su tutte le settimane analizzate. # Hourly Summary Questo rapporto elenca l'attività per ogni ora del giorno, calcolata cumulativamente su tutti i giorni analizzati. # Hour of the Week Summary Questo rapporto elenca l'attività per ogni ora della settimana, calcolata cumulativamente su tutte le settimane analizzate. # Quarter-Hour Summary Questo rapporto elenca l'attività per ogni quarto d'ora del giorno, calcolata cumulativamente su tutti i giorni analizzati. # Five-Minute Summary Questo rapporto elenca l'attività per ogni periodo di 5 minuti del giorno, calcolata cumulativamente su tutti i giorni analizzati. # General Summary Questo rapporto elenca le statistiche riepilogative generali. # Request Report Questo rapporto elenca i files richiesti sul sito. # Redirection Report Questo rapporto elenca i files che hanno richiesto una redirezione ad un altro file (solitamente directory senza la sbarra finale, o script CGI che forzano la redirezione). # Failure Report Questo rapporto elenca i files che hanno causato un insuccesso, per esempio files non trovati. # File Type Report Questo rapporto elenca le estensioni dei files richiesti sul sito. # Directory Report Questo rapporto elenca le directory dalle quali sono stati richiesti i files, comprese tutte le loro sottodirectory. # Host Report Questo rapporto elenca i computer che hanno richiesto files. # Host Redirection Report Questo rapporto elenca i computer che sono stati rediretti ad un altro file. # Host Failure Report Questo rapporto elenca i computer per i quali sono fallite le richieste. # Domain Report Questo rapporto elenca il dominio, geografico o internazionale, di provenienza delle richieste. # Referrer Report Questo rapporto elenca i referenti (da quali pagine sono stati inviati i visitatori, oppure le pagine che includono immagini di questo sito). # Referring Site Report Questo rapporto elenca da quali server i visitatori sono stati inviati. # Redirected Referrer Report Questo rapporto elenca i referenti che hanno causato una richiesta di redirezione. # Failed Referrer Report Questo rapporto elenca i referenti contenenti collegamenti errati a questo sito. # Browser Report Questo rapporto elenca la versione dettagliata dei browser usati dai visitatori. # Virtual Host Report Questo rapporto elenca l'attività di ognuno dei domini virtuali di questo server. # Virtual Host Redirection Report Questo rapporto elenca le richieste redirette ad ognuno dei domini virtuali di questo server. # Virtual Host Failure Report Questo rapporto elenca le richieste fallite per ognuno dei domini virtuali di questo server. # User Report Questo rapporto elenca gli utenti che hanno richiesto files, se sono stati autenticati con password o identificati con cookies. # User Redirection Report Questo rapporto elenca gli utenti che sono stati rediretti ad un altro file. # User Failure Report Questo rapporto elenca gli utenti ai quali sono fallite le richieste. # Organisation Report Questo rapporto elenca le organizzazioni dai cui computer sono stati richiesti files. # Search Query Report Questo rapporto elenca le richieste usate nei motori di ricerca per trovare questo sito. # Search Word Report Questo rapporto elenca le parole usate nei motori di ricerca per trovare questo sito. # Internal Search Query Report Questo rapporto elenca le richieste effettuate ai motori di ricerca interni a questo sito. # Internal Search Word Report Questo rapporto elenca le parole richieste ai motori di ricerca interni a questo sito. # Browser Summary Questo rapporto elenca il produttore dei browser usati dai visitatori. # Operating System Report Questo rapporto elenca i sistemi operativi usati dai visitatori. # File Size Report Questo rapporto elenca le dimensioni dei files. # Status Code Report Questo rapporto elenca il codice di stato HTTP di tutte le richieste. # Processing Time Report Questo rapporto elenca il tempo impiegato per processare le richieste. analog-ce-6.0.17/lang/itdom.tab000066400000000000000000000110361406366436600161770ustar00rootroot00000000000000ad 2 Andorra ae 3 Emirati Arabi Uniti af 1 Afghanistan ag 2 Antigua e Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antille Olandesi ao 1 Angola aq 1 Antartide ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americane at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaidjan ba 3 Bosnia-Erzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgio bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasile bs 1 Bahamas bt 1 Bhutan bv 1 Bouvet bw 1 Botswana by 1 Bielorussia bz 1 Belize ca 3 Canada cc 1 Isole Cocos (Keeling) cd 1 Repubblica Democratica del Congo cf 1 Repubblica Centafricana cg 1 Congo ch 2 Svizzera ci 1 Costa d'Avorio ck 1 Isole Cook cl 2 Cile cm 1 Camerun cn 3 Cina co 3 Colombia com 2 Commerciale cr 3 Costarica cu 2 Cuba cv 1 Capo Verde cx 2 Christmas Island cy 3 Cipro cz 2 Repubblica Ceca de 2 Germania dj 1 Gibuti dk 2 Danimarca dm 2 Dominica do 3 Repubblica Dominicana dz 1 Algeria ec 3 Ecuador edu 2 USA Educational ee 2 Estonia eg 3 Egitto eh 1 Sahara Occidentale er 1 Eritrea es 2 Spagna et 1 Etiopia fi 2 Finlandia fj 3 Isole Figi fk 1 Isole Falkland fm 1 Micronesia fo 1 Isole Faroer fr 2 Francia fx 1 Francia (Territorio Europeo) ga 1 Gabon gb 1 Regno Unito gd 1 Grenada ge 1 Georgia gf 1 Guyana Francese gg 1 Guernsey gh 3 Ghana gi 1 Gibilterra gl 1 Groenlandia gm 1 Gambia gn 1 Guinea gov 2 USA Governativi gp 1 Guadalupa (Francese) gq 1 Guinea Equatoriale gr 2 Grecia gs 1 Isole S. Georgia & S. Sandwich gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Isole Heard and McDonald hn 2 Honduras hr 2 Croazia ht 1 Haiti hu 2 Ungheria id 3 Indonesia ie 2 Irlanda il 3 Israele im 1 Isola di Man in 3 India int 1 Internazionale io 1 Territorio Inglese dell'Oceano Indiano iq 1 Iraq ir 1 Iran is 2 Islanda it 2 Italia je 1 Jersey jm 3 Giamaica jo 3 Giordania jp 3 Giappone ke 3 Kenya kg 1 Kyrgyzstan kh 1 Cambogia ki 1 Kiribati km 1 Comore kn 1 Saint Kitts & Nevis kp 1 Corea del Nord kr 3 Corea del Sud kw 3 Kuwait ky 1 Isole Cayman kz 1 Kazakhistan la 1 Laos lb 3 Libano lc 1 Santa Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lituania lu 2 Lussemburgo lv 2 Latvia ly 1 Libia ma 1 Marocco mc 2 Monaco md 1 Moldavia mg 1 Madagascar mh 1 Isole Marshall mil 2 USA Militare mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Isole Northern Mariana mq 1 Martinica (Francese) mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Maurizio mv 1 Maldive mw 1 Malawi mx 3 Messico my 3 Malesia mz 1 Mozambico na 1 Namibia nc 1 Nuova Caledonia (Francese) ne 1 Niger net 2 Network nf 1 Isola Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Olanda no 2 Norvegia np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nuova Zelanda om 1 Oman org 2 Organizzazioni Non-Profit pa 3 Panama pe 3 Perù pf 1 Polinesia (Francese) pg 3 Papua Nuova Guinea ph 3 Filippine pk 3 Pakistan pl 3 Polonia pm 1 Saint Pierre e Miquelon pn 1 Isola Pitcairn pr 1 Portorico ps 3 Palestina pt 2 Portogallo pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion (Francese) ro 2 Romania ru 2 Russia rw 1 Ruanda sa 3 Arabia Saudita sb 1 Isole Solomon sc 1 Seychelles sd 1 Sudan se 2 Svezia sg 3 Singapore sh 1 Sant'Elena si 2 Slovenia sj 1 Isole Svalbard e Jan Mayen sk 2 Slovacchia sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 São Tomé e Principe su 2 Ex Unione Sovietica sv 3 El Salvador sy 1 Siria sz 1 Swaziland tc 1 Isole Turks e Caicos td 1 Ciad tf 1 Territori della Francia del Sud tg 1 Togo th 3 Thailandia tj 1 Tadjikistan tk 1 Tokelau tl 1 Timor Est tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Timor Est tr 3 Turchia tt 3 Trinidad e Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ucraina ug 3 Uganda uk 3 Regno Unito um 1 USA Isole Minori us 4 Stati Uniti uy 3 Uruguay uz 1 Uzbekistan va 1 Città del Vaticano vc 1 Saint Vincent & Grenadines ve 3 Venezuela vg 1 Isole Vergini (Britanniche) vi 1 Isole Vergini (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Isole Wallis e Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Jugoslavia za 3 Sudafrica zm 1 Zambia zr 1 Repubblica Democratica del Congo zw 3 Zimbabwe analog-ce-6.0.17/lang/itform.html000066400000000000000000000206031406366436600165610ustar00rootroot00000000000000 Analog - Interfaccia Web

Interfaccia Web per Analog


1. Selezione dei resoconti

Vedi la home page di analog per la spiegazione dei vari report.

Quali report vuoi visualizzare?


[On] [Off] Sommario generale
[On] [Off] Resoconto mesi
[On] [Off] Resoconto settimane
[On] [Off] Sommario giorni della settimana
[On] [Off] Resoconto giorni
[On] [Off] Sommario ore del giorno
[On] [Off] Resoconto domini
[On] [Off] Resoconto organizzazioni
[On] [Off] Resoconto directory
[On] [Off] Resoconto tipi di file
[On] [Off] Resoconto richieste
[On] [Off] Resoconto dimensioni file
[On] [Off] Resoconto provenienze
[On] [Off] Resoconto richeste ricerca
[On] [Off] Resoconto parole ricerca
[On] [Off] Sommario browser
[On] [Off] Resoconto sistemi operativi
[On] [Off] Status Code Resoconto codici di stato

È ora possibile eseguire il programma:
Oppure si possono modificare le seguenti opzioni per report individuali. Si può usare bytes per indicare 10 Megabytes; oppure per indicare i primi 50 elementi in ordine di bytes.


2. Opzioni per resoconti dettagliati

Opzioni per resoconto domini

Ordina il resoconto domini
Includi tutti i domini con almeno

Opzioni per resoconto organizzazioni

Ordina il resoconto organizzazioni
Includi tutte le organizzazioni con almeno

Opzioni per resoconto directory

Ordina il resoconto directory
Includi tutte le directory con almeno

Opzioni per resoconto richieste

Ordina il resoconto richieste
Includi tutti i files con almeno
Visualizza

Opzioni resoconto provenienze

Ordina il resoconto provenienze
Includi tutte le provenienze con almeno

3. Analisi parziale del log

Solo determinati periodi
È possibile analizzare solo le richieste per determinati periodi. Inserire di seguito il periodo nella forma aammgg (anno, mese, giorno, tutti a 2 cifre); per esempio, 980301 per il primo marzo 1998. È possibile usare un solo campo per limitare il periodo da un solo lato.
Dalla data alla data

Solo determinati files
Cerca solo questi files (lista, separata da virgole; può contenere il carattere jolly *)

Ignora questi files


4. Impaginazione

Nome dell'organizzazione (per il titolo della pagina)

home page dell'organizzazione
URL:


analog-ce-6.0.17/lang/jpe.cfg000066400000000000000000000034141406366436600156330ustar00rootroot00000000000000LANGUAGE JAPANESE-EUC SUBDOMAIN ad.jp ´ÉÍýÁÈ¿¥ SUBDOMAIN ac.jp Âç³Ø¡¦ÀìÌç³Ø¹»¤Ê¤É SUBDOMAIN co.jp ´ë¶È SUBDOMAIN go.jp À¯Éܵ¡´Ø SUBDOMAIN or.jp ³Æ¼ïË¡¿ÍÃÄÂÎ SUBDOMAIN ne.jp ¥Í¥Ã¥È¥ï¡¼¥¯¥µ¡¼¥Ó¥¹ SUBDOMAIN gr.jp Ǥ°ÕÃÄÂÎ SUBDOMAIN ed.jp ³Æ¼ï³Ø¹» SUBDOMAIN hokkaido.jp Ë̳¤Æ» SUBDOMAIN aomori.jp ÀÄ¿¹¸© SUBDOMAIN iwate.jp ´ä¼ê¸© SUBDOMAIN miyagi.jp µÜ¾ë¸© SUBDOMAIN akita.jp ½©Åĸ© SUBDOMAIN yamagata.jp »³·Á¸© SUBDOMAIN fukushima.jp Ê¡Å縩 SUBDOMAIN ibaraki.jp °ñ¾ë¸© SUBDOMAIN tochigi.jp ÆÊÌÚ¸© SUBDOMAIN gunma.jp ·²Çϸ© SUBDOMAIN saitama.jp ºë¶Ì¸© SUBDOMAIN chiba.jp ÀéÍÕ¸© SUBDOMAIN tokyo.jp ÅìµþÅÔ SUBDOMAIN kanagawa.jp ¿ÀÆàÀ SUBDOMAIN niigata.jp ¿·³ã¸© SUBDOMAIN toyama.jp ÉÙ»³¸© SUBDOMAIN ishikawa.jp ÀÐÀ SUBDOMAIN fukui.jp Ê¡°æ¸© SUBDOMAIN yamanashi.jp »³Íü¸© SUBDOMAIN nagano.jp ĹÌ SUBDOMAIN gifu.jp ´ôÉ츩 SUBDOMAIN shizuoka.jp ÀŲ¬¸© SUBDOMAIN aichi.jp °¦Ãθ© SUBDOMAIN mie.jp »°½Å¸© SUBDOMAIN shiga.jp ¼¢²ì¸© SUBDOMAIN kyoto.jp µþÅÔÉÜ SUBDOMAIN osaka.jp ÂçºåÉÜ SUBDOMAIN hyogo.jp ʼ¸Ë¸© SUBDOMAIN nara.jp ÆàÎɸ© SUBDOMAIN wakayama.jp Ï²λ³¸© SUBDOMAIN tottori.jp Ä»¼è¸© SUBDOMAIN shimane.jp Å纬¸© SUBDOMAIN okayama.jp ²¬»³¸© SUBDOMAIN hiroshima.jp ¹­Å縩 SUBDOMAIN yamaguchi.jp »³¸ý¸© SUBDOMAIN tokushima.jp ÆÁÅ縩 SUBDOMAIN kagawa.jp ¹áÀ SUBDOMAIN ehime.jp °¦É²¸© SUBDOMAIN kochi.jp ¹âÃθ© SUBDOMAIN fukuoka.jp Ê¡²¬¸© SUBDOMAIN saga.jp º´²ì¸© SUBDOMAIN nagasaki.jp Ĺºê¸© SUBDOMAIN kumamoto.jp ·§Ëܸ© SUBDOMAIN oita.jp Âçʬ¸© SUBDOMAIN miyazaki.jp µÜºê¸© SUBDOMAIN kagoshima.jp ¼¯»ùÅ縩 SUBDOMAIN okinawa.jp ²­Æì¸© SUBDOMAIN sapporo.jp »¥ËÚ»Ô SUBDOMAIN sendai.jp ÀçÂæ»Ô SUBDOMAIN yokohama.jp ²£ÉÍ»Ô SUBDOMAIN kawasaki.jp Àîºê»Ô SUBDOMAIN nagoya.jp ̾¸Å²°»Ô SUBDOMAIN kobe.jp ¿À¸Í»Ô SUBDOMAIN kitakyushu.jp Ë̶彣»Ô analog-ce-6.0.17/lang/jpe.lng000066400000000000000000000302721406366436600156560ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Japanese version by Kaori Chikenji, ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp), ## Motonobu Takahashi (monyo@home.monyo.com), ## and Kazuto Ishigaki (ishigaki-ml@factory.gr.jp) 2002 Feb. 24 ## ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp) 2004 Feb. 18 ## ## Note: Be careful to use the same character set in all the configuration ## files, i.e., jp?.lng (this file), jp?.cfg, jp?dom.tab, jp?desc.txt. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP *EUC-JP ## Abbreviations for the day and month names. Æü ·î ²Ð ¿å ÌÚ ¶â ÅÚ 1 2 3 4 5 6 7 8 9 10 11 12 ## Next some standard common words. ## Abbreviation for "week beginning" ½µÀèÆ¬Æü ǯ ## Quarter of a year 4Ⱦ´ü ·î Æü Æü »þ´Ö ʬ ʬ Éà Éà ¥Ð¥¤¥È ¥Ð¥¤¥È ## ?bytes represents kbytes, Mbytes etc. ?¥Ð¥¤¥È ¥ê¥¯¥¨¥¹¥È ¥ê¥¯¥¨¥¹¥È ǯ·îÆü ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ǯ·îÆü »þ´ÖÂÓ »þ ³«»ÏÆü ³«»Ï»þ¹ï ºÇ½ª¥¢¥¯¥»¥¹Æü»þ ºÇ½ª¥¢¥¯¥»¥¹»þ¹ï ¥Õ¥¡¥¤¥ë ¥Õ¥¡¥¤¥ë ¥Û¥¹¥È ¥Û¥¹¥È ²¾ÁÛ¥Û¥¹¥È ²¾ÁÛ¥Û¥¹¥È ¥Ç¥£¥ì¥¯¥È¥ê ¥Ç¥£¥ì¥¯¥È¥ê ¥É¥á¥¤¥ó ¥É¥á¥¤¥ó ÁÈ¿¥ ÁÈ¿¥ ³ÈÄ¥»Ò ³ÈÄ¥»Ò URL URL ¥Ö¥é¥¦¥¶ ¥Ö¥é¥¦¥¶ OS OS ## (= operating system, operating systems) ¥µ¥¤¥º ¸¡º÷¸ì ¸¡º÷¹àÌÜ ¥µ¥¤¥È ¥µ¥¤¥È ¥æ¡¼¥¶ ¥æ¡¼¥¶ ¾õÂÖ¥³¡¼¥É ¾õÂÖ¥³¡¼¥É ¥¦¥§¥Ö¥µ¡¼¥Ð¤ÎÅý·× ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. ¥­¥í ¥á¥¬ ¥®¥¬ (10²¯) ¥Æ¥é (1Ãû) ¥Ú¥¿ (1ÀéÃû) ¥¨¥¯¥µ (100µþ) ¥¼¡¼¥¿ (10Ô¶) ¥è¥Ã¥¿ (1²Óͽ) ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Á´ÂΤγµÍ× ## The time reports, plus "busiest" strings (at the bottom of each report) ǯÊÌ¥ì¥Ý¡¼¥È ºÇ¤âº®»¨¤·¤¿Ç¯ : 4Ⱦ´üÊÌ¥ì¥Ý¡¼¥È ºÇ¤âº®»¨¤·¤¿4Ⱦ´ü : ·îÊÌ¥ì¥Ý¡¼¥È ºÇ¤âº®»¨¤·¤¿·î : ½µÊÌ¥ì¥Ý¡¼¥È ºÇ¤âº®»¨¤·¤¿½µ (±¦¤ÎÆüÉÕ¤«¤é£±½µ´Ö)¡§ ÍËÆüÊ̽¸·× ÆüÊÌ¥ì¥Ý¡¼¥È ºÇ¤âº®»¨¤·¤¿Æü : »þ´ÖÊÌ¥ì¥Ý¡¼¥È »þ´ÖÊ̽¸·× ÍËÆüÊÌ»þ´Ö½¸·× ºÇ¤âº®»¨¤·¤¿»þ´Ö : 15ʬ´Ö³Ö¥ì¥Ý¡¼¥È 15ʬ´Ö³Ö½¸·× ºÇ¤âº®»¨¤·¤¿15ʬ´Ö : 5ʬ´Ö³Ö¥ì¥Ý¡¼¥È 5ʬ´Ö³Ö½¸·× ºÇ¤âº®»¨¤·¤¿5ʬ´Ö : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ¥Û¥¹¥È¥ì¥Ý¡¼¥È ¥Û¥¹¥È ¥Û¥¹¥È n ¥Û¥¹¥È¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ì¥Ý¡¼¥È ¥Û¥¹¥È ¥Û¥¹¥È n ¥Û¥¹¥ÈÉÔÀ®¸ù¥ì¥Ý¡¼¥È ¥Û¥¹¥È ¥Û¥¹¥È n ¥Ç¥£¥ì¥¯¥È¥ê¥ì¥Ý¡¼¥È ¥Ç¥£¥ì¥¯¥È¥ê ¥Ç¥£¥ì¥¯¥È¥ê n ¥Õ¥¡¥¤¥ë¼ïÎàÊÌ¥ì¥Ý¡¼¥È ³ÈÄ¥»Ò ³ÈÄ¥»Ò n ¥ê¥¯¥¨¥¹¥È¥ì¥Ý¡¼¥È ¥Õ¥¡¥¤¥ë ¥Õ¥¡¥¤¥ë n ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ì¥Ý¡¼¥È ¥Õ¥¡¥¤¥ë ¥Õ¥¡¥¤¥ë n ¥ê¥¯¥¨¥¹¥ÈÉÔÀ®¸ù¥ì¥Ý¡¼¥È ¥Õ¥¡¥¤¥ë ¥Õ¥¡¥¤¥ë n »²¾È¸µ¥ì¥Ý¡¼¥È »²¾È¸µURL »²¾È¸µURL n »²¾È¸µ¥µ¥¤¥È¥ì¥Ý¡¼¥È »²¾È¸µ¥µ¥¤¥È »²¾È¸µ¥µ¥¤¥È n »²¾È¸µ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ì¥Ý¡¼¥È »²¾È¸µURL »²¾È¸µURL n »²¾È¸µÉÔÀ®¸ù¥ì¥Ý¡¼¥È »²¾È¸µURL »²¾È¸µURL n ¸¡º÷¸ì¶ç¥ì¥Ý¡¼¥È ¸¡º÷¸ì¶ç ¸¡º÷¸ì¶ç n ¸¡º÷¸ì¥ì¥Ý¡¼¥È ¸¡º÷¸ì ¸¡º÷¸ì n ÆâÉô¸¡º÷¸ì¶ç¥ì¥Ý¡¼¥È ¸¡º÷¸ì¶ç ¸¡º÷¸ì¶ç n ÆâÉô¸¡º÷¸ì¥ì¥Ý¡¼¥È ¸¡º÷¸ì ¸¡º÷¸ì n ²¾ÁÛ¥Û¥¹¥È¥ì¥Ý¡¼¥È ²¾ÁÛ¥Û¥¹¥È ²¾ÁÛ¥Û¥¹¥È n ²¾ÁÛ¥Û¥¹¥È¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ì¥Ý¡¼¥È ²¾ÁÛ¥Û¥¹¥È ²¾ÁÛ¥Û¥¹¥È n ²¾ÁÛ¥Û¥¹¥ÈÉÔÀ®¸ù¥ì¥Ý¡¼¥È ²¾ÁÛ¥Û¥¹¥È ²¾ÁÛ¥Û¥¹¥È n ¥æ¡¼¥¶¥ì¥Ý¡¼¥È ¥æ¡¼¥¶ ¥æ¡¼¥¶ n ¥æ¡¼¥¶¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ì¥Ý¡¼¥È ¥æ¡¼¥¶ ¥æ¡¼¥¶ n ¥æ¡¼¥¶ÉÔÀ®¸ù¥ì¥Ý¡¼¥È ¥æ¡¼¥¶ ¥æ¡¼¥¶ n ¥Ö¥é¥¦¥¶½¸·× ¥Ö¥é¥¦¥¶ ¥Ö¥é¥¦¥¶ n ¥Ö¥é¥¦¥¶¥ì¥Ý¡¼¥È ¥Ö¥é¥¦¥¶ ¥Ö¥é¥¦¥¶ n OS¥ì¥Ý¡¼¥È OS OS n ¥É¥á¥¤¥ó¥ì¥Ý¡¼¥È ¥É¥á¥¤¥ó ¥É¥á¥¤¥ó n ÁÈ¿¥ÊÌ¥ì¥Ý¡¼¥È ÁÈ¿¥ ÁÈ¿¥ n ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¥ì¥Ý¡¼¥È ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É n ½êÍ×»þ´Ö¥ì¥Ý¡¼¥È ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¥ì¥Ý¡¼¥È ## Used at the bottom of the report ¥ì¥Ý¡¼¥È½ÐÎÏ¥½¥Õ¥È : ½èÍý»þ´Ö <1 ## Used in the time reports 1ñ°Ì ¤Ï ¤¢¤ë¤¤¤Ï¤½¤ÎÃÍ̤Ëþ¤òɽ¤¹ ¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô ¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô ## Used at the bottom of each non-time report: need m, f & n genders * * ¤½¤Î¾ ## Used on the pie charts: again need m, f & n genders * * ¤½¤Î¾ ## Used at the top of the report Åý·×³«»ÏÆü»þ : ²òÀÏÂоݴü´Ö : ¡Á ## Used in the General Summary ¥ê¥¯¥¨¥¹¥ÈÀ®¸ù·ï¿ô ¾åµ­¤ÎÆüÊÌÊ¿¶Ñ ¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥ÈÀ®¸ù·ï¿ô ¾åµ­¤ÎÆüÊÌÊ¿¶Ñ ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥ÉÉÔºß¥í¥°¹Ô¿ô ¥ê¥¯¥¨¥¹¥ÈÉÔÀ®¸ù·ï¿ô ¥ê¥¯¥¨¥¹¥È¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó·ï¿ô ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥ÉÉÕ¤­¥ê¥¯¥¨¥¹¥È·ï¿ô °Û¤Ê¤ë¥ê¥¯¥¨¥¹¥È¥Õ¥¡¥¤¥ë¿ô °Û¤Ê¤ë¥µ¡¼¥Ó¥¹¥Û¥¹¥È¿ô °Û¾ï¥í¥°¹Ô¿ô ÉÔɬÍ×¥í¥°¹àÌÜ¿ô ¥Ç¡¼¥¿Å¾Á÷ÎÌ ¾åµ­¤ÎÆüÊÌÊ¿¶Ñ ³ç¸ÌÆâ¤Î¿ô»ú¤Ï ±¦¤ÎÆü»þ¤Þ¤Ç¤Îľ¶á7Æü´Ö¤Î½¸·× : ľ¶á7Æü´Ö Go To ÀèÆ¬ ## Some special phrases for particular reports. ## Note to self: these phrases also occur in anlghea3.h and Pnextname(). [̤²ò·èIP¥¢¥É¥ì¥¹] [¥É¥á¥¤¥ó̤̾ÉÕÍ¿] [̤ÃΥɥᥤ¥ó̾] [¥ë¡¼¥È¥Ç¥£¥ì¥¯¥È¥ê] [̵¥Ç¥£¥ì¥¯¥È¥ê] [̵³ÈÄ¥»Ò] [¥Ç¥£¥ì¥¯¥È¥ê] ¤½¤Î¾¤ÎWindows ¤½¤Î¾¤ÎUNIX ¥í¥Ü¥Ã¥È ̤ÃÎOS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) ¥ê¥¯¥¨¥¹¥È·ï¿ô ½µ´Ö¥ê¥¯¥¨¥¹¥È·ï¿ô ¥ê¥¯¥¨¥¹¥È·ï¿ô (%) ½µ´Ö¥ê¥¯¥¨¥¹¥È·ï¿ô (%) ¥Ú¡¼¥¸¿ô ½µ´Ö¥Ú¡¼¥¸¿ô ¥Ú¡¼¥¸¿ô (%) ½µ´Ö¥Ú¡¼¥¸¿ô (%) ¥Ð¥¤¥È ? ¥Ð¥¤¥È ¥Ð¥¤¥È (½µ´Ö) ? ¥Ð¥¤¥È (½µ´Ö) ¥Ð¥¤¥È (%) ¥Ð¥¤¥È (½µ´Ö) (%) ÈÖ¹æ ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ¾å°Ì %s ¤Îɽ : * * ¾å°Ì %d %s ¤Îɽ : * * %s ¤Îɽ : ## "by" in the phrase "listing the top 3 files BY number of requests" ´ð½à¤Ï ## All requests WITH AT LEAST 10 requests ºÇ¾®¤Ï ## Different ways of doing floors ¥ê¥¯¥¨¥¹¥È·ï¿ô (ľ¶á7Æü´Ö) ¥ê¥¯¥¨¥¹¥È·ï¿ô (ľ¶á7Æü´Ö) ¥Ú¡¼¥¸¿ô (ľ¶á7Æü´Ö) ¥Ú¡¼¥¸¿ô (ľ¶á7Æü´Ö) ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô (ľ¶á7Æü´Ö) ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô (ľ¶á7Æü´Ö) ÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô (ľ¶á7Æü´Ö) ÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô (ľ¶á7Æü´Ö) % ¤ÎÄÌ¿®ÎÌ % ¤ÎÄÌ¿®ÎÌ (ľ¶á7Æü´Ö) % ¤ÎºÇÂçÄÌ¿®ÎÌ % ¤ÎºÇÂçÄÌ¿®ÎÌ (ľ¶á7Æü´Ö) (žÁ÷) ¥Ð¥¤¥È (žÁ÷) ¥Ð¥¤¥È ## ?bytes represents kbytes, Mbytes etc. ? ¥Ð¥¤¥È¤Î¥Ç¡¼¥¿Å¾Á÷ÎÌ (žÁ÷) ¥Ð¥¤¥È (ľ¶á7Æü´Ö) (žÁ÷) ¥Ð¥¤¥È (ľ¶á7Æü´Ö) ? (žÁ÷) ¥Ð¥¤¥È (ľ¶á7Æü´Ö) ºÇ½ª¤Î¥ê¥¯¥¨¥¹¥ÈÆü»þ : ºÇ½ª¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥ÈÆü»þ : ºÇ½ª¤Î¥ê¥¯¥¨¥¹¥ÈÉÔÀ®¸ùÆü»þ : ºÇ½é¤Î¥ê¥¯¥¨¥¹¥ÈÆü»þ : ºÇ½é¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥ÈÆü»þ : ºÇ½é¤ÎÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥ÈÆü»þ : ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ¥½¡¼¥È½ç¤Ï ## Used at the top of each report ¤³¤Î¥ì¥Ý¡¼¥È¤Î¥Ç¡¼¥¿½¸·×´ü´Ö : ## Used in pie charts À𷿤γÑÅÙ : ## different ways of sorting ÄÌ¿®ÎÌ Ä¾¶á7Æü´Ö¤Î¥Ç¡¼¥¿Å¾Á÷ÎÌ % ¤Î¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤Î¥ê¥¯¥¨¥¹¥È·ï¿ô % ¤ÎºÇÂç¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤ÎºÇÂç¥ê¥¯¥¨¥¹¥È·ï¿ô ¥ê¥¯¥¨¥¹¥È¿ô ľ¶á7Æü´Ö¤Î¥ê¥¯¥¨¥¹¥È·ï¿ô % ¤Î¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤Î¥Ú¡¼¥¸¥¯¥¨¥¹¥È·ï¿ô % ¤ÎºÇÂç¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤ÎºÇÂç¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô ¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î¥Ú¡¼¥¸¥ê¥¯¥¨¥¹¥È·ï¿ô % ¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô % ¤ÎºÇÂç¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤ÎºÇÂç¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È¿ô ľ¶á7Æü´Ö¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È·ï¿ô % ¤ÎÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤ÎÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô % ¤ÎºÇÂçÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤Î % ¤ÎºÇÂçÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ľ¶á7Æü´Ö¤ÎÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È·ï¿ô ºÇ½ª¥ê¥¯¥¨¥¹¥È»þ¹ï ºÇ½ª¥ê¥À¥¤¥ì¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È»þ¹ï ºÇ½ªÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È»þ¹ï ºÇ½é¤Î¥ê¥¯¥¨¥¹¥È»þ¹ï ºÇ½é¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¥ê¥¯¥¨¥¹¥È»þ¹ï ºÇ½é¤ÎÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È»þ¹ï ## 3 other ways of sorting in m, f, & n * * ¥½¡¼¥È½ç¤Ï¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È * * ¥½¡¼¥È½ç¤Ï¾õÂÖ¥³¡¼¥É * * ¥½¡¼¥È̵¤· ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ¸áÁ° ¸á¸å ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Yǯ%m·î%DÆü %H»þ%nʬ ## "Program started at" and "Analysed requests from" %Yǯ%m·î%DÆü(%w) %H»þ%nʬ ## In Daily Report %Yǯ%m·î%dÆü ## In Daily Summary %w ## In Hourly Report %Yǯ%m·î%dÆü %H»þ%nʬ%x%I»þ%oʬ ## In Hourly Summary %h»þ ## In Hour of the Week Summary %wÍËÆü %H»þ%nʬ%x%I»þ%oʬ ## In Quarter-Hour and Five-Minute Reports %Yǯ%m·î%dÆü %H»þ%nʬ%x%I»þ%oʬ ## In Quarter-Hour and Five-Minute Summaries %H»þ%nʬ%x%I»þ%oʬ ## In Weekly Report %Yǯ%m·î%dÆü ## In Monthly Report %Yǯ%m·î ## In Quarterly Report %Yǯ %m·î%x%l·î ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Yǯ ## The date (d) column in non-time reports %Yǯ%m·î%DÆü ## The date & time (D) column in non-time reports %Yǯ%m·î%DÆü %H»þ%nʬ ## In non-time reports: "including all files with requests since [date]" %Yǯ%m·î%DÆü %H»þ%nʬ ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 ·Ñ³ 101 ¥×¥í¥È¥³¥ëÊѹ¹ 1xx [¼ï¡¹¤Î¾ðÊó] 200 OK 201 ºîÀ®À®¸ù 202 ¾­Íè¤Î½èÍý¤È¤·¤Æ¼õÍý 203 Èó¸øÇ§ 204 Á÷¿®¾ðÊó̵¤· 205 ¥Ç¡¼¥¿¤Î½é´ü²½ 206 ÃÇÊÒ¾ðÊó 2xx [¼ï¡¹¤ÎÀ®¸ù] 300 Ê£¿ô¤¬³ºÅö 301 ¹±µ×Ū°Üư 302 ¾¤Ë°Üư 303 ¾¤ò»²¾È 304 ºÇ¶á¤Î¸¡º÷°ÊÍèÊѹ¹Ìµ¤· 305 ¥×¥í¥¯¥·¤ò»ÈÍѤ»¤è 306 ¥×¥í¥¯¥·¤òÊѹ¹¤»¤è 307 °ì»þŪ°Üư 3xx [¼ï¡¹¤Î¥ê¥À¥¤¥ì¥¯¥È] 400 ÉÔË¡¥ê¥¯¥¨¥¹¥È 401 Í×ǧ¾Ú 402 Í×»Ùʧ 403 ¥¢¥¯¥»¥¹¶Ø»ß 404 ¥Ú¡¼¥¸ÉG 405 ÉÔË¡¥á¥½¥Ã¥É 406 ¥Ú¡¼¥¸¤ÎÉÔµö²Ä 407 ¥×¥í¥¯¥·¤Ë¤è¤ëÍ×ǧ¾Ú 408 »þ´ÖÀÚ¤ì 409 ¥ê¥¯¥¨¥¹¥È¤Ï¥Ú¡¼¥¸¤ÈÌ·½â 410 ¥Ú¡¼¥¸ºï½üºÑ 411 Í׍µ 412 »öÁ°¾ò·ïÉÔÀ®Î© 413 ¥ê¥¯¥¨¥¹¥È¥Ç¡¼¥¿¤ÎͲá 414 ¥ê¥¯¥¨¥¹¥È¥Õ¥¡¥¤¥ë̾¤ÎŤµÄ¶²á 415 ̤¥µ¥Ý¡¼¥È¤Î¥á¥Ç¥£¥¢ 416 ¥ê¥¯¥¨¥¹¥ÈÎΰè°Û¾ï 417 Í×µáÉÔÀ®¸ù 4xx [¼ï¡¹¤Î¥æ¡¼¥¶¥¨¥é¡¼] 500 ¥µ¡¼¥ÐÆâÉô¥¨¥é¡¼ 501 ̤¥µ¥Ý¡¼¥È¥ê¥¯¥¨¥¹¥È 502 ¥µ¡¼¥Ð³°Éô¥¨¥é¡¼ 503 °ì»þŪ±þÅúÉÔǽ 504 ¥²¡¼¥È¥¦¥§¥¤»þ´ÖÀÚ¤ì 505 ̤¥µ¥Ý¡¼¥ÈHTTP¥Ð¡¼¥¸¥ç¥ó 506 ¥ê¥À¥¤¥ì¥¯¥ÈÉÔÀ®¸ù 5xx [¼ï¡¹¤Î¥µ¡¼¥Ð¥¨¥é¡¼] xxx [¤½¤Î¾] analog-ce-6.0.17/lang/jpedesc.txt000066400000000000000000000100211406366436600165420ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Ç¯ÅÙÊ̤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Quarterly Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢4Ⱦ´üËè¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Monthly Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢·îÊ̤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Weekly Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢½µÊ̤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Daily Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢ÆüÊ̤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Hourly Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢»þ´ÖÊ̤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Quarter-Hour Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢15ʬ´Ö³Ö¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Five-Minute Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢5ʬ´Ö³Ö¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Daily Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´¤Æ¤Î½µ¤ÎÍËÆüÊÌÁíϤÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Hourly Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´¤Æ¤ÎÆü¤Î»þ´ÖÊÌÁíϤÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Hour of the Week Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´¤Æ¤Î½µ¤Î»þ´ÖÊÌÁíϤÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Quarter-Hour Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´¤Æ¤ÎÆü¤Î15ʬ´Ö³Ö¤ÎÁíϤÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Five-Minute Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´¤Æ¤ÎÆü¤Î5ʬ´Ö³Ö¤ÎÁíϤÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # General Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´ÂΤÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Request Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥µ¥¤¥È¤Î¥Õ¥¡¥¤¥ë¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Redirection Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Ê̤Υե¡¥¤¥ë¤Ø¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤·¤¿¥Õ¥¡¥¤¥ë¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£(Ä̾¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤ò¶¯À©¤µ¤»¤ë¡¢ºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å¤Î̵¤¤¥Ç¥£¥ì¥¯¥È¥ê¤«¡¢CGI ¥¹¥¯¥ê¥×¥È¤Ç¤¢¤ë¡£) # Failure Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¡Ö¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤é¤Ê¤¤¡×Åù¤Î¥¨¥é¡¼¤òÀ¸¤¸¤µ¤»¤ë¥Õ¥¡¥¤¥ë¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # File Type Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Directory Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¤¬¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£(³Æ¥Ç¥£¥ì¥¯¥È¥ê¤Î¿ôÃͤÏÁ´¤Æ¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤â´Þ¤ß¤Þ¤¹¡£) # Host Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¥³¥ó¥Ô¥å¡¼¥¿¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Host Redirection Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢ÊÌ¥Õ¥¡¥¤¥ë¤Ø¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤µ¤ì¤¿¥³¥ó¥Ô¥å¡¼¥¿¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Host Failure Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Ë¼ºÇÔ¤·¤¿¥³¥ó¥Ô¥å¡¼¥¿¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Domain Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¥³¥ó¥Ô¥å¡¼¥¿¤Î¹ñÊÌÅý·×¤òɽ¤·¤Þ¤¹¡£ # Referrer Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢(¥ê¥ó¥¯¡¢¤¢¤ë¤¤¤Ï¤³¤Î¥µ¥¤¥È¤Î²èÁü¤ò´Þ¤à¥Ú¡¼¥¸¤òé¤Ã¤Æ¤­¤¿) »²¾È¸µ¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Referring Site Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢»²¾È¸µ¤Î¥µ¡¼¥Ð¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Redirected Referrer Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤òµ¯¤³¤·¤¿»²¾È¸µ¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Failed Referrer Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¤³¤Î¥µ¥¤¥È¤Ø¤Î¥ê¥ó¥¯ÀÚ¤ì¤Î»²¾È¸µ¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Browser Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤Î¥Ö¥é¥¦¥¶¡¼¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Virtual Host Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¤³¤Î¥µ¥¤¥È¤Î³Æ²¾Áۥɥᥤ¥ó¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Virtual Host Redirection Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢³Æ²¾Áۥɥᥤ¥ó¤Ø¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤µ¤ì¤¿¥ê¥¯¥¨¥¹¥È¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Virtual Host Failure Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢³Æ²¾Áۥɥᥤ¥ó¤Ø¤ÎÉÔÀ®¸ù¥ê¥¯¥¨¥¹¥È¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # User Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤¬Ç§¾Ú¤µ¤ì¤ë¤«¥¯¥Ã¥­¡¼¤ÇǧÄꤵ¤ì¤¿¤È¤­¡¢¥Õ¥¡¥¤¥ë¤ò¥ê¥¯¥¨¥¹¥È¤·¤¿¥æ¡¼¥¶¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # User Redirection Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢ÊÌ¥Õ¥¡¥¤¥ë¤Ø¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤µ¤ì¤¿¥æ¡¼¥¶¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # User Failure Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥ê¥¯¥¨¥¹¥È¤Ë¼ºÇÔ¤·¤¿¥æ¡¼¥¶¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Organisation Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¤ò¥ê¥¯¥¨¥¹¥È¤ò¤·¤¿¥³¥ó¥Ô¥å¡¼¥¿¤Î¥É¥á¥¤¥ó¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Search Query Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤¬¤³¤Î¥µ¥¤¥È¤òȯ¸«¤¹¤ë¤Î¤Ë¡¢¸¡º÷¥¨¥ó¥¸¥ó¤Ç»ÈÍѤ·¤¿¸¡º÷¸ì¶ç¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Search Word Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤¬¤³¤Î¥µ¥¤¥È¤òȯ¸«¤¹¤ë¤Î¤Ë¡¢¸¡º÷¥¨¥ó¥¸¥ó¤Ç»ÈÍѤ·¤¿Ã±¸ì¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Internal Search Query Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤¬¤³¤Î¥µ¥¤¥ÈÆâ¤Ç¡¢¥¹¥¯¥ê¥×¥È¤Ç»ÈÍѤ·¤¿¸¡º÷¸ì¶ç¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Internal Search Word Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤¬¤³¤Î¥µ¥¤¥ÈÆâ¤Ç¡¢¥¹¥¯¥ê¥×¥È¤Ç»ÈÍѤ·¤¿Ã±¸ì¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Browser Summary ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤Î»ÈÍѤ·¤¿¥Ö¥é¥¦¥¶¡¼¤Î¥Ù¥ó¥À¡¼¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Operating System Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥æ¡¼¥¶¤Î»ÈÍѤ·¤¿ OS ¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # File Size Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Status Code Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢Á´¤Æ¤Î¥ê¥¯¥¨¥¹¥È¤Î HTTP ¾õÂÖ¥³¡¼¥É¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ # Processing Time Report ¤³¤Î¥ì¥Ý¡¼¥È¤Ï¡¢À®¸ù¥ê¥¯¥¨¥¹¥È¤Î½èÍý»þ´Ö¤ÎÅý·×¤òɽ¤·¤Þ¤¹¡£ analog-ce-6.0.17/lang/jpedom.tab000066400000000000000000000125361406366436600163470ustar00rootroot00000000000000# °ìÈ̤ª¤è¤Ó´ðÈץɥᥤ¥ó aero 2 ¹Ò¶õ±¿Í¢¶È³¦ arpa 1 ¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥¤¥ó¥Õ¥é biz 2 ¥Ó¥¸¥Í¥¹ com 2 ¾¦¶ÈÁÈ¿¥ coop 2 ¶¨Æ±Áȹç edu 2 ÊÆ¹ñ¹âÅù¶µ°éµ¡´Ø gov 2 ÊÆ¹ñÀ¯Éܵ¡´Ø info 2 °ìÈ̡ʾðÊó¡Ë int 2 ¹ñºÝµ¡´Ø mil 2 ÊÆ¹ñ·³»öµ¡´Ø museum 2 Çîʪ´Û/Èþ½Ñ´Û name 3 ¸Ä¿Í̾ net 2 ¥Í¥Ã¥È¥ï¡¼¥¯ org 2 Èó±ÄÍøÁÈ¿¥ pro 3 ÀìÌç²È # ¹ñÊÌ¥³¡¼¥É¥É¥á¥¤¥ó̾ ac 1 ¥¢¥»¥ó¥·¥ç¥óÅç ad 2 ¥¢¥ó¥É¥é²¦¹ñ ae 3 ¥¢¥é¥Ö¼óĹ¹ñϢˮ af 1 ¥¢¥Õ¥¬¥Ë¥¹¥¿¥ó ag 2 ¥¢¥ó¥Æ¥£¥°¥¡¡¦¥Ð¡¼¥Ö¡¼¥À ai 1 ¥¢¥ó¥®¥é al 1 ¥¢¥ë¥Ð¥Ë¥¢ am 2 ¥¢¥ë¥á¥Ë¥¢ an 1 ¥ª¥é¥ó¥ÀÎÎ¥¢¥ó¥Æ¥£¥ë ao 1 ¥¢¥ó¥´¥é aq 1 Æî¶Ë ar 3 ¥¢¥ë¥¼¥ó¥Á¥ó as 1 ¥¢¥á¥ê¥«¥ó¥µ¥â¥¢ at 3 ¥ª¡¼¥¹¥È¥ê¥¢ au 3 ¥ª¡¼¥¹¥È¥é¥ê¥¢ aw 1 ¥¢¥ë¥Ð az 1 ¥¢¥¼¥ë¥Ð¥¤¥¸¥ã¥ó ba 3 ¥Ü¥¹¥Ë¥¢¡¦¥Ø¥ë¥Ä¥§¥´¥Ó¥Ê bb 2 ¥Ð¥ë¥Ð¥É¥¹ bd 1 ¥Ð¥ó¥°¥é¥Ç¥·¥å be 2 ¥Ù¥ë¥®¡¼ bf 1 ¥Ö¥ë¥­¥Ê¥Õ¥¡¥½ bg 2 ¥Ö¥ë¥¬¥ê¥¢ bh 1 ¥Ð¡¼¥ì¡¼¥ó bi 1 ¥Ö¥ë¥ó¥¸ bj 1 ¥Ù¥Ê¥ó (µì¥À¥Û¡¼¥á) bm 1 ¥Ð¡¼¥ß¥å¡¼¥À bn 1 ¥Ö¥ë¥Í¥¤ bo 3 ¥Ü¥ê¥Ó¥¢ br 3 ¥Ö¥é¥¸¥ë bs 1 ¥Ð¥Ï¥Þ bt 1 ¥Ö¡¼¥¿¥ó bv 1 ¥Ö¡¼¥ÙÅç bw 1 ¥Ü¥Ä¥ï¥Ê by 1 ¥Ù¥é¥ë¡¼¥· bz 1 ¥Ù¥ê¡¼¥º ca 3 ¥«¥Ê¥À cc 1 ¥³¥³¥¹ (¥­¡¼¥ê¥ó¥°) ½ôÅç cd 1 ¥³¥ó¥´Ì±¼ç¶¦Ï¹ñ (µì¥¶¥¤¡¼¥ë) cf 1 Ãæ±û¥¢¥Õ¥ê¥«¶¦Ï¹ñ cg 1 ¥³¥ó¥´ ch 2 ¥¹¥¤¥¹ ci 1 ¥³¡¼¥È¥¸¥Ü¥¢¡¼¥ë (µì¾Ý²ç³¤´ß) ck 1 ¥¯¥Ã¥¯½ôÅç cl 2 ¥Á¥ê cm 1 ¥«¥á¥ë¡¼¥ó cn 3 Ãæ²Ú¿Í̱¶¦Ï¹ñ co 3 ¥³¥í¥ó¥Ó¥¢ cr 3 ¥³¥¹¥¿¥ê¥« cs 1 ¥»¥ë¥Ó¥¢¤¢¤ë¤¤¤Ï¥â¥ó¥Æ¥Í¥°¥í cu 1 ¥­¥å¡¼¥Ð cv 1 ¥«¡¼¥Ý¥Ù¥ë¥Ç cx 1 ¥¯¥ê¥¹¥Þ¥¹Åç cy 3 ¥­¥×¥í¥¹ cz 2 ¥Á¥§¥³ de 2 ¥É¥¤¥Ä dj 1 ¥¸¥Ö¥Á dk 2 ¥Ç¥ó¥Þ¡¼¥¯ dm 2 ¥É¥ß¥Ë¥« do 2 ¥É¥ß¥Ë¥«¶¦Ï¹ñ dz 1 ¥¢¥ë¥¸¥§¥ê¥¢ ec 3 ¥¨¥¯¥¢¥É¥ë ee 2 ¥¨¥¹¥È¥Ë¥¢ eg 3 ¥¨¥¸¥×¥È eh 1 À¾¥µ¥Ï¥é er 1 ¥¨¥ê¥È¥ê¥¢ es 2 ¥¹¥Ú¥¤¥ó et 1 ¥¨¥Á¥ª¥Ô¥¢ fi 2 ¥Õ¥£¥ó¥é¥ó¥É fj 3 ¥Õ¥£¥¸¡¼ fk 1 ¥Õ¥©¡¼¥¯¥é¥ó¥É½ôÅç fm 1 ¥ß¥¯¥í¥Í¥·¥¢ fo 1 ¥Õ¥§¥í¡¼½ôÅç fr 2 ¥Õ¥é¥ó¥¹ fx 1 ¥Õ¥é¥ó¥¹ (²¤½£Ï¢¹çËÜÉô) ga 1 ¥¬¥Ü¥ó gb 1 ¥Ö¥ê¥Æ¥ó gd 1 ¥°¥ì¥Ê¥À ge 1 ¥°¥ë¥¸¥¢ gf 1 ¥Õ¥é¥ó¥¹ÎÎ¥®¥Ë¥¢ gg 1 ¥Á¥ã¥Í¥ë½ôÅ祬¡¼¥ó¥¸¥£Åç gh 3 ¥¬¡¼¥Ê gi 1 ¥¸¥Ö¥é¥ë¥¿¥ë gl 1 ¥°¥ê¡¼¥ó¥é¥ó¥É gm 1 ¥¬¥ó¥Ó¥¢ gn 1 ¥®¥Ë¥¢ gp 1 ¥°¥¢¥À¥ë¡¼¥× gq 1 ÀÖÆ»¥®¥Ë¥¢ gr 2 ¥®¥ê¥·¥ã gs 1 ¥µ¥¦¥¹¥¸¥ç¡¼¥¸¥¢¡¦¥µ¥¦¥¹¥µ¥ó¥É¥¤¥Ã¥Á½ôÅç gt 3 ¥°¥¢¥Æ¥Þ¥é gu 1 ¥°¥¢¥à gw 1 ¥®¥Ë¥¢¥Ó¥µ¥ª gy 1 ¥¬¥¤¥¢¥Ê hk 3 ¹á¹Á hm 1 ¥Ï¡¼¥É¡¦¥Þ¥¯¥É¥Ê¥ë¥É½ôÅç hn 2 ¥Û¥ó¥¸¥å¥é¥¹ hr 2 ¥¯¥í¥¢¥Á¥¢ ht 1 ¥Ï¥¤¥Á hu 2 ¥Ï¥ó¥¬¥ê¡¼ id 3 ¥¤¥ó¥É¥Í¥·¥¢ ie 2 ¥¢¥¤¥ë¥é¥ó¥É il 3 ¥¤¥¹¥é¥¨¥ë im 1 ¥Þ¥óÅç in 3 ¥¤¥ó¥É io 1 ±ÑÎÎ¥¤¥ó¥ÉÍÎÃϰè iq 1 ¥¤¥é¥¯ ir 1 ¥¤¥é¥ó is 2 ¥¢¥¤¥¹¥é¥ó¥É it 2 ¥¤¥¿¥ê¥¢ je 1 ¥Á¥ã¥Í¥ë½ôÅ祸¥ã¡¼¥¸¡¼Åç jm 3 ¥¸¥ã¥Þ¥¤¥« jo 3 ¥è¥ë¥À¥ó jp 3 ÆüËÜ ke 3 ¥±¥Ë¥¢ kg 1 ¥­¥ë¥®¥¹¥¿¥ó kh 1 ¥«¥ó¥Ü¥¸¥¢ ki 1 ¥­¥ê¥Ð¥¹ km 1 ¥³¥â¥í kn 1 ¥»¥ó¥È¥¯¥ê¥¹¥È¥Õ¥¡¡¼¡¦¥Í¥¤¥Ó¥¹ kp 1 Ä«Á¯Ì±¼ç¼çµÁ¶¦Ï¹ñ kr 3 Âç´Ú̱¹ñ kw 3 ¥¯¥¦¥§¡¼¥È ky 1 ¥±¥¤¥Þ¥ó½ôÅç kz 1 ¥«¥¶¥Õ¥¹¥¿¥ó la 1 ¥é¥ª¥¹ lb 3 ¥ì¥Ð¥Î¥ó lc 1 ¥»¥ó¥È¥ë¥·¥¢ li 2 ¥ê¥Ò¥Æ¥ó¥·¥å¥¿¥¤¥ó lk 1 ¥¹¥ê¥é¥ó¥« lr 1 ¥ê¥Ù¥ê¥¢ ls 1 ¥ì¥½¥È lt 2 ¥ê¥È¥¢¥Ë¥¢ lu 2 ¥ë¥¯¥»¥ó¥Ö¥ë¥¯ lv 2 ¥é¥È¥Ó¥¢ ly 1 ¥ê¥Ó¥¢ ma 1 ¥â¥í¥Ã¥³ mc 2 ¥â¥Ê¥³ md 1 ¥â¥ë¥É¥Ð mg 1 ¥Þ¥À¥¬¥¹¥«¥ë mh 1 ¥Þ¡¼¥·¥ã¥ë½ôÅç mk 3 ¥Þ¥±¥É¥Ë¥¢ ml 1 ¥Þ¥ê mm 1 ¥ß¥ã¥ó¥Þ¡¼ mn 1 ¥â¥ó¥´¥ë mo 1 ¥Þ¥«¥ª mp 1 Ë̥ޥꥢ¥Ê½ôÅç mq 1 ¥Þ¥ë¥Á¥Ë¡¼¥¯Åç mr 1 ¥â¡¼¥ê¥¿¥Ë¥¢ ms 1 ¥â¥ó¥È¥»¥é¥È mt 3 ¥Þ¥ë¥¿ mu 1 ¥â¡¼¥ê¥·¥ã¥¹ mv 1 ¥â¥ë¥Ç¥£¥Ö mw 1 ¥Þ¥é¥¦¥¤ mx 3 ¥á¥­¥·¥³ my 3 ¥Þ¥ì¡¼¥·¥¢ mz 1 ¥â¥¶¥ó¥Ó¡¼¥¯ na 1 ¥Ê¥ß¥Ó¥¢ nc 1 ¥Ë¥å¡¼¥«¥ì¥É¥Ë¥¢ ne 1 ¥Ë¥¸¥§¡¼¥ë nf 1 ¥Î¡¼¥Õ¥©¡¼¥¯Åç ng 1 ¥Ê¥¤¥¸¥§¥ê¥¢ ni 3 ¥Ë¥«¥é¥°¥¢ nl 2 ¥ª¥é¥ó¥À no 2 ¥Î¥ë¥¦¥§¡¼ np 1 ¥Í¥Ñ¡¼¥ë nr 1 ¥Ê¥¦¥ë nu 1 ¥Ë¥¦¥¨ nz 3 ¥Ë¥å¡¼¥¸¡¼¥é¥ó¥É om 1 ¥ª¥Þ¡¼¥ó pa 3 ¥Ñ¥Ê¥Þ pe 3 ¥Ú¥ë¡¼ pf 1 ¥Õ¥é¥ó¥¹ÎΥݥê¥Í¥·¥¢ pg 3 ¥Ñ¥×¥¢¥Ë¥å¡¼¥®¥Ë¥¢ ph 3 ¥Õ¥£¥ê¥Ô¥ó pk 3 ¥Ñ¥­¥¹¥¿¥ó pl 3 ¥Ý¡¼¥é¥ó¥É pm 1 ¥µ¥ó¥Ô¥¨¡¼¥ëÅ硦¥ß¥¯¥í¥óÅç pn 1 ¥Ô¥È¥±¥¢¥óÅç pr 1 ¥×¥¨¥ë¥È¥ê¥³ ps 1 ¥Ñ¥ì¥¹¥Á¥Ê pt 2 ¥Ý¥ë¥È¥¬¥ë pw 1 ¥Ñ¥é¥ª py 3 ¥Ñ¥é¥°¥¢¥¤ qa 1 ¥«¥¿¡¼¥ë re 1 ¥ì¥æ¥Ë¥ª¥ó ro 2 ¥ë¡¼¥Þ¥Ë¥¢ ru 2 ¥í¥·¥¢Ï¢Ë® rw 1 ¥ë¥ï¥ó¥À sa 3 ¥µ¥¦¥¸¥¢¥é¥Ó¥¢ sb 1 ¥½¥í¥â¥ó½ôÅç sc 1 ¥»¥¤¥·¥§¥ë sd 1 ¥¹¡¼¥À¥ó se 2 ¥¹¥¦¥§¡¼¥Ç¥ó sg 3 ¥·¥ó¥¬¥Ý¡¼¥ë sh 1 ¥»¥ó¥È¥Ø¥ì¥ÊÅç si 2 ¥¹¥í¥Ù¥Ë¥¢ sj 1 ¥¹¥Ð¡¼¥ë¥Ð¥ë½ôÅ硦¥ä¥ó¥Þ¥¤¥¨¥óÅç sk 2 ¥¹¥í¥Ð¥­¥¢ sl 1 ¥·¥¨¥é¥ì¥ª¥Í sm 1 ¥µ¥ó¥Þ¥ê¥Î sn 1 ¥»¥Í¥¬¥ë so 1 ¥½¥Þ¥ê¥¢ sr 1 ¥¹¥ê¥Ê¥à st 1 ¥µ¥ó¥È¥á¡¦¥×¥ê¥ó¥·¥Ú su 2 µì¥½¥Ó¥¨¥ÈϢˮ sv 3 ¥¨¥ë¥µ¥ë¥Ð¥É¥ë sy 1 ¥·¥ê¥¢ sz 1 ¥¹¥ï¥¸¥é¥ó¥É tc 1 ¥¿¡¼¥³¥¹½ôÅ硦¥«¥¤¥³¥¹½ôÅç td 1 ¥Á¥ã¥É tf 1 ¥Õ¥é¥ó¥¹ÎÎ¶ËÆî½ôÅç tg 1 ¥È¡¼¥´ th 3 ¥¿¥¤ tj 1 ¥¿¥¸¥­¥¹¥¿¥ó tk 1 ¥È¥±¥é¥¦½ôÅç tl 1 Åì¥Á¥â¡¼¥ë tm 1 ¥È¥ë¥¯¥á¥Ë¥¹¥¿¥ó tn 1 ¥Á¥å¥Ë¥¸¥¢ to 1 ¥È¥ó¥¬ tp 1 Åì¥Æ¥£¥â¡¼¥ë tr 3 ¥È¥ë¥³ tt 3 ¥È¥ê¥Ë¥À¡¼¥É¡¦¥È¥Ð¥´ tv 1 ¥Ä¥Ð¥ë tw 3 ÂæÏÑ tz 1 ¥¿¥ó¥¶¥Ë¥¢ ua 3 ¥¦¥¯¥é¥¤¥Ê ug 3 ¥¦¥¬¥ó¥À uk 3 ¥¤¥®¥ê¥¹ um 1 ÊÆÎÎÂÀÊ¿ÍνôÅç us 4 ¥¢¥á¥ê¥«¹ç½°¹ñ uy 3 ¥¦¥ë¥°¥¢¥¤ uz 1 ¥¦¥º¥Ù¥­¥¹¥¿¥ó va 1 ¥Ð¥Á¥«¥ó»Ô¹ñ vc 1 ¥»¥ó¥È¥Ó¥ó¥»¥ó¥È¤ª¤è¤Ó¥°¥ì¥Ê¥Ç¥£¡¼¥ó½ôÅç ve 3 ¥Ù¥Í¥º¥¨¥é vg 1 ±ÑÎΥС¼¥¸¥ó½ôÅç vi 1 ÊÆÎΥС¼¥¸¥ó½ôÅç vn 1 ¥Ù¥È¥Ê¥à vu 1 ¥Ð¥Ì¥¢¥Ä wf 1 ¥ï¥ê¥¹¡¦¥Õ¥Æ¥å¥Ê½ôÅç ws 1 À¾¥µ¥â¥¢ ye 1 ¥¤¥¨¥á¥ó yt 1 ¥Þ¥è¥Ã¥ÈÅç yu 3 ¥æ¡¼¥´¥¹¥é¥Ó¥¢ za 3 Æî¥¢¥Õ¥ê¥«¶¦Ï¹ñ zm 1 ¥¶¥ó¥Ó¥¢ zr 1 ¥³¥ó¥´Ì±¼ç¶¦Ï¹ñ (µì¥¶¥¤¡¼¥ë) zw 3 ¥¸¥ó¥Ð¥Ö¥¨ analog-ce-6.0.17/lang/jpeform.html000066400000000000000000000210521406366436600167220ustar00rootroot00000000000000 Analog ¥Õ¥©¡¼¥à¡¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹

Analog ¥Õ¥©¡¼¥à¡¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹


1. ¥ì¥Ý¡¼¥È¤ÎÁªÂò

Ãí°Õ : °Ê²¼¤Î»Ø¼¨¤Ë½¾¤Ã¤Æ´Ä¶­¤òÀßÄꤷ½ª¤ï¤ë¤Þ¤Ç¡¢ ¤³¤Î¥Õ¥©¡¼¥à¤Ïưºî¤·¤Ê¤¤¤Ç¤·¤ç¤¦¡£Î㤨¤Ð¡¢¥Ü¥¿¥ó¤µ¤¨¸½¤ì¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£ ´Ä¶­ÀßÄê¤ò½ªÎ»¤·¤¿¸å¡¢¤³¤ÎʸÀá¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£
¸Ä¡¹¤Î¥ì¥Ý¡¼¥È¤Î¾ÜºÙ¤Ê°ÕÌ£¤Ë¤Ä¤¤¤Æ¤Ï analog ¤Î¥Û¡¼¥à¥Ú¡¼¥¸ ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤É¤Î¥ì¥Ý¡¼¥È¤òɽ¼¨¤·¤Þ¤¹¤«?


[On] [Off] Á´ÂΤγµÍ×
[On] [Off] ·îÊÌ¥ì¥Ý¡¼¥È
[On] [Off] ½µÊÌ¥ì¥Ý¡¼¥È
[On] [Off] ÍËÆüÊ̳µÍ×
[On] [Off] ÆüÊÌ¥ì¥Ý¡¼¥È
[On] [Off] »þ´ÖÊ̳µÍ×
[On] [Off] »þ´ÖÊÌ¥ì¥Ý¡¼¥È
[On] [Off] 15ʬ´Ö³Ö¥ì¥Ý¡¼¥È
[On] [Off] ¥É¥á¥¤¥ó¥ì¥Ý¡¼¥È
[On] [Off] ÁÈ¿¥ÊÌ¥ì¥Ý¡¼¥È
[On] [Off] ¥Ç¥£¥ì¥¯¥È¥ê¥ì¥Ý¡¼¥È
[On] [Off] ¥Õ¥¡¥¤¥ë¼ïÎàÊÌ¥ì¥Ý¡¼¥È
[On] [Off] ¥ê¥¯¥¨¥¹¥È¥ì¥Ý¡¼¥È
[On] [Off] ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¥ì¥Ý¡¼¥È
[On] [Off] »²¾È¸µ¥ì¥Ý¡¼¥È
[On] [Off] ¸¡º÷¸ì¶ç¥ì¥Ý¡¼¥È
[On] [Off] ¸¡º÷¸ì¥ì¥Ý¡¼¥È
[On] [Off] ¥Û¥¹¥È¥ì¥Ý¡¼¥È
[On] [Off] ¥Ö¥é¥¦¥¶¥ì¥Ý¡¼¥È
[On] [Off] ¥Ö¥é¥¦¥¶¤Î³µÍ×
[On] [Off] OS ¥ì¥Ý¡¼¥È
[On] [Off] ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¥ì¥Ý¡¼¥È

¥×¥í¥°¥é¥à¤Î¼Â¹Ô :
¤â¤·¤¯¤Ï¡¢¸Ä¡¹¤Î¥ì¥Ý¡¼¥È¤Ë¤Ä¤¤¤Æ¡¢ °Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£ ¤Ï¡¢10M¥Ð¥¤¥È°Ê¾å¤Î¹àÌܤòɽ¼¨¤·¤Þ¤¹¡£Æ±ÍÍ¤Ë ¤Ï¡¢¥Ð¥¤¥È¿ô¤¬Â¿¤¤Êý¤«¤é¾å°Ì 50 °Ì¤òɽ¼¨¤·¤Þ¤¹¡£


2. ¥ì¥Ý¡¼¥È¤Î¾ÜºÙ¥ª¥×¥·¥ç¥ó

¥É¥á¥¤¥ó¥ì¥Ý¡¼¥È¤Î¥ª¥×¥·¥ç¥ó

¥É¥á¥¤¥ó¥ì¥Ý¡¼¥È¤Î¥½¡¼¥È½ç
¾¯¤Ê¤¯¤È¤â °Ê¾å¤Î¥É¥á¥¤¥ó¤òÁ´¤Æ´Þ¤à¡£

ÁÈ¿¥ÊÌ¥ì¥Ý¡¼¥È¤Î¥ª¥×¥·¥ç¥ó

ÁÈ¿¥ÊÌ¥ì¥Ý¡¼¥È¤Î¥½¡¼¥È½ç
¾¯¤Ê¤¯¤È¤â °Ê¾å¤ÎÁÈ¿¥¤òÁ´¤Æ´Þ¤à¡£

¥Ç¥£¥ì¥¯¥È¥ê¥ì¥Ý¡¼¥È¤Î¥ª¥×¥·¥ç¥ó

¥Ç¥£¥ì¥¯¥È¥ê¥ì¥Ý¡¼¥È¤Î¥½¡¼¥È½ç
¾¯¤Ê¤¯¤È¤â °Ê¾å¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òÁ´¤Æ´Þ¤à¡£

¥ê¥¯¥¨¥¹¥È¥ì¥Ý¡¼¥È¤Î¥ª¥×¥·¥ç¥ó

¥ê¥¯¥¨¥¹¥È¥ì¥Ý¡¼¥È¤Î¥½¡¼¥È½ç
¾¯¤Ê¤¯¤È¤â °Ê¾å¤Î¥Õ¥¡¥¤¥ë¤òÁ´¤Æ´Þ¤à¡£
ɽ¼¨¤Ï¡¢ ¤òÂоݤȤ¹¤ë¡£

»²¾È¸µ¥ì¥Ý¡¼¥È¤Î¥ª¥×¥·¥ç¥ó

»²¾È¸µ¥ì¥Ý¡¼¥È¤Î¥½¡¼¥È½ç
¾¯¤Ê¤¯¤È¤â °Ê¾å¤Î»²¾È¸µ URL ¤òÁ´¤Æ´Þ¤à¡£

3. ¥í¥°¥Õ¥¡¥¤¥ë¤ÎÉôʬ²òÀÏ

ÆÃÄêÆü»þ¤Î¤ß
ÆÃÄêÆü»þ¤Î¥ê¥¯¥¨¥¹¥È¤À¤±¤ò²òÀϤ¹¤ë»ö¤â²Äǽ¤Ç¤¹¡£ ²òÀϤ¹¤ëÆüÉÕ¤ÎÈϰϤò°Ê²¼¤Î¤è¤¦¤Ë yymmdd ¤Î·Á¤ÇÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£Îã : 980301 ¤Ï 1998ǯ3·î1Æü (°ìÊý¤ÎÈϰϤÀ¤±¤òÀ©¸Â¤·¤¿¤¤¾ì¹ç¤Ï¡¢ ÊÒÊý¤Î¥Õ¥£¡¼¥ë¥É¤À¤±¤òËä¤á¤Æ¤¯¤À¤µ¤¤)
¤«¤é ¤Þ¤Ç

ÆÃÄê¤Î¥Õ¥¡¥¤¥ë¤Î¤ß
°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤Î¤ß¤òÂоݤȤ·¤Þ¤¹ (¥³¥ó¥Þ¤Ç¶èÀڤäÆÎóµó¤·¤Æ¤¯¤À¤µ¤¤¡£ ¥ï¥¤¥ë¥É¥«¡¼¥É¤È¤·¤Æ * ¤ò´Þ¤á¤ë»ö¤¬¤Ç¤­¤Þ¤¹)

°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤Ï½ü³°¤·¤Þ¤¹¡£


4. ¥ì¥¤¥¢¥¦¥È

¤¢¤Ê¤¿¤ÎÁÈ¿¥Ì¾ (¥Ú¡¼¥¸¤Î¥¿¥¤¥È¥ëÍÑ)

ÁÈ¿¥¤Î¥Û¡¼¥à¥Ú¡¼¥¸ (ÉÔÍפξì¹ç¤Ï¶õÇò¤Î¤Þ¤Þ¤Ë¤·¤Æ¤¯¤À¤µ¤¤)
URL :


analog-ce-6.0.17/lang/jpj.cfg000066400000000000000000000042001406366436600156320ustar00rootroot00000000000000LANGUAGE JAPANESE-JIS SUBDOMAIN ad.jp $B4IM}AH?%(J SUBDOMAIN ac.jp $BBg3X!&@lLg3X9;$J$I(J SUBDOMAIN co.jp $B4k6H(J SUBDOMAIN go.jp $B@/I\5!4X(J SUBDOMAIN or.jp $B3Fk8)(J SUBDOMAIN akita.jp $B=)ED8)(J SUBDOMAIN yamagata.jp $B;37A8)(J SUBDOMAIN fukushima.jp $BJ!Eg8)(J SUBDOMAIN ibaraki.jp $B0q>k8)(J SUBDOMAIN tochigi.jp $BFJLZ8)(J SUBDOMAIN gunma.jp $B72GO8)(J SUBDOMAIN saitama.jp $B:k6L8)(J SUBDOMAIN chiba.jp $B@iMU8)(J SUBDOMAIN tokyo.jp $BEl5~ET(J SUBDOMAIN kanagawa.jp $B?@F`@n8)(J SUBDOMAIN niigata.jp $B?73c8)(J SUBDOMAIN toyama.jp $BIY;38)(J SUBDOMAIN ishikawa.jp $B@P@n8)(J SUBDOMAIN fukui.jp $BJ!0f8)(J SUBDOMAIN yamanashi.jp $B;3M|8)(J SUBDOMAIN nagano.jp $BD9Ln8)(J SUBDOMAIN gifu.jp $B4tIl8)(J SUBDOMAIN shizuoka.jp $B@E2,8)(J SUBDOMAIN aichi.jp $B0&CN8)(J SUBDOMAIN mie.jp $B;0=E8)(J SUBDOMAIN shiga.jp $B<"2l8)(J SUBDOMAIN kyoto.jp $B5~ETI\(J SUBDOMAIN osaka.jp $BBg:eI\(J SUBDOMAIN hyogo.jp $BJ<8K8)(J SUBDOMAIN nara.jp $BF`NI8)(J SUBDOMAIN wakayama.jp $BOB2N;38)(J SUBDOMAIN tottori.jp $BD;8E20;T(J SUBDOMAIN kobe.jp $B?@8M;T(J SUBDOMAIN kitakyushu.jp $BKL6e=#;T(J analog-ce-6.0.17/lang/jpj.lng000066400000000000000000000357631406366436600156750ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Japanese version by Kaori Chikenji, ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp), ## Motonobu Takahashi (monyo@home.monyo.com), ## and Kazuto Ishigaki (ishigaki-ml@factory.gr.jp) 2002 Feb. 24 ## ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp) 2004 Feb. 18 ## ## Note: Be careful to use the same character set in all the configuration ## files, i.e., jp?.lng (this file), jp?.cfg, jp?dom.tab, jp?desc.txt. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP *ISO-2022-JP ## Abbreviations for the day and month names. $BF|(B $B7n(B $B2P(B $B?e(B $BLZ(B $B6b(B $BEZ(B 1 2 3 4 5 6 7 8 9 10 11 12 ## Next some standard common words. ## Abbreviation for "week beginning" $B=5@hF,F|(B $BG/(B ## Quarter of a year 4$BH>4|(B $B7n(B $BF|(B $BF|(B $B;~4V(B $BJ,(B $BJ,(B $BIC(B $BIC(B $B%P%$%H(B $B%P%$%H(B ## ?bytes represents kbytes, Mbytes etc. ?$B%P%$%H(B $B%j%/%(%9%H(B $B%j%/%(%9%H(B $BG/7nF|(B ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 $BG/7nF|(B $B;~4VBS(B $B;~(B $B3+;OF|(B $B3+;O;~9o(B $B:G=*%"%/%;%9F|;~(B $B:G=*%"%/%;%9;~9o(B $B%U%!%$%k(B $B%U%!%$%k(B $B%[%9%H(B $B%[%9%H(B $B2>A[%[%9%H(B $B2>A[%[%9%H(B $B%G%#%l%/%H%j(B $B%G%#%l%/%H%j(B $B%I%a%$%s(B $B%I%a%$%s(B $BAH?%(B $BAH?%(B $B3HD%;R(B $B3HD%;R(B URL URL $B%V%i%&%6(B $B%V%i%&%6(B OS OS ## (= operating system, operating systems) $B%5%$%:(B $B8!:w8l(B $B8!:w9`L\(B $B%5%$%H(B $B%5%$%H(B $B%f!<%6(B $B%f!<%6(B $B>uBV%3!<%I(B $B>uBV%3!<%I(B $B%&%'%V%5!<%P$NE}7W(B ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. $B%-%m(B $B%a%,(B $B%.%,(B (10$B2/(B) $B%F%i(B (1$BC{(B) $B%Z%?(B (1$B@iC{(B) $B%(%/%5(B (100$B5~(B) $B% 1GB ## Now the names of reports $BA4BN$N35MW(B ## The time reports, plus "busiest" strings (at the bottom of each report) $BG/JL%l%]!<%H(B $B:G$b:.;($7$?G/(B : 4$BH>4|JL%l%]!<%H(B $B:G$b:.;($7$?(B4$BH>4|(B : $B7nJL%l%]!<%H(B $B:G$b:.;($7$?7n(B : $B=5JL%l%]!<%H(B $B:G$b:.;($7$?=5(B ($B1&$NF|IU$+$i#1=54V(B)$B!'(B $BMKF|JL=87W(B $BF|JL%l%]!<%H(B $B:G$b:.;($7$?F|(B : $B;~4VJL%l%]!<%H(B $B;~4VJL=87W(B $BMKF|JL;~4V=87W(B $B:G$b:.;($7$?;~4V(B : 15$BJ,4V3V%l%]!<%H(B 15$BJ,4V3V=87W(B $B:G$b:.;($7$?(B15$BJ,4V(B : 5$BJ,4V3V%l%]!<%H(B 5$BJ,4V3V=87W(B $B:G$b:.;($7$?(B5$BJ,4V(B : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! $B%[%9%H%l%]!<%H(B $B%[%9%H(B $B%[%9%H(B n $B%[%9%H%j%@%$%l%/%7%g%s%l%]!<%H(B $B%[%9%H(B $B%[%9%H(B n $B%[%9%HIT@.8y%l%]!<%H(B $B%[%9%H(B $B%[%9%H(B n $B%G%#%l%/%H%j%l%]!<%H(B $B%G%#%l%/%H%j(B $B%G%#%l%/%H%j(B n $B%U%!%$%kH85%l%]!<%H(B $B;2>H85(BURL $B;2>H85(BURL n $B;2>H85%5%$%H%l%]!<%H(B $B;2>H85%5%$%H(B $B;2>H85%5%$%H(B n $B;2>H85%j%@%$%l%/%7%g%s%l%]!<%H(B $B;2>H85(BURL $B;2>H85(BURL n $B;2>H85IT@.8y%l%]!<%H(B $B;2>H85(BURL $B;2>H85(BURL n $B8!:w8l6g%l%]!<%H(B $B8!:w8l6g(B $B8!:w8l6g(B n $B8!:w8l%l%]!<%H(B $B8!:w8l(B $B8!:w8l(B n $BFbIt8!:w8l6g%l%]!<%H(B $B8!:w8l6g(B $B8!:w8l6g(B n $BFbIt8!:w8l%l%]!<%H(B $B8!:w8l(B $B8!:w8l(B n $B2>A[%[%9%H%l%]!<%H(B $B2>A[%[%9%H(B $B2>A[%[%9%H(B n $B2>A[%[%9%H%j%@%$%l%/%7%g%s%l%]!<%H(B $B2>A[%[%9%H(B $B2>A[%[%9%H(B n $B2>A[%[%9%HIT@.8y%l%]!<%H(B $B2>A[%[%9%H(B $B2>A[%[%9%H(B n $B%f!<%6%l%]!<%H(B $B%f!<%6(B $B%f!<%6(B n $B%f!<%6%j%@%$%l%/%7%g%s%l%]!<%H(B $B%f!<%6(B $B%f!<%6(B n $B%f!<%6IT@.8y%l%]!<%H(B $B%f!<%6(B $B%f!<%6(B n $B%V%i%&%6=87W(B $B%V%i%&%6(B $B%V%i%&%6(B n $B%V%i%&%6%l%]!<%H(B $B%V%i%&%6(B $B%V%i%&%6(B n OS$B%l%]!<%H(B OS OS n $B%I%a%$%s%l%]!<%H(B $B%I%a%$%s(B $B%I%a%$%s(B n $BAH?%JL%l%]!<%H(B $BAH?%(B $BAH?%(B n $B%9%F!<%?%9%3!<%I%l%]!<%H(B $B%9%F!<%?%9%3!<%I(B $B%9%F!<%?%9%3!<%I(B n $B=jMW;~4V%l%]!<%H(B $B%U%!%$%k%5%$%:%l%]!<%H(B ## Used at the bottom of the report $B%l%]!<%H=PNO%=%U%H(B : $B=hM};~4V(B <1 ## Used in the time reports 1$BC10L(B $B$O(B $B$"$k$$$O$=$NCML$K~$rI=$9(B $B%Z!<%8%j%/%(%9%H7o?t(B $B%Z!<%8%j%/%(%9%H7o?t(B ## Used at the bottom of each non-time report: need m, f & n genders * * $B$=$NB>(B ## Used on the pie charts: again need m, f & n genders * * $B$=$NB>(B ## Used at the top of the report $BE}7W3+;OF|;~(B : $B2r@OBP>]4|4V(B : $B!A(B ## Used in the General Summary $B%j%/%(%9%H@.8y7o?t(B $B>e5-$NF|JLJ?6Q(B $B%Z!<%8%j%/%(%9%H@.8y7o?t(B $B>e5-$NF|JLJ?6Q(B $B%9%F!<%?%9%3!<%IIT:_%m%09T?t(B $B%j%/%(%9%HIT@.8y7o?t(B $B%j%/%(%9%H%j%@%$%l%/%7%g%s7o?t(B $B%9%F!<%?%9%3!<%IIU$-%j%/%(%9%H7o?t(B $B0[$J$k%j%/%(%9%H%U%!%$%k?t(B $B0[$J$k%5!<%S%9%[%9%H?t(B $B0[>o%m%09T?t(B $BITI,MW%m%09`L\?t(B $B%G!<%?E>AwNL(B $B>e5-$NF|JLJ?6Q(B $B3g8LFb$N?t;z$O(B $B1&$NF|;~$^$G$ND>6a(B7$BF|4V$N=87W(B : $BD>6a(B7$BF|4V(B Go To $B@hF,(B ## Some special phrases for particular reports. ## Note to self: these phrases also occur in anlghea3.h and Pnextname(). [$BL$2r7h(BIP$B%"%I%l%9(B] [$B%I%a%$%sL>L$IUM?(B] [$BL$CN%I%a%$%sL>(B] [$B%k!<%H%G%#%l%/%H%j(B] [$BL5%G%#%l%/%H%j(B] [$BL53HD%;R(B] [$B%G%#%l%/%H%j(B] $B$=$NB>$N(BWindows $B$=$NB>$N(BUNIX $B%m%\%C%H(B $BL$CN(BOS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) $B%j%/%(%9%H7o?t(B $B=54V%j%/%(%9%H7o?t(B $B%j%/%(%9%H7o?t(B (%) $B=54V%j%/%(%9%H7o?t(B (%) $B%Z!<%8?t(B $B=54V%Z!<%8?t(B $B%Z!<%8?t(B (%) $B=54V%Z!<%8?t(B (%) $B%P%$%H(B ? $B%P%$%H(B $B%P%$%H(B ($B=54V(B) ? $B%P%$%H(B ($B=54V(B) $B%P%$%H(B (%) $B%P%$%H(B ($B=54V(B) (%) $BHV9f(B ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * $B>e0L(B %s $B$NI=(B : * * $B>e0L(B %d %s $B$NI=(B : * * %s $B$NI=(B : ## "by" in the phrase "listing the top 3 files BY number of requests" $B4p=`$O(B ## All requests WITH AT LEAST 10 requests $B:G>.$O(B ## Different ways of doing floors $B%j%/%(%9%H7o?t(B ($BD>6a(B7$BF|4V(B) $B%j%/%(%9%H7o?t(B ($BD>6a(B7$BF|4V(B) $B%Z!<%8?t(B ($BD>6a(B7$BF|4V(B) $B%Z!<%8?t(B ($BD>6a(B7$BF|4V(B) $B%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B $B%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B $B%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B ($BD>6a(B7$BF|4V(B) $B%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B ($BD>6a(B7$BF|4V(B) $BIT@.8y%j%/%(%9%H7o?t(B $BIT@.8y%j%/%(%9%H7o?t(B $BIT@.8y%j%/%(%9%H7o?t(B ($BD>6a(B7$BF|4V(B) $BIT@.8y%j%/%(%9%H7o?t(B ($BD>6a(B7$BF|4V(B) % $B$NDL?.NL(B % $B$NDL?.NL(B ($BD>6a(B7$BF|4V(B) % $B$N:GBgDL?.NL(B % $B$N:GBgDL?.NL(B ($BD>6a(B7$BF|4V(B) ($BE>Aw(B) $B%P%$%H(B ($BE>Aw(B) $B%P%$%H(B ## ?bytes represents kbytes, Mbytes etc. ? $B%P%$%H$N%G!<%?E>AwNL(B ($BE>Aw(B) $B%P%$%H(B ($BD>6a(B7$BF|4V(B) ($BE>Aw(B) $B%P%$%H(B ($BD>6a(B7$BF|4V(B) ? ($BE>Aw(B) $B%P%$%H(B ($BD>6a(B7$BF|4V(B) $B:G=*$N%j%/%(%9%HF|;~(B : $B:G=*$N%j%@%$%l%/%7%g%s%j%/%(%9%HF|;~(B : $B:G=*$N%j%/%(%9%HIT@.8yF|;~(B : $B:G=i$N%j%/%(%9%HF|;~(B : $B:G=i$N%j%@%$%l%/%7%g%s%j%/%(%9%HF|;~(B : $B:G=i$NIT@.8y%j%/%(%9%HF|;~(B : ## Now "sorted by": again, in m, f & n (only needed in plural though) * * $B%=!<%H=g$O(B ## Used at the top of each report $B$3$N%l%]!<%H$N%G!<%?=87W4|4V(B : ## Used in pie charts $B@p7?$N3QEY(B : ## different ways of sorting $BDL?.NL(B $BD>6a(B7$BF|4V$N%G!<%?E>AwNL(B % $B$N%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N%j%/%(%9%H7o?t(B % $B$N:GBg%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N:GBg%j%/%(%9%H7o?t(B $B%j%/%(%9%H?t(B $BD>6a(B7$BF|4V$N%j%/%(%9%H7o?t(B % $B$N%Z!<%8%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N%Z!<%8%/%(%9%H7o?t(B % $B$N:GBg%Z!<%8%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N:GBg%Z!<%8%j%/%(%9%H7o?t(B $B%Z!<%8%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N%Z!<%8%j%/%(%9%H7o?t(B % $B$N%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B % $B$N:GBg%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N:GBg%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B $B%j%@%$%l%/%7%g%s%j%/%(%9%H?t(B $BD>6a(B7$BF|4V$N%j%@%$%l%/%7%g%s%j%/%(%9%H7o?t(B % $B$NIT@.8y%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$NIT@.8y%j%/%(%9%H7o?t(B % $B$N:GBgIT@.8y%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$N(B % $B$N:GBgIT@.8y%j%/%(%9%H7o?t(B $BIT@.8y%j%/%(%9%H7o?t(B $BD>6a(B7$BF|4V$NIT@.8y%j%/%(%9%H7o?t(B $B:G=*%j%/%(%9%H;~9o(B $B:G=*%j%@%$%l%7%g%s%j%/%(%9%H;~9o(B $B:G=*IT@.8y%j%/%(%9%H;~9o(B $B:G=i$N%j%/%(%9%H;~9o(B $B:G=i$N%j%@%$%l%/%7%g%s%j%/%(%9%H;~9o(B $B:G=i$NIT@.8y%j%/%(%9%H;~9o(B ## 3 other ways of sorting in m, f, & n * * $B%=!<%H=g$O%"%k%U%!%Y%C%H(B * * $B%=!<%H=g$O>uBV%3!<%I(B * * $B%=!<%HL5$7(B ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. $B8aA0(B $B8a8e(B ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y$BG/(B%m$B7n(B%D$BF|(B %H$B;~(B%n$BJ,(B ## "Program started at" and "Analysed requests from" %Y$BG/(B%m$B7n(B%D$BF|(B(%w) %H$B;~(B%n$BJ,(B ## In Daily Report %Y$BG/(B%m$B7n(B%d$BF|(B ## In Daily Summary %w ## In Hourly Report %Y$BG/(B%m$B7n(B%d$BF|(B %H$B;~(B%n$BJ,(B%x%I$B;~(B%o$BJ,(B ## In Hourly Summary %h$B;~(B ## In Hour of the Week Summary %w$BMKF|(B %H$B;~(B%n$BJ,(B%x%I$B;~(B%o$BJ,(B ## In Quarter-Hour and Five-Minute Reports %Y$BG/(B%m$B7n(B%d$BF|(B %H$B;~(B%n$BJ,(B%x%I$B;~(B%o$BJ,(B ## In Quarter-Hour and Five-Minute Summaries %H$B;~(B%n$BJ,(B%x%I$B;~(B%o$BJ,(B ## In Weekly Report %Y$BG/(B%m$B7n(B%d$BF|(B ## In Monthly Report %Y$BG/(B%m$B7n(B ## In Quarterly Report %Y$BG/(B %m$B7n(B%x%l$B7n(B ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y$BG/(B ## The date (d) column in non-time reports %Y$BG/(B%m$B7n(B%D$BF|(B ## The date & time (D) column in non-time reports %Y$BG/(B%m$B7n(B%D$BF|(B %H$B;~(B%n$BJ,(B ## In non-time reports: "including all files with requests since [date]" %Y$BG/(B%m$B7n(B%D$BF|(B %H$B;~(B%n$BJ,(B ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 $B7QB3(B 101 $B%W%m%H%3%kJQ99(B 1xx [$BpJs(B] 200 OK 201 $B:n@.@.8y(B 202 $B>-Mh$N=hM}$H$7$FpJsL5$7(B 205 $B%G!<%?$N=i4|2=(B 206 $BCGJR>pJs(B 2xx [$B$K0\F0(B 303 $BB>$r;2>H(B 304 $B:G6a$N8!:w0JMhJQ99L5$7(B 305 $B%W%m%/%7$r;HMQ$;$h(B 306 $B%W%m%/%7$rJQ99$;$h(B 307 $B0l;~E*0\F0(B 3xx [$BZ(B 402 $BMW;YJ'(B 403 $B%"%/%;%96X;_(B 404 $B%Z!<%8IT:_(B 405 $BITK!%a%=%C%I(B 406 $B%Z!<%8$NIT5v2D(B 407 $B%W%m%/%7$K$h$kMWG'>Z(B 408 $B;~4V@Z$l(B 409 $B%j%/%(%9%H$O%Z!<%8$HL7=b(B 410 $B%Z!<%8:o=|:Q(B 411 $BMWD9$5(B 412 $B;vA0>r7oIT@.N)(B 413 $B%j%/%(%9%H%G!<%?$ND62a(B 414 $B%j%/%(%9%H%U%!%$%kL>$ND9$5D62a(B 415 $BL$%5%]!<%H$N%a%G%#%"(B 416 $B%j%/%(%9%HNN0h0[>o(B 417 $BMW5aIT@.8y(B 4xx [$B(B] analog-ce-6.0.17/lang/jpjdesc.txt000066400000000000000000000105411406366436600165560ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report $B$3$N%l%]!<%H$O!"G/EYJL$NE}7W$rI=$7$^$9!#(B # Quarterly Report $B$3$N%l%]!<%H$O!"(B4$BH>4|Kh$NE}7W$rI=$7$^$9!#(B # Monthly Report $B$3$N%l%]!<%H$O!"7nJL$NE}7W$rI=$7$^$9!#(B # Weekly Report $B$3$N%l%]!<%H$O!"=5JL$NE}7W$rI=$7$^$9!#(B # Daily Report $B$3$N%l%]!<%H$O!"F|JL$NE}7W$rI=$7$^$9!#(B # Hourly Report $B$3$N%l%]!<%H$O!";~4VJL$NE}7W$rI=$7$^$9!#(B # Quarter-Hour Report $B$3$N%l%]!<%H$O!"(B15$BJ,4V3V$NE}7W$rI=$7$^$9!#(B # Five-Minute Report $B$3$N%l%]!<%H$O!"(B5$BJ,4V3V$NE}7W$rI=$7$^$9!#(B # Daily Summary $B$3$N%l%]!<%H$O!"A4$F$N=5$NMKF|JLAmOB$NE}7W$rI=$7$^$9!#(B # Hourly Summary $B$3$N%l%]!<%H$O!"A4$F$NF|$N;~4VJLAmOB$NE}7W$rI=$7$^$9!#(B # Hour of the Week Summary $B$3$N%l%]!<%H$O!"A4$F$N=5$N;~4VJLAmOB$NE}7W$rI=$7$^$9!#(B # Quarter-Hour Summary $B$3$N%l%]!<%H$O!"A4$F$NF|$N(B15$BJ,4V3V$NAmOB$NE}7W$rI=$7$^$9!#(B # Five-Minute Summary $B$3$N%l%]!<%H$O!"A4$F$NF|$N(B5$BJ,4V3V$NAmOB$NE}7W$rI=$7$^$9!#(B # General Summary $B$3$N%l%]!<%H$O!"A4BN$NE}7W$rI=$7$^$9!#(B # Request Report $B$3$N%l%]!<%H$O!"%5%$%H$N%U%!%$%k$NE}7W$rI=$7$^$9!#(B # Redirection Report $B$3$N%l%]!<%H$O!"JL$N%U%!%$%k$X%j%@%$%l%/%7%g%s$7$?%U%!%$%k$NE}7W$rI=$7$^$9!#(B($BDL>o!"%j%@%$%l%/%7%g%s$r6/@)$5$;$k!":G8e$K%9%i%C%7%e$NL5$$%G%#%l%/%H%j$+!"(BCGI $B%9%/%j%W%H$G$"$k!#(B) # Failure Report $B$3$N%l%]!<%H$O!"!V%U%!%$%k$,8+$D$+$i$J$$!WEy$N%(%i!<$r@8$8$5$;$k%U%!%$%k$NE}7W$rI=$7$^$9!#(B # File Type Report $B$3$N%l%]!<%H$O!"%U%!%$%k$N3HD%;R$NE}7W$rI=$7$^$9!#(B # Directory Report $B$3$N%l%]!<%H$O!"%U%!%$%k$,%j%/%(%9%H$5$l$?%G%#%l%/%H%j$NE}7W$rI=$7$^$9!#(B($B3F%G%#%l%/%H%j$N?tCM$OA4$F$N%5%V%G%#%l%/%H%j$b4^$_$^$9!#(B) # Host Report $B$3$N%l%]!<%H$O!"%U%!%$%k$r%j%/%(%9%H$7$?%3%s%T%e!<%?$NE}7W$rI=$7$^$9!#(B # Host Redirection Report $B$3$N%l%]!<%H$O!"JL%U%!%$%k$X%j%@%$%l%/%7%g%s$5$l$?%3%s%T%e!<%?$NE}7W$rI=$7$^$9!#(B # Host Failure Report $B$3$N%l%]!<%H$O!"%j%/%(%9%H$K<:GT$7$?%3%s%T%e!<%?$NE}7W$rI=$7$^$9!#(B # Domain Report $B$3$N%l%]!<%H$O!"%U%!%$%k$r%j%/%(%9%H$7$?%3%s%T%e!<%?$N9qJLE}7W$rI=$7$^$9!#(B # Referrer Report $B$3$N%l%]!<%H$O!"(B($B%j%s%/!"$"$k$$$O$3$N%5%$%H$N2hA|$r4^$`%Z!<%8$rC)$C$F$-$?(B) $B;2>H85$NE}7W$rI=$7$^$9!#(B # Referring Site Report $B$3$N%l%]!<%H$O!";2>H85$N%5!<%P$NE}7W$rI=$7$^$9!#(B # Redirected Referrer Report $B$3$N%l%]!<%H$O!"%j%@%$%l%/%7%g%s$r5/$3$7$?;2>H85$NE}7W$rI=$7$^$9!#(B # Failed Referrer Report $B$3$N%l%]!<%H$O!"$3$N%5%$%H$X$N%j%s%/@Z$l$N;2>H85$NE}7W$rI=$7$^$9!#(B # Browser Report $B$3$N%l%]!<%H$O!"%f!<%6$N%V%i%&%6!<$NE}7W$rI=$7$^$9!#(B # Virtual Host Report $B$3$N%l%]!<%H$O!"$3$N%5%$%H$N3F2>A[%I%a%$%s$NE}7W$rI=$7$^$9!#(B # Virtual Host Redirection Report $B$3$N%l%]!<%H$O!"3F2>A[%I%a%$%s$X%j%@%$%l%/%7%g%s$5$l$?%j%/%(%9%H$NE}7W$rI=$7$^$9!#(B # Virtual Host Failure Report $B$3$N%l%]!<%H$O!"3F2>A[%I%a%$%s$X$NIT@.8y%j%/%(%9%H$NE}7W$rI=$7$^$9!#(B # User Report $B$3$N%l%]!<%H$O!"%f!<%6$,G'>Z$5$l$k$+%/%C%-!<$GG'Dj$5$l$?$H$-!"%U%!%$%k$r%j%/%(%9%H$7$?%f!<%6$NE}7W$rI=$7$^$9!#(B # User Redirection Report $B$3$N%l%]!<%H$O!"JL%U%!%$%k$X%j%@%$%l%/%7%g%s$5$l$?%f!<%6$NE}7W$rI=$7$^$9!#(B # User Failure Report $B$3$N%l%]!<%H$O!"%j%/%(%9%H$K<:GT$7$?%f!<%6$NE}7W$rI=$7$^$9!#(B # Organisation Report $B$3$N%l%]!<%H$O!"%U%!%$%k$r%j%/%(%9%H$r$7$?%3%s%T%e!<%?$N%I%a%$%s$NE}7W$rI=$7$^$9!#(B # Search Query Report $B$3$N%l%]!<%H$O!"%f!<%6$,$3$N%5%$%H$rH/8+$9$k$N$K!"8!:w%(%s%8%s$G;HMQ$7$?8!:w8l6g$NE}7W$rI=$7$^$9!#(B # Search Word Report $B$3$N%l%]!<%H$O!"%f!<%6$,$3$N%5%$%H$rH/8+$9$k$N$K!"8!:w%(%s%8%s$G;HMQ$7$?C18l$NE}7W$rI=$7$^$9!#(B # Internal Search Query Report $B$3$N%l%]!<%H$O!"%f!<%6$,$3$N%5%$%HFb$G!"%9%/%j%W%H$G;HMQ$7$?8!:w8l6g$NE}7W$rI=$7$^$9!#(B # Internal Search Word Report $B$3$N%l%]!<%H$O!"%f!<%6$,$3$N%5%$%HFb$G!"%9%/%j%W%H$G;HMQ$7$?C18l$NE}7W$rI=$7$^$9!#(B # Browser Summary $B$3$N%l%]!<%H$O!"%f!<%6$N;HMQ$7$?%V%i%&%6!<$N%Y%s%@!<$NE}7W$rI=$7$^$9!#(B # Operating System Report $B$3$N%l%]!<%H$O!"%f!<%6$N;HMQ$7$?(B OS $B$NE}7W$rI=$7$^$9!#(B # File Size Report $B$3$N%l%]!<%H$O!"%U%!%$%k$NBg$-$5$NE}7W$rI=$7$^$9!#(B # Status Code Report $B$3$N%l%]!<%H$O!"A4$F$N%j%/%(%9%H$N(B HTTP $B>uBV%3!<%I$NE}7W$rI=$7$^$9!#(B # Processing Time Report $B$3$N%l%]!<%H$O!"@.8y%j%/%(%9%H$N=hM};~4V$NE}7W$rI=$7$^$9!#(B analog-ce-6.0.17/lang/jpjdom.tab000066400000000000000000000157121406366436600163530ustar00rootroot00000000000000# $B0lHL$*$h$S4pHW%I%a%$%s(J aero 2 $B9R6u1?M"6H3&(J arpa 1 $B%$%s%?!<%M%C%H%$%s%U%i(J biz 2 $B%S%8%M%9(J com 2 $B>&6HAH?%(J coop 2 $B6(F1AH9g(J edu 2 $BJF9q9bEy650i5!4X(J gov 2 $BJF9q@/I\5!4X(J info 2 $B0lHL!J>pJs!K(J int 2 $B9q:]5!4X(J mil 2 $BJF9q73;v5!4X(J museum 2 $BGnJ*4[(J/$BH~=Q4[(J name 3 $B8D?ML>(J net 2 $B%M%C%H%o!<%/(J org 2 $BHs1DMxAH?%(J pro 3 $B@lLg2H(J # $B9qJL%3!<%I%I%a%$%sL>(J ac 1 $B%"%;%s%7%g%sEg(J ad 2 $B%"%s%I%i2&9q(J ae 3 $B%"%i%V]2g3$4_(J) ck 1 $B%/%C%/=tEg(J cl 2 $B%A%j(J cm 1 $B%+%a%k!<%s(J cn 3 $BCf2Z?ML16&OB9q(J co 3 $B%3%m%s%S%"(J cr 3 $B%3%9%?%j%+(J cs 1 $B%;%k%S%"$"$k$$$O%b%s%F%M%0%m(J cu 1 $B%-%e!<%P(J cv 1 $B%+!<%]%Y%k%G(J cx 1 $B%/%j%9%^%9Eg(J cy 3 $B%-%W%m%9(J cz 2 $B%A%'%3(J de 2 $B%I%$%D(J dj 1 $B%8%V%A(J dk 2 $B%G%s%^!<%/(J dm 2 $B%I%_%K%+(J do 2 $B%I%_%K%+6&OB9q(J dz 1 $B%"%k%8%'%j%"(J ec 3 $B%(%/%"%I%k(J ee 2 $B%(%9%H%K%"(J eg 3 $B%(%8%W%H(J eh 1 $B@>%5%O%i(J er 1 $B%(%j%H%j%"(J es 2 $B%9%Z%$%s(J et 1 $B%(%A%*%T%"(J fi 2 $B%U%#%s%i%s%I(J fj 3 $B%U%#%8!<(J fk 1 $B%U%)!<%/%i%s%I=tEg(J fm 1 $B%_%/%m%M%7%"(J fo 1 $B%U%'%m!<=tEg(J fr 2 $B%U%i%s%9(J fx 1 $B%U%i%s%9(J ($B2$=#O"9gK\It(J) ga 1 $B%,%\%s(J gb 1 $B%V%j%F%s(J gd 1 $B%0%l%J%@(J ge 1 $B%0%k%8%"(J gf 1 $B%U%i%s%9NN%.%K%"(J gg 1 $B%A%c%M%k=tEg%,!<%s%8%#Eg(J gh 3 $B%,!<%J(J gi 1 $B%8%V%i%k%?%k(J gl 1 $B%0%j!<%s%i%s%I(J gm 1 $B%,%s%S%"(J gn 1 $B%.%K%"(J gp 1 $B%0%"%@%k!<%W(J gq 1 $B@VF;%.%K%"(J gr 2 $B%.%j%7%c(J gs 1 $B%5%&%9%8%g!<%8%"!&%5%&%9%5%s%I%$%C%A=tEg(J gt 3 $B%0%"%F%^%i(J gu 1 $B%0%"%`(J gw 1 $B%.%K%"%S%5%*(J gy 1 $B%,%$%"%J(J hk 3 $B9a9A(J hm 1 $B%O!<%I!&%^%/%I%J%k%I=tEg(J hn 2 $B%[%s%8%e%i%9(J hr 2 $B%/%m%"%A%"(J ht 1 $B%O%$%A(J hu 2 $B%O%s%,%j!<(J id 3 $B%$%s%I%M%7%"(J ie 2 $B%"%$%k%i%s%I(J il 3 $B%$%9%i%(%k(J im 1 $B%^%sEg(J in 3 $B%$%s%I(J io 1 $B1QNN%$%s%IMNCO0h(J iq 1 $B%$%i%/(J ir 1 $B%$%i%s(J is 2 $B%"%$%9%i%s%I(J it 2 $B%$%?%j%"(J je 1 $B%A%c%M%k=tEg%8%c!<%8!%5%b%"(J ye 1 $B%$%(%a%s(J yt 1 $B%^%h%C%HEg(J yu 3 $B%f!<%4%9%i%S%"(J za 3 $BFn%"%U%j%+6&OB9q(J zm 1 $B%6%s%S%"(J zr 1 $B%3%s%4L1 Analog $B%U%)!<%`!&%$%s%?%U%'!<%9(B

Analog $B%U%)!<%`!&%$%s%?%U%'!<%9(B


1. $B%l%]!<%H$NA*Br(B

$BCm0U(B : $B0J2<$N;X<($K=>$C$F4D6-$r@_Dj$7=*$o$k$^$G!"(B $B$3$N%U%)!<%`$OF0:n$7$J$$$G$7$g$&!#Nc$($P!"%\%?%s$5$(8=$l$J$$$+$b$7$l$^$;$s!#(B $B4D6-@_Dj$r=*N;$7$?8e!"$3$NJ8@a$r:o=|$7$F$/$@$5$$!#(B
$B8D!9$N%l%]!<%H$N>\:Y$J0UL#$K$D$$$F$O(B analog $B$N%[!<%`%Z!<%8(B $B$r;2>H$7$F$/$@$5$$!#(B

$B$I$N%l%]!<%H$rI=<($7$^$9$+(B?


[On] [Off] $BA4BN$N35MW(B
[On] [Off] $B7nJL%l%]!<%H(B
[On] [Off] $B=5JL%l%]!<%H(B
[On] [Off] $BMKF|JL35MW(B
[On] [Off] $BF|JL%l%]!<%H(B
[On] [Off] $B;~4VJL35MW(B
[On] [Off] $B;~4VJL%l%]!<%H(B
[On] [Off] 15$BJ,4V3V%l%]!<%H(B
[On] [Off] $B%I%a%$%s%l%]!<%H(B
[On] [Off] $BAH?%JL%l%]!<%H(B
[On] [Off] $B%G%#%l%/%H%j%l%]!<%H(B
[On] [Off] $B%U%!%$%k [On] [Off] $B%j%/%(%9%H%l%]!<%H(B
[On] [Off] $B%U%!%$%k%5%$%:%l%]!<%H(B
[On] [Off] $B;2>H85%l%]!<%H(B
[On] [Off] $B8!:w8l6g%l%]!<%H(B
[On] [Off] $B8!:w8l%l%]!<%H(B
[On] [Off] $B%[%9%H%l%]!<%H(B
[On] [Off] $B%V%i%&%6%l%]!<%H(B
[On] [Off] $B%V%i%&%6$N35MW(B
[On] [Off] OS $B%l%]!<%H(B
[On] [Off] $B%9%F!<%?%9%3!<%I%l%]!<%H(B

$B%W%m%0%i%`$N
$B$b$7$/$O!"8D!9$N%l%]!<%H$K$D$$$F!"(B $B0J2<$N%*%W%7%g%s$r;XDj$9$k;v$,$G$-$^$9!#(B $B$O!"(B10M$B%P%$%H0J>e$N9`L\$rI=<($7$^$9!#F1MM$K(B $B$O!"%P%$%H?t$,B?$$J}$+$i>e0L(B 50 $B0L$rI=<($7$^$9!#(B


2. $B%l%]!<%H$N>\:Y%*%W%7%g%s(B

$B%I%a%$%s%l%]!<%H$N%*%W%7%g%s(B

$B%I%a%$%s%l%]!<%H$N%=!<%H=g(B
$B>/$J$/$H$b(B $B0J>e$N%I%a%$%s$rA4$F4^$`!#(B

$BAH?%JL%l%]!<%H$N%*%W%7%g%s(B

$BAH?%JL%l%]!<%H$N%=!<%H=g(B
$B>/$J$/$H$b(B $B0J>e$NAH?%$rA4$F4^$`!#(B

$B%G%#%l%/%H%j%l%]!<%H$N%*%W%7%g%s(B

$B%G%#%l%/%H%j%l%]!<%H$N%=!<%H=g(B
$B>/$J$/$H$b(B $B0J>e$N%G%#%l%/%H%j$rA4$F4^$`!#(B

$B%j%/%(%9%H%l%]!<%H$N%*%W%7%g%s(B

$B%j%/%(%9%H%l%]!<%H$N%=!<%H=g(B
$B>/$J$/$H$b(B $B0J>e$N%U%!%$%k$rA4$F4^$`!#(B
$BI=<($O!"(B $B$rBP>]$H$9$k!#(B

$B;2>H85%l%]!<%H$N%*%W%7%g%s(B

$B;2>H85%l%]!<%H$N%=!<%H=g(B
$B>/$J$/$H$b(B $B0J>e$N;2>H85(B URL $B$rA4$F4^$`!#(B

3. $B%m%0%U%!%$%k$NItJ,2r@O(B

$BFCDjF|;~$N$_(B
$BFCDjF|;~$N%j%/%(%9%H$@$1$r2r@O$9$k;v$b2DG=$G$9!#(B $B2r@O$9$kF|IU$NHO0O$r0J2<$N$h$&$K(B yymmdd $B$N7A$GF~NO$7$F$/$@$5$$!#Nc(B : 980301 $B$O(B 1998$BG/(B3$B7n(B1$BF|(B ($B0lJ}$NHO0O$@$1$r@)8B$7$?$$>l9g$O!"(B $BJRJ}$N%U%#!<%k%I$@$1$rKd$a$F$/$@$5$$(B)
$B$+$i(B $B$^$G(B

$BFCDj$N%U%!%$%k$N$_(B
$B0J2<$N%U%!%$%k$N$_$rBP>]$H$7$^$9(B ($B%3%s%^$G6h@Z$C$FNs5s$7$F$/$@$5$$!#(B $B%o%$%k%I%+!<%I$H$7$F(B * $B$r4^$a$k;v$,$G$-$^$9(B)

$B0J2<$N%U%!%$%k$O=|30$7$^$9!#(B


4. $B%l%$%"%&%H(B

$B$"$J$?$NAH?%L>(B ($B%Z!<%8$N%?%$%H%kMQ(B)

$BAH?%$N%[!<%`%Z!<%8(B ($BITMW$N>l9g$O6uGr$N$^$^$K$7$F$/$@$5$$(B)
URL :


analog-ce-6.0.17/lang/jps.cfg000066400000000000000000000034151406366436600156520ustar00rootroot00000000000000LANGUAGE JAPANESE-SJIS SUBDOMAIN ad.jp ŠÇ—‘gD SUBDOMAIN ac.jp ‘åŠwEê–åŠwZ‚È‚Ç SUBDOMAIN co.jp Šé‹Æ SUBDOMAIN go.jp ­•{‹@ŠÖ SUBDOMAIN or.jp ŠeŽí–@l’c‘Ì SUBDOMAIN ne.jp ƒlƒbƒgƒ[ƒNƒT[ƒrƒX SUBDOMAIN gr.jp ”CˆÓ’c‘Ì SUBDOMAIN ed.jp ŠeŽíŠwZ SUBDOMAIN hokkaido.jp –kŠC“¹ SUBDOMAIN aomori.jp ÂXŒ§ SUBDOMAIN iwate.jp ŠâŽèŒ§ SUBDOMAIN miyagi.jp ‹{錧 SUBDOMAIN akita.jp H“cŒ§ SUBDOMAIN yamagata.jp ŽRŒ`Œ§ SUBDOMAIN fukushima.jp •Ÿ“‡Œ§ SUBDOMAIN ibaraki.jp ˆï錧 SUBDOMAIN tochigi.jp “È–ØŒ§ SUBDOMAIN gunma.jp ŒQ”nŒ§ SUBDOMAIN saitama.jp é‹ÊŒ§ SUBDOMAIN chiba.jp ç—tŒ§ SUBDOMAIN tokyo.jp “Œ‹ž“s SUBDOMAIN kanagawa.jp _“Þ쌧 SUBDOMAIN niigata.jp VŠƒŒ§ SUBDOMAIN toyama.jp •xŽRŒ§ SUBDOMAIN ishikawa.jp Î쌧 SUBDOMAIN fukui.jp •ŸˆäŒ§ SUBDOMAIN yamanashi.jp ŽR—œŒ§ SUBDOMAIN nagano.jp ’·–쌧 SUBDOMAIN gifu.jp Šò•ŒŒ§ SUBDOMAIN shizuoka.jp ɪŒ§ SUBDOMAIN aichi.jp ˆ¤’mŒ§ SUBDOMAIN mie.jp ŽOdŒ§ SUBDOMAIN shiga.jp Ž ‰êŒ§ SUBDOMAIN kyoto.jp ‹ž“s•{ SUBDOMAIN osaka.jp ‘åã•{ SUBDOMAIN hyogo.jp •ºŒÉŒ§ SUBDOMAIN nara.jp “Þ—ÇŒ§ SUBDOMAIN wakayama.jp ˜a‰ÌŽRŒ§ SUBDOMAIN tottori.jp ’¹ŽæŒ§ SUBDOMAIN shimane.jp “‡ªŒ§ SUBDOMAIN okayama.jp ‰ªŽRŒ§ SUBDOMAIN hiroshima.jp L“‡Œ§ SUBDOMAIN yamaguchi.jp ŽRŒûŒ§ SUBDOMAIN tokushima.jp “¿“‡Œ§ SUBDOMAIN kagawa.jp 쌧 SUBDOMAIN ehime.jp ˆ¤•QŒ§ SUBDOMAIN kochi.jp ‚’mŒ§ SUBDOMAIN fukuoka.jp •Ÿ‰ªŒ§ SUBDOMAIN saga.jp ²‰êŒ§ SUBDOMAIN nagasaki.jp ’·èŒ§ SUBDOMAIN kumamoto.jp ŒF–{Œ§ SUBDOMAIN oita.jp ‘啪Œ§ SUBDOMAIN miyazaki.jp ‹{茧 SUBDOMAIN kagoshima.jp Ž­Ž™“‡Œ§ SUBDOMAIN okinawa.jp ‰«“ꌧ SUBDOMAIN sapporo.jp ŽD–yŽs SUBDOMAIN sendai.jp å‘äŽs SUBDOMAIN yokohama.jp ‰¡•lŽs SUBDOMAIN kawasaki.jp ìèŽs SUBDOMAIN nagoya.jp –¼ŒÃ‰®Žs SUBDOMAIN kobe.jp _ŒËŽs SUBDOMAIN kitakyushu.jp –k‹ãBŽs analog-ce-6.0.17/lang/jps.lng000066400000000000000000000302751406366436600156770ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Japanese version by Kaori Chikenji, ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp), ## Motonobu Takahashi (monyo@home.monyo.com), ## and Kazuto Ishigaki (ishigaki-ml@factory.gr.jp) 2002 Feb. 24 ## ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp) 2004 Feb. 18 ## ## Note: Be careful to use the same character set in all the configuration ## files, i.e., jp?.lng (this file), jp?.cfg, jp?dom.tab, jp?desc.txt. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP *SHIFT_JIS ## Abbreviations for the day and month names. “ú ŒŽ ‰Î … –Ø ‹à “y 1 2 3 4 5 6 7 8 9 10 11 12 ## Next some standard common words. ## Abbreviation for "week beginning" T擪“ú ”N ## Quarter of a year 4”¼Šú ŒŽ “ú “ú ŽžŠÔ •ª •ª •b •b ƒoƒCƒg ƒoƒCƒg ## ?bytes represents kbytes, Mbytes etc. ?ƒoƒCƒg ƒŠƒNƒGƒXƒg ƒŠƒNƒGƒXƒg ”NŒŽ“ú ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ”NŒŽ“ú ŽžŠÔ‘Ñ Žž ŠJŽn“ú ŠJŽnŽž ÅIƒAƒNƒZƒX“úŽž ÅIƒAƒNƒZƒXŽž ƒtƒ@ƒCƒ‹ ƒtƒ@ƒCƒ‹ ƒzƒXƒg ƒzƒXƒg ‰¼‘zƒzƒXƒg ‰¼‘zƒzƒXƒg ƒfƒBƒŒƒNƒgƒŠ ƒfƒBƒŒƒNƒgƒŠ ƒhƒƒCƒ“ ƒhƒƒCƒ“ ‘gD ‘gD Šg’£Žq Šg’£Žq URL URL ƒuƒ‰ƒEƒU ƒuƒ‰ƒEƒU OS OS ## (= operating system, operating systems) ƒTƒCƒY ŒŸõŒê ŒŸõ€–Ú ƒTƒCƒg ƒTƒCƒg ƒ†[ƒU ƒ†[ƒU ó‘ÔƒR[ƒh ó‘ÔƒR[ƒh ƒEƒFƒuƒT[ƒo‚Ì“Œv ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. ƒLƒ ƒƒK ƒMƒK (10‰­) ƒeƒ‰ (1’›) ƒyƒ^ (1ç’›) ƒGƒNƒT (100‹ž) ƒ[[ƒ^ (10š´) ƒˆƒbƒ^ (1‰Ñ—\) ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports ‘S‘̂̊T—v ## The time reports, plus "busiest" strings (at the bottom of each report) ”N•ʃŒƒ|[ƒg ł଎G‚µ‚½”N : 4”¼Šú•ʃŒƒ|[ƒg ł଎G‚µ‚½4”¼Šú : ŒŽ•ʃŒƒ|[ƒg ł଎G‚µ‚½ŒŽ : T•ʃŒƒ|[ƒg ł଎G‚µ‚½T (‰E‚Ì“ú•t‚©‚ç‚PTŠÔ)F —j“ú•ÊWŒv “ú•ʃŒƒ|[ƒg ł଎G‚µ‚½“ú : ŽžŠÔ•ʃŒƒ|[ƒg ŽžŠÔ•ÊWŒv —j“ú•ÊŽžŠÔWŒv ł଎G‚µ‚½ŽžŠÔ : 15•ªŠÔŠuƒŒƒ|[ƒg 15•ªŠÔŠuWŒv ł଎G‚µ‚½15•ªŠÔ : 5•ªŠÔŠuƒŒƒ|[ƒg 5•ªŠÔŠuWŒv ł଎G‚µ‚½5•ªŠÔ : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ƒzƒXƒgƒŒƒ|[ƒg ƒzƒXƒg ƒzƒXƒg n ƒzƒXƒgƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŒƒ|[ƒg ƒzƒXƒg ƒzƒXƒg n ƒzƒXƒg•s¬Œ÷ƒŒƒ|[ƒg ƒzƒXƒg ƒzƒXƒg n ƒfƒBƒŒƒNƒgƒŠƒŒƒ|[ƒg ƒfƒBƒŒƒNƒgƒŠ ƒfƒBƒŒƒNƒgƒŠ n ƒtƒ@ƒCƒ‹Ží—ޕʃŒƒ|[ƒg Šg’£Žq Šg’£Žq n ƒŠƒNƒGƒXƒgƒŒƒ|[ƒg ƒtƒ@ƒCƒ‹ ƒtƒ@ƒCƒ‹ n ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŒƒ|[ƒg ƒtƒ@ƒCƒ‹ ƒtƒ@ƒCƒ‹ n ƒŠƒNƒGƒXƒg•s¬Œ÷ƒŒƒ|[ƒg ƒtƒ@ƒCƒ‹ ƒtƒ@ƒCƒ‹ n ŽQÆŒ³ƒŒƒ|[ƒg ŽQÆŒ³URL ŽQÆŒ³URL n ŽQÆŒ³ƒTƒCƒgƒŒƒ|[ƒg ŽQÆŒ³ƒTƒCƒg ŽQÆŒ³ƒTƒCƒg n ŽQÆŒ³ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŒƒ|[ƒg ŽQÆŒ³URL ŽQÆŒ³URL n ŽQÆŒ³•s¬Œ÷ƒŒƒ|[ƒg ŽQÆŒ³URL ŽQÆŒ³URL n ŒŸõŒê‹åƒŒƒ|[ƒg ŒŸõŒê‹å ŒŸõŒê‹å n ŒŸõŒêƒŒƒ|[ƒg ŒŸõŒê ŒŸõŒê n “à•”ŒŸõŒê‹åƒŒƒ|[ƒg ŒŸõŒê‹å ŒŸõŒê‹å n “à•”ŒŸõŒêƒŒƒ|[ƒg ŒŸõŒê ŒŸõŒê n ‰¼‘zƒzƒXƒgƒŒƒ|[ƒg ‰¼‘zƒzƒXƒg ‰¼‘zƒzƒXƒg n ‰¼‘zƒzƒXƒgƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŒƒ|[ƒg ‰¼‘zƒzƒXƒg ‰¼‘zƒzƒXƒg n ‰¼‘zƒzƒXƒg•s¬Œ÷ƒŒƒ|[ƒg ‰¼‘zƒzƒXƒg ‰¼‘zƒzƒXƒg n ƒ†[ƒUƒŒƒ|[ƒg ƒ†[ƒU ƒ†[ƒU n ƒ†[ƒUƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŒƒ|[ƒg ƒ†[ƒU ƒ†[ƒU n ƒ†[ƒU•s¬Œ÷ƒŒƒ|[ƒg ƒ†[ƒU ƒ†[ƒU n ƒuƒ‰ƒEƒUWŒv ƒuƒ‰ƒEƒU ƒuƒ‰ƒEƒU n ƒuƒ‰ƒEƒUƒŒƒ|[ƒg ƒuƒ‰ƒEƒU ƒuƒ‰ƒEƒU n OSƒŒƒ|[ƒg OS OS n ƒhƒƒCƒ“ƒŒƒ|[ƒg ƒhƒƒCƒ“ ƒhƒƒCƒ“ n ‘gD•ʃŒƒ|[ƒg ‘gD ‘gD n ƒXƒe[ƒ^ƒXƒR[ƒhƒŒƒ|[ƒg ƒXƒe[ƒ^ƒXƒR[ƒh ƒXƒe[ƒ^ƒXƒR[ƒh n Š—vŽžŠÔƒŒƒ|[ƒg ƒtƒ@ƒCƒ‹ƒTƒCƒYƒŒƒ|[ƒg ## Used at the bottom of the report ƒŒƒ|[ƒgo—̓\ƒtƒg : ˆ—ŽžŠÔ <1 ## Used in the time reports 1’PˆÊ ‚Í ‚ ‚é‚¢‚Í‚»‚Ì’l–¢–ž‚ð•\‚· ƒy[ƒWƒŠƒNƒGƒXƒgŒ” ƒy[ƒWƒŠƒNƒGƒXƒgŒ” ## Used at the bottom of each non-time report: need m, f & n genders * * ‚»‚Ì‘¼ ## Used on the pie charts: again need m, f & n genders * * ‚»‚Ì‘¼ ## Used at the top of the report “ŒvŠJŽn“úŽž : ‰ðÍ‘ÎÛŠúŠÔ : ` ## Used in the General Summary ƒŠƒNƒGƒXƒg¬Œ÷Œ” ã‹L‚Ì“ú•Ê•½‹Ï ƒy[ƒWƒŠƒNƒGƒXƒg¬Œ÷Œ” ã‹L‚Ì“ú•Ê•½‹Ï ƒXƒe[ƒ^ƒXƒR[ƒh•s݃ƒOs” ƒŠƒNƒGƒXƒg•s¬Œ÷Œ” ƒŠƒNƒGƒXƒgƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“Œ” ƒXƒe[ƒ^ƒXƒR[ƒh•t‚«ƒŠƒNƒGƒXƒgŒ” ˆÙ‚Ȃ郊ƒNƒGƒXƒgƒtƒ@ƒCƒ‹” ˆÙ‚È‚éƒT[ƒrƒXƒzƒXƒg” ˆÙ탃Os” •s•K—vƒƒO€–Ú” ƒf[ƒ^“]‘——Ê ã‹L‚Ì“ú•Ê•½‹Ï ЇŒÊ“à‚Ì”Žš‚Í ‰E‚Ì“úŽž‚܂ł̒¼‹ß7“úŠÔ‚ÌWŒv : ’¼‹ß7“úŠÔ Go To 擪 ## Some special phrases for particular reports. ## Note to self: these phrases also occur in anlghea3.h and Pnextname(). [–¢‰ðŒˆIPƒAƒhƒŒƒX] [ƒhƒƒCƒ“–¼–¢•t—^] [–¢’mƒhƒƒCƒ“–¼] [ƒ‹[ƒgƒfƒBƒŒƒNƒgƒŠ] [–³ƒfƒBƒŒƒNƒgƒŠ] [–³Šg’£Žq] [ƒfƒBƒŒƒNƒgƒŠ] ‚»‚Ì‘¼‚ÌWindows ‚»‚Ì‘¼‚ÌUNIX ƒƒ{ƒbƒg –¢’mOS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) ƒŠƒNƒGƒXƒgŒ” TŠÔƒŠƒNƒGƒXƒgŒ” ƒŠƒNƒGƒXƒgŒ” (%) TŠÔƒŠƒNƒGƒXƒgŒ” (%) ƒy[ƒW” TŠÔƒy[ƒW” ƒy[ƒW” (%) TŠÔƒy[ƒW” (%) ƒoƒCƒg ? ƒoƒCƒg ƒoƒCƒg (TŠÔ) ? ƒoƒCƒg (TŠÔ) ƒoƒCƒg (%) ƒoƒCƒg (TŠÔ) (%) ”Ô† ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ãˆÊ %s ‚Ì•\ : * * ãˆÊ %d %s ‚Ì•\ : * * %s ‚Ì•\ : ## "by" in the phrase "listing the top 3 files BY number of requests" Šî€‚Í ## All requests WITH AT LEAST 10 requests Ŭ‚Í ## Different ways of doing floors ƒŠƒNƒGƒXƒgŒ” (’¼‹ß7“úŠÔ) ƒŠƒNƒGƒXƒgŒ” (’¼‹ß7“úŠÔ) ƒy[ƒW” (’¼‹ß7“úŠÔ) ƒy[ƒW” (’¼‹ß7“úŠÔ) ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” (’¼‹ß7“úŠÔ) ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” (’¼‹ß7“úŠÔ) •s¬Œ÷ƒŠƒNƒGƒXƒgŒ” •s¬Œ÷ƒŠƒNƒGƒXƒgŒ” •s¬Œ÷ƒŠƒNƒGƒXƒgŒ” (’¼‹ß7“úŠÔ) •s¬Œ÷ƒŠƒNƒGƒXƒgŒ” (’¼‹ß7“úŠÔ) % ‚Ì’ÊM—Ê % ‚Ì’ÊM—Ê (’¼‹ß7“úŠÔ) % ‚ÌÅ‘å’ÊM—Ê % ‚ÌÅ‘å’ÊM—Ê (’¼‹ß7“úŠÔ) (“]‘—) ƒoƒCƒg (“]‘—) ƒoƒCƒg ## ?bytes represents kbytes, Mbytes etc. ? ƒoƒCƒg‚̃f[ƒ^“]‘——Ê (“]‘—) ƒoƒCƒg (’¼‹ß7“úŠÔ) (“]‘—) ƒoƒCƒg (’¼‹ß7“úŠÔ) ? (“]‘—) ƒoƒCƒg (’¼‹ß7“úŠÔ) ÅI‚ÌƒŠƒNƒGƒXƒg“úŽž : ÅI‚ÌƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒg“úŽž : ÅI‚ÌƒŠƒNƒGƒXƒg•s¬Œ÷“úŽž : ʼn‚ÌƒŠƒNƒGƒXƒg“úŽž : ʼn‚ÌƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒg“úŽž : ʼn‚Ì•s¬Œ÷ƒŠƒNƒGƒXƒg“úŽž : ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ƒ\[ƒg‡‚Í ## Used at the top of each report ‚±‚̃Œƒ|[ƒg‚̃f[ƒ^WŒvŠúŠÔ : ## Used in pie charts îŒ^‚ÌŠp“x : ## different ways of sorting ’ÊM—Ê ’¼‹ß7“úŠÔ‚̃f[ƒ^“]‘——Ê % ‚ÌƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚ÌƒŠƒNƒGƒXƒgŒ” % ‚Ìő僊ƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚Ìő僊ƒNƒGƒXƒgŒ” ƒŠƒNƒGƒXƒg” ’¼‹ß7“úŠÔ‚ÌƒŠƒNƒGƒXƒgŒ” % ‚̃y[ƒWƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚̃y[ƒWƒNƒGƒXƒgŒ” % ‚ÌÅ‘åƒy[ƒWƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚ÌÅ‘åƒy[ƒWƒŠƒNƒGƒXƒgŒ” ƒy[ƒWƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚̃y[ƒWƒŠƒNƒGƒXƒgŒ” % ‚ÌƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚ÌƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” % ‚Ìő僊ƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚Ìő僊ƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” ƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒg” ’¼‹ß7“úŠÔ‚ÌƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŒ” % ‚Ì•s¬Œ÷ƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚Ì•s¬Œ÷ƒŠƒNƒGƒXƒgŒ” % ‚ÌÅ‘å•s¬Œ÷ƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì % ‚ÌÅ‘å•s¬Œ÷ƒŠƒNƒGƒXƒgŒ” •s¬Œ÷ƒŠƒNƒGƒXƒgŒ” ’¼‹ß7“úŠÔ‚Ì•s¬Œ÷ƒŠƒNƒGƒXƒgŒ” ÅIƒŠƒNƒGƒXƒgŽž ÅIƒŠƒ_ƒCƒŒƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŽž ÅI•s¬Œ÷ƒŠƒNƒGƒXƒgŽž ʼn‚ÌƒŠƒNƒGƒXƒgŽž ʼn‚ÌƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“ƒŠƒNƒGƒXƒgŽž ʼn‚Ì•s¬Œ÷ƒŠƒNƒGƒXƒgŽž ## 3 other ways of sorting in m, f, & n * * ƒ\[ƒg‡‚̓Aƒ‹ƒtƒ@ƒxƒbƒg * * ƒ\[ƒg‡‚Íó‘ÔƒR[ƒh * * ƒ\[ƒg–³‚µ ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. Œß‘O ŒßŒã ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y”N%mŒŽ%D“ú %HŽž%n•ª ## "Program started at" and "Analysed requests from" %Y”N%mŒŽ%D“ú(%w) %HŽž%n•ª ## In Daily Report %Y”N%mŒŽ%d“ú ## In Daily Summary %w ## In Hourly Report %Y”N%mŒŽ%d“ú %HŽž%n•ª%x%IŽž%o•ª ## In Hourly Summary %hŽž ## In Hour of the Week Summary %w—j“ú %HŽž%n•ª%x%IŽž%o•ª ## In Quarter-Hour and Five-Minute Reports %Y”N%mŒŽ%d“ú %HŽž%n•ª%x%IŽž%o•ª ## In Quarter-Hour and Five-Minute Summaries %HŽž%n•ª%x%IŽž%o•ª ## In Weekly Report %Y”N%mŒŽ%d“ú ## In Monthly Report %Y”N%mŒŽ ## In Quarterly Report %Y”N %mŒŽ%x%lŒŽ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y”N ## The date (d) column in non-time reports %Y”N%mŒŽ%D“ú ## The date & time (D) column in non-time reports %Y”N%mŒŽ%D“ú %HŽž%n•ª ## In non-time reports: "including all files with requests since [date]" %Y”N%mŒŽ%D“ú %HŽž%n•ª ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Œp‘± 101 ƒvƒƒgƒRƒ‹•ÏX 1xx [ŽíX‚Ìî•ñ] 200 OK 201 쬬Œ÷ 202 «—ˆ‚̈—‚Æ‚µ‚ÄŽó— 203 ”ñŒö”F 204 ‘—Mî•ñ–³‚µ 205 ƒf[ƒ^‚̉Šú‰» 206 ’f•Ðî•ñ 2xx [ŽíX‚̬Œ÷] 300 •¡”‚ªŠY“– 301 P‹v“IˆÚ“® 302 ‘¼‚Ɉړ® 303 ‘¼‚ðŽQÆ 304 ŋ߂̌ŸõˆÈ—ˆ•ÏX–³‚µ 305 ƒvƒƒNƒV‚ðŽg—p‚¹‚æ 306 ƒvƒƒNƒV‚ð•ÏX‚¹‚æ 307 ˆêŽž“IˆÚ“® 3xx [ŽíX‚ÌƒŠƒ_ƒCƒŒƒNƒg] 400 •s–@ƒŠƒNƒGƒXƒg 401 —v”FØ 402 —vŽx•¥ 403 ƒAƒNƒZƒX‹ÖŽ~ 404 ƒy[ƒW•sÝ 405 •s–@ƒƒ\ƒbƒh 406 ƒy[ƒW‚Ì•s‹–‰Â 407 ƒvƒƒNƒV‚É‚æ‚é—v”FØ 408 ŽžŠÔØ‚ê 409 ƒŠƒNƒGƒXƒg‚̓y[ƒW‚Æ–µ‚ 410 ƒy[ƒWíœÏ 411 —v’·‚³ 412 Ž–‘OðŒ•s¬—§ 413 ƒŠƒNƒGƒXƒgƒf[ƒ^‚Ì’´‰ß 414 ƒŠƒNƒGƒXƒgƒtƒ@ƒCƒ‹–¼‚Ì’·‚³’´‰ß 415 –¢ƒTƒ|[ƒg‚̃ƒfƒBƒA 416 ƒŠƒNƒGƒXƒg—̈æˆÙí 417 —v‹•s¬Œ÷ 4xx [ŽíX‚̃†[ƒUƒGƒ‰[] 500 ƒT[ƒo“à•”ƒGƒ‰[ 501 –¢ƒTƒ|[ƒgƒŠƒNƒGƒXƒg 502 ƒT[ƒoŠO•”ƒGƒ‰[ 503 ˆêŽž“I‰ž“š•s”\ 504 ƒQ[ƒgƒEƒFƒCŽžŠÔØ‚ê 505 –¢ƒTƒ|[ƒgHTTPƒo[ƒWƒ‡ƒ“ 506 ƒŠƒ_ƒCƒŒƒNƒg•s¬Œ÷ 5xx [ŽíX‚̃T[ƒoƒGƒ‰[] xxx [‚»‚Ì‘¼] analog-ce-6.0.17/lang/jpsdesc.txt000066400000000000000000000100211406366436600165600ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report ‚±‚̃Œƒ|[ƒg‚ÍA”N“x•ʂ̓Œv‚ð•\‚µ‚Ü‚·B # Quarterly Report ‚±‚̃Œƒ|[ƒg‚ÍA4”¼Šú–ˆ‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Monthly Report ‚±‚̃Œƒ|[ƒg‚ÍAŒŽ•ʂ̓Œv‚ð•\‚µ‚Ü‚·B # Weekly Report ‚±‚̃Œƒ|[ƒg‚ÍAT•ʂ̓Œv‚ð•\‚µ‚Ü‚·B # Daily Report ‚±‚̃Œƒ|[ƒg‚ÍA“ú•ʂ̓Œv‚ð•\‚µ‚Ü‚·B # Hourly Report ‚±‚̃Œƒ|[ƒg‚ÍAŽžŠÔ•ʂ̓Œv‚ð•\‚µ‚Ü‚·B # Quarter-Hour Report ‚±‚̃Œƒ|[ƒg‚ÍA15•ªŠÔŠu‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Five-Minute Report ‚±‚̃Œƒ|[ƒg‚ÍA5•ªŠÔŠu‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Daily Summary ‚±‚̃Œƒ|[ƒg‚ÍA‘S‚Ä‚ÌT‚Ì—j“ú•Ê‘˜a‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Hourly Summary ‚±‚̃Œƒ|[ƒg‚ÍA‘S‚Ă̓ú‚ÌŽžŠÔ•Ê‘˜a‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Hour of the Week Summary ‚±‚̃Œƒ|[ƒg‚ÍA‘S‚Ä‚ÌT‚ÌŽžŠÔ•Ê‘˜a‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Quarter-Hour Summary ‚±‚̃Œƒ|[ƒg‚ÍA‘S‚Ă̓ú‚Ì15•ªŠÔŠu‚Ì‘˜a‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Five-Minute Summary ‚±‚̃Œƒ|[ƒg‚ÍA‘S‚Ă̓ú‚Ì5•ªŠÔŠu‚Ì‘˜a‚Ì“Œv‚ð•\‚µ‚Ü‚·B # General Summary ‚±‚̃Œƒ|[ƒg‚ÍA‘S‘̂̓Œv‚ð•\‚µ‚Ü‚·B # Request Report ‚±‚̃Œƒ|[ƒg‚ÍAƒTƒCƒg‚̃tƒ@ƒCƒ‹‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Redirection Report ‚±‚̃Œƒ|[ƒg‚ÍA•ʂ̃tƒ@ƒCƒ‹‚ÖƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“‚µ‚½ƒtƒ@ƒCƒ‹‚Ì“Œv‚ð•\‚µ‚Ü‚·B(’ÊíAƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“‚ð‹­§‚³‚¹‚éAÅŒã‚ɃXƒ‰ƒbƒVƒ…‚Ì–³‚¢ƒfƒBƒŒƒNƒgƒŠ‚©ACGI ƒXƒNƒŠƒvƒg‚Å‚ ‚éB) # Failure Report ‚±‚̃Œƒ|[ƒg‚ÍAuƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚ç‚È‚¢v“™‚̃Gƒ‰[‚ð¶‚¶‚³‚¹‚éƒtƒ@ƒCƒ‹‚Ì“Œv‚ð•\‚µ‚Ü‚·B # File Type Report ‚±‚̃Œƒ|[ƒg‚ÍAƒtƒ@ƒCƒ‹‚ÌŠg’£Žq‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Directory Report ‚±‚̃Œƒ|[ƒg‚ÍAƒtƒ@ƒCƒ‹‚ªƒŠƒNƒGƒXƒg‚³‚ꂽƒfƒBƒŒƒNƒgƒŠ‚Ì“Œv‚ð•\‚µ‚Ü‚·B(ŠeƒfƒBƒŒƒNƒgƒŠ‚Ì”’l‚Í‘S‚ẴTƒuƒfƒBƒŒƒNƒgƒŠ‚àŠÜ‚݂܂·B) # Host Report ‚±‚̃Œƒ|[ƒg‚ÍAƒtƒ@ƒCƒ‹‚ðƒŠƒNƒGƒXƒg‚µ‚½ƒRƒ“ƒsƒ…[ƒ^‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Host Redirection Report ‚±‚̃Œƒ|[ƒg‚ÍA•ʃtƒ@ƒCƒ‹‚ÖƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“‚³‚ꂽƒRƒ“ƒsƒ…[ƒ^‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Host Failure Report ‚±‚̃Œƒ|[ƒg‚ÍAƒŠƒNƒGƒXƒg‚ÉŽ¸”s‚µ‚½ƒRƒ“ƒsƒ…[ƒ^‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Domain Report ‚±‚̃Œƒ|[ƒg‚ÍAƒtƒ@ƒCƒ‹‚ðƒŠƒNƒGƒXƒg‚µ‚½ƒRƒ“ƒsƒ…[ƒ^‚Ì‘•Ê“Œv‚ð•\‚µ‚Ü‚·B # Referrer Report ‚±‚̃Œƒ|[ƒg‚ÍA(ƒŠƒ“ƒNA‚ ‚é‚¢‚Í‚±‚̃TƒCƒg‚̉摜‚ðŠÜ‚Þƒy[ƒW‚ð’H‚Á‚Ä‚«‚½) ŽQÆŒ³‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Referring Site Report ‚±‚̃Œƒ|[ƒg‚ÍAŽQÆŒ³‚̃T[ƒo‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Redirected Referrer Report ‚±‚̃Œƒ|[ƒg‚ÍAƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“‚ð‹N‚±‚µ‚½ŽQÆŒ³‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Failed Referrer Report ‚±‚̃Œƒ|[ƒg‚ÍA‚±‚̃TƒCƒg‚Ö‚ÌƒŠƒ“ƒNØ‚ê‚ÌŽQÆŒ³‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Browser Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚̃uƒ‰ƒEƒU[‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Virtual Host Report ‚±‚̃Œƒ|[ƒg‚ÍA‚±‚̃TƒCƒg‚ÌŠe‰¼‘zƒhƒƒCƒ“‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Virtual Host Redirection Report ‚±‚̃Œƒ|[ƒg‚ÍAŠe‰¼‘zƒhƒƒCƒ“‚ÖƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“‚³‚ꂽƒŠƒNƒGƒXƒg‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Virtual Host Failure Report ‚±‚̃Œƒ|[ƒg‚ÍAŠe‰¼‘zƒhƒƒCƒ“‚Ö‚Ì•s¬Œ÷ƒŠƒNƒGƒXƒg‚Ì“Œv‚ð•\‚µ‚Ü‚·B # User Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ª”FØ‚³‚ê‚é‚©ƒNƒbƒL[‚Å”F’肳‚ꂽ‚Æ‚«Aƒtƒ@ƒCƒ‹‚ðƒŠƒNƒGƒXƒg‚µ‚½ƒ†[ƒU‚Ì“Œv‚ð•\‚µ‚Ü‚·B # User Redirection Report ‚±‚̃Œƒ|[ƒg‚ÍA•ʃtƒ@ƒCƒ‹‚ÖƒŠƒ_ƒCƒŒƒNƒVƒ‡ƒ“‚³‚ꂽƒ†[ƒU‚Ì“Œv‚ð•\‚µ‚Ü‚·B # User Failure Report ‚±‚̃Œƒ|[ƒg‚ÍAƒŠƒNƒGƒXƒg‚ÉŽ¸”s‚µ‚½ƒ†[ƒU‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Organisation Report ‚±‚̃Œƒ|[ƒg‚ÍAƒtƒ@ƒCƒ‹‚ðƒŠƒNƒGƒXƒg‚ð‚µ‚½ƒRƒ“ƒsƒ…[ƒ^‚̃hƒƒCƒ“‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Search Query Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ª‚±‚̃TƒCƒg‚ð”­Œ©‚·‚é‚Ì‚ÉAŒŸõƒGƒ“ƒWƒ“‚ÅŽg—p‚µ‚½ŒŸõŒê‹å‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Search Word Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ª‚±‚̃TƒCƒg‚ð”­Œ©‚·‚é‚Ì‚ÉAŒŸõƒGƒ“ƒWƒ“‚ÅŽg—p‚µ‚½’PŒê‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Internal Search Query Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ª‚±‚̃TƒCƒg“à‚ÅAƒXƒNƒŠƒvƒg‚ÅŽg—p‚µ‚½ŒŸõŒê‹å‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Internal Search Word Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ª‚±‚̃TƒCƒg“à‚ÅAƒXƒNƒŠƒvƒg‚ÅŽg—p‚µ‚½’PŒê‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Browser Summary ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ÌŽg—p‚µ‚½ƒuƒ‰ƒEƒU[‚̃xƒ“ƒ_[‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Operating System Report ‚±‚̃Œƒ|[ƒg‚ÍAƒ†[ƒU‚ÌŽg—p‚µ‚½ OS ‚Ì“Œv‚ð•\‚µ‚Ü‚·B # File Size Report ‚±‚̃Œƒ|[ƒg‚ÍAƒtƒ@ƒCƒ‹‚̑傫‚³‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Status Code Report ‚±‚̃Œƒ|[ƒg‚ÍA‘S‚Ä‚ÌƒŠƒNƒGƒXƒg‚Ì HTTP ó‘ÔƒR[ƒh‚Ì“Œv‚ð•\‚µ‚Ü‚·B # Processing Time Report ‚±‚̃Œƒ|[ƒg‚ÍA¬Œ÷ƒŠƒNƒGƒXƒg‚̈—ŽžŠÔ‚Ì“Œv‚ð•\‚µ‚Ü‚·B analog-ce-6.0.17/lang/jpsdom.tab000066400000000000000000000125361406366436600163650ustar00rootroot00000000000000# ˆê”Ê‚¨‚æ‚ÑŠî”ÕƒhƒƒCƒ“ aero 2 q‹ó‰^—A‹ÆŠE arpa 1 ƒCƒ“ƒ^[ƒlƒbƒgƒCƒ“ƒtƒ‰ biz 2 ƒrƒWƒlƒX com 2 ¤‹Æ‘gD coop 2 ‹¦“¯‘g‡ edu 2 •Ä‘‚“™‹³ˆç‹@ŠÖ gov 2 •Ä‘­•{‹@ŠÖ info 2 ˆê”Êiî•ñj int 2 ‘Û‹@ŠÖ mil 2 •Ä‘ŒRŽ–‹@ŠÖ museum 2 ”Ž•¨ŠÙ/”üpŠÙ name 3 ŒÂl–¼ net 2 ƒlƒbƒgƒ[ƒN org 2 ”ñ‰c—˜‘gD pro 3 ê–副 # ‘•ʃR[ƒhƒhƒƒCƒ“–¼ ac 1 ƒAƒZƒ“ƒVƒ‡ƒ““‡ ad 2 ƒAƒ“ƒhƒ‰‰¤‘ ae 3 ƒAƒ‰ƒuŽñ’·‘˜A–M af 1 ƒAƒtƒKƒjƒXƒ^ƒ“ ag 2 ƒAƒ“ƒeƒBƒOƒ@Eƒo[ƒu[ƒ_ ai 1 ƒAƒ“ƒMƒ‰ al 1 ƒAƒ‹ƒoƒjƒA am 2 ƒAƒ‹ƒƒjƒA an 1 ƒIƒ‰ƒ“ƒ_—̃Aƒ“ƒeƒBƒ‹ ao 1 ƒAƒ“ƒSƒ‰ aq 1 “ì‹É ar 3 ƒAƒ‹ƒ[ƒ“ƒ`ƒ“ as 1 ƒAƒƒŠƒJƒ“ƒTƒ‚ƒA at 3 ƒI[ƒXƒgƒŠƒA au 3 ƒI[ƒXƒgƒ‰ƒŠƒA aw 1 ƒAƒ‹ƒo az 1 ƒAƒ[ƒ‹ƒoƒCƒWƒƒƒ“ ba 3 ƒ{ƒXƒjƒAEƒwƒ‹ƒcƒFƒSƒrƒi bb 2 ƒoƒ‹ƒoƒhƒX bd 1 ƒoƒ“ƒOƒ‰ƒfƒVƒ… be 2 ƒxƒ‹ƒM[ bf 1 ƒuƒ‹ƒLƒiƒtƒ@ƒ\ bg 2 ƒuƒ‹ƒKƒŠƒA bh 1 ƒo[ƒŒ[ƒ“ bi 1 ƒuƒ‹ƒ“ƒW bj 1 ƒxƒiƒ“ (‹Œƒ_ƒz[ƒ) bm 1 ƒo[ƒ~ƒ…[ƒ_ bn 1 ƒuƒ‹ƒlƒC bo 3 ƒ{ƒŠƒrƒA br 3 ƒuƒ‰ƒWƒ‹ bs 1 ƒoƒnƒ} bt 1 ƒu[ƒ^ƒ“ bv 1 ƒu[ƒx“‡ bw 1 ƒ{ƒcƒƒi by 1 ƒxƒ‰ƒ‹[ƒV bz 1 ƒxƒŠ[ƒY ca 3 ƒJƒiƒ_ cc 1 ƒRƒRƒX (ƒL[ƒŠƒ“ƒO) ”“‡ cd 1 ƒRƒ“ƒS–¯Žå‹¤˜a‘ (‹ŒƒUƒC[ƒ‹) cf 1 ’†‰›ƒAƒtƒŠƒJ‹¤˜a‘ cg 1 ƒRƒ“ƒS ch 2 ƒXƒCƒX ci 1 ƒR[ƒgƒWƒ{ƒA[ƒ‹ (‹ŒÛ‰åŠCŠÝ) ck 1 ƒNƒbƒN”“‡ cl 2 ƒ`ƒŠ cm 1 ƒJƒƒ‹[ƒ“ cn 3 ’†‰Øl–¯‹¤˜a‘ co 3 ƒRƒƒ“ƒrƒA cr 3 ƒRƒXƒ^ƒŠƒJ cs 1 ƒZƒ‹ƒrƒA‚ ‚é‚¢‚̓‚ƒ“ƒeƒlƒOƒ cu 1 ƒLƒ…[ƒo cv 1 ƒJ[ƒ|ƒxƒ‹ƒf cx 1 ƒNƒŠƒXƒ}ƒX“‡ cy 3 ƒLƒvƒƒX cz 2 ƒ`ƒFƒR de 2 ƒhƒCƒc dj 1 ƒWƒuƒ` dk 2 ƒfƒ“ƒ}[ƒN dm 2 ƒhƒ~ƒjƒJ do 2 ƒhƒ~ƒjƒJ‹¤˜a‘ dz 1 ƒAƒ‹ƒWƒFƒŠƒA ec 3 ƒGƒNƒAƒhƒ‹ ee 2 ƒGƒXƒgƒjƒA eg 3 ƒGƒWƒvƒg eh 1 ¼ƒTƒnƒ‰ er 1 ƒGƒŠƒgƒŠƒA es 2 ƒXƒyƒCƒ“ et 1 ƒGƒ`ƒIƒsƒA fi 2 ƒtƒBƒ“ƒ‰ƒ“ƒh fj 3 ƒtƒBƒW[ fk 1 ƒtƒH[ƒNƒ‰ƒ“ƒh”“‡ fm 1 ƒ~ƒNƒƒlƒVƒA fo 1 ƒtƒFƒ[”“‡ fr 2 ƒtƒ‰ƒ“ƒX fx 1 ƒtƒ‰ƒ“ƒX (‰¢B˜A‡–{•”) ga 1 ƒKƒ{ƒ“ gb 1 ƒuƒŠƒeƒ“ gd 1 ƒOƒŒƒiƒ_ ge 1 ƒOƒ‹ƒWƒA gf 1 ƒtƒ‰ƒ“ƒX—̃MƒjƒA gg 1 ƒ`ƒƒƒlƒ‹”“‡ƒK[ƒ“ƒWƒB“‡ gh 3 ƒK[ƒi gi 1 ƒWƒuƒ‰ƒ‹ƒ^ƒ‹ gl 1 ƒOƒŠ[ƒ“ƒ‰ƒ“ƒh gm 1 ƒKƒ“ƒrƒA gn 1 ƒMƒjƒA gp 1 ƒOƒAƒ_ƒ‹[ƒv gq 1 Ô“¹ƒMƒjƒA gr 2 ƒMƒŠƒVƒƒ gs 1 ƒTƒEƒXƒWƒ‡[ƒWƒAEƒTƒEƒXƒTƒ“ƒhƒCƒbƒ`”“‡ gt 3 ƒOƒAƒeƒ}ƒ‰ gu 1 ƒOƒAƒ€ gw 1 ƒMƒjƒAƒrƒTƒI gy 1 ƒKƒCƒAƒi hk 3 ` hm 1 ƒn[ƒhEƒ}ƒNƒhƒiƒ‹ƒh”“‡ hn 2 ƒzƒ“ƒWƒ…ƒ‰ƒX hr 2 ƒNƒƒAƒ`ƒA ht 1 ƒnƒCƒ` hu 2 ƒnƒ“ƒKƒŠ[ id 3 ƒCƒ“ƒhƒlƒVƒA ie 2 ƒAƒCƒ‹ƒ‰ƒ“ƒh il 3 ƒCƒXƒ‰ƒGƒ‹ im 1 ƒ}ƒ““‡ in 3 ƒCƒ“ƒh io 1 ‰p—̃Cƒ“ƒh—m’nˆæ iq 1 ƒCƒ‰ƒN ir 1 ƒCƒ‰ƒ“ is 2 ƒAƒCƒXƒ‰ƒ“ƒh it 2 ƒCƒ^ƒŠƒA je 1 ƒ`ƒƒƒlƒ‹”“‡ƒWƒƒ[ƒW[“‡ jm 3 ƒWƒƒƒ}ƒCƒJ jo 3 ƒˆƒ‹ƒ_ƒ“ jp 3 “ú–{ ke 3 ƒPƒjƒA kg 1 ƒLƒ‹ƒMƒXƒ^ƒ“ kh 1 ƒJƒ“ƒ{ƒWƒA ki 1 ƒLƒŠƒoƒX km 1 ƒRƒ‚ƒ kn 1 ƒZƒ“ƒgƒNƒŠƒXƒgƒtƒ@[EƒlƒCƒrƒX kp 1 ’©‘N–¯ŽåŽå‹`‹¤˜a‘ kr 3 ‘åŠØ–¯‘ kw 3 ƒNƒEƒF[ƒg ky 1 ƒPƒCƒ}ƒ“”“‡ kz 1 ƒJƒUƒtƒXƒ^ƒ“ la 1 ƒ‰ƒIƒX lb 3 ƒŒƒoƒmƒ“ lc 1 ƒZƒ“ƒgƒ‹ƒVƒA li 2 ƒŠƒqƒeƒ“ƒVƒ…ƒ^ƒCƒ“ lk 1 ƒXƒŠƒ‰ƒ“ƒJ lr 1 ƒŠƒxƒŠƒA ls 1 ƒŒƒ\ƒg lt 2 ƒŠƒgƒAƒjƒA lu 2 ƒ‹ƒNƒZƒ“ƒuƒ‹ƒN lv 2 ƒ‰ƒgƒrƒA ly 1 ƒŠƒrƒA ma 1 ƒ‚ƒƒbƒR mc 2 ƒ‚ƒiƒR md 1 ƒ‚ƒ‹ƒhƒo mg 1 ƒ}ƒ_ƒKƒXƒJƒ‹ mh 1 ƒ}[ƒVƒƒƒ‹”“‡ mk 3 ƒ}ƒPƒhƒjƒA ml 1 ƒ}ƒŠ mm 1 ƒ~ƒƒƒ“ƒ}[ mn 1 ƒ‚ƒ“ƒSƒ‹ mo 1 ƒ}ƒJƒI mp 1 –kƒ}ƒŠƒAƒi”“‡ mq 1 ƒ}ƒ‹ƒ`ƒj[ƒN“‡ mr 1 ƒ‚[ƒŠƒ^ƒjƒA ms 1 ƒ‚ƒ“ƒgƒZƒ‰ƒg mt 3 ƒ}ƒ‹ƒ^ mu 1 ƒ‚[ƒŠƒVƒƒƒX mv 1 ƒ‚ƒ‹ƒfƒBƒu mw 1 ƒ}ƒ‰ƒEƒC mx 3 ƒƒLƒVƒR my 3 ƒ}ƒŒ[ƒVƒA mz 1 ƒ‚ƒUƒ“ƒr[ƒN na 1 ƒiƒ~ƒrƒA nc 1 ƒjƒ…[ƒJƒŒƒhƒjƒA ne 1 ƒjƒWƒF[ƒ‹ nf 1 ƒm[ƒtƒH[ƒN“‡ ng 1 ƒiƒCƒWƒFƒŠƒA ni 3 ƒjƒJƒ‰ƒOƒA nl 2 ƒIƒ‰ƒ“ƒ_ no 2 ƒmƒ‹ƒEƒF[ np 1 ƒlƒp[ƒ‹ nr 1 ƒiƒEƒ‹ nu 1 ƒjƒEƒG nz 3 ƒjƒ…[ƒW[ƒ‰ƒ“ƒh om 1 ƒIƒ}[ƒ“ pa 3 ƒpƒiƒ} pe 3 ƒyƒ‹[ pf 1 ƒtƒ‰ƒ“ƒX—̃|ƒŠƒlƒVƒA pg 3 ƒpƒvƒAƒjƒ…[ƒMƒjƒA ph 3 ƒtƒBƒŠƒsƒ“ pk 3 ƒpƒLƒXƒ^ƒ“ pl 3 ƒ|[ƒ‰ƒ“ƒh pm 1 ƒTƒ“ƒsƒG[ƒ‹“‡Eƒ~ƒNƒƒ““‡ pn 1 ƒsƒgƒPƒAƒ““‡ pr 1 ƒvƒGƒ‹ƒgƒŠƒR ps 1 ƒpƒŒƒXƒ`ƒi pt 2 ƒ|ƒ‹ƒgƒKƒ‹ pw 1 ƒpƒ‰ƒI py 3 ƒpƒ‰ƒOƒAƒC qa 1 ƒJƒ^[ƒ‹ re 1 ƒŒƒ†ƒjƒIƒ“ ro 2 ƒ‹[ƒ}ƒjƒA ru 2 ƒƒVƒA˜A–M rw 1 ƒ‹ƒƒ“ƒ_ sa 3 ƒTƒEƒWƒAƒ‰ƒrƒA sb 1 ƒ\ƒƒ‚ƒ“”“‡ sc 1 ƒZƒCƒVƒFƒ‹ sd 1 ƒX[ƒ_ƒ“ se 2 ƒXƒEƒF[ƒfƒ“ sg 3 ƒVƒ“ƒKƒ|[ƒ‹ sh 1 ƒZƒ“ƒgƒwƒŒƒi“‡ si 2 ƒXƒƒxƒjƒA sj 1 ƒXƒo[ƒ‹ƒoƒ‹”“‡Eƒ„ƒ“ƒ}ƒCƒGƒ““‡ sk 2 ƒXƒƒoƒLƒA sl 1 ƒVƒGƒ‰ƒŒƒIƒl sm 1 ƒTƒ“ƒ}ƒŠƒm sn 1 ƒZƒlƒKƒ‹ so 1 ƒ\ƒ}ƒŠƒA sr 1 ƒXƒŠƒiƒ€ st 1 ƒTƒ“ƒgƒEƒvƒŠƒ“ƒVƒy su 2 ‹Œƒ\ƒrƒGƒg˜A–M sv 3 ƒGƒ‹ƒTƒ‹ƒoƒhƒ‹ sy 1 ƒVƒŠƒA sz 1 ƒXƒƒWƒ‰ƒ“ƒh tc 1 ƒ^[ƒRƒX”“‡EƒJƒCƒRƒX”“‡ td 1 ƒ`ƒƒƒh tf 1 ƒtƒ‰ƒ“ƒX—̋ɓ씓‡ tg 1 ƒg[ƒS th 3 ƒ^ƒC tj 1 ƒ^ƒWƒLƒXƒ^ƒ“ tk 1 ƒgƒPƒ‰ƒE”“‡ tl 1 “Œƒ`ƒ‚[ƒ‹ tm 1 ƒgƒ‹ƒNƒƒjƒXƒ^ƒ“ tn 1 ƒ`ƒ…ƒjƒWƒA to 1 ƒgƒ“ƒK tp 1 “ŒƒeƒBƒ‚[ƒ‹ tr 3 ƒgƒ‹ƒR tt 3 ƒgƒŠƒjƒ_[ƒhEƒgƒoƒS tv 1 ƒcƒoƒ‹ tw 3 ‘ä˜p tz 1 ƒ^ƒ“ƒUƒjƒA ua 3 ƒEƒNƒ‰ƒCƒi ug 3 ƒEƒKƒ“ƒ_ uk 3 ƒCƒMƒŠƒX um 1 •Ä—Ì‘¾•½—m”“‡ us 4 ƒAƒƒŠƒJ‡O‘ uy 3 ƒEƒ‹ƒOƒAƒC uz 1 ƒEƒYƒxƒLƒXƒ^ƒ“ va 1 ƒoƒ`ƒJƒ“Žs‘ vc 1 ƒZƒ“ƒgƒrƒ“ƒZƒ“ƒg‚¨‚æ‚уOƒŒƒiƒfƒB[ƒ“”“‡ ve 3 ƒxƒlƒYƒGƒ‰ vg 1 ‰p—̃o[ƒWƒ“”“‡ vi 1 •ė̃o[ƒWƒ“”“‡ vn 1 ƒxƒgƒiƒ€ vu 1 ƒoƒkƒAƒc wf 1 ƒƒŠƒXEƒtƒeƒ…ƒi”“‡ ws 1 ¼ƒTƒ‚ƒA ye 1 ƒCƒGƒƒ“ yt 1 ƒ}ƒˆƒbƒg“‡ yu 3 ƒ†[ƒSƒXƒ‰ƒrƒA za 3 “ìƒAƒtƒŠƒJ‹¤˜a‘ zm 1 ƒUƒ“ƒrƒA zr 1 ƒRƒ“ƒS–¯Žå‹¤˜a‘ (‹ŒƒUƒC[ƒ‹) zw 3 ƒWƒ“ƒoƒuƒG analog-ce-6.0.17/lang/jpsform.html000066400000000000000000000210561406366436600167440ustar00rootroot00000000000000 Analog ƒtƒH[ƒ€EƒCƒ“ƒ^ƒtƒF[ƒX

Analog ƒtƒH[ƒ€EƒCƒ“ƒ^ƒtƒF[ƒX


1. ƒŒƒ|[ƒg‚Ì‘I‘ð

’ˆÓ : ˆÈ‰º‚ÌŽwަ‚É]‚Á‚Ċ‹«‚ðݒ肵I‚í‚é‚Ü‚ÅA ‚±‚̃tƒH[ƒ€‚Í“®ì‚µ‚È‚¢‚Å‚µ‚傤B—Ⴆ‚ÎAƒ{ƒ^ƒ“‚³‚¦Œ»‚ê‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB ŠÂ‹«Ý’è‚ðI—¹‚µ‚½ŒãA‚±‚Ì•¶ß‚ð휂µ‚Ä‚­‚¾‚³‚¢B
ŒÂX‚̃Œƒ|[ƒg‚ÌÚׂȈӖ¡‚ɂ‚¢‚Ä‚Í analog ‚̃z[ƒ€ƒy[ƒW ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B

‚ǂ̃Œƒ|[ƒg‚ð•\ަ‚µ‚Ü‚·‚©?


[On] [Off] ‘S‘̂̊T—v
[On] [Off] ŒŽ•ʃŒƒ|[ƒg
[On] [Off] T•ʃŒƒ|[ƒg
[On] [Off] —j“ú•ÊŠT—v
[On] [Off] “ú•ʃŒƒ|[ƒg
[On] [Off] ŽžŠÔ•ÊŠT—v
[On] [Off] ŽžŠÔ•ʃŒƒ|[ƒg
[On] [Off] 15•ªŠÔŠuƒŒƒ|[ƒg
[On] [Off] ƒhƒƒCƒ“ƒŒƒ|[ƒg
[On] [Off] ‘gD•ʃŒƒ|[ƒg
[On] [Off] ƒfƒBƒŒƒNƒgƒŠƒŒƒ|[ƒg
[On] [Off] ƒtƒ@ƒCƒ‹Ží—ޕʃŒƒ|[ƒg
[On] [Off] ƒŠƒNƒGƒXƒgƒŒƒ|[ƒg
[On] [Off] ƒtƒ@ƒCƒ‹ƒTƒCƒYƒŒƒ|[ƒg
[On] [Off] ŽQÆŒ³ƒŒƒ|[ƒg
[On] [Off] ŒŸõŒê‹åƒŒƒ|[ƒg
[On] [Off] ŒŸõŒêƒŒƒ|[ƒg
[On] [Off] ƒzƒXƒgƒŒƒ|[ƒg
[On] [Off] ƒuƒ‰ƒEƒUƒŒƒ|[ƒg
[On] [Off] ƒuƒ‰ƒEƒU‚ÌŠT—v
[On] [Off] OS ƒŒƒ|[ƒg
[On] [Off] ƒXƒe[ƒ^ƒXƒR[ƒhƒŒƒ|[ƒg

ƒvƒƒOƒ‰ƒ€‚ÌŽÀs :
‚à‚µ‚­‚ÍAŒÂX‚̃Œƒ|[ƒg‚ɂ‚¢‚ÄA ˆÈ‰º‚̃IƒvƒVƒ‡ƒ“‚ðŽw’è‚·‚鎖‚ª‚Å‚«‚Ü‚·B ‚ÍA10MƒoƒCƒgˆÈã‚Ì€–Ú‚ð•\ަ‚µ‚Ü‚·B“¯—l‚É ‚ÍAƒoƒCƒg”‚ª‘½‚¢•û‚©‚çãˆÊ 50 ˆÊ‚ð•\ަ‚µ‚Ü‚·B


2. ƒŒƒ|[ƒg‚ÌÚ׃IƒvƒVƒ‡ƒ“

ƒhƒƒCƒ“ƒŒƒ|[ƒg‚̃IƒvƒVƒ‡ƒ“

ƒhƒƒCƒ“ƒŒƒ|[ƒg‚̃\[ƒg‡
­‚È‚­‚Æ‚à ˆÈã‚̃hƒƒCƒ“‚ð‘S‚ÄŠÜ‚ÞB

‘gD•ʃŒƒ|[ƒg‚̃IƒvƒVƒ‡ƒ“

‘gD•ʃŒƒ|[ƒg‚̃\[ƒg‡
­‚È‚­‚Æ‚à ˆÈã‚Ì‘gD‚ð‘S‚ÄŠÜ‚ÞB

ƒfƒBƒŒƒNƒgƒŠƒŒƒ|[ƒg‚̃IƒvƒVƒ‡ƒ“

ƒfƒBƒŒƒNƒgƒŠƒŒƒ|[ƒg‚̃\[ƒg‡
­‚È‚­‚Æ‚à ˆÈã‚̃fƒBƒŒƒNƒgƒŠ‚ð‘S‚ÄŠÜ‚ÞB

ƒŠƒNƒGƒXƒgƒŒƒ|[ƒg‚̃IƒvƒVƒ‡ƒ“

ƒŠƒNƒGƒXƒgƒŒƒ|[ƒg‚̃\[ƒg‡
­‚È‚­‚Æ‚à ˆÈã‚̃tƒ@ƒCƒ‹‚ð‘S‚ÄŠÜ‚ÞB
•\ަ‚ÍA ‚ð‘ÎÛ‚Æ‚·‚éB

ŽQÆŒ³ƒŒƒ|[ƒg‚̃IƒvƒVƒ‡ƒ“

ŽQÆŒ³ƒŒƒ|[ƒg‚̃\[ƒg‡
­‚È‚­‚Æ‚à ˆÈã‚ÌŽQÆŒ³ URL ‚ð‘S‚ÄŠÜ‚ÞB

3. ƒƒOƒtƒ@ƒCƒ‹‚Ì•”•ª‰ðÍ

“Á’è“úŽž‚Ì‚Ý
“Á’è“úŽž‚ÌƒŠƒNƒGƒXƒg‚¾‚¯‚ð‰ðÍ‚·‚鎖‚à‰Â”\‚Å‚·B ‰ðÍ‚·‚é“ú•t‚͈̔͂ðˆÈ‰º‚̂悤‚É yymmdd ‚ÌŒ`‚Å“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B—á : 980301 ‚Í 1998”N3ŒŽ1“ú (ˆê•û‚͈̔͂¾‚¯‚ð§ŒÀ‚µ‚½‚¢ê‡‚ÍA •Еû‚̃tƒB[ƒ‹ƒh‚¾‚¯‚𖄂߂Ă­‚¾‚³‚¢)
‚©‚ç ‚Ü‚Å

“Á’è‚̃tƒ@ƒCƒ‹‚Ì‚Ý
ˆÈ‰º‚̃tƒ@ƒCƒ‹‚݂̂ð‘ÎÛ‚Æ‚µ‚Ü‚· (ƒRƒ“ƒ}‚Å‹æØ‚Á‚Ä—ñ‹“‚µ‚Ä‚­‚¾‚³‚¢B ƒƒCƒ‹ƒhƒJ[ƒh‚Æ‚µ‚Ä * ‚ðŠÜ‚߂鎖‚ª‚Å‚«‚Ü‚·)

ˆÈ‰º‚̃tƒ@ƒCƒ‹‚ÍœŠO‚µ‚Ü‚·B


4. ƒŒƒCƒAƒEƒg

‚ ‚È‚½‚Ì‘gD–¼ (ƒy[ƒW‚̃^ƒCƒgƒ‹—p)

‘gD‚̃z[ƒ€ƒy[ƒW (•s—v‚Ìꇂ͋󔒂̂܂܂ɂµ‚Ä‚­‚¾‚³‚¢)
URL :


analog-ce-6.0.17/lang/jpu.cfg000066400000000000000000000037361406366436600156620ustar00rootroot00000000000000LANGUAGE JAPANESE-UTF SUBDOMAIN ad.jp 管ç†çµ„ç¹” SUBDOMAIN ac.jp 大学・専門学校ãªã© SUBDOMAIN co.jp 伿¥­ SUBDOMAIN go.jp 政府機関 SUBDOMAIN or.jp å„種法人団体 SUBDOMAIN ne.jp ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚µãƒ¼ãƒ“ス SUBDOMAIN gr.jp ä»»æ„団体 SUBDOMAIN ed.jp å„種学校 SUBDOMAIN hokkaido.jp åŒ—æµ·é“ SUBDOMAIN aomori.jp é’æ£®çœŒ SUBDOMAIN iwate.jp 岩手県 SUBDOMAIN miyagi.jp 宮城県 SUBDOMAIN akita.jp 秋田県 SUBDOMAIN yamagata.jp 山形県 SUBDOMAIN fukushima.jp ç¦å³¶çœŒ SUBDOMAIN ibaraki.jp 茨城県 SUBDOMAIN tochigi.jp 栃木県 SUBDOMAIN gunma.jp 群馬県 SUBDOMAIN saitama.jp 埼玉県 SUBDOMAIN chiba.jp åƒè‘‰çœŒ SUBDOMAIN tokyo.jp æ±äº¬éƒ½ SUBDOMAIN kanagawa.jp 神奈å·çœŒ SUBDOMAIN niigata.jp 新潟県 SUBDOMAIN toyama.jp 富山県 SUBDOMAIN ishikawa.jp 石å·çœŒ SUBDOMAIN fukui.jp ç¦äº•県 SUBDOMAIN yamanashi.jp 山梨県 SUBDOMAIN nagano.jp 長野県 SUBDOMAIN gifu.jp å²é˜œçœŒ SUBDOMAIN shizuoka.jp é™å²¡çœŒ SUBDOMAIN aichi.jp 愛知県 SUBDOMAIN mie.jp 三é‡çœŒ SUBDOMAIN shiga.jp 滋賀県 SUBDOMAIN kyoto.jp 京都府 SUBDOMAIN osaka.jp 大阪府 SUBDOMAIN hyogo.jp 兵庫県 SUBDOMAIN nara.jp 奈良県 SUBDOMAIN wakayama.jp 和歌山県 SUBDOMAIN tottori.jp é³¥å–県 SUBDOMAIN shimane.jp 島根県 SUBDOMAIN okayama.jp 岡山県 SUBDOMAIN hiroshima.jp 広島県 SUBDOMAIN yamaguchi.jp å±±å£çœŒ SUBDOMAIN tokushima.jp 徳島県 SUBDOMAIN kagawa.jp 香å·çœŒ SUBDOMAIN ehime.jp 愛媛県 SUBDOMAIN kochi.jp 高知県 SUBDOMAIN fukuoka.jp ç¦å²¡çœŒ SUBDOMAIN saga.jp ä½è³€çœŒ SUBDOMAIN nagasaki.jp 長崎県 SUBDOMAIN kumamoto.jp 熊本県 SUBDOMAIN oita.jp 大分県 SUBDOMAIN miyazaki.jp 宮崎県 SUBDOMAIN kagoshima.jp 鹿å…島県 SUBDOMAIN okinawa.jp 沖縄県 SUBDOMAIN sapporo.jp 札幌市 SUBDOMAIN sendai.jp ä»™å°å¸‚ SUBDOMAIN yokohama.jp 横浜市 SUBDOMAIN kawasaki.jp å·å´Žå¸‚ SUBDOMAIN nagoya.jp åå¤å±‹å¸‚ SUBDOMAIN kobe.jp 神戸市 SUBDOMAIN kitakyushu.jp 北ä¹å·žå¸‚ analog-ce-6.0.17/lang/jpu.lng000066400000000000000000000351031406366436600156740ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Japanese version by Kaori Chikenji, ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp), ## Motonobu Takahashi (monyo@home.monyo.com), ## and Kazuto Ishigaki (ishigaki-ml@factory.gr.jp) 2002 Feb. 24 ## ## Takayuki Matsuki (matsuki@tokyo-kasei.ac.jp) 2004 Feb. 18 ## ## Note: Be careful to use the same character set in all the configuration ## files, i.e., jp?.lng (this file), jp?.cfg, jp?dom.tab, jp?desc.txt. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP *UTF-8 ## Abbreviations for the day and month names. æ—¥ 月 ç« æ°´ 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 ## Next some standard common words. ## Abbreviation for "week beginning" 週先頭日 å¹´ ## Quarter of a year 4åŠæœŸ 月 æ—¥ æ—¥ 時間 分 分 ç§’ ç§’ ãƒã‚¤ãƒˆ ãƒã‚¤ãƒˆ ## ?bytes represents kbytes, Mbytes etc. ?ãƒã‚¤ãƒˆ リクエスト リクエスト 年月日 ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 年月日 時間帯 時 é–‹å§‹æ—¥ 開始時刻 最終アクセス日時 最終アクセス時刻 ファイル ファイル ホスト ホスト 仮想ホスト 仮想ホスト ディレクトリ ディレクトリ ドメイン ドメイン 組織 組織 æ‹¡å¼µå­ æ‹¡å¼µå­ URL URL ブラウザ ブラウザ OS OS ## (= operating system, operating systems) サイズ 検索語 検索項目 サイト サイト ユーザ ユーザ 状態コード 状態コード ウェブサーãƒã®çµ±è¨ˆ ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. キロ メガ ギガ (10å„„) テラ (1å…†) ペタ (1åƒå…†) エクサ (100京) ゼータ (10åž“) ヨッタ (1禾予) ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports å…¨ä½“ã®æ¦‚è¦ ## The time reports, plus "busiest" strings (at the bottom of each report) 年別レãƒãƒ¼ãƒˆ 最も混雑ã—ãŸå¹´ : 4åŠæœŸåˆ¥ãƒ¬ãƒãƒ¼ãƒˆ 最も混雑ã—ãŸ4åŠæœŸ : 月別レãƒãƒ¼ãƒˆ 最も混雑ã—ãŸæœˆ : 週別レãƒãƒ¼ãƒˆ 最も混雑ã—ãŸé€± (å³ã®æ—¥ä»˜ã‹ã‚‰ï¼‘週間): 曜日別集計 日別レãƒãƒ¼ãƒˆ 最も混雑ã—ãŸæ—¥ : 時間別レãƒãƒ¼ãƒˆ 時間別集計 曜日別時間集計 最も混雑ã—ãŸæ™‚é–“ : 15分間隔レãƒãƒ¼ãƒˆ 15分間隔集計 最も混雑ã—ãŸ15分間 : 5分間隔レãƒãƒ¼ãƒˆ 5分間隔集計 最も混雑ã—ãŸ5分間 : ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ホストレãƒãƒ¼ãƒˆ ホスト ホスト n ホストリダイレクションレãƒãƒ¼ãƒˆ ホスト ホスト n ãƒ›ã‚¹ãƒˆä¸æˆåŠŸãƒ¬ãƒãƒ¼ãƒˆ ホスト ホスト n ディレクトリレãƒãƒ¼ãƒˆ ディレクトリ ディレクトリ n ファイル種類別レãƒãƒ¼ãƒˆ æ‹¡å¼µå­ æ‹¡å¼µå­ n リクエストレãƒãƒ¼ãƒˆ ファイル ファイル n リダイレクションレãƒãƒ¼ãƒˆ ファイル ファイル n ãƒªã‚¯ã‚¨ã‚¹ãƒˆä¸æˆåŠŸãƒ¬ãƒãƒ¼ãƒˆ ファイル ファイル n å‚照元レãƒãƒ¼ãƒˆ å‚ç…§å…ƒURL å‚ç…§å…ƒURL n å‚照元サイトレãƒãƒ¼ãƒˆ å‚照元サイト å‚照元サイト n å‚照元リダイレクションレãƒãƒ¼ãƒˆ å‚ç…§å…ƒURL å‚ç…§å…ƒURL n å‚ç…§å…ƒä¸æˆåŠŸãƒ¬ãƒãƒ¼ãƒˆ å‚ç…§å…ƒURL å‚ç…§å…ƒURL n 検索語å¥ãƒ¬ãƒãƒ¼ãƒˆ æ¤œç´¢èªžå¥ æ¤œç´¢èªžå¥ n 検索語レãƒãƒ¼ãƒˆ 検索語 検索語 n 内部検索語å¥ãƒ¬ãƒãƒ¼ãƒˆ æ¤œç´¢èªžå¥ æ¤œç´¢èªžå¥ n 内部検索語レãƒãƒ¼ãƒˆ 検索語 検索語 n 仮想ホストレãƒãƒ¼ãƒˆ 仮想ホスト 仮想ホスト n 仮想ホストリダイレクションレãƒãƒ¼ãƒˆ 仮想ホスト 仮想ホスト n ä»®æƒ³ãƒ›ã‚¹ãƒˆä¸æˆåŠŸãƒ¬ãƒãƒ¼ãƒˆ 仮想ホスト 仮想ホスト n ユーザレãƒãƒ¼ãƒˆ ユーザ ユーザ n ユーザリダイレクションレãƒãƒ¼ãƒˆ ユーザ ユーザ n ãƒ¦ãƒ¼ã‚¶ä¸æˆåŠŸãƒ¬ãƒãƒ¼ãƒˆ ユーザ ユーザ n ブラウザ集計 ブラウザ ブラウザ n ブラウザレãƒãƒ¼ãƒˆ ブラウザ ブラウザ n OSレãƒãƒ¼ãƒˆ OS OS n ドメインレãƒãƒ¼ãƒˆ ドメイン ドメイン n 組織別レãƒãƒ¼ãƒˆ 組織 組織 n ステータスコードレãƒãƒ¼ãƒˆ ステータスコード ステータスコード n æ‰€è¦æ™‚間レãƒãƒ¼ãƒˆ ファイルサイズレãƒãƒ¼ãƒˆ ## Used at the bottom of the report レãƒãƒ¼ãƒˆå‡ºåŠ›ã‚½ãƒ•ãƒˆ : å‡¦ç†æ™‚é–“ <1 ## Used in the time reports 1å˜ä½ 㯠ã‚ã‚‹ã„ã¯ãã®å€¤æœªæº€ã‚’表㙠ページリクエスト件数 ページリクエスト件数 ## Used at the bottom of each non-time report: need m, f & n genders * * ãã®ä»– ## Used on the pie charts: again need m, f & n genders * * ãã®ä»– ## Used at the top of the report 統計開始日時 : è§£æžå¯¾è±¡æœŸé–“ : ~ ## Used in the General Summary リクエストæˆåŠŸä»¶æ•° ä¸Šè¨˜ã®æ—¥åˆ¥å¹³å‡ ページリクエストæˆåŠŸä»¶æ•° ä¸Šè¨˜ã®æ—¥åˆ¥å¹³å‡ ステータスコードä¸åœ¨ãƒ­ã‚°è¡Œæ•° ãƒªã‚¯ã‚¨ã‚¹ãƒˆä¸æˆåŠŸä»¶æ•° リクエストリダイレクション件数 ステータスコード付ãリクエスト件数 ç•°ãªã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ•ァイル数 ç•°ãªã‚‹ã‚µãƒ¼ãƒ“スホスト数 異常ログ行数 ä¸å¿…è¦ãƒ­ã‚°é …目数 データ転é€é‡ ä¸Šè¨˜ã®æ—¥åˆ¥å¹³å‡ æ‹¬å¼§å†…ã®æ•°å­—㯠å³ã®æ—¥æ™‚ã¾ã§ã®ç›´è¿‘7日間ã®é›†è¨ˆ : ç›´è¿‘7日間 Go To 先頭 ## Some special phrases for particular reports. ## Note to self: these phrases also occur in anlghea3.h and Pnextname(). [未解決IPアドレス] [ãƒ‰ãƒ¡ã‚¤ãƒ³åæœªä»˜ä¸Ž] [未知ドメインå] [ルートディレクトリ] [無ディレクトリ] [ç„¡æ‹¡å¼µå­] [ディレクトリ] ãã®ä»–ã®Windows ãã®ä»–ã®UNIX ロボット 未知OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) リクエスト件数 週間リクエスト件数 リクエスト件数 (%) 週間リクエスト件数 (%) ページ数 週間ページ数 ページ数 (%) 週間ページ数 (%) ãƒã‚¤ãƒˆ ? ãƒã‚¤ãƒˆ ãƒã‚¤ãƒˆ (週間) ? ãƒã‚¤ãƒˆ (週間) ãƒã‚¤ãƒˆ (%) ãƒã‚¤ãƒˆ (週間) (%) ç•ªå· ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ä¸Šä½ %s ã®è¡¨ : * * ä¸Šä½ %d %s ã®è¡¨ : * * %s ã®è¡¨ : ## "by" in the phrase "listing the top 3 files BY number of requests" 基準㯠## All requests WITH AT LEAST 10 requests 最å°ã¯ ## Different ways of doing floors リクエスト件数 (ç›´è¿‘7日間) リクエスト件数 (ç›´è¿‘7日間) ページ数 (ç›´è¿‘7日間) ページ数 (ç›´è¿‘7日間) リダイレクションリクエスト件数 リダイレクションリクエスト件数 リダイレクションリクエスト件数 (ç›´è¿‘7日間) リダイレクションリクエスト件数 (ç›´è¿‘7日間) 䏿ˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° 䏿ˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° 䏿ˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° (ç›´è¿‘7日間) 䏿ˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° (ç›´è¿‘7日間) % ã®é€šä¿¡é‡ % ã®é€šä¿¡é‡ (ç›´è¿‘7日間) % ã®æœ€å¤§é€šä¿¡é‡ % ã®æœ€å¤§é€šä¿¡é‡ (ç›´è¿‘7日間) (転é€) ãƒã‚¤ãƒˆ (転é€) ãƒã‚¤ãƒˆ ## ?bytes represents kbytes, Mbytes etc. ? ãƒã‚¤ãƒˆã®ãƒ‡ãƒ¼ã‚¿è»¢é€é‡ (転é€) ãƒã‚¤ãƒˆ (ç›´è¿‘7日間) (転é€) ãƒã‚¤ãƒˆ (ç›´è¿‘7日間) ? (転é€) ãƒã‚¤ãƒˆ (ç›´è¿‘7日間) 最終ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ—¥æ™‚ : 最終ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ—¥æ™‚ : 最終ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆä¸æˆåŠŸæ—¥æ™‚ : 最åˆã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ—¥æ™‚ : 最åˆã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ—¥æ™‚ : 最åˆã®ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆæ—¥æ™‚ : ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ソート順㯠## Used at the top of each report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã®ãƒ‡ãƒ¼ã‚¿é›†è¨ˆæœŸé–“ : ## Used in pie charts 扇型ã®è§’度 : ## different ways of sorting é€šä¿¡é‡ ç›´è¿‘7日間ã®ãƒ‡ãƒ¼ã‚¿è»¢é€é‡ % ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®æœ€å¤§ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®æœ€å¤§ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° リクエスト数 ç›´è¿‘7日間ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®ãƒšãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®ãƒšãƒ¼ã‚¸ã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®æœ€å¤§ãƒšãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®æœ€å¤§ãƒšãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ページリクエスト件数 ç›´è¿‘7日間ã®ãƒšãƒ¼ã‚¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®æœ€å¤§ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®æœ€å¤§ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° リダイレクションリクエスト数 ç›´è¿‘7日間ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° % ã®æœ€å¤§ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間㮠% ã®æœ€å¤§ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° 䏿ˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° ç›´è¿‘7日間ã®ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆä»¶æ•° 最終リクエスト時刻 最終リダイレションリクエスト時刻 æœ€çµ‚ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆæ™‚åˆ» 最åˆã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ™‚刻 最åˆã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ™‚刻 最åˆã®ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆæ™‚åˆ» ## 3 other ways of sorting in m, f, & n * * ソート順ã¯ã‚¢ãƒ«ãƒ•ァベット * * ソート順ã¯çŠ¶æ…‹ã‚³ãƒ¼ãƒ‰ * * ソート無㗠## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. åˆå‰ åˆå¾Œ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Yå¹´%m月%Dæ—¥ %H時%n分 ## "Program started at" and "Analysed requests from" %Yå¹´%m月%Dæ—¥(%w) %H時%n分 ## In Daily Report %Yå¹´%m月%dæ—¥ ## In Daily Summary %w ## In Hourly Report %Yå¹´%m月%dæ—¥ %H時%n分%x%I時%o分 ## In Hourly Summary %h時 ## In Hour of the Week Summary %w曜日 %H時%n分%x%I時%o分 ## In Quarter-Hour and Five-Minute Reports %Yå¹´%m月%dæ—¥ %H時%n分%x%I時%o分 ## In Quarter-Hour and Five-Minute Summaries %H時%n分%x%I時%o分 ## In Weekly Report %Yå¹´%m月%dæ—¥ ## In Monthly Report %Yå¹´%m月 ## In Quarterly Report %Yå¹´ %m月%x%l月 ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Yå¹´ ## The date (d) column in non-time reports %Yå¹´%m月%Dæ—¥ ## The date & time (D) column in non-time reports %Yå¹´%m月%Dæ—¥ %H時%n分 ## In non-time reports: "including all files with requests since [date]" %Yå¹´%m月%Dæ—¥ %H時%n分 ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 継続 101 プロトコル変更 1xx [ç¨®ã€…ã®æƒ…å ±] 200 OK 201 ä½œæˆæˆåŠŸ 202 å°†æ¥ã®å‡¦ç†ã¨ã—ã¦å—ç† 203 éžå…¬èª 204 é€ä¿¡æƒ…報無㗠205 データã®åˆæœŸåŒ– 206 断片情報 2xx [ç¨®ã€…ã®æˆåŠŸ] 300 複数ãŒè©²å½“ 301 æ’久的移動 302 ä»–ã«ç§»å‹• 303 ä»–ã‚’å‚ç…§ 304 æœ€è¿‘ã®æ¤œç´¢ä»¥æ¥å¤‰æ›´ç„¡ã— 305 プロクシを使用ã›ã‚ˆ 306 プロクシを変更ã›ã‚ˆ 307 一時的移動 3xx [種々ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ] 400 䏿³•リクエスト 401 è¦èªè¨¼ 402 è¦æ”¯æ‰• 403 ã‚¢ã‚¯ã‚»ã‚¹ç¦æ­¢ 404 ページä¸åœ¨ 405 䏿³•メソッド 406 ページã®ä¸è¨±å¯ 407 プロクシã«ã‚ˆã‚‹è¦èªè¨¼ 408 時間切れ 409 リクエストã¯ãƒšãƒ¼ã‚¸ã¨çŸ›ç›¾ 410 ページ削除済 411 è¦é•·ã• 412 äº‹å‰æ¡ä»¶ä¸æˆç«‹ 413 リクエストデータã®è¶…éŽ 414 リクエストファイルåã®é•·ã•è¶…éŽ 415 未サãƒãƒ¼ãƒˆã®ãƒ¡ãƒ‡ã‚£ã‚¢ 416 リクエスト領域異常 417 è¦æ±‚䏿ˆåŠŸ 4xx [種々ã®ãƒ¦ãƒ¼ã‚¶ã‚¨ãƒ©ãƒ¼] 500 サーãƒå†…部エラー 501 未サãƒãƒ¼ãƒˆãƒªã‚¯ã‚¨ã‚¹ãƒˆ 502 サーãƒå¤–部エラー 503 一時的応答ä¸èƒ½ 504 ゲートウェイ時間切れ 505 未サãƒãƒ¼ãƒˆHTTPãƒãƒ¼ã‚¸ãƒ§ãƒ³ 506 ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆä¸æˆåŠŸ 5xx [種々ã®ã‚µãƒ¼ãƒã‚¨ãƒ©ãƒ¼] xxx [ãã®ä»–] analog-ce-6.0.17/lang/jpudesc.txt000066400000000000000000000127031406366436600165730ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å¹´åº¦åˆ¥ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Quarterly Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€4åŠæœŸæ¯Žã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Monthly Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€æœˆåˆ¥ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Weekly Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€é€±åˆ¥ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Daily Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€æ—¥åˆ¥ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Hourly Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€æ™‚間別ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Quarter-Hour Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€15分間隔ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Five-Minute Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€5分間隔ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Daily Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ã¦ã®é€±ã®æ›œæ—¥åˆ¥ç·å’Œã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Hourly Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ã¦ã®æ—¥ã®æ™‚間別ç·å’Œã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Hour of the Week Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ã¦ã®é€±ã®æ™‚間別ç·å’Œã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Quarter-Hour Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ã¦ã®æ—¥ã®15分間隔ã®ç·å’Œã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Five-Minute Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ã¦ã®æ—¥ã®5分間隔ã®ç·å’Œã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # General Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ä½“ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Request Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ã‚µã‚¤ãƒˆã®ãƒ•ァイルã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Redirection Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€åˆ¥ã®ãƒ•ァイルã¸ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã—ãŸãƒ•ァイルã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚(通常ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’強制ã•ã›ã‚‹ã€æœ€å¾Œã«ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã®ç„¡ã„ディレクトリã‹ã€CGI スクリプトã§ã‚る。) # Failure Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ã€Œãƒ•ァイルãŒè¦‹ã¤ã‹ã‚‰ãªã„ã€ç­‰ã®ã‚¨ãƒ©ãƒ¼ã‚’生ã˜ã•ã›ã‚‹ãƒ•ァイルã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # File Type Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µå­ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Directory Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ•ァイルãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚(å„ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æ•°å€¤ã¯å…¨ã¦ã®ã‚µãƒ–ディレクトリもå«ã¿ã¾ã™ã€‚) # Host Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ•ァイルをリクエストã—ãŸã‚³ãƒ³ãƒ”ュータã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Host Redirection Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€åˆ¥ãƒ•ァイルã¸ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã•れãŸã‚³ãƒ³ãƒ”ュータã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Host Failure Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¤±æ•—ã—ãŸã‚³ãƒ³ãƒ”ュータã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Domain Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ•ァイルをリクエストã—ãŸã‚³ãƒ³ãƒ”ュータã®å›½åˆ¥çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Referrer Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€(リンクã€ã‚ã‚‹ã„ã¯ã“ã®ã‚µã‚¤ãƒˆã®ç”»åƒã‚’å«ã‚€ãƒšãƒ¼ã‚¸ã‚’辿ã£ã¦ããŸ) å‚ç…§å…ƒã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Referring Site Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å‚ç…§å…ƒã®ã‚µãƒ¼ãƒã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Redirected Referrer Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã‚’èµ·ã“ã—ãŸå‚ç…§å…ƒã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Failed Referrer Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ã“ã®ã‚µã‚¤ãƒˆã¸ã®ãƒªãƒ³ã‚¯åˆ‡ã‚Œã®å‚ç…§å…ƒã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Browser Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ã®ãƒ–ラウザーã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Virtual Host Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ã“ã®ã‚µã‚¤ãƒˆã®å„仮想ドメインã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Virtual Host Redirection Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å„仮想ドメインã¸ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã•れãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Virtual Host Failure Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å„仮想ドメインã¸ã®ä¸æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # User Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒèªè¨¼ã•れるã‹ã‚¯ãƒƒã‚­ãƒ¼ã§èªå®šã•れãŸã¨ãã€ãƒ•ァイルをリクエストã—ãŸãƒ¦ãƒ¼ã‚¶ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # User Redirection Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€åˆ¥ãƒ•ァイルã¸ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã•れãŸãƒ¦ãƒ¼ã‚¶ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # User Failure Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¤±æ•—ã—ãŸãƒ¦ãƒ¼ã‚¶ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Organisation Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ•ァイルをリクエストをã—ãŸã‚³ãƒ³ãƒ”ュータã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Search Query Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒã“ã®ã‚µã‚¤ãƒˆã‚’発見ã™ã‚‹ã®ã«ã€æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã§ä½¿ç”¨ã—ãŸæ¤œç´¢èªžå¥ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Search Word Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒã“ã®ã‚µã‚¤ãƒˆã‚’発見ã™ã‚‹ã®ã«ã€æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã§ä½¿ç”¨ã—ãŸå˜èªžã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Internal Search Query Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒã“ã®ã‚µã‚¤ãƒˆå†…ã§ã€ã‚¹ã‚¯ãƒªãƒ—トã§ä½¿ç”¨ã—ãŸæ¤œç´¢èªžå¥ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Internal Search Word Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒã“ã®ã‚µã‚¤ãƒˆå†…ã§ã€ã‚¹ã‚¯ãƒªãƒ—トã§ä½¿ç”¨ã—ãŸå˜èªžã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Browser Summary ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ã®ä½¿ç”¨ã—ãŸãƒ–ラウザーã®ãƒ™ãƒ³ãƒ€ãƒ¼ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Operating System Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ¦ãƒ¼ã‚¶ã®ä½¿ç”¨ã—㟠OS ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # File Size Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€ãƒ•ァイルã®å¤§ãã•ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Status Code Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€å…¨ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã® HTTP 状態コードã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ # Processing Time Report ã“ã®ãƒ¬ãƒãƒ¼ãƒˆã¯ã€æˆåŠŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å‡¦ç†æ™‚é–“ã®çµ±è¨ˆã‚’表ã—ã¾ã™ã€‚ analog-ce-6.0.17/lang/jpudom.tab000066400000000000000000000155051406366436600163660ustar00rootroot00000000000000# 一般ãŠã‚ˆã³åŸºç›¤ãƒ‰ãƒ¡ã‚¤ãƒ³ aero 2 航空é‹è¼¸æ¥­ç•Œ arpa 1 インターãƒãƒƒãƒˆã‚¤ãƒ³ãƒ•ラ biz 2 ビジãƒã‚¹ com 2 商業組織 coop 2 å”åŒçµ„åˆ edu 2 米国高等教育機関 gov 2 米国政府機関 info 2 一般(情報) int 2 国際機関 mil 2 米国è»äº‹æ©Ÿé–¢ museum 2 åšç‰©é¤¨/美術館 name 3 個人å net 2 ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ org 2 éžå–¶åˆ©çµ„ç¹” pro 3 専門家 # 国別コードドメインå ac 1 アセンション島 ad 2 アンドラ王国 ae 3 アラブ首長国連邦 af 1 アフガニスタン ag 2 アンティグァ・ãƒãƒ¼ãƒ–ーダ ai 1 アンギラ al 1 アルãƒãƒ‹ã‚¢ am 2 アルメニア an 1 オランダ領アンティル ao 1 アンゴラ aq 1 å—æ¥µ ar 3 アルゼンãƒãƒ³ as 1 アメリカンサモア at 3 オーストリア au 3 オーストラリア aw 1 アルムaz 1 アゼルãƒã‚¤ã‚¸ãƒ£ãƒ³ ba 3 ボスニア・ヘルツェゴビナ bb 2 ãƒãƒ«ãƒãƒ‰ã‚¹ bd 1 ãƒãƒ³ã‚°ãƒ©ãƒ‡ã‚·ãƒ¥ be 2 ベルギー bf 1 ブルキナファソ bg 2 ブルガリア bh 1 ãƒãƒ¼ãƒ¬ãƒ¼ãƒ³ bi 1 ブルンジ bj 1 ベナン (旧ダホーメ) bm 1 ãƒãƒ¼ãƒŸãƒ¥ãƒ¼ãƒ€ bn 1 ブルãƒã‚¤ bo 3 ボリビア br 3 ブラジル bs 1 ãƒãƒãƒž bt 1 ブータン bv 1 ブーベ島 bw 1 ボツワナ by 1 ベラルーシ bz 1 ベリーズ ca 3 カナダ cc 1 ココス (キーリング) 諸島 cd 1 コンゴ民主共和国 (旧ザイール) cf 1 中央アフリカ共和国 cg 1 コンゴ ch 2 スイス ci 1 コートジボアール (旧象牙海岸) ck 1 クック諸島 cl 2 ãƒãƒª cm 1 カメルーン cn 3 中è¯äººæ°‘共和国 co 3 コロンビア cr 3 コスタリカ cs 1 セルビアã‚ã‚‹ã„ã¯ãƒ¢ãƒ³ãƒ†ãƒã‚°ãƒ­ cu 1 キュームcv 1 カーãƒãƒ™ãƒ«ãƒ‡ cx 1 クリスマス島 cy 3 キプロス cz 2 ãƒã‚§ã‚³ de 2 ドイツ dj 1 ジブムdk 2 デンマーク dm 2 ドミニカ do 2 ドミニカ共和国 dz 1 アルジェリア ec 3 エクアドル ee 2 エストニア eg 3 エジプト eh 1 西サãƒãƒ© er 1 エリトリア es 2 スペイン et 1 エãƒã‚ªãƒ”ã‚¢ fi 2 フィンランド fj 3 フィジー fk 1 フォークランド諸島 fm 1 ミクロãƒã‚·ã‚¢ fo 1 フェロー諸島 fr 2 フランス fx 1 フランス (æ¬§å·žé€£åˆæœ¬éƒ¨) ga 1 ガボン gb 1 ブリテン gd 1 グレナダ ge 1 グルジア gf 1 フランス領ギニア gg 1 ãƒãƒ£ãƒãƒ«è«¸å³¶ã‚¬ãƒ¼ãƒ³ã‚¸ã‚£å³¶ gh 3 ガーナ gi 1 ジブラルタル gl 1 グリーンランド gm 1 ガンビア gn 1 ギニア gp 1 グアダループ gq 1 赤é“ギニア gr 2 ギリシャ gs 1 サウスジョージア・サウスサンドイッãƒè«¸å³¶ gt 3 グアテマラ gu 1 グアム gw 1 ギニアビサオ gy 1 ガイアナ hk 3 香港 hm 1 ãƒãƒ¼ãƒ‰ãƒ»ãƒžã‚¯ãƒ‰ãƒŠãƒ«ãƒ‰è«¸å³¶ hn 2 ホンジュラス hr 2 クロアãƒã‚¢ ht 1 ãƒã‚¤ãƒ hu 2 ãƒãƒ³ã‚¬ãƒªãƒ¼ id 3 インドãƒã‚·ã‚¢ ie 2 アイルランド il 3 イスラエル im 1 マン島 in 3 インド io 1 英領インド洋地域 iq 1 イラク ir 1 イラン is 2 アイスランド it 2 イタリア je 1 ãƒãƒ£ãƒãƒ«è«¸å³¶ã‚¸ãƒ£ãƒ¼ã‚¸ãƒ¼å³¶ jm 3 ジャマイカ jo 3 ヨルダン jp 3 日本 ke 3 ケニア kg 1 キルギスタン kh 1 カンボジア ki 1 キリãƒã‚¹ km 1 コモロ kn 1 セントクリストファー・ãƒã‚¤ãƒ“ス kp 1 æœé®®æ°‘主主義共和国 kr 3 大韓民国 kw 3 クウェート ky 1 ケイマン諸島 kz 1 カザフスタン la 1 ラオス lb 3 レãƒãƒŽãƒ³ lc 1 セントルシア li 2 リヒテンシュタイン lk 1 スリランカ lr 1 リベリア ls 1 レソト lt 2 リトアニア lu 2 ルクセンブルク lv 2 ラトビア ly 1 リビア ma 1 モロッコ mc 2 モナコ md 1 モルドムmg 1 マダガスカル mh 1 マーシャル諸島 mk 3 マケドニア ml 1 マリ mm 1 ミャンマー mn 1 モンゴル mo 1 マカオ mp 1 北マリアナ諸島 mq 1 マルãƒãƒ‹ãƒ¼ã‚¯å³¶ mr 1 モーリタニア ms 1 モントセラト mt 3 マルタ mu 1 モーリシャス mv 1 モルディブ mw 1 マラウイ mx 3 メキシコ my 3 マレーシア mz 1 モザンビーク na 1 ナミビア nc 1 ニューカレドニア ne 1 ニジェール nf 1 ノーフォーク島 ng 1 ナイジェリア ni 3 ニカラグア nl 2 オランダ no 2 ノルウェー np 1 ãƒãƒ‘ール nr 1 ナウル nu 1 ニウエ nz 3 ニュージーランド om 1 オマーン pa 3 パナマ pe 3 ペルー pf 1 フランス領ãƒãƒªãƒã‚·ã‚¢ pg 3 パプアニューギニア ph 3 フィリピン pk 3 パキスタン pl 3 ãƒãƒ¼ãƒ©ãƒ³ãƒ‰ pm 1 サンピエール島・ミクロン島 pn 1 ピトケアン島 pr 1 プエルトリコ ps 1 パレスãƒãƒŠ pt 2 ãƒãƒ«ãƒˆã‚¬ãƒ« pw 1 パラオ py 3 パラグアイ qa 1 カタール re 1 レユニオン ro 2 ルーマニア ru 2 ロシア連邦 rw 1 ルワンダ sa 3 サウジアラビア sb 1 ソロモン諸島 sc 1 セイシェル sd 1 スーダン se 2 スウェーデン sg 3 シンガãƒãƒ¼ãƒ« sh 1 セントヘレナ島 si 2 スロベニア sj 1 スãƒãƒ¼ãƒ«ãƒãƒ«è«¸å³¶ãƒ»ãƒ¤ãƒ³ãƒžã‚¤ã‚¨ãƒ³å³¶ sk 2 スロãƒã‚­ã‚¢ sl 1 シエラレオムsm 1 サンマリノ sn 1 ã‚»ãƒã‚¬ãƒ« so 1 ソマリア sr 1 スリナム st 1 サントメ・プリンシペ su 2 旧ソビエト連邦 sv 3 エルサルãƒãƒ‰ãƒ« sy 1 シリア sz 1 スワジランド tc 1 ターコス諸島・カイコス諸島 td 1 ãƒãƒ£ãƒ‰ tf 1 フランス領極å—諸島 tg 1 トーゴ th 3 タイ tj 1 タジキスタン tk 1 トケラウ諸島 tl 1 æ±ãƒãƒ¢ãƒ¼ãƒ« tm 1 トルクメニスタン tn 1 ãƒãƒ¥ãƒ‹ã‚¸ã‚¢ to 1 トンガ tp 1 æ±ãƒ†ã‚£ãƒ¢ãƒ¼ãƒ« tr 3 トルコ tt 3 トリニダード・トãƒã‚´ tv 1 ツãƒãƒ« tw 3 å°æ¹¾ tz 1 タンザニア ua 3 ウクライナ ug 3 ウガンダ uk 3 イギリス um 1 米領太平洋諸島 us 4 アメリカåˆè¡†å›½ uy 3 ウルグアイ uz 1 ウズベキスタン va 1 ãƒãƒã‚«ãƒ³å¸‚国 vc 1 セントビンセントãŠã‚ˆã³ã‚°ãƒ¬ãƒŠãƒ‡ã‚£ãƒ¼ãƒ³è«¸å³¶ ve 3 ベãƒã‚ºã‚¨ãƒ© vg 1 英領ãƒãƒ¼ã‚¸ãƒ³è«¸å³¶ vi 1 米領ãƒãƒ¼ã‚¸ãƒ³è«¸å³¶ vn 1 ベトナム vu 1 ãƒãƒŒã‚¢ãƒ„ wf 1 ワリス・フテュナ諸島 ws 1 西サモア ye 1 イエメン yt 1 マヨット島 yu 3 ユーゴスラビア za 3 å—アフリカ共和国 zm 1 ザンビア zr 1 コンゴ民主共和国 (旧ザイール) zw 3 ジンãƒãƒ–エ analog-ce-6.0.17/lang/jpuform.html000066400000000000000000000236471406366436600167560ustar00rootroot00000000000000 Analog フォーム・インタフェース

Analog フォーム・インタフェース


1. レãƒãƒ¼ãƒˆã®é¸æŠž

æ³¨æ„ : ä»¥ä¸‹ã®æŒ‡ç¤ºã«å¾“ã£ã¦ç’°å¢ƒã‚’設定ã—終ã‚ã‚‹ã¾ã§ã€ ã“ã®ãƒ•ォームã¯å‹•作ã—ãªã„ã§ã—ょã†ã€‚例ãˆã°ã€ãƒœã‚¿ãƒ³ã•ãˆç¾ã‚Œãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。 環境設定を終了ã—ãŸå¾Œã€ã“ã®æ–‡ç¯€ã‚’削除ã—ã¦ãã ã•ã„。
個々ã®ãƒ¬ãƒãƒ¼ãƒˆã®è©³ç´°ãªæ„味ã«ã¤ã„ã¦ã¯ analog ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

ã©ã®ãƒ¬ãƒãƒ¼ãƒˆã‚’表示ã—ã¾ã™ã‹?


[On] [Off] å…¨ä½“ã®æ¦‚è¦
[On] [Off] 月別レãƒãƒ¼ãƒˆ
[On] [Off] 週別レãƒãƒ¼ãƒˆ
[On] [Off] 曜日別概è¦
[On] [Off] 日別レãƒãƒ¼ãƒˆ
[On] [Off] 時間別概è¦
[On] [Off] 時間別レãƒãƒ¼ãƒˆ
[On] [Off] 15分間隔レãƒãƒ¼ãƒˆ
[On] [Off] ドメインレãƒãƒ¼ãƒˆ
[On] [Off] 組織別レãƒãƒ¼ãƒˆ
[On] [Off] ディレクトリレãƒãƒ¼ãƒˆ
[On] [Off] ファイル種類別レãƒãƒ¼ãƒˆ
[On] [Off] リクエストレãƒãƒ¼ãƒˆ
[On] [Off] ファイルサイズレãƒãƒ¼ãƒˆ
[On] [Off] å‚照元レãƒãƒ¼ãƒˆ
[On] [Off] 検索語å¥ãƒ¬ãƒãƒ¼ãƒˆ
[On] [Off] 検索語レãƒãƒ¼ãƒˆ
[On] [Off] ホストレãƒãƒ¼ãƒˆ
[On] [Off] ブラウザレãƒãƒ¼ãƒˆ
[On] [Off] ãƒ–ãƒ©ã‚¦ã‚¶ã®æ¦‚è¦
[On] [Off] OS レãƒãƒ¼ãƒˆ
[On] [Off] ステータスコードレãƒãƒ¼ãƒˆ

プログラムã®å®Ÿè¡Œ :
ã‚‚ã—ãã¯ã€å€‹ã€…ã®ãƒ¬ãƒãƒ¼ãƒˆã«ã¤ã„ã¦ã€ 以下ã®ã‚ªãƒ—ションを指定ã™ã‚‹äº‹ãŒã§ãã¾ã™ã€‚ ã¯ã€10Mãƒã‚¤ãƒˆä»¥ä¸Šã®é …目を表示ã—ã¾ã™ã€‚åŒæ§˜ã« ã¯ã€ãƒã‚¤ãƒˆæ•°ãŒå¤šã„æ–¹ã‹ã‚‰ä¸Šä½ 50 ä½ã‚’表示ã—ã¾ã™ã€‚


2. レãƒãƒ¼ãƒˆã®è©³ç´°ã‚ªãƒ—ション

ドメインレãƒãƒ¼ãƒˆã®ã‚ªãƒ—ション

ドメインレãƒãƒ¼ãƒˆã®ã‚½ãƒ¼ãƒˆé †
å°‘ãªãã¨ã‚‚ 以上ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’å…¨ã¦å«ã‚€ã€‚

組織別レãƒãƒ¼ãƒˆã®ã‚ªãƒ—ション

組織別レãƒãƒ¼ãƒˆã®ã‚½ãƒ¼ãƒˆé †
å°‘ãªãã¨ã‚‚ 以上ã®çµ„織を全ã¦å«ã‚€ã€‚

ディレクトリレãƒãƒ¼ãƒˆã®ã‚ªãƒ—ション

ディレクトリレãƒãƒ¼ãƒˆã®ã‚½ãƒ¼ãƒˆé †
å°‘ãªãã¨ã‚‚ 以上ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’å…¨ã¦å«ã‚€ã€‚

リクエストレãƒãƒ¼ãƒˆã®ã‚ªãƒ—ション

リクエストレãƒãƒ¼ãƒˆã®ã‚½ãƒ¼ãƒˆé †
å°‘ãªãã¨ã‚‚ 以上ã®ãƒ•ァイルを全ã¦å«ã‚€ã€‚
表示ã¯ã€ を対象ã¨ã™ã‚‹ã€‚

å‚照元レãƒãƒ¼ãƒˆã®ã‚ªãƒ—ション

å‚照元レãƒãƒ¼ãƒˆã®ã‚½ãƒ¼ãƒˆé †
å°‘ãªãã¨ã‚‚ 以上ã®å‚ç…§å…ƒ URL ã‚’å…¨ã¦å«ã‚€ã€‚

3. ログファイルã®éƒ¨åˆ†è§£æž

特定日時ã®ã¿
特定日時ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã ã‘ã‚’è§£æžã™ã‚‹äº‹ã‚‚å¯èƒ½ã§ã™ã€‚ è§£æžã™ã‚‹æ—¥ä»˜ã®ç¯„囲を以下ã®ã‚ˆã†ã« yymmdd ã®å½¢ã§å…¥åŠ›ã—ã¦ãã ã•ã„。例 : 980301 㯠1998å¹´3月1æ—¥ (一方ã®ç¯„囲ã ã‘を制é™ã—ãŸã„å ´åˆã¯ã€ 片方ã®ãƒ•ィールドã ã‘を埋ã‚ã¦ãã ã•ã„)
ã‹ã‚‰ ã¾ã§

特定ã®ãƒ•ァイルã®ã¿
以下ã®ãƒ•ァイルã®ã¿ã‚’対象ã¨ã—ã¾ã™ (コンマã§åŒºåˆ‡ã£ã¦åˆ—挙ã—ã¦ãã ã•ã„。 ワイルドカードã¨ã—㦠* ã‚’å«ã‚る事ãŒã§ãã¾ã™)

以下ã®ãƒ•ァイルã¯é™¤å¤–ã—ã¾ã™ã€‚


4. レイアウト

ã‚ãªãŸã®çµ„ç¹”å (ページã®ã‚¿ã‚¤ãƒˆãƒ«ç”¨)

組織ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ (ä¸è¦ã®å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„)
URL :


analog-ce-6.0.17/lang/kr.lng000066400000000000000000000301451406366436600155130ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Note: there are still some English words left in this language file. ## This is because the word order in analog is not sufficiently flexible ## to allow an accurate translation. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP *EUC-KR ## Abbreviations for the day and month names. ÀÏ ¿ù È­ ¼ö ¸ñ ±Ý Åä 1¿ù 2¿ù 3¿ù 4¿ù 5¿ù 6¿ù 7¿ù 8¿ù 9¿ù 10¿ù 11¿ù 12¿ù ## Next some standard common words. ## Abbreviation for "week beginning" ÁÖÀÇ ½ÃÀÛ ³âµµ ## Quarter of a year ºÐ±â ¿ù ¿äÀÏ ÀÏ ½Ã ºÐ ºÐ ÃÊ ÃÊ ¹ÙÀÌÆ® ¹ÙÀÌÆ® ## ?bytes represents kbytes, Mbytes etc. ?¹ÙÀÌÆ® ¿äû ¿äû ³¯Â¥ ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ³¯Â¥ ½Ã°£ ½Ã°£ óÀ½À¸·Î Á¢¼ÓÇÑ ³¯ óÀ½À¸·Î Á¢¼ÓÇÑ ½Ã°£ ¸¶Áö¸·À¸·Î Á¢¼ÓÇÑ ³¯ ¸¶Áö¸·À¸·Î Á¢¼ÓÇÑ ½Ã°¢ ÆÄÀÏ ÆÄÀÏ È£½ºÆ® È£½ºÆ® °¡»ó È£½ºÆ® °¡»ó È£½ºÆ® µð·ºÅ丮 µð·ºÅ丮 µµ¸ÞÀÎ µµ¸ÞÀÎ ¼Ò¼Ó ¼Ò¼Ó È®ÀåÀÚ È®ÀåÀÚ URL URLs ºê¶ó¿ìÁ® ºê¶ó¿ìÁ® ¿î¿µÃ¼Á¦ ¿î¿µÃ¼Á¦ ## (= operating system, operating systems) Å©±â °Ë»ö¾î °Ë»ö¾î »çÀÌÆ® »çÀÌÆ® »ç¿ëÀÚ »ç¿ëÀÚ »óÅ ÄÚµå »óÅ ÄÚµå À¥ ¼­¹ö Åë°è ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports ÀÏ¹Ý Á¤º¸ Áý°è ## The time reports, plus "busiest" strings (at the bottom of each report) ³â°£ º¸°í¼­ ȸ°è³âµµ: ºÐ±âº¸°í¼­ ȸ°èºÐ±â: ¿ù°£ º¸°í °¡Àå ¸¹ÀÌ Á¢¼ÓÇÑ ´Þ: ÁÖ°£ º¸°í °¡Àå ¸¹ÀÌ Á¢¼ÓÇÑ ÁÖ: ÁÖ ½ÃÀÛÀÏ Àϰ£ Á¤º¸ Áý°è Àϰ£ º¸°í °¡Àå ¸¹ÀÌ Á¢¼ÓÇÑ ³¯: ½Ã°£ ´ÜÀ§ º¸°í ½Ã°£ ´ÜÀ§ Á¤º¸ Áý°è ½Ã°£ ¼­¸Ó¸® °¡Àå ¸¹ÀÌ Á¢¼ÓÇÑ ½Ã°£: 15ºÐ ´ÜÀ§ º¸°í 15ºÐ ¼­¸Ó¸® °¡Àå ¸¹ÀÌ Á¢¼ÓÇÑ 15ºÐ °£°Ý: 5ºÐ ´ÜÀ§ º¸°í 5ºÐ ¼­¸Ó¸® °¡Àå ¸¹ÀÌ Á¢¼ÓÇÑ 5ºÐ °£°Ý: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Á¢¼Ó È£½ºÆ® º¸°í È£½ºÆ® È£½ºÆ® n È£½ºÆ® Àç¼³Á¤ º¸°í¼­ È£½ºÆ® È£½ºÆ®µé n È£½ºÆ® ½ÇÆÐ º¸°í¼­ È£½ºÆ® È£½ºÆ®µé n Á¢¼Ó µð·ºÅ丮 º¸°í µð·ºÅ丮 µð·ºÅ丮 n È­ÀÏ ÇüÅ º¸°í È®ÀåÀÚ È®ÀåÀÚ n Á¢¼Ó ¿äû º¸°í È­ÀÏ È­ÀÏ n È­ÀÏ ÀçÀü¼Û º¸°í È­ÀÏ È­ÀÏ n Á¢¼Ó Àå¾Ö º¸°í È­ÀÏ È­ÀÏ n ¿¬°áÇØÁØ ÆäÀÌÁö º¸°í ¿¬°áÇØÁØ ÆäÀÌÁö ÁÖ¼Ò ¿¬°áÇØÁØ ÆäÀÌÁö ÁÖ¼Ò n ¿¬°áÇØÁØ »çÀÌÆ® º¸°í ¿¬°áÇØÁØ »çÀÌÆ® ¿¬°áÇØÁØ »çÀÌÆ® n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n °Ë»ö °á°ú º¸°í¼­ °Ë»ö °Ë»ö n °Ë»ö ´Ü¾î º¸°í¼­ °Ë»ö¾î °Ë»ö¾î n³ ³»ºÎ °Ë»ö º¸°í¼­ °Ë»ö °Ë»öµé n ³»ºÎ °Ë»ö ´Ü¾î º¸°í¼­ °Ë»ö ´Ü¾î °Ë»ö ´Ü¾îµé n °¡»ó È£½ºÆ® º¸°í °¡»ó È£½ºÆ® °¡»ó È£½ºÆ® n °¡»óÈ£½ºÆ® Àç¼³Á¤ º¸°í¼­ °¡»óÈ£½ºÆ® °¡»óÈ£½ºÆ®µé n °¡»óÈ£½ºÆ® ½ÇÆÐ º¸°í¼­ °¡»óÈ£½ºÆ® °¡»óÈ£½ºÆ®µé n Á¢¼Ó »ç¿ëÀÚ º¸°í »ç¿ëÀÚ »ç¿ëÀÚ n »ç¿ëÀÚ Àç¼³Á¤ º¸°í¼­ »ç¿ëÀÚ »ç¿ëÀÚµé n »ç¿ëÀÚ Àå¾Ö º¸°í »ç¿ëÀÚ »ç¿ëÀÚ n ºê¶ó¿ìÀú Á¢¼Ó Åë°è (¿ä¾à) ºê¶ó¿ìÀú ºê¶ó¿ìÀú n ºê¶ó¿ìÀú Á¢¼Ó Åë°è (»ó¼¼) ºê¶ó¿ìÀú ºê¶ó¿ìÀú n ¿î¿µÃ¼Á¦ º¸°í¼­ ¿î¿µÃ¼Á¦ ¿î¿µÃ¼Á¦ n Á¢¼Ó µµ¸ÞÀÎ º¸°í µµ¸ÞÀÎ µµ¸ÞÀÎ n ȸ»ç,±â°ü º¸°í¼­ ȸ»ç,±â°ü ȸ»ç,±â°ü n »óÅ ÄÚµå º¸°í »óÅÂÄÚµå »óÅÂÄÚµå n 󸮽𣠺¸°í¼­ È­ÀÏ Å©±â º¸°í ## Used at the bottom of the report º¸°í¼­ ÀÛ¼º ÇÁ·Î±×·¥ : ½ÇÇà ½Ã°£ Less than 1 ## Used in the time reports °¢°¢ÀÇ ´ÜÀ§´Â Ç¥½Ã : À̳ª ÀϺκРÆäÀÌÁö Á¢¼Ó ¿äû ÆäÀÌÁö ¿äû ## Used at the bottom of each non-time report: need m, f & n genders * * Ç¥½Ã ¾ÈÇÔ ## Used on the pie charts: again need m, f & n genders * * ±âŸ ## Used at the top of the report ÇÁ·Î±×·¥ ½ÃÀÛ ½Ã°¢ : Á¢¼ÓÅë°è ±â·Ï ½ÃÀÛ : Á¢¼ÓÅë°è ±â·Ï Á¾·á : ## Used in the General Summary ¼º°øÇÑ ¿äû °Ç¼ö ÀÏÀÏ Æò±Õ ¼º°øÇÑ ¿äû °Ç¼ö ¼º°øÇÑ ÆäÀÌÁö ¿äû °Ç¼ö ÀÏÀÏ Æò±Õ ¼º°øÇÑ ÆäÀÌÁö ¿äû °Ç¼ö »óÅÂÄڵ尡 ¾ø´Â ·Î±×È­ÀÏ ÁÙ ¼ö ½ÇÆÐÇÑ ¿äû °Ç¼ö ÀçÀü¼ÛµÈ ¿äû °Ç¼ö Á¤º¸ »óÅ ÄÚµå ¿äû °Ç¼ö ¿äûÇÑ °íÀ¯ÇÑ È­ÀÏ °Ç¼ö Á¢¼ÓÇÑ °íÀ¯ÇÑ È£½ºÆ® ¼ö ºÐ¼® ºÒ°¡´ÉÇÑ ·Î±×È­ÀÏ ÁÙ ¼ö ºÐ¼®À» ¿äûÇÏÁö ¾ÊÀº ·Î±×È­ÀÏ ÁÙ ¼ö Àü¼Û µ¥ÀÌŸ·® ÀÏÀÏ Æò±Õ µ¥ÀÌŸ Àü¼Û·® °ýÈ£¾ÈÀÇ ¼ýÀÚ´Â 7 days to Áö³­ 7Àϰ£ÀÇ Åë°è À̵¿ ¸Ç À§ ## Some special phrases for particular reports. µµ¸ÞÀÎ À̸§À» ãÁö ¸øÇÑ ÁÖ¼Ò µî·ÏµÇÁö ¾ÊÀº µµ¸ÞÀÎ ¾Ë·ÁÁöÁö ¾ÊÀº µµ¸ÞÀÎ ·çÆ® µð·ºÅ丮 µð·ºÅ丮 ¾øÀ½ È®ÀåÀÚ ¾øÀ½ directory ¾Ë·ÁÁöÁö ¾ÊÀº À©µµ¿ì ´Ù¸¥ À¯´Ð½º ·Îº¿ ¾Ë·ÁÁöÁö ¾ÊÀº ¿î¿µÃ¼Á¦ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) ¿äû¼ö 7Àϰ£ ¸®ÄɽºÆ®¼ö ¿äû(%) %7Àϰ£ ¸®Äù½ºÆ®(%) ÆäÀÌÁö¼ö 7ÀÏ ÆäÀÌÁö¼ö ÆäÀÌÁö(%) Àϰ£ ÆäÀÌÁö(%) ¹ÙÀÌÆ® ?¹ÙÀÌÆ®µé 7-Àϰ£ÀÇ ¹ÙÀÌÆ®¼ö 7-Àϰ£ÀÇ ?¹ÙÀÌÆ®(%) ¹ÙÀÌÆ®(%) 7-Àϰ£ÀÇ ¹ÙÀÌÆ®(%) °³ ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ù¹øÂ° ¸ñ·Ï: %s * * ù¹øÂ° ¸ñ·Ï: %d %s * * ¸ñ·Ï: %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors Áö³­ 7ÀÏ °£ÀÇ ¸®Äù½ºÆ® ¼ö Áö³­ 7ÀÏ °£ÀÇ ¸®Äù½ºÆ® ¼ö Áö³­ 7ÀÏ °£ÀÇ ÆäÀÌÁöºä ¼ö Áö³­ 7ÀÏ °£ÀÇ ÆäÀÌÁöºä ¼ö Àç¼³Á¤µÈ ¸®Äù½ºÆ® Àç¼³Á¤µÈ ¸®Äù½ºÆ® Áö³­ 7Àϰ£ÀÇ Àç¼³Á¤ ¼ö Áö³­ 7Àϰ£ÀÇ Àç¼³Á¤ ¼ö ½ÇÆÐÇÑ ¸®Äù½ºÆ® ½ÇÆÐÇÑ ¸®Äù½ºÆ® Áö³­ 7Àϰ£ÀÇ ½ÇÆÐÇÑ ¸®Äù½ºÆ® Áö³­ 7Àϰ£ÀÇ ½ÇÆÐÇÑ ¸®Äù½ºÆ® % Æ®·¡ÇÈÀÇ ¾ç % Áö³­ 7Àϰ£ÀÇ Æ®·¡ÇÈÀÇ ¾ç % Æ®·¡ÇÈ Áß¿¡ ÃÖ´ëÄ¡ % Áö³­ 7Àϰ£ÀÇ Æ®·¡ÇÈ Áß¿¡ ÃÖ´ëÄ¡ ¹ÙÀÌÆ®·Î Ç¥ÇöµÇ´Â Æ®·¡ÇÈ ¹ÙÀÌÆ®·Î Ç¥ÇöµÇ´Â Æ®·¡ÇÈ ## ?bytes represents kbytes, Mbytes etc. ?¹ÙÀÌÆ®·Î Ç¥ÇöµÇ´Â Æ®·¡ÇÈ Áö³­ 7Àϰ£ÀÇ ¹ÙÀÌÆ®·Î Ç¥ÇöµÇ´Â Æ®·¡ÇÈ Áö³­ 7Àϰ£ÀÇ ¹ÙÀÌÆ®·Î Ç¥ÇöµÇ´Â Æ®·¡ÇÈ Áö³­ 7Àϰ£ÀÇ ?¹ÙÀÌÆ®·Î Ç¥ÇöµÇ´Â Æ®·¡ÇÈ requested since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report ÀÌ º¸°í¼­´Â ´ÙÀ½À¸·Î ºÎÅÍÀÇ µ¥ÀÌŸ¸¦ ´ã´Â´Ù. ## Used in pie charts µµÇ¥´Â ´ÙÀ½¿¡ ÀÇÇÏ¿© ±×·ÁÁ³´Ù. ## different ways of sorting Æ®·¡ÇÈÀÇ ¾ç Áö³­ 7Àϰ£ÀÇ Æ®·¡ÇÈÀÇ ¾ç % ¸®Äù½ºÆ® Áß % Áö³­ 7ÀÏ °£ÀÇ ¸®Äù½ºÆ® ¼ö % ¸®Äù½ºÆ®ÀÇ ÃÖ´ë°ª % Áö³­ 7Àϰ£ ¸®Äù½ºÆ®ÀÇ ÃÖ´ë°ª ¿äû¼ö Áö³­ 7ÀÏ °£ÀÇ ¸®Äù½ºÆ® ¼ö % ÆäÀÌÁöºä % Áö³­ 7Àϰ£ÀÇ ÆäÀÌÁöºä % ÆäÀÌÁöºäÀÇ ÃÖ´ë°ª % Áö³­ 7Àϰ£ÀÇ ÆäÀÌÁöºäÁß ÃÖ´ë°ª ÆäÀÌÁö ¿äû¿¡ ´ëÇÑ °¹¼ö Áö³­ 7ÀÏ °£ÀÇ ¸®Äù½ºÆ® ¼ö % Àç¼³Á¤µÈ ¸®Äù½ºÆ® ¼ö % Áö³­ 7ÀÏ °£ÀÇ Àç¼³Á¤µÈ ¸®Äù½ºÆ® ¼ö % Àç¼³Á¤µÈ ¸®Äù½ºÆ®ÀÇ ÃÖ´ë°ª % Áö³­ 7Àϰ£ Àç¼³Á¤µÈ ¸®Äù½ºÆ®ÀÇ ÃÖ´ë°ª Àç¼³Á¤µÈ ¸®Äù½ºÆ® ¼ö Áö³­ 7ÀÏ °£ÀÇ Àç¼³Á¤µÈ ¸®Äù½ºÆ® ¼ö % ½ÇÆÐÇÑ ¸®Äù½ºÆ® % Áö³­ 7ÀÏ °£ÀÇ ½ÇÆÐÇÑ ¸®Äù½ºÆ® ¼ö % ½ÇÆÐÇÑ ¸®Äù½ºÆ® ¼öÀÇ ÃÖ´ë°ª % Áö³­ 7ÀÏ °£ÀÇ ½ÇÆÐÇÑ ¸®Äù½ºÆ® ¼öÀÇ ÃÖ´ë°ª ½ÇÆÐÇÑ ¸®Äù½ºÆ®ÀÇ ¼ö Áö³­ 7ÀÏ °£ÀÇ ½ÇÆÐÇÑ ¸®Äù½ºÆ® ¼ö ¸¶Áö¸·À¸·Î ¸®Äù½ºÆ®ÇÑ ½Ã°£ ¸¶Áö¸·À¸·Î Àç¼³Á¤µÈ ¸®Äù½ºÆ® ½Ã°£ ¸¶Áö¸·À¸·Î ½ÇÆÐÇÑ ¸®Äù½ºÆ® ½Ã°£ óÀ½À¸·Î ¸®Äù½ºÆ®ÇÑ ½Ã°£ óÀ½À¸·Î Àç¼³Á¤µÈ ¸®Äù½ºÆ® ½Ã°£ óÀ½À¸·Î ½ÇÆÐÇÑ ¸®Äù½ºÆ® ½Ã°£ ## 3 other ways of sorting in m, f, & n * * ¹®ÀÚÁ¤·Ä * * ¼ýÀÚÁ¤·Ä * * ¹ÌÁ¤·Ä ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ¿ÀÀü ¿ÀÈÄ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y-%m-%D %H:%n ## "Program started at" and "Analysed requests from" %y-%m-%D-%w %H:%n ## In Daily Report %y/%m/%d ## In Daily Summary %w ## In Hourly Report %y/%m/%d %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %y/%m/%d %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %y/%m/%d ## In Monthly Report %Y %m ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %y/%m/%d ## The date & time (D) column in non-time reports %y/%m/%d %H:%n ## In non-time reports: "including all files with requests since [date]" %y/%m/%d at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/lt.lng000066400000000000000000000334551406366436600155250ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## Lietuviu kalba (Lithuanian language) ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-4 ## Abbreviations for the day and month names. Sekm Pirm Antr Treè Ketv Pen Ðeðt Saus Vas Kov Bal Geg Birþ Liep Rugp Rugs Spal Lap Gruod ## Next some standard common words. ## Abbreviation for "week beginning" sav. pradþia ++year++ ## Quarter of a year ++quarter++ mënuo diena dienos val minutë minutës sekundë sekundës baitas baitai ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ uþklausa uþklausø data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data laikas ++time++ ++first date++ ++first time++ pask. data pask. kartas failas failø/as hostas hostø/as virtualus hostas virtualiø hostø/as katalogas katalogø/as domenas domenø/as ++organisation++ ++organisations++ iðplëtimas iðplëtimø/as URL URL narðyklë narðykliø/ës ++OS++ ++OS's++ ## (= operating system, operating systems) dydis ++search term++ ++search terms++ tinklapis tinklapiø/is vartotojas vartotojø/as statuso kodas statuso kodø/as Web Serverio Statistikos ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Bendra Suvestinë ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Ataskaita Pagal Mënesius Uþimèiausias Mënuo: Ataskaita Pagal Savaites Uþimèiausia Savaitë: Savaitës Suvestinë Ataskaita Pagal Dienas Uþimèiausia Diena: Ataskaita Pagal Valandas Paros Suvestinë ++Hour of the Week Summary++ Uþimèiausia Valanda: Ataskaita Pagal Valandos Ketvirèius ++Quarter-Hour Summary++ Uþimèiausias Valandos Ketvirtis: Penkiaminutinë Ataskaita ++Five-Minute Summary++ Uþimèiausios Penkios Minutës: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Hostø Ataskaita hostas hostø m ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Katalogø Ataskaita katalogas katalogø m Failø Tipø Ataskaita iðplëtimas iðplëtimø m Uþklausø Ataskaita failas failø m Peradresavimø Ataskaita failas failø m Nesëkmingø Uþklausø Ataskaita failas failø m Nuorodø Ataskaita vedantysis URL vedanèiøjø URL m Nuorodø Tinklapiø Ataskaita vedantysis tinklapis vedanèiøjø tinklapiø m Peradresavimo Nuorodø Ataskaita vedantis URL vedanèiøjø URL m Nesëkmingø Nuorodø Ataskaita vedantysis URL vedanèiøjø URL m ++Search Query Report++ ++query++ ++queries++ ++n++ ++Search Word Report++ ++query word++ ++query words++ ++n++ ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Virtualiø Hostø Ataskaita virtualus hostas virtualiø hostø m ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Vartotojø Ataskaita vartotojas vartotojø m ++User Redirection Report++ ++user++ ++users++ ++n++ Vartotojø Nesëkmiø Ataskaita vartotojas vartotojø m Narðykliø Suvestinë narðyklë narðykliø f Narðykliø Ataskaita narðyklë narðykliø f ++Operating System Report++ ++operating system++ ++operating systems++ ++n++ Domenø Ataskaita domenas domenø m ++Organisation Report++ ++organisation++ ++organisations++ ++n++ Statuso kodo Ataskaita statuso kodas statuso kodø m ++Processing Time Report++ Failø dydþio Ataskaita ## Used at the bottom of the report Ði analizë sugeneruota Analizës trukmë Maþiau negu 1 ## Used in the time reports Kiekvienà vienetà sudaro arba jø dalis uþklausa uþklausø/os ## Used at the bottom of each non-time report: need m, f & n genders neátraukti neátrauktos * ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Analizë atlikta Analizuotos uþklausos nuo iki ## Used in the General Summary Sëkmingø uþklausø Sëkmingø uþklausø vidurkis per dienà Sëkmingos puslapiø uþklausos Sëkmingø puslapiø uþklausø vidurkis per dienà Log failo eiluèiø be statuso kodo skaièius Nesëkmingø uþklausø Peradresuotø uþklausø Uþklausø su informaciniu statuso kodu Skirtingø failø uþklausø Skirtingø hostø kreipiniø Sugadintos log failo eilutës Nereikalingos log failo eilutës Perduota duomenø Perduotø duomenø vidurkis per dienà Skliaustuose nurodyti rezultatai 7 dienos iki paskutinëms 7 dienoms Eiti á Virðø ## Some special phrases for particular reports. ++[unresolved numerical addresses]++ ++[domain not given]++ ++[unknown domain]++ ++[root directory]++ ++[no directory]++ ++[no extension]++ ++[directories]++ ++Unknown Windows++ ++Other Unix++ ++Robots++ ++OS unknown++ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #kiekis ++7-day reqs++ %kiekio ++%7-day reqs++ puslapiai ++7-day pages++ %puslapiø ++%7-day pages++ baitai ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %baitø ++%7-day bytes++ ++no.++ ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Pirmø %s sàraðas Pirmø %s sàraðas * Pirmø %d-ies %s sàraðas Pirmø %d-ies %s sàraðas * Sàraðas %s Sàraðas %s * ## "by" in the phrase "listing the top 3 files BY number of requests" , pagal ## All requests WITH AT LEAST 10 requests , sudaranèiø maþiausiai ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ peradresuota uþklausa peradresuotø uþklausø ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ nesëkminga uþklausa nesëkmingø uþklausø ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % apkrovimo ++% of the traffic in the last 7 days++ % maksimalaus apkrovimo ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ apkrovimas baitais ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ uþklausta nuo kartu su peradresuotomis uþklausomis nuo kartu su nesëkmingomis uþklausomis nuo ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) surûðiuotø pagal surûðiuotø pagal * ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting apkrovimo dydá ++the amount of traffic in the last 7 days++ % uþklausø ++% of the requests in the last 7 days++ % maksimalaus uþklausø kiekio ++% of the maximum number of requests in the last 7 days++ uþklausø kieká ++the number of requests in the last 7 days++ % puslapiø uþklausø ++% of the requests for pages in the last 7 days++ % maksimalaus puslapiø uþklausø kiekio ++% of the maximum number of requests for pages in the last 7 days++ uþklausø kieká puslapiams ++the number of requests for pages in the last 7 days++ % peradresuotø uþklausø ++% of the redirected requests in the last 7 days++ % maksimalaus peradresuotø uþklausø kiekio ++% of the maximum number of redirected requests in the last 7 days++ peradresuotø uþklausø kieká ++the number of redirected requests in the last 7 days++ % nesëkmingø uþklausø ++% of the failed requests in the last 7 days++ % maksimalau nesëkmingø uþklausø kiekio ++% of the maximum number of failed requests in the last 7 days++ nesëkmingø uþklausø kieká ++the number of failed requests in the last 7 days++ paskutinës uþklausos laikà paskutinës peradresuotos uþklausos laikà paskutinës nesëkmingos uþklausos laikà ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n surûðiuoti pagal alfabetà surûðiuotos pagal alfabetà * surûðiuoti pagal kieká surûðiuotos pagal kieká * nerûðiuoti nerûðiuotos * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary ++%w++ ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. ++100 Continue with request++ ++101 Switching protocols++ ++1xx [Miscellaneous informational]++ ++200 OK++ ++201 Created++ ++202 Accepted for future processing++ ++203 Non-authoritative information++ ++204 OK, but nothing to send++ ++205 Reset document++ ++206 Partial content++ ++2xx [Miscellaneous successes]++ ++300 Multiple documents available++ ++301 Document moved permanently++ ++302 Document found elsewhere++ ++303 See other document++ ++304 Not modified since last retrieval++ ++305 Use proxy++ ++306 Switch proxy++ ++307 Document moved temporarily++ ++3xx [Miscellaneous redirections]++ ++400 Bad request++ ++401 Authentication required++ ++402 Payment required++ ++403 Access forbidden++ ++404 Document not found++ ++405 Method not allowed++ ++406 Document not acceptable to client++ ++407 Proxy authentication required++ ++408 Request timeout++ ++409 Request conflicts with state of resource++ ++410 Document gone permanently++ ++411 Length required++ ++412 Precondition failed++ ++413 Request too long++ ++414 Requested filename too long++ ++415 Unsupported media type++ ++416 Requested range not valid++ ++417 Expectation failed++ ++4xx [Miscellaneous client/user errors]++ ++500 Internal server error++ ++501 Request type not supported++ ++502 Error at upstream server++ ++503 Service temporarily unavailable++ ++504 Gateway timeout++ ++505 HTTP version not supported++ ++506 Redirection failed++ ++5xx [Miscellaneous server errors]++ ++xxx [Unknown]++ analog-ce-6.0.17/lang/lv.lng000066400000000000000000000337401406366436600155240ustar00rootroot00000000000000## Latvian language file for analog 6.0 ## May not (or may) work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Made by Anda Bimbere ## anda@firstcut.net http://www.firstcut.net Web design & hosting ## Any comments welcome ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1257 ## Abbreviations for the day and month names. Svçtd. Pirmd. Otrd. Treðd. Ceturtd. Piektd. Sestd. Jan Feb Mar Apr Maij Jûn Jûl Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" nedçïas sâk. gads ## Quarter of a year ceturksnis mçnesis diena dienas st. minûte minûtes sekunde sekundes baits baiti ## ?bytes represents kbytes, Mbytes etc. ?baiti pieprasîjums pieprasîjumi datums ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datums laiks laiks pirmais datums pirmais laiks pçdçjais datums pçdçjais laiks fails faili dators datori virtuâla maðîna virtuâlas maðînas direktorija direktorijas domçns domçni organizâcija organizâcijas paplaðinâjums paplaðinâjumi URL URLi Internet pârlûkprogramma Internet pârlûkprogrammas OS OSas ## (= operating system, operating systems) izmçrs meklçðanas vârds meklçðanas vârdi saits saiti lietotâjs lietotâji status kods status kodi Web Servera Statistika ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Îss Kopsavilkums ## The time reports, plus "busiest" strings (at the bottom of each report) Gada Pârskats Visnoslogotâkais gads: Ceturkðòa Pârskats Visnoslogotâkais ceturksnis: Mçneða Pârskats Visnoslogotâkais mçnesis: Nedçïas Pârskats Visnoslogotâkâ nedçïa: nedçïas sâkums Dienas kopsavilkums Dienas Pârskats Visnoslogotâkâ diena: Stundas Pârskats Stundas Kopsavilkums Nedçïas Stundu Kopsavilkums Visnoslogotâkâ stunda: Ceturtdaïstundas Pârskats Ceturtdaïstundas Kopsavilkums Visnoslogotâkâ stundas ceturtdaïa: Piecu Minûðu Pârskats Piecu Minûðu Kopsavilkums Visnoslogotâkâs piecas minûtes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Datoru Statistika dators datori m Servera Pâradresâcijas Pârskats serveris serveri m Servera Neveiksmju Pârskats serveris serveri m Direktoriju Pârskats direktorija direktorijas f Failu Tipu Pârskats faila paplaðinâjums failu paplaðinâjumi m Pieprasîjumu Pârskats fails faili m Pâradresâcijas Pârskats fails faili m Kïûdu Pârskats fails faili m Pârsûtîtâju Pârskats pârsûtîtâja URL pârsûtîtâju URLi m Pârsûtîtâja Lapas Pârskats pârsûtîtâja lapa pârsûtîtâju lapas f Pâradresçto Pârsûtîtâju Pârskats pârsûtîtâja URL pârsûtîtâju URLi m Neveiksmîgu Pârsûtîtâju Pârskats pârsûtîtâja URL pârsûtîtâju URLi m Meklçðanas Pieprasîjumu Pârskats pieprasîjums pieprasîjumi m Meklçðanas Vârdu Pârskats meklçðanas vârds meklçðanas vârdi m Iekðçjâs Meklçðanas Pieprasîjuma Pârskats pieprasîjums pieprasîjumi m Iekðçjâs Meklçðanas Vârda Pârskats pieprasîjuma vârds pieprasîjumu vârdi m Virtuâlo Maðînu Pârskats virtuâla maðîna virtuâlas maðînas f Virtuâlâ Servera Pâradresâciju Pârskats virtuâlais serveris virtuâlie serveri m Virtuâlâ Servera Neveiksmju Pârskats virtuâlais serveris virtuâlie serveri m Lietotâju Pârskats lietotâjs lietotâji m Lietotâju Pâradresâcijas Pârskats lietotâjs lietotâji m Lietotâju Neveiksmju Pârskats lietotâjs lietotâji m Internet Pârlûkprogrammu Kopsavilkums Internet pârlûkprogramma Internet pârlûkprogrammas f Internet Pârlûkprogrammu Pârskats Internet pârlûkprogramma Internet pârlûkprogrammas f Operçtâjsistçmu Pârskats operçtâjsistçma operçtâjsistçmas f Domçnu Pârskats domçns domçni m Organizâciju Pârskats organizâcija organizâcijas f Status Kodu Pârskats status kods status kodi m Pârstrâdâðanas Laika Pârskats Failu Izmçru Statistika ## Used at the bottom of the report Ðî analîze tika izveidota ar Analizçðanas laiks Mazâks kâ 1 ## Used in the time reports Katra vienîba parâda vai daïu no tiem lapas pieprasîjums lapas pieprasîjumi ## Used at the bottom of each non-time report: need m, f & n genders nav parâdîti nav parâdîtas nav parâdîti ## Used on the pie charts: again need m, f & n genders Cits Cita Cits ## Used at the top of the report Programma bija sâkta: Analizçti pieprasîjumi no lîdz ## Used in the General Summary Veiksmîgu pieprasîjumu skaits Veiksmîgu pieprasîjumu vidçjais skaits dienâ Lapu veiksmîgo pieprasîjumu skaits Lapu veiksmîgo pieprasîjumu vidçjais skaits dienâ Logfaila rindas bez statusa koda bija Neveiksmîgu pieprasîjumu skaits Pâradresçto pieprasîjumu skaits Pieprasîjumu ar informâcijas statusa kodu bija Pieprasîtie individuâlie faili Apkalpotie individuâlie serveri Sabojâto logfailu rindas Nelietotâs logfaila rindas Pârsûtîtie dati Dienâ vidçji pârsûtîtie dati Numuri iekavâs attiecas uz 7 dienu periods beidzoties pçdçjâs 7 dienas Skatît Sâkums ## Some special phrases for particular reports. [neatrisinâtas numuriskâs adreses] [domeins nav uzrâdîts] [nezinâms domeins] [saknes direktorija] [nav direktorijas] [nav paplaðinâjums] [direktorijas] Nezinâms Windows Cits Unix Roboti OS nezinâma ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #piepr 7 dienu piepr. %piepr %7 dienu piepr. lapas 7 dienu lapas %lapas %7 dienu lapas baiti ?baiti 7 dienu baiti 7 dienu ?baiti %baiti %7 dienu baiti No. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Uzrâdîti topa %s Uzrâdîtas topa %s Uzrâdîti topa %s Uzrâdîti topa %d %s Uzrâdîtas topa %d %s Uzrâdîti topa %d %s Uzrâdîti %s Uzrâdîtas %s Uzrâdîti %s ## "by" in the phrase "listing the top 3 files BY number of requests" pçc ## All requests WITH AT LEAST 10 requests kam ir ne mazâk par ## Different ways of doing floors pieprasîjums pçdçjo 7 dienu laikâ pieprasîjumi pçdçjo 7 dienu laikâ lapas pieprasîjums pçdçjo 7 dienu laikâ lapu pieprasîjumi pçdçjo 7 dienu laikâ pâradresçts pieprasîjums pâradresçti pieprasîjumi pâradresçts pieprasîjums pçdçjo 7 dienu laikâ pâradresçti pieprasîjumi pçdçjo 7 dienu laikâ neizdevies pieprasîjums neizdevuðies pieprasîjumi neizdevies pieprasîjums pçdçjo 7 dienu laikâ neizdevuðies pieprasîjumi pçdçjo 7 dienu laikâ % no satiksmes % no satiksmes pçdçjo 7 dienu laikâ % no kopçjâs satiksmes % no vislielâkâs satiksmes daudzuma pçdçjo 7 dienu laikâ baits no satiksmes baiti no satiksmes ## ?bytes represents kbytes, Mbytes etc. ?baiti no satiksmes baits no satiksmes pçdçjo 7 dienu laikâ baiti no satiksmes pçdçjo 7 dienu laikâ ?baiti no satiksmes pçdçjo 7 dienu laikâ pieprasîti kopâ ar pâradresçtiem pieprasîjumiem kopâ ar neveiksmîgiem pieprasîjumiem ar pirmo pieprasîjumu kopð ar pirmo pâradresçto pieprasîjumu kopð ar pirmo neveiksmîgo pieprasîjumu kopð ## Now "sorted by": again, in m, f & n (only needed in plural though) sakârtoti pçc sakârtotas pçc sakârtoti pçc ## Used at the top of each report Ðajâ pârskatâ ir dati no ## Used in pie charts Ðíçles ir izveidotas no ## different ways of sorting satiksmes daudzuma satiksmes daudzuma pçdçjo 7 dienu laikâ % no pieprasîjumiem % no pieprasîjumiem pçdçjo 7 dienu laikâ % no vislielakâ pieprasîjumu skaita % no vislielakâ pieprasîjumu skaita pçdçjo 7 dienu laikâ pieprasîjumu skaita pieprasîjumu skaits pçdçjo 7 dienu laikâ % no lapu pieprasîjuma % no lapu pieprasîjuma pçdçjo 7 dienu laikâ % no lapu kopçjâ pieprasîjuma % no vislielâkâ lapu pieprasîjumu skaita pçdçjo 7 dienu laikâ lapu pieprasîjumu skaita lapu pieprasîjumu skaits pçdçjo 7 dienu laikâ % no pâradresçtiem pieprasîjumiem % no pâradresçtiem pieprasîjumiem pçdçjo 7 dienu laikâ % no pâradresçto pieprasîjumu vislielâkâ skaita % no pâradresçto pieprasîjumu vislielâkâ skaita pçdçjo 7 dienu laikâ pâradresçto pieprasîjumu skaita pâradresçto pieprasîjumu skaits pçdçjo 7 dienu laikâ % no neveiksmîgiem pieprasîjumiem % no neveiksmîgiem pieprasîjumiem pçdçjo 7 dienu laikâ % no visiem neveiksmîgiem pieprasîjumiem % no neveiksmîgu pieprasîjumu vislielâkâ skaita pçdçjo 7 dienu laikâ no neveiksmîgu pieprasîjumu skaita neveiksmîgo pieprasîjumu skaits pçdçjo 7 dienu laikâ pçdçjais pieprasîjums bija pçdçjais pâradresçtais pieprasîjums bija pçdçjais neveiksmîgais pieprasîjums bija pirmâ pieprasîjuma laiks pirmâ pâradresçtâ pieprasîjuma laiks pirmâ neveiksmîgâ pieprasîjuma laiks ## 3 other ways of sorting in m, f, & n sakârtoti pçc alfabçta kârtîbas sakârtotas pçc alfabçta kârtîbas sakârtoti pçc alfabçta kârtîbas sakârtoti pçc secîbas sakârtotas pçc secîbas sakârtoti pçc secîbas nesakârtoti nesakârtotas nesakârtoti ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y.g. %d. %m. %H:%n ## "Program started at" and "Analysed requests from" %w, %Y.g. %d. %m. %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m.%x%l. %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Turpinât pieprasîjumu 101 Tiek mainîts protokols 1xx [Daþâda informâcija] 200 OK 201 Izveidota 202 Pieòemts pârstrâdei nâkotnç 203 neautorizçta informâcija 204 OK, bet nav, ko sûtît 205 Atjaunots dokuments 206 Daïçjs saturs 2xx [Daþâdi izdevuðies pieprasîjumi] 300 Pieejami vairâki dokumenti 301 Dokuments pastâvîgi pârvietots 302 Dokuments atrodams citur 303 Apskatiet citu dokumentu 304 Nav mainîts kopð pçdçjâs reizes 305 Lietojiet proxy 306 Mainiet proxy 307 Dokuments pagaidâm pârvietots 3xx [Daþâdas pâradresâcijas] 400 Slikts pieprasîjums 401 Nepiecieðama autentikâcija+ 402 Vajadzîgs maksâjums 403 Pieeja aizliegta 404 Dokuments nav atrasts 405 Metode nav atïauta 406 Dokuments nav pieòemams klientam 407 Nepiecieðama proxy autentikâcija 408 Pieprasîjuma laiks beidzies 409 Pieprasîjums ir pretrunâ ar resursu stâvokli 410 Dokuments ir pastâvîgi izòemts no lietoðanas 411 Vajadzîgs garums 412 Iepriekðnosacîjums nav izdevies 413 Pieprasîjums par garu 414 Pieprasîtais faila nosaukums par garu 415 Neatbalstîti mediju veidi 416 Pieprasîtâ amplitûda nederîga 417 Pieprasîjums nav izdevies 4xx [Daþâdas klientu/lietotâju kïûdas] 500 Iekðçjâ servera kïûda 501 Pieprasîjuma veids nav atbalstîts 502 Kïûda vienâ no tâlâkajiem serveriem 503 Pakalpojums pagaidâm nav pieejams 504 Gateway laiks beidzies 505 HTTP versija nav atbalstîta 506 Neveiksmîga pâradresâcija 5xx [Daþâdas servera kïûdas] xxx [Nezinâms] analog-ce-6.0.17/lang/nl.lng000066400000000000000000000334061406366436600155130ustar00rootroot00000000000000## Taalbestand voor Analog 6.0. Kan wellicht niet werken met andere versies. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Vertaling Engels naar Nederlands a.d.h.v het oude taalbestand. ## 16 Juni 1998, Joost Baaij . ## ## Translation for version 4 by Dimitry Smagghe ## Translation for version 5 by Bert Hiddink ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Zon Maa Din Woe Don Vry Zat Jan Feb Mrt Apr Mei Jun Jul Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. jaar ## Quarter of a year kwartaal maand dag dagen u. minuut minuten seconde seconden byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes aanvraag aanvragen datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum tijd tijd eerste datum eerste tijd laatste datum laatste tijd bestand bestanden host hosts virtual host virtual hosts directory directories domein domeinen bedrijf bedrijven extensie extensies URL URLs browser browsers besturingssysteem besturingssystemen ## (= operating system, operating systems) grootte zoek string zoek strings site sites gebruiker gebruikers status code status codes Website statistieken voor ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Algemene samenvatting ## The time reports, plus "busiest" strings (at the bottom of each report) Jaar Rapport Drukste jaar Kwartaal Rapport Drukste kwartaal Maandelijks Rapport Drukste maand: Wekelijks Rapport Drukste week: week beginnende Dagelijkse Samenvatting Dagelijks Rapport Drukste dag: Uur Rapport Uur Samenvatting Uur van de Week Samenvatting Drukste uur: Kwartier Rapport Kwartier Samenvatting Drukste kwartier van een uur: Vijf-minuten Rapport Vijf-minuten Samenvatting Drukste vijf minuten: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Rapport host hosts n Host Doorverwezen Rapport host hosts n Host Mislukking Rapport host hosts n Directory Rapport directory directories n Bestands Type Rapport extensie extensies n Aanvragen Rapport Aangevraagd bestand aangevraagde bestanden n Redirectie Rapport Aangevraagd bestand aangevraagde bestanden n Mislukking Rapport Aangevraagd bestand aangevraagde bestanden n Referrer Rapport refererende URL refererende URLs n Refererende Sites Rapport refererende site refererende sites n Doorverwezen Referrer Rapport refererende URL refererende URLs n Mislukte Referrer Rapport refererende URL refererende URLs n Zoek Query Rapport query queries n Zoek Woord Rapport query woord query woorden n Intern Zoekopdracht Rapport zoekopdracht zoekopdrachten n Intern Zoekwoord Rapport zoekwoord zoekwoorden n Virtual Host Rapport virtual host virtual hosts n Virtuele Host Redirect Rapport virtuele host virtuele hosts n Virtuel Host Mislukking Rapport virtuele host virtuele hosts n Gebruiker Rapport gebruiker gebruikers n Gebruiker Doorverwezen Rapport gebruiker gebruikers n Gebruiker Mislukking Rapport gebruiker gebruikers n Browser Samenvatting browser browsers n Browser Rapport browser browsers n Besturingssysteem Rapport Besturingssysteem Besturingssysteemen n Domein Rapport domein domeinen n Bedrijfs Rapport bedrijf bedrijven n Status Code Rapport status code status codes n Verwerkingstijd Rapport Bestandsgrootte Rapport ## Used at the bottom of the report Deze analyse is geproduceerd door Looptijd Minder dan 1 ## Used in the time reports Elke eenheid representeert of een gedeelte hiervan aanvragen voor een pagina aanvragen voor pagina's ## Used at the bottom of each non-time report: need m, f & n genders * * niet getoond ## Used on the pie charts: again need m, f & n genders * * Andere ## Used at the top of the report Programma gestart op Aanvragen geanalyseerd van tot ## Used in the General Summary Totale aantal geslaagde aanvragen Gemiddelde aantal geslaagde aanvragen per dag Totale aantal geslaagde aanvragen voor pagina's Gemiddelde aantal geslaagde aanvragen voor pagina's per dag Logbestand regels zonder status code Totale aantal mislukte aanvragen Totale aantal omgeleide aanvragen Aantal aanvragen met informatieve status code Aantal verschillende bestanden aangevraagd Aantal verschillende hosts bediend Onleesbare regels in logbestand Ongebruikte regels in logbestand Totale hoeveelheid data verzonden Gemiddelde hoeveelheid data verzonden per dag Getallen tussen haakjes verwijzen naar de 7 dagen tot afgelopen 7 dagen Ga Naar Top ## Some special phrases for particular reports. [Niet gevonden numerieke adressen] [domein niet gegeven] [ongekend domein] [hoofdmap] [geen map] [geen uitbreiding] [mappen] Onbekende Windows Ander Unix Robots Onbekend besturingssysteem ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #aanv 7-dagen aanvragen %aanv 7-dagen aanvragen pags 7-dagen paginas %pags 7-dagen paginas bytes ?bytes 7-dagen bytes 7-dagen ?bytes %bytes 7-dagen ?bytes aantal ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Top %s afgedrukt * * Top %d %s afgedrukt * * Alle %s afgedrukt ## "by" in the phrase "listing the top 3 files BY number of requests" met ## All requests WITH AT LEAST 10 requests met minstens ## Different ways of doing floors aanvraag gedurende afgelopen 7 dagen aanvragen gedurende afgelopen 7 dagen aanvraag voor een pagina gedurende afgelopen 7 dagen aanvragen voor paginas gedurende de afgelopen 7 dagen doorverwezen aanvraag doorverwezen aanvragen doorverwezen aanvraag gedurende de laatste 7 dagen doorverwezen aanvragen gedurende de laatste 7 dagen mislukt aanvraag mislukte aanvragen mislukte aanvraag gedurende de laatste 7 dagen mislukte aanvragen gedurende de laatste 7 dagen % van het verkeer % van het verkeer gedurende de laatste 7 dagen % van het maximale aantal verkeer % van de maximale hoeveelheid verkeer gedurende de afgelopen 7 dagen byte van het verkeer bytes van het verkeer ## ?bytes represents kbytes, Mbytes etc. ?bytes van het verkeer byte van het verkeer gedurende de laatste 7 dagen bytes van het verkeer gedurende de laatste 7 dagen ?bytes van het verkeer gedurende de laatste 7 dagen verzocht sinds met een doorverwezen aanvraag sinds met een mislukt aanvraag sinds met eerste aanvraag sinds met eerste doorverwezen aanvraag sinds met eerste mislukte aanvraag sinds ## Now "sorted by": again, in m, f & n (only needed in plural though) * * gesorteerd op ## Used at the top of each report Dit rapport bevat gegevens van ## Used in pie charts De taartpunten geven weer de ## different ways of sorting hoeveelheid verkeer de hoeveelheid verkeer gedurende the laatste 7 dagen % van de aanvragen % van de aanvragen gedurende de laatste 7 dagen % van het maximale aantal aanvragen % van het maximale aantal aanvragen gedurende de laatste 7 dagen het aantal aanvragen het aantal aanvragen gedurende de laatste 7 dagen % van de aanvragen voor pagina's % van pagina aanvragen gedurende de laatste 7 dagen % van het aantal aanvragen voor pagina's % van het maximale aantal pagina aanvragen gedurende de laatste 7 dagen het aantal aanvragen voor pagina's het aantal pagina aanvragen gedurende de laatste 7 dagen % van de doorverwezen aanvragen % van de doorverwezen aanvragen gedurende de laatste 7 dagen % van het maximale aantal doorverwezen aanvragen % van het maximale aantal doorverwezen aanvragen gedurende de laatste 7 dagen het aantal doorverwezen aanvragen het aantal doorverwezen aanvragen gedurende de laatste 7 dagen % van de mislukte aanvragen % van de mislukte doorverwezen aanvragen gedurende de laatste 7 dagen % van het maximum aantal mislukte aanvragen % van het maximale aantal aanvragen gedurende de laatste 7 dagen het aantal mislukte aanvragen het aantal mislukte aanvragen gedurende de laatste 7 dagen de tijd van de laatste aanvraag de tijd van de laatste doorverwezen aanvraag de tijd van de laatste mislukte aanvraag tijdstip van de eerste aanvraag tijdstip van de eerste doorverwezen aanvraag tijdstip van eerste mislukte aanvraag ## 3 other ways of sorting in m, f, & n * * alfabetisch gesorteerd * * op nummer gesorteerd * * niet gesorteerd ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. vm nm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d-%m-%y ## In Daily Summary %w ## In Hourly Report %d-%m-%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d-%m-%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d-%m-%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d-%m-%y ## The date & time (D) column in non-time reports %d-%m-%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d-%m-%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Doe verder met aanvraag 101 Verwisselen van protocollen 1xx [Overige informatief] 200 OK 201 Gemaakt 202 Aanvaard voor verdere verwerking 203 Niet toegankelijke informatie 204 OK, maar ik heb niks te versturen 205 Herbegin document 206 Gedeeltelijke inhoud 2xx [Verschillende successen] 300 Meerdere documenten beschikbaar 301 Document is voorgoed verplaatst 302 Document elders gevonden 303 Zie ander document 304 Niet gewijzigd sinds laatste opvraging 305 Gebruik proxy 306 Verwissel proxy 307 Document tijdelijk verplaatst 3xx [Gemengde doorverwijzingen] 400 Slechte aanvraag 401 Identificatie vereist 402 Betaling vereist 403 Toegang geweigerd 404 Document niet gevonden 405 Methode niet toegestaan 406 Document niet aanvaard door client 407 Proxy identificatie vereist 408 Tijdlimiet aanvraag overschreden 409 Aanvraag conflicteert met staat van bron 410 Document voorgoed verdwenen 411 Lengte vereist 412 Eerste vereiste niet voldaan 413 Aanvraag te lang 414 Gevraagde bestandsnaam te lang 415 Niet ondersteund media type 416 Gevraagd bereik niet geldig 417 Vooruitzicht mislukt 4xx [Gemengde client/gebruiker fouten] 500 Interne server fout 501 Gevraagde type niet ondersteund 502 Fout by upstream server 503 Dienst tijdelijk onbeschikbaar 504 Tijdlimiet gateway overschreden 505 HTTP versie niet ondersteund 506 Doorverwijzing mislukt 5xx [Gemengde server fouten] xxx [Niet bekend] analog-ce-6.0.17/lang/nla.lng000066400000000000000000000334041406366436600156520ustar00rootroot00000000000000## Taalbestand voor Analog 6.0. Kan wellicht niet werken met andere versies. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Vertaling Engels naar Nederlands a.d.h.v het oude taalbestand. ## 16 Juni 1998, Joost Baaij . ## ## Translation for version 4 by Dimitry Smagghe ## Translation for version 5 by Bert Hiddink ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Zon Maa Din Woe Don Vry Zat Jan Feb Mrt Apr Mei Jun Jul Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. jaar ## Quarter of a year kwartaal maand dag dagen u. minuut minuten seconde seconden byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes aanvraag aanvragen datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum tijd tijd eerste datum eerste tijd laatste datum laatste tijd bestand bestanden host hosts virtual host virtual hosts directory directories domein domeinen bedrijf bedrijven extensie extensies URL URLs browser browsers besturingssysteem besturingssystemen ## (= operating system, operating systems) grootte zoek string zoek strings site sites gebruiker gebruikers status code status codes Website statistieken voor ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Algemene samenvatting ## The time reports, plus "busiest" strings (at the bottom of each report) Jaar Rapport Drukste jaar Kwartaal Rapport Drukste kwartaal Maandelijks Rapport Drukste maand: Wekelijks Rapport Drukste week: week beginnende Dagelijkse Samenvatting Dagelijks Rapport Drukste dag: Uur Rapport Uur Samenvatting Uur van de Week Samenvatting Drukste uur: Kwartier Rapport Kwartier Samenvatting Drukste kwartier van een uur: Vijf-minuten Rapport Vijf-minuten Samenvatting Drukste vijf minuten: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Rapport host hosts n Host Doorverwezen Rapport host hosts n Host Mislukking Rapport host hosts n Directory Rapport directory directories n Bestands Type Rapport extensie extensies n Aanvragen Rapport Aangevraagd bestand aangevraagde bestanden n Redirectie Rapport Aangevraagd bestand aangevraagde bestanden n Mislukking Rapport Aangevraagd bestand aangevraagde bestanden n Referrer Rapport refererende URL refererende URLs n Refererende Sites Rapport refererende site refererende sites n Doorverwezen Referrer Rapport refererende URL refererende URLs n Mislukte Referrer Rapport refererende URL refererende URLs n Zoek Query Rapport query queries n Zoek Woord Rapport query woord query woorden n Intern Zoekopdracht Rapport zoekopdracht zoekopdrachten n Intern Zoekwoord Rapport zoekwoord zoekwoorden n Virtual Host Rapport virtual host virtual hosts n Virtuele Host Redirect Rapport virtuele host virtuele hosts n Virtuel Host Mislukking Rapport virtuele host virtuele hosts n Gebruiker Rapport gebruiker gebruikers n Gebruiker Doorverwezen Rapport gebruiker gebruikers n Gebruiker Mislukking Rapport gebruiker gebruikers n Browser Samenvatting browser browsers n Browser Rapport browser browsers n Besturingssysteem Rapport Besturingssysteem Besturingssysteemen n Domein Rapport domein domeinen n Bedrijfs Rapport bedrijf bedrijven n Status Code Rapport status code status codes n Verwerkingstijd Rapport Bestandsgrootte Rapport ## Used at the bottom of the report Deze analyse is geproduceerd door Looptijd Minder dan 1 ## Used in the time reports Elke eenheid representeert of een gedeelte hiervan aanvragen voor een pagina aanvragen voor pagina's ## Used at the bottom of each non-time report: need m, f & n genders * * niet getoond ## Used on the pie charts: again need m, f & n genders * * Andere ## Used at the top of the report Programma gestart op Aanvragen geanalyseerd van tot ## Used in the General Summary Totale aantal geslaagde aanvragen Gemiddelde aantal geslaagde aanvragen per dag Totale aantal geslaagde aanvragen voor pagina's Gemiddelde aantal geslaagde aanvragen voor pagina's per dag Logbestand regels zonder status code Totale aantal mislukte aanvragen Totale aantal omgeleide aanvragen Aantal aanvragen met informatieve status code Aantal verschillende bestanden aangevraagd Aantal verschillende hosts bediend Onleesbare regels in logbestand Ongebruikte regels in logbestand Totale hoeveelheid data verzonden Gemiddelde hoeveelheid data verzonden per dag Getallen tussen haakjes verwijzen naar de 7 dagen tot afgelopen 7 dagen Ga Naar Top ## Some special phrases for particular reports. [Niet gevonden numerieke adressen] [domein niet gegeven] [ongekend domein] [hoofdmap] [geen map] [geen uitbreiding] [mappen] Onbekende Windows Ander Unix Robots Onbekend besturingssysteem ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #aanv 7-dagen aanvragen %aanv 7-dagen aanvragen pags 7-dagen paginas %pags 7-dagen paginas bytes ?bytes 7-dagen bytes 7-dagen ?bytes %bytes 7-dagen ?bytes aantal ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Top %s afgedrukt * * Top %d %s afgedrukt * * Alle %s afgedrukt ## "by" in the phrase "listing the top 3 files BY number of requests" met ## All requests WITH AT LEAST 10 requests met minstens ## Different ways of doing floors aanvraag gedurende afgelopen 7 dagen aanvragen gedurende afgelopen 7 dagen aanvraag voor een pagina gedurende afgelopen 7 dagen aanvragen voor paginas gedurende de afgelopen 7 dagen doorverwezen aanvraag doorverwezen aanvragen doorverwezen aanvraag gedurende de laatste 7 dagen doorverwezen aanvragen gedurende de laatste 7 dagen mislukt aanvraag mislukte aanvragen mislukte aanvraag gedurende de laatste 7 dagen mislukte aanvragen gedurende de laatste 7 dagen % van het verkeer % van het verkeer gedurende de laatste 7 dagen % van het maximale aantal verkeer % van de maximale hoeveelheid verkeer gedurende de afgelopen 7 dagen byte van het verkeer bytes van het verkeer ## ?bytes represents kbytes, Mbytes etc. ?bytes van het verkeer byte van het verkeer gedurende de laatste 7 dagen bytes van het verkeer gedurende de laatste 7 dagen ?bytes van het verkeer gedurende de laatste 7 dagen verzocht sinds met een doorverwezen aanvraag sinds met een mislukt aanvraag sinds met eerste aanvraag sinds met eerste doorverwezen aanvraag sinds met eerste mislukte aanvraag sinds ## Now "sorted by": again, in m, f & n (only needed in plural though) * * gesorteerd op ## Used at the top of each report Dit rapport bevat gegevens van ## Used in pie charts De taartpunten geven weer de ## different ways of sorting hoeveelheid verkeer de hoeveelheid verkeer gedurende the laatste 7 dagen % van de aanvragen % van de aanvragen gedurende de laatste 7 dagen % van het maximale aantal aanvragen % van het maximale aantal aanvragen gedurende de laatste 7 dagen het aantal aanvragen het aantal aanvragen gedurende de laatste 7 dagen % van de aanvragen voor pagina's % van pagina aanvragen gedurende de laatste 7 dagen % van het aantal aanvragen voor pagina's % van het maximale aantal pagina aanvragen gedurende de laatste 7 dagen het aantal aanvragen voor pagina's het aantal pagina aanvragen gedurende de laatste 7 dagen % van de doorverwezen aanvragen % van de doorverwezen aanvragen gedurende de laatste 7 dagen % van het maximale aantal doorverwezen aanvragen % van het maximale aantal doorverwezen aanvragen gedurende de laatste 7 dagen het aantal doorverwezen aanvragen het aantal doorverwezen aanvragen gedurende de laatste 7 dagen % van de mislukte aanvragen % van de mislukte doorverwezen aanvragen gedurende de laatste 7 dagen % van het maximum aantal mislukte aanvragen % van het maximale aantal aanvragen gedurende de laatste 7 dagen het aantal mislukte aanvragen het aantal mislukte aanvragen gedurende de laatste 7 dagen de tijd van de laatste aanvraag de tijd van de laatste doorverwezen aanvraag de tijd van de laatste mislukte aanvraag tijdstip van de eerste aanvraag tijdstip van de eerste doorverwezen aanvraag tijdstip van eerste mislukte aanvraag ## 3 other ways of sorting in m, f, & n * * alfabetisch gesorteerd * * op nummer gesorteerd * * niet gesorteerd ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. vm nm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d-%m-%y ## In Daily Summary %w ## In Hourly Report %d-%m-%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d-%m-%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d-%m-%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d-%m-%y ## The date & time (D) column in non-time reports %d-%m-%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d-%m-%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Doe verder met aanvraag 101 Verwisselen van protocollen 1xx [Overige informatief] 200 OK 201 Gemaakt 202 Aanvaard voor verdere verwerking 203 Niet toegankelijke informatie 204 OK, maar ik heb niks te versturen 205 Herbegin document 206 Gedeeltelijke inhoud 2xx [Verschillende successen] 300 Meerdere documenten beschikbaar 301 Document is voorgoed verplaatst 302 Document elders gevonden 303 Zie ander document 304 Niet gewijzigd sinds laatste opvraging 305 Gebruik proxy 306 Verwissel proxy 307 Document tijdelijk verplaatst 3xx [Gemengde doorverwijzingen] 400 Slechte aanvraag 401 Identificatie vereist 402 Betaling vereist 403 Toegang geweigerd 404 Document niet gevonden 405 Methode niet toegestaan 406 Document niet aanvaard door client 407 Proxy identificatie vereist 408 Tijdlimiet aanvraag overschreden 409 Aanvraag conflicteert met staat van bron 410 Document voorgoed verdwenen 411 Lengte vereist 412 Eerste vereiste niet voldaan 413 Aanvraag te lang 414 Gevraagde bestandsnaam te lang 415 Niet ondersteund media type 416 Gevraagd bereik niet geldig 417 Vooruitzicht mislukt 4xx [Gemengde client/gebruiker fouten] 500 Interne server fout 501 Gevraagde type niet ondersteund 502 Fout by upstream server 503 Dienst tijdelijk onbeschikbaar 504 Tijdlimiet gateway overschreden 505 HTTP versie niet ondersteund 506 Doorverwijzing mislukt 5xx [Gemengde server fouten] xxx [Niet bekend] analog-ce-6.0.17/lang/nladesc.txt000066400000000000000000000111611406366436600165440ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Dit rapport laat de activiteiten zien in ieder jaar. # Quarterly Report Dit rapport laat de activiteiten zien in ieder kwartaal. # Monthly Report Dit rapport laat de activiteiten zien in iedere maand. # Weekly Report Dit rapport laat de activiteiten zien in iedere week. # Daily Report Dit rapport laat de activiteiten zien in iedere dag. # Hourly Report Dit rapport laat de activiteiten zien in ieder uur. # Quarter-Hour Report Dit rapport laat de activiteiten zien in ieder kwartier. # Five-Minute Report Dit rapport laat de activiteiten zien per vijf minuten. # Daily Summary Dit rapport laat de totale activiteit zien voor iedere dag van de week, gesommeerd over alle weken in het rapport. # Hourly Summary Dit rapport laat de totale activiteit zien voor ieder uur van de dag, gesommeerd over alle dagen in het rapport. # Hour of the Week Summary Dit rapport laat de totale activiteit zien for ieder uur van de week, gesommeerd over alle weken in het rapport. # Quarter-Hour Summary Dit rapport laat de totale activiteit voor ieder kwartier van de dag, gesommeerd over alle dagen in het rapport. # Five-Minute Summary Dit rapport laat de totale activiteit zien voor iedere vijf minuten van de dag, gesommeerd over alle dagen in het rapport. # General Summary Dit rapport bevat de algemene statistieken. # Request Report Dit rapport laat de bestanden op de site zien. # Redirection Report Dit rapport laat de bestanden zien die ervoor zorgen dat verzoeken worden doorverwezen naar een ander bestand. (Meestal directories zonder de laatste slash, of CGI scripts die doorsturen.) # Failure Report Dit rapport laat de bestanden zien die fouten veroorzaken, bijvoorbeeld bestand niet gevonden. # File Type Report Dit rapport laat de extensies zien van de aangevraagde bestanden. # Directory Report Dit rapport laat de directories zien van waar de bestanden waren aangevraagd. (De figuren voor iedere directory bevatten alle subdirectories.) # Host Report Dit rapport laat de computers zien die bestanden aanvragen. # Host Redirection Report Dit rapport laat de computers zien die zijn doorverwezen naar andere bestanden. # Host Failure Report Dit rapport laat de computers zien die foute verzoeken veroorzaakten. # Domain Report Dit rapport laat de landen van de computers zien die bestanden aanvragen. # Referrer Report Dit rapport laat de referrers zien (van waar mensen links hebben gevolgd, of pagina's die plaatsjes/bestanden van deze site bevatten). # Referring Site Report Dit rapport laat zien vanaf welke servers mensen links volgde. # Redirected Referrer Report Dit rapport laat zien welke referrers een doorverwijzing veroorzaakt. # Failed Referrer Report Dit rapport laat de referrers zien die een broken link naar de site hebben. # Browser Report Dit rapport laat zien welke browser door de bezoekers gebruikt worden. # Virtual Host Report Dit rapport laat de activiteiten zien op elke virtual domain van de site. # Virtual Host Redirection Report Dit rapport laat de doorverwezen verzoeken zien naar elke virtual domain van de site. # Virtual Host Failure Report Dit rapport laat de mislukte verzoeken zien van elke virtual domain. # User Report Dit rapport laat de gebruikers zien die bestanden aanvroegen, als gebruikers zich hebben aangemeld of geidentificeerd kunnen worden door cookies. # User Redirection Report Dit rapport laat de gebruikers zien die zijn doorverwezen naar een ander bestand. # User Failure Report Dit rapport laat de gebruikers zien die fouten veroorzaakten. # Organisation Report Dit rapport laat de organisaties zien van waar computers bestanden aanvroegen. # Search Query Report Dit rapport laat zien welke vraag bezoekers hebben gesteld in een zoekmachine om deze site te vinden. # Search Word Report Dit rapport laat zien welke woorden bezoekers hebben gebruikt in een zoekmachine om deze site te vinden. # Internal Search Query Report Dit rapport laat zien welke vraag bezoekers hebben gesteld in scripts binnen de site. # Internal Search Word Report Dit rapport laat zien welke woorden bezoekers hebben gebruikt in scripts binnen de site. # Browser Summary Dit rapport laat de makers van de bezoekers' browsers zien. # Operating System Report Dit rapport laat de operating systems zien gebruikt door de bezoekers. # File Size Report Dit rapport laat de grootte van de bestanden zien. # Status Code Report Dit rapport laat de HTTP status codes of alle requests zien. # Processing Time Report Dit rapport laat de benodigde tijden zien om aanvragen goed af te handelen. analog-ce-6.0.17/lang/nladom.tab000066400000000000000000000122201406366436600163310ustar00rootroot00000000000000aero 2 Luchtvaartindustrie arpa 1 Arpanet biz 2 Bedrijven com 2 Commercieel coop 2 Cooperaties edu 2 USA Onderwijs gov 2 USA Overheid info 2 Informatief int 2 Internationale Verdrag Organisaties mil 2 VS Militiar museum 2 Musea name 3 Personen net 2 Netwerk org 2 Niet-Commerciele Organisaties pro 3 Professionals ac 1 Ascension Eiland ad 2 Andorra ae 3 Verenigde Arabisch Emiraten af 1 Afghanistan ag 2 Antigua en Barbuda ai 1 Anguilla al 1 Albanie am 2 Armenie an 1 Nederlandse Antillen ao 1 Angola aq 1 Antarctica ar 3 Argentinie as 1 Amerikaans Samoa at 3 Oostenrijk au 3 Australie aw 1 Aruba az 1 Azerbaidzjan ba 3 Bosnie-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgie bf 1 Burkina Faso bg 2 Bulgarie bh 1 Bahrein bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazilie bs 1 Bahama's bt 1 Bhutan bv 1 Bouvet Eiland bw 1 Botswana by 1 Wit-Rusland bz 1 Belize ca 3 Canada cc 1 Cocos (of Keeling) Eilanden cd 1 Democratisch Republiek Congo cf 1 Centraal-Afrikaanse Republiek cg 1 Congo ch 2 Zwitserland ci 1 Ivoorkust ck 1 Cook Eilanden cl 2 Chili cm 1 Kameroen cn 3 China co 3 Colombia cr 3 Costa Rica cs 3 Servie en Montenegro cu 1 Cuba cv 1 Kaap Verdie cx 2 Christmas Eiland cy 3 Cyprus cz 2 Tsjechie de 2 Duitsland dj 1 Djibouti dk 2 Denemarken dm 2 Dominica do 2 Dominicaanse Republiek dz 1 Algerije ec 3 Ecuador ee 2 Estland eg 3 Egypte eh 1 West-Sahara er 1 Eritrea es 2 Spanje et 1 Ethiopie fi 2 Finland fj 3 Fiji fk 1 Falkland Eilanden fm 1 Micronesie fo 1 Faeroer Eilanden fr 2 Frankrijk fx 1 Frankrijk (Europees Territorium) ga 1 Gabon gb 1 Verenigd Koninkrijk gd 1 Grenada ge 1 Georgie gf 1 Frans Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Equatoriaal Guinea gr 2 Griekenland gs 1 Zuid-Georgie en de Zuid-Sandwicheilanden gt 3 Guatemala gu 1 Guam gw 1 Guinee-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heard- en McDonald Eilanden hn 2 Honduras hr 2 Kroatie ht 1 Haiti hu 2 Hongarije id 3 Indonesie ie 2 Ierland il 3 Israel im 1 Isle of Man in 3 India io 1 Brits gebied in de Indisch Oceaan iq 1 Irak ir 1 Iran is 2 IJsland it 2 Italie je 1 Jersey jm 3 Jamaica jo 3 Jordanie jp 3 Japan ke 3 Kenia kg 1 Kirgiezie kh 1 Cambodja ki 1 Kiribati km 1 Comoren kn 1 Saint Kitts en Nevis kp 1 Noord-Korea kr 3 Zuid-Korea kw 3 Koeweit ky 1 Cayman Eilanden kz 1 Kazachstan la 1 Laos lb 3 Libanon lc 1 Sint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litouwen lu 2 Luxemburg lv 2 Letland ly 1 Libie ma 1 Marokko mc 2 Monaco md 1 Moldavie mg 1 Madagaskar mh 1 Marshall Eilanden mk 3 Macedonie ml 1 Mali mm 1 Myanmar mn 1 Mongolie mo 1 Macau mp 1 Noord-Marianen mq 1 Martinique mr 1 Mauritanie ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maladiven mw 1 Malawi mx 3 Mexico my 3 Maleisie mz 1 Mozambique na 1 Namibie nc 1 Nieuw-Caledonie ne 1 Niger nf 1 Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Nederland no 2 Noorwegen np 1 Nepal nr 1 Nauru nu 2 Niue Eiland nz 3 Nieuw-Zeeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Frans-Polynesie pg 3 Papua-Nieuw-Guinea ph 3 Filipijnen pk 3 Pakistan pl 3 Polen pm 1 Sint Pierre en Miquelon pn 1 Pitcairn Eilanden pr 1 Puerto Rico ps 1 Gebied onder Palestijnse autoriteit pt 2 Portugal pw 1 Palau Eilanden py 3 Paraguay qa 1 Qatar re 1 Reunion Eiland ro 2 Romanie ru 2 Rusland rw 1 Rwanda sa 3 Saudi-Arabie sb 1 Salomons Eilanden sc 1 Seychelles sd 1 Soedan se 2 Zweden sg 3 Singapore sh 1 Sint Helena si 2 Slovenie sj 1 Svalbard en Jan Mayen Eilanden sk 2 Slowakije sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalie sr 1 Suriname st 1 Sao Tome en Principe su 2 Voormalig Sovjet Unie sv 3 El Salvador sy 1 Syrie sz 1 Swaziland tc 1 Turks en Caicos Eilanden td 1 Tsjaad tf 1 Franse zuidelijke gebieden tg 1 Togo th 3 Thailand tj 1 Tadjikistan tk 1 Tokelau Eilanden tl 1 Oost-Timor tm 1 Turkmenistan tn 1 Tunisie to 1 Tonga tp 1 Oost-Timor tr 3 Turkije tt 3 Trinidad en Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Oekraine ug 3 Uganda uk 3 Vereningd Koninkrijk um 1 Verafgelegen eilandjes van de Verenigde Staten us 4 Vereningde Staten uy 3 Uruguay uz 1 Oezbekistan va 1 Vaticaanstad vc 1 Saint Vincent en Grenadines ve 3 Venezuela vg 1 Maagdeneilanden (Brits) vi 1 Maagdeneilanden (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis en Futuna Eilanden ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Joegoslavie za 3 Zuid-Afrika zm 1 Zambia zr 1 Voormalig Zaire zw 3 Zimbabwe analog-ce-6.0.17/lang/nldesc.txt000066400000000000000000000111611406366436600164030ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Dit rapport laat de activiteiten zien in ieder jaar. # Quarterly Report Dit rapport laat de activiteiten zien in ieder kwartaal. # Monthly Report Dit rapport laat de activiteiten zien in iedere maand. # Weekly Report Dit rapport laat de activiteiten zien in iedere week. # Daily Report Dit rapport laat de activiteiten zien in iedere dag. # Hourly Report Dit rapport laat de activiteiten zien in ieder uur. # Quarter-Hour Report Dit rapport laat de activiteiten zien in ieder kwartier. # Five-Minute Report Dit rapport laat de activiteiten zien per vijf minuten. # Daily Summary Dit rapport laat de totale activiteit zien voor iedere dag van de week, gesommeerd over alle weken in het rapport. # Hourly Summary Dit rapport laat de totale activiteit zien voor ieder uur van de dag, gesommeerd over alle dagen in het rapport. # Hour of the Week Summary Dit rapport laat de totale activiteit zien for ieder uur van de week, gesommeerd over alle weken in het rapport. # Quarter-Hour Summary Dit rapport laat de totale activiteit voor ieder kwartier van de dag, gesommeerd over alle dagen in het rapport. # Five-Minute Summary Dit rapport laat de totale activiteit zien voor iedere vijf minuten van de dag, gesommeerd over alle dagen in het rapport. # General Summary Dit rapport bevat de algemene statistieken. # Request Report Dit rapport laat de bestanden op de site zien. # Redirection Report Dit rapport laat de bestanden zien die ervoor zorgen dat verzoeken worden doorverwezen naar een ander bestand. (Meestal directories zonder de laatste slash, of CGI scripts die doorsturen.) # Failure Report Dit rapport laat de bestanden zien die fouten veroorzaken, bijvoorbeeld bestand niet gevonden. # File Type Report Dit rapport laat de extensies zien van de aangevraagde bestanden. # Directory Report Dit rapport laat de directories zien van waar de bestanden waren aangevraagd. (De figuren voor iedere directory bevatten alle subdirectories.) # Host Report Dit rapport laat de computers zien die bestanden aanvragen. # Host Redirection Report Dit rapport laat de computers zien die zijn doorverwezen naar andere bestanden. # Host Failure Report Dit rapport laat de computers zien die foute verzoeken veroorzaakten. # Domain Report Dit rapport laat de landen van de computers zien die bestanden aanvragen. # Referrer Report Dit rapport laat de referrers zien (van waar mensen links hebben gevolgd, of pagina's die plaatsjes/bestanden van deze site bevatten). # Referring Site Report Dit rapport laat zien vanaf welke servers mensen links volgde. # Redirected Referrer Report Dit rapport laat zien welke referrers een doorverwijzing veroorzaakt. # Failed Referrer Report Dit rapport laat de referrers zien die een broken link naar de site hebben. # Browser Report Dit rapport laat zien welke browser door de bezoekers gebruikt worden. # Virtual Host Report Dit rapport laat de activiteiten zien op elke virtual domain van de site. # Virtual Host Redirection Report Dit rapport laat de doorverwezen verzoeken zien naar elke virtual domain van de site. # Virtual Host Failure Report Dit rapport laat de mislukte verzoeken zien van elke virtual domain. # User Report Dit rapport laat de gebruikers zien die bestanden aanvroegen, als gebruikers zich hebben aangemeld of geïdentificeerd kunnen worden door cookies. # User Redirection Report Dit rapport laat de gebruikers zien die zijn doorverwezen naar een ander bestand. # User Failure Report Dit rapport laat de gebruikers zien die fouten veroorzaakten. # Organisation Report Dit rapport laat de organisaties zien van waar computers bestanden aanvroegen. # Search Query Report Dit rapport laat zien welke vraag bezoekers hebben gesteld in een zoekmachine om deze site te vinden. # Search Word Report Dit rapport laat zien welke woorden bezoekers hebben gebruikt in een zoekmachine om deze site te vinden. # Internal Search Query Report Dit rapport laat zien welke vraag bezoekers hebben gesteld in scripts binnen de site. # Internal Search Word Report Dit rapport laat zien welke woorden bezoekers hebben gebruikt in scripts binnen de site. # Browser Summary Dit rapport laat de makers van de bezoekers' browsers zien. # Operating System Report Dit rapport laat de operating systems zien gebruikt door de bezoekers. # File Size Report Dit rapport laat de grootte van de bestanden zien. # Status Code Report Dit rapport laat de HTTP status codes of alle requests zien. # Processing Time Report Dit rapport laat de benodigde tijden zien om aanvragen goed af te handelen. analog-ce-6.0.17/lang/nldom.tab000066400000000000000000000122201406366436600161700ustar00rootroot00000000000000aero 2 Luchtvaartindustrie arpa 1 Arpanet biz 2 Bedrijven com 2 Commercieel coop 2 Coöperaties edu 2 USA Onderwijs gov 2 USA Overheid info 2 Informatief int 2 Internationale Verdrag Organisaties mil 2 VS Militiar museum 2 Musea name 3 Personen net 2 Netwerk org 2 Niet-Commerciële Organisaties pro 3 Professionals ac 1 Ascension Eiland ad 2 Andorra ae 3 Verenigde Arabisch Emiraten af 1 Afghanistan ag 2 Antigua en Barbuda ai 1 Anguilla al 1 Albanië am 2 Armenië an 1 Nederlandse Antillen ao 1 Angola aq 1 Antarctica ar 3 Argentinië as 1 Amerikaans Samoa at 3 Oostenrijk au 3 Australië aw 1 Aruba az 1 Azerbaidzjan ba 3 Bosnië-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 België bf 1 Burkina Faso bg 2 Bulgarië bh 1 Bahrein bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazilië bs 1 Bahama's bt 1 Bhutan bv 1 Bouvet Eiland bw 1 Botswana by 1 Wit-Rusland bz 1 Belize ca 3 Canada cc 1 Cocos (of Keeling) Eilanden cd 1 Democratisch Republiek Congo cf 1 Centraal-Afrikaanse Republiek cg 1 Congo ch 2 Zwitserland ci 1 Ivoorkust ck 1 Cook Eilanden cl 2 Chili cm 1 Kameroen cn 3 China co 3 Colombia cr 3 Costa Rica cs 3 Servië en Montenegro cu 1 Cuba cv 1 Kaap Verdië cx 2 Christmas Eiland cy 3 Cyprus cz 2 Tsjechië de 2 Duitsland dj 1 Djibouti dk 2 Denemarken dm 2 Dominica do 2 Dominicaanse Republiek dz 1 Algerije ec 3 Ecuador ee 2 Estland eg 3 Egypte eh 1 West-Sahara er 1 Eritrea es 2 Spanje et 1 Ethiopië fi 2 Finland fj 3 Fiji fk 1 Falkland Eilanden fm 1 Micronesië fo 1 Faeröer Eilanden fr 2 Frankrijk fx 1 Frankrijk (Europees Territorium) ga 1 Gabon gb 1 Verenigd Koninkrijk gd 1 Grenada ge 1 Georgië gf 1 Frans Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Equatoriaal Guinea gr 2 Griekenland gs 1 Zuid-Georgië en de Zuid-Sandwicheilanden gt 3 Guatemala gu 1 Guam gw 1 Guinee-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heard- en McDonald Eilanden hn 2 Honduras hr 2 Kroatië ht 1 Haïti hu 2 Hongarije id 3 Indonesië ie 2 Ierland il 3 Israël im 1 Isle of Man in 3 India io 1 Brits gebied in de Indisch Oceaan iq 1 Irak ir 1 Iran is 2 IJsland it 2 Italië je 1 Jersey jm 3 Jamaica jo 3 Jordanië jp 3 Japan ke 3 Kenia kg 1 Kirgiezië kh 1 Cambodja ki 1 Kiribati km 1 Comoren kn 1 Saint Kitts en Nevis kp 1 Noord-Korea kr 3 Zuid-Korea kw 3 Koeweit ky 1 Cayman Eilanden kz 1 Kazachstan la 1 Laos lb 3 Libanon lc 1 Sint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litouwen lu 2 Luxemburg lv 2 Letland ly 1 Libië ma 1 Marokko mc 2 Monaco md 1 Moldavië mg 1 Madagaskar mh 1 Marshall Eilanden mk 3 Macedonië ml 1 Mali mm 1 Myanmar mn 1 Mongolië mo 1 Macau mp 1 Noord-Marianen mq 1 Martinique mr 1 Mauritanië ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maladiven mw 1 Malawi mx 3 Mexico my 3 Maleisië mz 1 Mozambique na 1 Namibië nc 1 Nieuw-Caledonië ne 1 Niger nf 1 Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Nederland no 2 Noorwegen np 1 Nepal nr 1 Nauru nu 2 Niue Eiland nz 3 Nieuw-Zeeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Frans-Polynesië pg 3 Papua-Nieuw-Guinea ph 3 Filipijnen pk 3 Pakistan pl 3 Polen pm 1 Sint Pierre en Miquelon pn 1 Pitcairn Eilanden pr 1 Puerto Rico ps 1 Gebied onder Palestijnse autoriteit pt 2 Portugal pw 1 Palau Eilanden py 3 Paraguay qa 1 Qatar re 1 Reunion Eiland ro 2 Romanië ru 2 Rusland rw 1 Rwanda sa 3 Saudi-Arabië sb 1 Salomons Eilanden sc 1 Seychelles sd 1 Soedan se 2 Zweden sg 3 Singapore sh 1 Sint Helena si 2 Slovenië sj 1 Svalbard en Jan Mayen Eilanden sk 2 Slowakije sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalië sr 1 Suriname st 1 Sao Tomé en Principe su 2 Voormalig Sovjet Unie sv 3 El Salvador sy 1 Syrië sz 1 Swaziland tc 1 Turks en Caicos Eilanden td 1 Tsjaad tf 1 Franse zuidelijke gebieden tg 1 Togo th 3 Thailand tj 1 Tadjikistan tk 1 Tokelau Eilanden tl 1 Oost-Timor tm 1 Turkmenistan tn 1 Tunisië to 1 Tonga tp 1 Oost-Timor tr 3 Turkije tt 3 Trinidad en Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Oekraïne ug 3 Uganda uk 3 Vereningd Koninkrijk um 1 Verafgelegen eilandjes van de Verenigde Staten us 4 Vereningde Staten uy 3 Uruguay uz 1 Oezbekistan va 1 Vaticaanstad vc 1 Saint Vincent en Grenadines ve 3 Venezuela vg 1 Maagdeneilanden (Brits) vi 1 Maagdeneilanden (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis en Futuna Eilanden ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Joegoslavië za 3 Zuid-Afrika zm 1 Zambia zr 1 Voormalig Zaire zw 3 Zimbabwe analog-ce-6.0.17/lang/no.lng000066400000000000000000000317271406366436600155220ustar00rootroot00000000000000## Norwegian "bokmål" language file for Analog 6.0 ## Norsk bokmål språkfil for Analog 6.0 ## ## Oversatt 2001-03-26 av Pål Løberg ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. søn man tir ons tor fre lør jan feb mar apr mai jun jul aug sep okt nov des ## Next some standard common words. ## Abbreviation for "week beginning" ukestart år ## Quarter of a year kvartal måned dag dager time minutt minutter sekund sekunder byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes forespørsel forespørsler dato ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dato klokkeslett periode første gang første gang siste gang siste gang fil filer maskin maskiner virtuell tjener virtuelle tjenere katalog kataloger domene domener organisasjon organisasjoner filendelse filendelser URL URLer klient klienter OS OS ## (= operating system, operating systems) størrelse søkeuttrykk søkeuttrykk referanse referanser bruker brukere statuskode statuskoder Webtjenerstatistikk for ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Oppsummering ## The time reports, plus "busiest" strings (at the bottom of each report) Rapport - år Travleste år: Rapport - kvartal Travleste kvartal: Rapport - måned Travleste måned: Rapport - uke Travleste uke: Starter Oppsummering - dag Rapport - dag Travleste dag: Rapport - time Oppsummering - time Oppsummering - tid i uken Travleste time: Rapport - kvarter Oppsummering - kvarter Travleste kvarter: Rapport - fem minutt Oppsummering - fem minutt Travleste fem minutter: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Rapport - maskiner maskin maskiner m Rapport - videresendt fra tjener tjener tjenere m Rapport - tjenerfeil tjener tjenere m Rapport - kataloger katalog katalogene m Rapport - filtyper filtype filtypene m Rapport - forespørsler forespurt fil forespurte filer m Rapport - videresending fil filene m Rapport - feil fil filene m Rapport - referanser refererende URL refererende URLer m Rapport - refererende tjenere refererende tjener refererende tjenerene m Rapport - referanser som videresendes refererende URL refererende URLer m Rapport - feilreferanser refererende URL refererende URLer m Rapport - Søk søk søk n Rapport - Søkeord søkeord søkeord n Rapport - Interne søk søk søk n Rapport - Interne søkeord søkeord søkeord n Rapport - virtuelle tjenere virtuell tjener virtuelle tjenere m Rapport - videresending for virtuelle tjenere virtuell tjener virtuelle tjenere m Rapport - feil for virtuelle tjenere virtuell tjener virtuelle tjenere m Rapport - brukere bruker brukerene m Rapport - videresendte brukere bruker brukere m Rapport - feil per bruker bruker brukerene m Oppsummering - klienter klient klientene m Rapport - klienter klient klientene m Rapport - OS operativsystem operativsystem n Rapport - domener domene domenene n Rapport - organisasjon organisasjon organisasjoner m Rapport - statuskoder statuskode statuskodene m Rapport - responstid Rapport - filstørrelser ## Used at the bottom of the report Analysen er laget med Kjøretid Mindre enn 1 ## Used in the time reports Hver enhet representerer eller en del av dette forespørsel etter en side forespørsler etter sider ## Used at the bottom of each non-time report: need m, f & n genders ikke vist ikke vist ikke vist ## Used on the pie charts: again need m, f & n genders Andre Andre Andre ## Used at the top of the report Programmet startet Analyse av forespørsler fra t.o.m. ## Used in the General Summary Totalt antall vellykkede forespørsler Gjennomsnittlig antall vellykkede forespørsler per dag Totalt antall vellykkede forespørsler etter sider Gjennomsnittlig antall vellykkede forespørsler etter sider per dag Logglinjer uten statuskode Totalt antall mislykkede forespørsler Totalt antall omdirigerte forespørsler Requests with informational status code *#*#* Antall forskjellige filer forespurt Antall forskjellige maskiner betjent Ugyldige logglinjer Uønskede logglinjer Total mengde data overført Gjennomsnittlig mengde data overført per dag Tall i paranteser refererer til de 7 dager til siste 7 dager Gå til Toppen ## Some special phrases for particular reports. [ukjente adresser] [domain ikke oppgitt] [ukjent domene] [rotkatalog] [ingen katalog] [ingen filending] [kataloger] Ukjent Windows Annen Unix Roboter Ukjent OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #frsp 7-dager frsp %frsp %7-day frsp sider 7-dager sider %sider %7-day sider bytes ?bytes 7-dager bytes 7-dager ?bytes %bytes %7-dager bytes ant. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Lister opp de første %s Lister opp de første %s Lister opp de første %s Lister opp de %d første %s Lister opp de %d første %s Lister opp de %d første %s Lister opp alle %s Lister opp alle %s Lister opp alle %s ## "by" in the phrase "listing the top 3 files BY number of requests" med flest ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors forespørsel siste 7 dager forespørsler siste 7 dager forespørsel etter en side siste 7 dager forespørsler etter en side siste 7 dager videresending videresendinger videresendt forespørsel siste 7 dager videresendte forespørsler siste 7 dager mislykket forespørsel mislykkede forespørsler mislykket forespørsel siste 7 dager mislykkede forespørsler siste 7 dager % av trafikken % av trafikken siste 7 dager % av den maksimale trafikken % av den maksimale trafikken siste 7 dager byte trafikk bytes trafikk ## ?bytes represents kbytes, Mbytes etc. ?bytes trafikk byte trafikk siste 7 dager bytes trafikk siste 7 dager ?bytes trafikk siste 7 dager forespurt etter med en videresendt forespørsel etter med en mislykket forespørsel etter med første forespørsel etter med første videresendte forespørsel etter med første mislykkede forespørsel etter ## Now "sorted by": again, in m, f & n (only needed in plural though) sortert etter sortert etter sortert etter ## Used at the top of each report Rapporten inneholder data fra ## Used in pie charts Kakestykkene viser ## different ways of sorting mengden trafikk mengden trafikk siste 7 dager % av forespørslene % av forespørslene siste 7 dager % av det maksimale antallet forespørsler % av det maksimale antallet forespørsler siste 7 dager antall forespørsler antall forespørsler siste 7 dager % av forespørslene etter sider % av forespørslene etter sider siste 7 dager % av det maksimale antallet forespørsler etter sider % av det maksimale antallet forespørsler etter sider siste 7 dager antall forespørsler etter sider antall forespørsler etter sider siste 7 dager % av videresendte forespørsler % av videresendte forespørsler siste 7 dager % av det maksimale antallet videresendte forespørsler % av det maksimale antallet videresendte forespørsler siste 7 dager antall videresendte forespørsler antall videresendte forespørsler siste 7 dager % av de mislykkede forespørslene % av de mislykkede forespørslene siste 7 dager % av det maksimale antallet mislykkede forespørsler % av det maksimale antallet mislykkede forespørsler siste 7 dager antall mislykkede forespørsler antall mislykkede forespørsler siste 7 dager tidspunktet for siste forespørsel tidspunktet for siste videresendte forespørsel tidspunktet for siste mislykkede forespørsel tidspunktet for første forespørsel tidspunktet for første videresendte forespørsel tidspunktet for første mislykkede forespørsel ## 3 other ways of sorting in m, f, & n sortert alfabetisk sortert alfabetisk sortert alfabetisk sortert etter verdi sortert etter verdi sortert etter verdi usortert usortert usortert ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m. %Y %H:%n ## "Program started at" and "Analysed requests from" %D. %m. %Y %H:%n ## In Daily Report %d.%m.%y ## In Daily Summary %w ## In Hourly Report %d.%m.%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m. %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Diverse informative] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Diverse suksess] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Diverse videresendt] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Diverske klient/brukerfeil] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Diverse serverfeil] xxx [Ukjent] analog-ce-6.0.17/lang/no2.lng000066400000000000000000000314141406366436600155750ustar00rootroot00000000000000## Norwegian "nynorsk" language file for Analog 6.0 ## Norsk nynorsk språkfil for Analog 6.0 ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Omsett 1998-06-27 av Magni Onsøien ## Revidert 1999-10-12 av Magni Onsøien ## Omsett 2001-03-29 for analog versjon 5 av Trond Øksendal ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. søn mån tys ons tor fre lau jan feb mar apr mai jun jul aug sep okt nov des ## Next some standard common words. ## Abbreviation for "week beginning" vekestart år ## Quarter of a year kvartal månad dag dagar time minutt minutt sekund sekund byte byte ## ?bytes represents kbytes, Mbytes etc. ?byte spørjing spørjingar dato ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dato klokkeslett periode fyrste gong fyrste gong siste gong siste gong fil filer maskin maskiner virtuell tenar virtuelle tenarar katalog katalogar domene domene organisasjon organisasjonar filending filendingar URL URLar klient klientar OS OS ## (= operating system, operating systems) storleik søkjeuttrykk søkjeuttrykk referanse referansar brukar brukarar statuskode statuskodar Webtenarstatistikk for ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Oppsummering ## The time reports, plus "busiest" strings (at the bottom of each report) Rapport - år Travlaste år: Rapport - kvartal Travlaste kvartal: Rapport - månad Travlaste månad: Rapport - veke Travlaste veke: Startar Oppsummering - dag Rapport - dag Travlaste dag: Rapport - time Oppsummering - time Oppsummering - time i veka Travlaste time: Rapport - kvarter Oppsummering - kvarter Travlaste kvarter: Rapport - fem minutt Oppsummering - fem minutt Travlaste fem minutt: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Rapport - maskiner maskin maskinene n Rapport - vidaresendt frå tenar tenar tenarane n Rapport - tenarfeil tenar tenarane n Rapport - katalogar katalog katalogane n Rapport - filtypar filtype filtypane n Rapport - spørjingar etterspurt fil etterspurde filer n Rapport - vidaresending fil filene n Rapport - feil fil filene n Rapport - referansar refererande URL refererande URLar n Rapport - refererande tenarar refererande tenar refererande tenarane n Rapport - referansar som vert vidaresende refererande URL refererande URLar n Rapport - feilreferansar refererande URL refererande URLar n Rapport - søk søk søk n Rapport - søkjeord søkjeord søkjeord n Rapport - interne søk søk søk n Rapport - interne søkjeord søkjeord søkjeord n Rapport - virtuelle tenarar virtuell tenar virtuelle tenarar n Rapport - vidaresending for virtuelle tenarar virtuell tenar virtuelle tenarane n Rapport - feil for virtuelle tenarar virtuell tenar virtuelle tenarane n Rapport - brukarar brukar brukarane n Rapport - vidaresende brukarar brukar brukarane n Rapport - feil per brukar brukar brukarane n Oppsummering - klientar klient klientane n Rapport - klientar klient klientane n Rapport - OS operativsystem operativsystem n Rapport - domene domene domena n Rapport - organisasjon organisasjon organisasjonar n Rapport - statuskodar statuskode statuskodane n Rapport - responstid Rapport - filstorleikar ## Used at the bottom of the report Analysen er laga med Køyretid Mindre enn 1 ## Used in the time reports Kvar strek representerer eller ein del av dette spørjing etter ei side spørjingar etter sider ## Used at the bottom of each non-time report: need m, f & n genders * * ikkje vist ## Used on the pie charts: again need m, f & n genders * * Andre ## Used at the top of the report Programmet starta Analyse av spørjingar frå t.o.m. ## Used in the General Summary Talet på vellukka spørjingar totalt Gjennomsnittleg tal på vellukka spørjingar per dag Talet på vellukka spørjingar etter sider totalt Gjennomsnittleg tal på vellukka spørjingar etter sider per dag Loggliner utan statuskode Talet på mislukka spørjingar totalt Talet på omdirigerte spørjingar totalt Spørjingar med informativ statuskode Talet på ulike etterspurde filer Talet på ulike klientmaskiner Ugyldige loggliner Uønskte loggliner Samanlagt mengd overførde data Gjennomsnittleg mengd overførde data per dag Tal i parantesar refererer til 7-dagarsperioden som slutta dei siste 7 dagane Gå til Toppen ## Some special phrases for particular reports. [ukjende adresser] [domene ikkje oppgjeve] [ukjend domene] [rotkatalog] [ingen katalog] [inga filending] [katalogar] Ukjend Windows Annan Unix Robotar Ukjent OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) spørj 7-dagar spørj %spørj %7-dagar spørj sider 7-dagar sider %sider %7-dagar sider byte ?byte 7-dagar byte 7-dagar ?byte %byte %7-dagar byte tal ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Lister opp dei fyrste %s * * Lister opp dei %d fyrste %s * * Lister opp alle %s ## "by" in the phrase "listing the top 3 files BY number of requests" med flest ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors spørjing siste 7 dagar spørjingar siste 7 dagar spørjing etter ei side siste 7 dagar spørjingar etter sider siste 7 dagar vidaresending vidaresendingar vidaresend spørjing siste 7 dagar vidaresende spørjingar siste 7 dagar mislukka spørjing mislukka spørjingar mislukka spørjing siste 7 dagar mislukka spørjingar siste 7 dagar % av trafikken % av trafikken siste 7 dagar % av den maksimale trafikken % av den maksimale trafikken siste 7 dagar byte trafikk byte trafikk ## ?bytes represents kbytes, Mbytes etc. ?byte trafikk byte trafikk siste 7 dagar byte trafikk siste 7 dagar ?byte trafikk siste 7 dagar spurt etter med ei vidaresend spørjing etter med ei mislukka spørjing etter med første spørjing etter med første vidaresende spørjing etter med første mislukka spørjing etter ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortert etter ## Used at the top of each report Rapporten inneheld data frå ## Used in pie charts Kakestykkjene viser ## different ways of sorting trafikkmengda trafikkmengda siste 7 dagar % av spørjingane % av spørjingane siste 7 dagar % av det maksimale talet på spørjingar % av det maksimale talet på spørjingar siste 7 dagar talet på spørjingar talet på spørjingar siste 7 dagar % av spørjingane etter sider % av spørjingane etter sider siste 7 dagar % av det maksimale talet på spørjingar etter sider % av det maksimale talet på spørjingar etter sider siste 7 dagar talet på spørjingar etter sider talet på spørjingar etter sider siste 7 dagar % av vidaresende spørjingar % av vidaresende spørjingar siste 7 dagar % av det maksimale talet på vidaresende spørjingar % av det maksimale talet på vidaresende spørjingar siste 7 dagar talet på vidaresende spørjingar talet på vidaresende spørjingar siste 7 dagar % av dei mislukka spørjingane % av dei mislukka spørjingane siste 7 dagar % av det maksimale talet på mislukka spørjingar % av det maksimale talet på mislukka spørjingar siste 7 dagar mislukka spørjingar mislukka spørjingar siste 7 dagar tida for siste spørjing tida for siste vidaresende spørjing tida for siste mislukka spørjing tida for første spørjing tida for første vidaresende spørjing tida for første mislukka spørjing ## 3 other ways of sorting in m, f, & n * * sortert alfabetisk * * sortert etter verdi * * usortert ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m. %Y %H:%n ## "Program started at" and "Analysed requests from" %D. %m. %Y %H:%n ## In Daily Report %d.%m.%y ## In Daily Summary %w ## In Hourly Report %d.%m.%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m. %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Ymse informative] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Ymse suksess] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Ymse vidaresendt] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Ymse klient/brukarfeil] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Ymse tenarfeil] xxx [Ukjend] analog-ce-6.0.17/lang/no2a.lng000066400000000000000000000314121406366436600157340ustar00rootroot00000000000000## Norwegian "nynorsk" language file for Analog 6.0 ## Norsk nynorsk sprakfil for Analog 6.0 ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## Omsett 1998-06-27 av Magni Onsøien ## Revidert 1999-10-12 av Magni Onsøien ## Omsett 2001-03-29 for analog versjon 5 av Trond Øksendal ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. son man tys ons tor fre lau jan feb mar apr mai jun jul aug sep okt nov des ## Next some standard common words. ## Abbreviation for "week beginning" vekestart ar ## Quarter of a year kvartal manad dag dagar time minutt minutt sekund sekund byte byte ## ?bytes represents kbytes, Mbytes etc. ?byte sporjing sporjingar dato ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dato klokkeslett periode fyrste gong fyrste gong siste gong siste gong fil filer maskin maskiner virtuell tenar virtuelle tenarar katalog katalogar domene domene organisasjon organisasjonar filending filendingar URL URLar klient klientar OS OS ## (= operating system, operating systems) storleik sokjeuttrykk sokjeuttrykk referanse referansar brukar brukarar statuskode statuskodar Webtenarstatistikk for ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Oppsummering ## The time reports, plus "busiest" strings (at the bottom of each report) Rapport - ar Travlaste ar: Rapport - kvartal Travlaste kvartal: Rapport - manad Travlaste manad: Rapport - veke Travlaste veke: Startar Oppsummering - dag Rapport - dag Travlaste dag: Rapport - time Oppsummering - time Oppsummering - time i veka Travlaste time: Rapport - kvarter Oppsummering - kvarter Travlaste kvarter: Rapport - fem minutt Oppsummering - fem minutt Travlaste fem minutt: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Rapport - maskiner maskin maskinene n Rapport - vidaresendt fra tenar tenar tenarane n Rapport - tenarfeil tenar tenarane n Rapport - katalogar katalog katalogane n Rapport - filtypar filtype filtypane n Rapport - sporjingar etterspurt fil etterspurde filer n Rapport - vidaresending fil filene n Rapport - feil fil filene n Rapport - referansar refererande URL refererande URLar n Rapport - refererande tenarar refererande tenar refererande tenarane n Rapport - referansar som vert vidaresende refererande URL refererande URLar n Rapport - feilreferansar refererande URL refererande URLar n Rapport - sok sok sok n Rapport - sokjeord sokjeord sokjeord n Rapport - interne sok sok sok n Rapport - interne sokjeord sokjeord sokjeord n Rapport - virtuelle tenarar virtuell tenar virtuelle tenarar n Rapport - vidaresending for virtuelle tenarar virtuell tenar virtuelle tenarane n Rapport - feil for virtuelle tenarar virtuell tenar virtuelle tenarane n Rapport - brukarar brukar brukarane n Rapport - vidaresende brukarar brukar brukarane n Rapport - feil per brukar brukar brukarane n Oppsummering - klientar klient klientane n Rapport - klientar klient klientane n Rapport - OS operativsystem operativsystem n Rapport - domene domene domena n Rapport - organisasjon organisasjon organisasjonar n Rapport - statuskodar statuskode statuskodane n Rapport - responstid Rapport - filstorleikar ## Used at the bottom of the report Analysen er laga med Koyretid Mindre enn 1 ## Used in the time reports Kvar strek representerer eller ein del av dette sporjing etter ei side sporjingar etter sider ## Used at the bottom of each non-time report: need m, f & n genders * * ikkje vist ## Used on the pie charts: again need m, f & n genders * * Andre ## Used at the top of the report Programmet starta Analyse av sporjingar fra t.o.m. ## Used in the General Summary Talet pa vellukka sporjingar totalt Gjennomsnittleg tal pa vellukka sporjingar per dag Talet pa vellukka sporjingar etter sider totalt Gjennomsnittleg tal pa vellukka sporjingar etter sider per dag Loggliner utan statuskode Talet pa mislukka sporjingar totalt Talet pa omdirigerte sporjingar totalt Sporjingar med informativ statuskode Talet pa ulike etterspurde filer Talet pa ulike klientmaskiner Ugyldige loggliner Uonskte loggliner Samanlagt mengd overforde data Gjennomsnittleg mengd overforde data per dag Tal i parantesar refererer til 7-dagarsperioden som slutta dei siste 7 dagane Ga til Toppen ## Some special phrases for particular reports. [ukjende adresser] [domene ikkje oppgjeve] [ukjend domene] [rotkatalog] [ingen katalog] [inga filending] [katalogar] Ukjend Windows Annan Unix Robotar Ukjent OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) sporj 7-dagar sporj %sporj %7-dagar sporj sider 7-dagar sider %sider %7-dagar sider byte ?byte 7-dagar byte 7-dagar ?byte %byte %7-dagar byte tal ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Lister opp dei fyrste %s * * Lister opp dei %d fyrste %s * * Lister opp alle %s ## "by" in the phrase "listing the top 3 files BY number of requests" med flest ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors sporjing siste 7 dagar sporjingar siste 7 dagar sporjing etter ei side siste 7 dagar sporjingar etter sider siste 7 dagar vidaresending vidaresendingar vidaresend sporjing siste 7 dagar vidaresende sporjingar siste 7 dagar mislukka sporjing mislukka sporjingar mislukka sporjing siste 7 dagar mislukka sporjingar siste 7 dagar % av trafikken % av trafikken siste 7 dagar % av den maksimale trafikken % av den maksimale trafikken siste 7 dagar byte trafikk byte trafikk ## ?bytes represents kbytes, Mbytes etc. ?byte trafikk byte trafikk siste 7 dagar byte trafikk siste 7 dagar ?byte trafikk siste 7 dagar spurt etter med ei vidaresend sporjing etter med ei mislukka sporjing etter med forste sporjing etter med forste vidaresende sporjing etter med forste mislukka sporjing etter ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortert etter ## Used at the top of each report Rapporten inneheld data fra ## Used in pie charts Kakestykkjene viser ## different ways of sorting trafikkmengda trafikkmengda siste 7 dagar % av sporjingane % av sporjingane siste 7 dagar % av det maksimale talet pa sporjingar % av det maksimale talet pa sporjingar siste 7 dagar talet pa sporjingar talet pa sporjingar siste 7 dagar % av sporjingane etter sider % av sporjingane etter sider siste 7 dagar % av det maksimale talet pa sporjingar etter sider % av det maksimale talet pa sporjingar etter sider siste 7 dagar talet pa sporjingar etter sider talet pa sporjingar etter sider siste 7 dagar % av vidaresende sporjingar % av vidaresende sporjingar siste 7 dagar % av det maksimale talet pa vidaresende sporjingar % av det maksimale talet pa vidaresende sporjingar siste 7 dagar talet pa vidaresende sporjingar talet pa vidaresende sporjingar siste 7 dagar % av dei mislukka sporjingane % av dei mislukka sporjingane siste 7 dagar % av det maksimale talet pa mislukka sporjingar % av det maksimale talet pa mislukka sporjingar siste 7 dagar mislukka sporjingar mislukka sporjingar siste 7 dagar tida for siste sporjing tida for siste vidaresende sporjing tida for siste mislukka sporjing tida for forste sporjing tida for forste vidaresende sporjing tida for forste mislukka sporjing ## 3 other ways of sorting in m, f, & n * * sortert alfabetisk * * sortert etter verdi * * usortert ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m. %Y %H:%n ## "Program started at" and "Analysed requests from" %D. %m. %Y %H:%n ## In Daily Report %d.%m.%y ## In Daily Summary %w ## In Hourly Report %d.%m.%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m. %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Ymse informative] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Ymse suksess] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Ymse vidaresendt] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Ymse klient/brukarfeil] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Ymse tenarfeil] xxx [Ukjend] analog-ce-6.0.17/lang/noa.lng000066400000000000000000000317251406366436600156610ustar00rootroot00000000000000## Norwegian "bokmål" language file for Analog 6.0 ## Norsk bokmål språkfil for Analog 6.0 ## ## Oversatt 2001-03-26 av Pål Løberg ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. son man tir ons tor fre lor jan feb mar apr mai jun jul aug sep okt nov des ## Next some standard common words. ## Abbreviation for "week beginning" ukestart ar ## Quarter of a year kvartal maned dag dager time minutt minutter sekund sekunder byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes foresporsel foresporsler dato ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dato klokkeslett periode forste gang forste gang siste gang siste gang fil filer maskin maskiner virtuell tjener virtuelle tjenere katalog kataloger domene domener organisasjon organisasjoner filendelse filendelser URL URLer klient klienter OS OS ## (= operating system, operating systems) storrelse sokeuttrykk sokeuttrykk referanse referanser bruker brukere statuskode statuskoder Webtjenerstatistikk for ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Oppsummering ## The time reports, plus "busiest" strings (at the bottom of each report) Rapport - ar Travleste ar: Rapport - kvartal Travleste kvartal: Rapport - maned Travleste maned: Rapport - uke Travleste uke: Starter Oppsummering - dag Rapport - dag Travleste dag: Rapport - time Oppsummering - time Oppsummering - tid i uken Travleste time: Rapport - kvarter Oppsummering - kvarter Travleste kvarter: Rapport - fem minutt Oppsummering - fem minutt Travleste fem minutter: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Rapport - maskiner maskin maskiner m Rapport - videresendt fra tjener tjener tjenere m Rapport - tjenerfeil tjener tjenere m Rapport - kataloger katalog katalogene m Rapport - filtyper filtype filtypene m Rapport - foresporsler forespurt fil forespurte filer m Rapport - videresending fil filene m Rapport - feil fil filene m Rapport - referanser refererende URL refererende URLer m Rapport - refererende tjenere refererende tjener refererende tjenerene m Rapport - referanser som videresendes refererende URL refererende URLer m Rapport - feilreferanser refererende URL refererende URLer m Rapport - Sok sok sok n Rapport - Sokeord sokeord sokeord n Rapport - Interne sok sok sok n Rapport - Interne sokeord sokeord sokeord n Rapport - virtuelle tjenere virtuell tjener virtuelle tjenere m Rapport - videresending for virtuelle tjenere virtuell tjener virtuelle tjenere m Rapport - feil for virtuelle tjenere virtuell tjener virtuelle tjenere m Rapport - brukere bruker brukerene m Rapport - videresendte brukere bruker brukere m Rapport - feil per bruker bruker brukerene m Oppsummering - klienter klient klientene m Rapport - klienter klient klientene m Rapport - OS operativsystem operativsystem n Rapport - domener domene domenene n Rapport - organisasjon organisasjon organisasjoner m Rapport - statuskoder statuskode statuskodene m Rapport - responstid Rapport - filstorrelser ## Used at the bottom of the report Analysen er laget med Kjoretid Mindre enn 1 ## Used in the time reports Hver enhet representerer eller en del av dette foresporsel etter en side foresporsler etter sider ## Used at the bottom of each non-time report: need m, f & n genders ikke vist ikke vist ikke vist ## Used on the pie charts: again need m, f & n genders Andre Andre Andre ## Used at the top of the report Programmet startet Analyse av foresporsler fra t.o.m. ## Used in the General Summary Totalt antall vellykkede foresporsler Gjennomsnittlig antall vellykkede foresporsler per dag Totalt antall vellykkede foresporsler etter sider Gjennomsnittlig antall vellykkede foresporsler etter sider per dag Logglinjer uten statuskode Totalt antall mislykkede foresporsler Totalt antall omdirigerte foresporsler Requests with informational status code *#*#* Antall forskjellige filer forespurt Antall forskjellige maskiner betjent Ugyldige logglinjer Uonskede logglinjer Total mengde data overfort Gjennomsnittlig mengde data overfort per dag Tall i paranteser refererer til de 7 dager til siste 7 dager Ga til Toppen ## Some special phrases for particular reports. [ukjente adresser] [domain ikke oppgitt] [ukjent domene] [rotkatalog] [ingen katalog] [ingen filending] [kataloger] Ukjent Windows Annen Unix Roboter Ukjent OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #frsp 7-dager frsp %frsp %7-day frsp sider 7-dager sider %sider %7-day sider bytes ?bytes 7-dager bytes 7-dager ?bytes %bytes %7-dager bytes ant. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Lister opp de forste %s Lister opp de forste %s Lister opp de forste %s Lister opp de %d forste %s Lister opp de %d forste %s Lister opp de %d forste %s Lister opp alle %s Lister opp alle %s Lister opp alle %s ## "by" in the phrase "listing the top 3 files BY number of requests" med flest ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors foresporsel siste 7 dager foresporsler siste 7 dager foresporsel etter en side siste 7 dager foresporsler etter en side siste 7 dager videresending videresendinger videresendt foresporsel siste 7 dager videresendte foresporsler siste 7 dager mislykket foresporsel mislykkede foresporsler mislykket foresporsel siste 7 dager mislykkede foresporsler siste 7 dager % av trafikken % av trafikken siste 7 dager % av den maksimale trafikken % av den maksimale trafikken siste 7 dager byte trafikk bytes trafikk ## ?bytes represents kbytes, Mbytes etc. ?bytes trafikk byte trafikk siste 7 dager bytes trafikk siste 7 dager ?bytes trafikk siste 7 dager forespurt etter med en videresendt foresporsel etter med en mislykket foresporsel etter med forste foresporsel etter med forste videresendte foresporsel etter med forste mislykkede foresporsel etter ## Now "sorted by": again, in m, f & n (only needed in plural though) sortert etter sortert etter sortert etter ## Used at the top of each report Rapporten inneholder data fra ## Used in pie charts Kakestykkene viser ## different ways of sorting mengden trafikk mengden trafikk siste 7 dager % av foresporslene % av foresporslene siste 7 dager % av det maksimale antallet foresporsler % av det maksimale antallet foresporsler siste 7 dager antall foresporsler antall foresporsler siste 7 dager % av foresporslene etter sider % av foresporslene etter sider siste 7 dager % av det maksimale antallet foresporsler etter sider % av det maksimale antallet foresporsler etter sider siste 7 dager antall foresporsler etter sider antall foresporsler etter sider siste 7 dager % av videresendte foresporsler % av videresendte foresporsler siste 7 dager % av det maksimale antallet videresendte foresporsler % av det maksimale antallet videresendte foresporsler siste 7 dager antall videresendte foresporsler antall videresendte foresporsler siste 7 dager % av de mislykkede foresporslene % av de mislykkede foresporslene siste 7 dager % av det maksimale antallet mislykkede foresporsler % av det maksimale antallet mislykkede foresporsler siste 7 dager antall mislykkede foresporsler antall mislykkede foresporsler siste 7 dager tidspunktet for siste foresporsel tidspunktet for siste videresendte foresporsel tidspunktet for siste mislykkede foresporsel tidspunktet for forste foresporsel tidspunktet for forste videresendte foresporsel tidspunktet for forste mislykkede foresporsel ## 3 other ways of sorting in m, f, & n sortert alfabetisk sortert alfabetisk sortert alfabetisk sortert etter verdi sortert etter verdi sortert etter verdi usortert usortert usortert ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m. %Y %H:%n ## "Program started at" and "Analysed requests from" %D. %m. %Y %H:%n ## In Daily Report %d.%m.%y ## In Daily Summary %w ## In Hourly Report %d.%m.%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m. %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Diverse informative] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Diverse suksess] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Diverse videresendt] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Diverske klient/brukerfeil] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Diverse serverfeil] xxx [Ukjent] analog-ce-6.0.17/lang/pl.lng000066400000000000000000000321421406366436600155110ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Polish translation (ISO-8859-2 version) by: ## Marcin Sochacki (wanted@panda.bg.univ.gda.pl) ## Tomek Wo¼niak (huckster@panda.bg.univ.gda.pl) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. Nie Pon Wto ¦ro Czw Pi± Sob Sty Lut Mar Kwi Maj Cze Lip Sie Wrz Pa¼ Lis Gru ## Next some standard common words. ## Abbreviation for "week beginning" pocz. tyg. rok ## Quarter of a year kwarta³ miesi±c dzieñ dni godz minuta minuty sekunda sekundy bajt bajty ## ?bytes represents kbytes, Mbytes etc. ?bajtów zapytanie zapytania data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data czas czas pierwsza data pierwszy czas ostatnia data ostatni czas plik pliki host hosty wirtualny host wirtualny hosty katalog katalogi domena domeny subdomena subdomeny rozszerzenie rozszerzenia URL URL-e przegl±darka przegl±darki OS OS-y ## (= operating system, operating systems) rozmiar wyra¿enie wyszukiwawcze wyra¿enia wyszukiwawcze host hosty u¿ytkownik u¿ytkowników kod serwera HTTP kody serwera HTTP Statystyki WWW dla ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Podsumowanie ogólne ## The time reports, plus "busiest" strings (at the bottom of each report) Raport roczny Rekordowy rok: Raport kwartalny Rekordowy kwarta³: Raport miesiêczny Rekordowy miesi±c: Raport tygodniowy Rekordowy tydzieñ: pocz±tek tygodnia Podsumowanie dzienne Raport dzienny Rekordowy dzieñ: Raport godzinny Podsumowanie godzinne Podsumowanie godzin w tygodniu Rekordowa godzina: Raport kwadransów Podsumowanie kwadransów Rekordowy kwadrans: Raport piêciominutowy Podsumowanie piêciominutowe Rekordowe piêæ minut: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Raport hostów host hosty n Raport przekierowañ hostów host hosty n Raport b³êdnych hostów host hosty n Raport katalogów katalog katalogi n Raport typów plików rozszerzenie rozszerzenia n Raport zapytañ plik pliki n Raport przekierowañ plik pliki n Raport b³êdów plik pliki n Raport odsy³aczy - URLe odsy³aj±cy URL odsy³aj±ce URL-e n Raport odsy³aczy - hosty odsy³aj±cy host odsy³aj±ce hosty n Raport odsy³aczy - przekierowania odsy³aj±cy URL odsy³aj±ce URL-e n Raport odsy³aczy - b³êdy odsy³aj±cy URL odsy³aj±ce URL-e n Raport wyra¿eñ wyszukiwawczych wyra¿enie wyra¿enia n Raport s³ów wyszukiwawczych s³owo s³owa n Raport lokalnych wyra¿eñ wyszukiwawczych wyra¿enie wyra¿enia n Raport lokalnych s³ów wyszukiwawczych s³owo s³owa n Raport wirtualnych hostów wirtualny host wirtualne hosty n Raport wirtualnych hostów - przekierowania wirtualny host wirtualne hosty n Raport wirtualnych hostów - b³êdy wirtualny host wirtualne hosty n Raport u¿ytkowników u¿ytkownik u¿ytkowników n Raport u¿ytkowników - przekierowania u¿ytkownik u¿ytkowników n Raport u¿ytkowników - b³êdy u¿ytkownik u¿ytkowników n Podsumowanie przegl±darek przegl±darka przegl±darki n Raport przegl±darek przegl±darka przegl±darki n Raport systemów operacyjnych system operacyjny systemy operacyjne n Raport domen domena domeny n Raport subdomen subdomena subdomeny n Raport kodów serwera HTTP kod serwera kody serwera n Raport czasu przetwarzania Raport wielko¶ci plików ## Used at the bottom of the report Raport wygenerowany przez Czas pracy mniej ni¿ 1 ## Used in the time reports Ka¿da jednostka przedstawia (zaokr±glenie w górê) zapytañ o stronê zapytañ o strony ## Used at the bottom of each non-time report: need m, f & n genders * * poza list± ## Used on the pie charts: again need m, f & n genders * * Inne ## Used at the top of the report Program uruchomiony: Przeanalizowano zapytania od do ## Used in the General Summary Liczba zapytañ ogó³em ¦rednia liczba zapytañ dziennie Zapytania o strony ogó³em ¦rednia liczba zapytañ o strony dziennie Linie loga bez kodu serwera HTTP B³êdne zapytania Przekierowane zapytania Zapytania z informacyjnym kodem serwera HTTP Liczba plików Liczba hostów Uszkodzone linie loga Niepotrzebne wpisy w logu Dane przes³ane ogó³em ¦rednia ilo¶æ danych przesy³ana dziennie Liczby w nawiasach oznaczaj± 7 dni do ostatnie 7 dni Przejd¼ do Góra ## Some special phrases for particular reports. [nieznane adresy numeryczne] [brak domeny] [nieznana domena] [g³ówny katalog] [brak katalogu] [brak rozszerzenia] [katalogi] Nieznane Windows Inny Unix Automaty indeksuj±ce Nieznany system operacyjny ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) zapytañ zapytañ (7 dni) %zapytañ %zapytañ (7 dni) stron stron (7 dni) %stron %stron (7 dni) bajtów ?bajtów bajtów (7 dni) ?bajtów (7 dni) %bajtów %bajtów (7 dni) nr ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Wy¶wietlono pierwsze %s * * Wy¶wietlono pierwsze %d %s * * Wy¶wietlono %s ## "by" in the phrase "listing the top 3 files BY number of requests" wed³ug ## All requests WITH AT LEAST 10 requests , które mia³y co najmniej ## Different ways of doing floors zapytanie w ostatnich 7 dniach zapytañ w ostatnich 7 dniach zapytanie o stronê w ostatnich 7 dniach zapytañ o strony w ostatnich 7 dniach przekierowane zapytanie przekierowanych zapytañ przekierowane zapytanie w ostatnich 7 dniach przekierowanych zapytañ w ostatnich 7 dniach b³êdne zapytanie b³êdnych zapytañ b³êdne zapytanie w ostatnich 7 dniach b³êdnych zapytañ w ostatnich 7 dniach % ruchu w sieci % ruchu w sieci w ostatnich 7 dniach % maksymalnego ruchu w sieci % maksymalnego ruchu w sieci w ostatnich 7 dniach przes³any bajt przes³anych bajtów ## ?bytes represents kbytes, Mbytes etc. przes³anych ?bajtów przes³any bajt w ostatnich 7 dniach przes³anych bajtów w ostatnich 7 dniach przes³anych ?bajtów w ostatnich 7 dniach zapytanych od z przekierowanym zapytaniem od z b³êdnym zapytaniem od z pierwszym zapytaniem od z pierwszym przekierowanym zapytaniem od z pierwszym b³êdnym zapytaniem od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * posortowane wed³ug ## Used at the top of each report Ten raport zawiera dane z ## Used in pie charts Wykres posortowany wed³ug ## different ways of sorting ruchu w sieci ruchu w sieci w ostatnich 7 dniach % zapytañ % zapytañ w ostatnich 7 dniach % maksymalnej liczby zapytañ % maksymalnej liczby zapytañ w ostatnich 7 dniach liczby zapytañ liczby zapytañ w ostatnich 7 dniach % zapytañ o strony % zapytañ o strony w ostatnich 7 dniach % maksymalnej liczby zapytañ o strony % maksymalnej liczby zapytañ o strony w ostatnich 7 dniach liczby zapytañ o strony liczby zapytañ o strony w ostatnich 7 dniach % przekierowanych zapytañ % przekierowanych zapytañ w ostatnich 7 dniach % maksymalnej liczby przekierowanych zapytañ % maksymalnej liczby przekierowanych zapytañ w ostatnich 7 dniach liczby przekierowanych zapytañ liczby przekierowanych zapytañ w ostatnich 7 dniach % b³êdnych zapytañ % b³êdnych zapytañ w ostatnich 7 dniach % maksymalnej liczby b³êdnych zapytañ % maksymalnej liczby b³êdnych zapytañ w ostatnich 7 dniach liczby b³êdnych zapytañ liczby b³êdnych zapytañ w ostatnich 7 dniach daty ostaniego zapytania daty ostaniego przekierowanego zapytania daty ostaniego b³êdnego zapytania daty pierwszego zapytania daty pierwszego przekierowanego zapytania daty pierwszego b³êdnego zapytania ## 3 other ways of sorting in m, f, & n * * posortowane alfabetycznie * * posortowane numerycznie * * bez sortowania ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. rano po po³udniu ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %H:%n ## "Program started at" and "Analysed requests from" %d %m %Y %H:%n ## In Daily Report %d %m %Y ## In Daily Summary %w ## In Hourly Report %d %m %Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %Y ## The date & time (D) column in non-time reports %d %m %Y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %Y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Ró¿ne komunikaty informacyjne] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Ró¿ne komunikaty o powodzeniu] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Ró¿ne komunikaty o przekierowaniu] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Ró¿ne b³êdy po stronie klienta/u¿ytkownika] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Ró¿ne b³êdy po stronie serwera] xxx [Nieznane] analog-ce-6.0.17/lang/pla.lng000066400000000000000000000321361406366436600156550ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Polish translation (US-ASCII version) by: ## Marcin Sochacki (wanted@panda.bg.univ.gda.pl) ## Tomek Wozniak (huckster@panda.bg.univ.gda.pl) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Nie Pon Wto Sro Czw Pia Sob Sty Lut Mar Kwi Maj Cze Lip Sie Wrz Paz Lis Gru ## Next some standard common words. ## Abbreviation for "week beginning" pocz. tyg. rok ## Quarter of a year kwartal miesiac dzien dni godz minuta minuty sekunda sekundy bajt bajty ## ?bytes represents kbytes, Mbytes etc. ?bajtow zapytanie zapytania data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data czas czas pierwsza data pierwszy czas ostatnia data ostatni czas plik pliki host hosty wirtualny host wirtualny hosty katalog katalogi domena domeny subdomena subdomeny rozszerzenie rozszerzenia URL URL-e przegladarka przegladarki OS OS-y ## (= operating system, operating systems) rozmiar wyrazenie wyszukiwawcze wyrazenia wyszukiwawcze host hosty uzytkownik uzytkownikow kod serwera HTTP kody serwera HTTP Statystyki WWW dla ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Podsumowanie ogolne ## The time reports, plus "busiest" strings (at the bottom of each report) Raport roczny Rekordowy rok: Raport kwartalny Rekordowy kwartal: Raport miesieczny Rekordowy miesiac: Raport tygodniowy Rekordowy tydzien: poczatek tygodnia Podsumowanie dzienne Raport dzienny Rekordowy dzien: Raport godzinny Podsumowanie godzinne Podsumowanie godzin w tygodniu Rekordowa godzina: Raport kwadransow Podsumowanie kwadransow Rekordowy kwadrans: Raport pieciominutowy Podsumowanie pieciominutowe Rekordowe piec minut: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Raport hostow host hosty n Raport przekierowan hostow host hosty n Raport blednych hostow host hosty n Raport katalogow katalog katalogi n Raport typow plikow rozszerzenie rozszerzenia n Raport zapytan plik pliki n Raport przekierowan plik pliki n Raport bledow plik pliki n Raport odsylaczy - URLe odsylajacy URL odsylajace URL-e n Raport odsylaczy - hosty odsylajacy host odsylajace hosty n Raport odsylaczy - przekierowania odsylajacy URL odsylajace URL-e n Raport odsylaczy - bledy odsylajacy URL odsylajace URL-e n Raport wyrazen wyszukiwawczych wyrazenie wyrazenia n Raport slow wyszukiwawczych slowo slowa n Raport lokalnych wyrazen wyszukiwawczych wyrazenie wyrazenia n Raport lokalnych slow wyszukiwawczych slowo slowa n Raport wirtualnych hostow wirtualny host wirtualne hosty n Raport wirtualnych hostow - przekierowania wirtualny host wirtualne hosty n Raport wirtualnych hostow - bledy wirtualny host wirtualne hosty n Raport uzytkownikow uzytkownik uzytkownikow n Raport uzytkownikow - przekierowania uzytkownik uzytkownikow n Raport uzytkownikow - bledy uzytkownik uzytkownikow n Podsumowanie przegladarek przegladarka przegladarki n Raport przegladarek przegladarka przegladarki n Raport systemow operacyjnych system operacyjny systemy operacyjne n Raport domen domena domeny n Raport subdomen subdomena subdomeny n Raport kodow serwera HTTP kod serwera kody serwera n Raport czasu przetwarzania Raport wielkosci plikow ## Used at the bottom of the report Raport wygenerowany przez Czas pracy mniej niz 1 ## Used in the time reports Kazda jednostka przedstawia (zaokraglenie w gore) zapytan o strone zapytan o strony ## Used at the bottom of each non-time report: need m, f & n genders * * poza lista ## Used on the pie charts: again need m, f & n genders * * Inne ## Used at the top of the report Program uruchomiony: Przeanalizowano zapytania od do ## Used in the General Summary Liczba zapytan ogolem Srednia liczba zapytan dziennie Zapytania o strony ogolem Srednia liczba zapytan o strony dziennie Linie loga bez kodu serwera HTTP Bledne zapytania Przekierowane zapytania Zapytania z informacyjnym kodem serwera HTTP Liczba plikow Liczba hostow Uszkodzone linie loga Niepotrzebne wpisy w logu Dane przeslane ogolem Srednia ilosc danych przesylana dziennie Liczby w nawiasach oznaczaja 7 dni do ostatnie 7 dni Przejdz do Gora ## Some special phrases for particular reports. [nieznane adresy numeryczne] [brak domeny] [nieznana domena] [glowny katalog] [brak katalogu] [brak rozszerzenia] [katalogi] Nieznane Windows Inny Unix Automaty indeksujace Nieznany system operacyjny ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) zapytan zapytan (7 dni) %zapytan %zapytan (7 dni) stron stron (7 dni) %stron %stron (7 dni) bajtow ?bajtow bajtow (7 dni) ?bajtow (7 dni) %bajtow %bajtow (7 dni) nr ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Wyswietlono pierwsze %s * * Wyswietlono pierwsze %d %s * * Wyswietlono %s ## "by" in the phrase "listing the top 3 files BY number of requests" wedlug ## All requests WITH AT LEAST 10 requests , ktore mialy co najmniej ## Different ways of doing floors zapytanie w ostatnich 7 dniach zapytan w ostatnich 7 dniach zapytanie o strone w ostatnich 7 dniach zapytan o strony w ostatnich 7 dniach przekierowane zapytanie przekierowanych zapytan przekierowane zapytanie w ostatnich 7 dniach przekierowanych zapytan w ostatnich 7 dniach bledne zapytanie blednych zapytan bledne zapytanie w ostatnich 7 dniach blednych zapytan w ostatnich 7 dniach % ruchu w sieci % ruchu w sieci w ostatnich 7 dniach % maksymalnego ruchu w sieci % maksymalnego ruchu w sieci w ostatnich 7 dniach przeslany bajt przeslanych bajtow ## ?bytes represents kbytes, Mbytes etc. przeslanych ?bajtow przeslany bajt w ostatnich 7 dniach przeslanych bajtow w ostatnich 7 dniach przeslanych ?bajtow w ostatnich 7 dniach zapytanych od z przekierowanym zapytaniem od z blednym zapytaniem od z pierwszym zapytaniem od z pierwszym przekierowanym zapytaniem od z pierwszym blednym zapytaniem od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * posortowane wedlug ## Used at the top of each report Ten raport zawiera dane z ## Used in pie charts Wykres posortowany wedlug ## different ways of sorting ruchu w sieci ruchu w sieci w ostatnich 7 dniach % zapytan % zapytan w ostatnich 7 dniach % maksymalnej liczby zapytan % maksymalnej liczby zapytan w ostatnich 7 dniach liczby zapytan liczby zapytan w ostatnich 7 dniach % zapytan o strony % zapytan o strony w ostatnich 7 dniach % maksymalnej liczby zapytan o strony % maksymalnej liczby zapytan o strony w ostatnich 7 dniach liczby zapytan o strony liczby zapytan o strony w ostatnich 7 dniach % przekierowanych zapytan % przekierowanych zapytan w ostatnich 7 dniach % maksymalnej liczby przekierowanych zapytan % maksymalnej liczby przekierowanych zapytan w ostatnich 7 dniach liczby przekierowanych zapytan liczby przekierowanych zapytan w ostatnich 7 dniach % blednych zapytan % blednych zapytan w ostatnich 7 dniach % maksymalnej liczby blednych zapytan % maksymalnej liczby blednych zapytan w ostatnich 7 dniach liczby blednych zapytan liczby blednych zapytan w ostatnich 7 dniach daty ostaniego zapytania daty ostaniego przekierowanego zapytania daty ostaniego blednego zapytania daty pierwszego zapytania daty pierwszego przekierowanego zapytania daty pierwszego blednego zapytania ## 3 other ways of sorting in m, f, & n * * posortowane alfabetycznie * * posortowane numerycznie * * bez sortowania ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. rano po poludniu ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %H:%n ## "Program started at" and "Analysed requests from" %d %m %Y %H:%n ## In Daily Report %d %m %Y ## In Daily Summary %w ## In Hourly Report %d %m %Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %Y ## The date & time (D) column in non-time reports %d %m %Y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %Y %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Rozne komunikaty informacyjne] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Rozne komunikaty o powodzeniu] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Rozne komunikaty o przekierowaniu] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Rozne bledy po stronie klienta/uzytkownika] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Rozne bledy po stronie serwera] xxx [Nieznane] analog-ce-6.0.17/lang/pladom.tab000066400000000000000000000116201406366436600163360ustar00rootroot00000000000000## Domains File for Analog ## Polish translation (US-ASCII version) by: ## Marcin Sochacki (wanted@panda.bg.univ.gda.pl) ## Tomek Wozniak (huckster@panda.bg.univ.gda.pl) aero 2 Przemysl lotniczy arpa 1 Arpanet biz 2 Biznes com 2 Komercyjne coop 2 Kooperacje edu 2 Edukacyjne gov 2 Rzadowe info 2 Informacyjne int 2 Organizacje Miedzynarodowe mil 2 Wojskowe museum 2 Muzea name 3 Prywatne net 2 Sieciowe org 2 Organizacje pro 3 Profesjonalne ac 1 Wyspa Wniebowstapienia ad 2 Andora ae 3 Zjednoczone Emiraty Arabskie af 1 Afganistan ag 2 Antigua i Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antyle Holenderskie ao 1 Angola aq 1 Antarktyka ar 3 Argentyna as 1 Samoa Amerykanskie at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbejdzan ba 3 Bosnia i Hercegowina bb 2 Barbados bd 1 Bangladesz be 3 Belgia bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermudy bn 1 Brunei bo 3 Boliwia br 3 Brazylia bs 1 Bahamy bt 1 Bhutan bv 1 Wyspa Bouvet bw 1 Botswana by 1 Bialorus bz 1 Belize ca 3 Kanada cc 1 Wyspy Kokosowe cd 1 Demokratyczna Republika Konga cf 1 Republika Srodkowoafrykanska cg 1 Kongo ch 2 Szwajcaria ci 1 Wybrzeze Kosci Sloniowej ck 1 Wyspy Cooka cl 2 Chile cm 1 Kamerun cn 3 Chiny co 3 Kolumbia cr 3 Kostaryka cu 2 Kuba cv 1 Republika Zielonego Przyladka cx 2 Wyspa Bozego Narodzenia cy 3 Cypr cz 2 Czechy de 2 Niemcy dj 1 Dzibuti dk 2 Dania dm 2 Dominika do 3 Dominikana dz 1 Algieria ec 3 Ekwador ee 2 Estonia eg 3 Egipt eh 1 Sahara Zachodnia er 1 Erytrea es 2 Hiszpania et 1 Etiopia fi 2 Finlandia fj 3 Fidzi fk 1 Falklandy fm 1 Mikronezja fo 1 Wyspy Faroe fr 2 Francja fx 1 Francja (Terytorium Europejskie) ga 1 Gabon gb 1 Wielka Brytania gd 1 Grenada ge 1 Gruzja gf 1 Gujana Francuska gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Grenlandia gm 1 Gambia gn 1 Gwinea gp 1 Gwadelupa gq 1 Gwinea Rownikowa gr 2 Grecja gs 1 Georgia Poludniowa i Sandwich Poludniowy gt 3 Gwatemala gu 1 Guam (USA) gw 1 Gwinea Bissau gy 1 Gujana hk 3 Hongkong hm 1 Wyspy Heard i McDonald hn 2 Honduras hr 2 Chorwacja ht 1 Haiti hu 2 Wegry id 3 Indonezja ie 2 Irlandia il 3 Izrael im 1 Wyspa Man in 3 Indie io 1 Brytyjskie Terytorium Oceanu Indyjskiego iq 1 Irak ir 1 Iran is 2 Islandia it 2 Wlochy je 1 Jersey jm 3 Jamajka jo 3 Jordania jp 3 Japonia ke 3 Kenia kg 1 Kirgistan kh 1 Kambodza ki 1 Kiribati km 1 Komory kn 1 Saint Kitts i Nevis kp 1 Korea Polnocna kr 3 Korea Poludniowa kw 3 Kuwejt ky 1 Kajmany kz 1 Kazachstan la 1 Laos lb 3 Liban lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litwa lu 2 Luksemburg lv 2 Lotwa ly 1 Libia ma 1 Maroko mc 2 Monako md 1 Moldawia mg 1 Madagaskar mh 1 Wyspy Marshalla mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Makao mp 1 Mariany Polnocne mq 1 Martynika mr 1 Mauretania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Malediwy mw 1 Malawi mx 3 Meksyk my 3 Malezja mz 1 Mozambik na 1 Namibia nc 1 Nowa Kaledonia ne 1 Niger nf 1 Wyspa Norfolk ng 1 Nigeria ni 3 Nikaragua nl 2 Holandia no 2 Norwegia np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nowa Zelandia om 1 Oman pa 3 Panama pe 3 Peru pf 1 Polinezja Francuska pg 3 Papua Nowa Gwinea ph 3 Filipiny pk 3 Pakistan pl 3 Polska pm 1 Saint-Pierre i Miquelon pn 1 Pitcairn pr 1 Puerto Rico ps 1 Palestyna pt 2 Portugalia pw 1 Palau py 3 Paragwaj qa 1 Katar re 1 Reunion ro 2 Rumunia ru 2 Rosja rw 1 Rwanda sa 3 Arabia Saudyjska sb 1 Wyspy Salomona sc 1 Seszele sd 1 Sudan se 2 Szwecja sg 3 Singapur sh 1 Swieta Helena si 2 Slowenia sj 1 Wyspy Svalbard i Jan Mayen sk 2 Slowacja sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Wyspy Swietego Tomasza i Ksiazeca su 2 ZSRR sv 3 Salwador sy 1 Syria sz 1 Suazi tc 1 Wyspy Turks i Caicos td 1 Czad tf 1 Francuskie Terytoria Poludniowe tg 1 Togo th 3 Tajlandia tj 1 Tadzykistan tk 1 Tokelau tl 1 Timor Wschodni tm 1 Turkmenistan tn 1 Tunezja to 1 Tonga tp 1 Timor Wschodni tr 3 Turcja tt 3 Trynidad i Tobago tv 1 Tuvalu tw 3 Tajwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Wielka Brytania um 1 Wyspy Zewnetrzne Stanow Zjednoczonych us 4 Stany Zjednoczone uy 3 Urugwaj uz 1 Uzbekistan va 1 Watykan vc 1 Saint Vincent i Grenadyny ve 3 Wenezuela vg 1 Dziewicze Wyspy Brytyjskie vi 1 Dziewicze Wyspy Stanow Zjednoczonych vn 1 Wietnam vu 1 Vanuatu wf 1 Wyspy Wallis i Futuna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslawia za 3 Republika Poludniowej Afryki zm 1 Zambia zr 1 Demokratyczna Republika Konga zw 3 Zimbabwe analog-ce-6.0.17/lang/pldom.tab000066400000000000000000000116221406366436600161770ustar00rootroot00000000000000## Domains File for Analog ## Polish translation (ISO-8859-2 version) by: ## Marcin Sochacki (wanted@panda.bg.univ.gda.pl) ## Tomek Wo¼niak (huckster@panda.bg.univ.gda.pl) aero 2 Przemys³ lotniczy arpa 1 Arpanet biz 2 Biznes com 2 Komercyjne coop 2 Kooperacje edu 2 Edukacyjne gov 2 Rz±dowe info 2 Informacyjne int 2 Organizacje Miêdzynarodowe mil 2 Wojskowe museum 2 Muzea name 3 Prywatne net 2 Sieciowe org 2 Organizacje pro 3 Profesjonalne ac 1 Wyspa Wniebowst±pienia ad 2 Andora ae 3 Zjednoczone Emiraty Arabskie af 1 Afganistan ag 2 Antigua i Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antyle Holenderskie ao 1 Angola aq 1 Antarktyka ar 3 Argentyna as 1 Samoa Amerykañskie at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbejd¿an ba 3 Bo¶nia i Hercegowina bb 2 Barbados bd 1 Bangladesz be 3 Belgia bf 1 Burkina Faso bg 2 Bu³garia bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermudy bn 1 Brunei bo 3 Boliwia br 3 Brazylia bs 1 Bahamy bt 1 Bhutan bv 1 Wyspa Bouvet bw 1 Botswana by 1 Bia³oru¶ bz 1 Belize ca 3 Kanada cc 1 Wyspy Kokosowe cd 1 Demokratyczna Republika Konga cf 1 Republika ¦rodkowoafrykañska cg 1 Kongo ch 2 Szwajcaria ci 1 Wybrze¿e Ko¶ci S³oniowej ck 1 Wyspy Cooka cl 2 Chile cm 1 Kamerun cn 3 Chiny co 3 Kolumbia cr 3 Kostaryka cu 2 Kuba cv 1 Republika Zielonego Przyl±dka cx 2 Wyspa Bo¿ego Narodzenia cy 3 Cypr cz 2 Czechy de 2 Niemcy dj 1 D¿ibuti dk 2 Dania dm 2 Dominika do 3 Dominikana dz 1 Algieria ec 3 Ekwador ee 2 Estonia eg 3 Egipt eh 1 Sahara Zachodnia er 1 Erytrea es 2 Hiszpania et 1 Etiopia fi 2 Finlandia fj 3 Fid¿i fk 1 Falklandy fm 1 Mikronezja fo 1 Wyspy Faroe fr 2 Francja fx 1 Francja (Terytorium Europejskie) ga 1 Gabon gb 1 Wielka Brytania gd 1 Grenada ge 1 Gruzja gf 1 Gujana Francuska gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Grenlandia gm 1 Gambia gn 1 Gwinea gp 1 Gwadelupa gq 1 Gwinea Równikowa gr 2 Grecja gs 1 Georgia Po³udniowa i Sandwich Po³udniowy gt 3 Gwatemala gu 1 Guam (USA) gw 1 Gwinea Bissau gy 1 Gujana hk 3 Hongkong hm 1 Wyspy Heard i McDonald hn 2 Honduras hr 2 Chorwacja ht 1 Haiti hu 2 Wêgry id 3 Indonezja ie 2 Irlandia il 3 Izrael im 1 Wyspa Man in 3 Indie io 1 Brytyjskie Terytorium Oceanu Indyjskiego iq 1 Irak ir 1 Iran is 2 Islandia it 2 W³ochy je 1 Jersey jm 3 Jamajka jo 3 Jordania jp 3 Japonia ke 3 Kenia kg 1 Kirgistan kh 1 Kambod¿a ki 1 Kiribati km 1 Komory kn 1 Saint Kitts i Nevis kp 1 Korea Pó³nocna kr 3 Korea Po³udniowa kw 3 Kuwejt ky 1 Kajmany kz 1 Kazachstan la 1 Laos lb 3 Liban lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litwa lu 2 Luksemburg lv 2 £otwa ly 1 Libia ma 1 Maroko mc 2 Monako md 1 Mo³dawia mg 1 Madagaskar mh 1 Wyspy Marshalla mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Makao mp 1 Mariany Pó³nocne mq 1 Martynika mr 1 Mauretania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Malediwy mw 1 Malawi mx 3 Meksyk my 3 Malezja mz 1 Mozambik na 1 Namibia nc 1 Nowa Kaledonia ne 1 Niger nf 1 Wyspa Norfolk ng 1 Nigeria ni 3 Nikaragua nl 2 Holandia no 2 Norwegia np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nowa Zelandia om 1 Oman pa 3 Panama pe 3 Peru pf 1 Polinezja Francuska pg 3 Papua Nowa Gwinea ph 3 Filipiny pk 3 Pakistan pl 3 Polska pm 1 Saint-Pierre i Miquelon pn 1 Pitcairn pr 1 Puerto Rico ps 1 Palestyna pt 2 Portugalia pw 1 Palau py 3 Paragwaj qa 1 Katar re 1 Reunion ro 2 Rumunia ru 2 Rosja rw 1 Rwanda sa 3 Arabia Saudyjska sb 1 Wyspy Salomona sc 1 Seszele sd 1 Sudan se 2 Szwecja sg 3 Singapur sh 1 ¦wiêta Helena si 2 S³owenia sj 1 Wyspy Svalbard i Jan Mayen sk 2 S³owacja sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Wyspy ¦wiêtego Tomasza i Ksi±¿êca su 2 ZSRR sv 3 Salwador sy 1 Syria sz 1 Suazi tc 1 Wyspy Turks i Caicos td 1 Czad tf 1 Francuskie Terytoria Po³udniowe tg 1 Togo th 3 Tajlandia tj 1 Tad¿ykistan tk 1 Tokelau tl 1 Timor Wschodni tm 1 Turkmenistan tn 1 Tunezja to 1 Tonga tp 1 Timor Wschodni tr 3 Turcja tt 3 Trynidad i Tobago tv 1 Tuvalu tw 3 Tajwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Wielka Brytania um 1 Wyspy Zewnêtrzne Stanów Zjednoczonych us 4 Stany Zjednoczone uy 3 Urugwaj uz 1 Uzbekistan va 1 Watykan vc 1 Saint Vincent i Grenadyny ve 3 Wenezuela vg 1 Dziewicze Wyspy Brytyjskie vi 1 Dziewicze Wyspy Stanów Zjednoczonych vn 1 Wietnam vu 1 Vanuatu wf 1 Wyspy Wallis i Futuna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugos³awia za 3 Republika Po³udniowej Afryki zm 1 Zambia zr 1 Demokratyczna Republika Konga zw 3 Zimbabwe analog-ce-6.0.17/lang/pt.lng000066400000000000000000000332501406366436600155220ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Portuguese version by Jaime Carvalho e Silva, 26 January 2001 ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Dom Seg Ter Qua Qui Sex Sab Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez ## Next some standard common words. ## Abbreviation for "week beginning" sem. com. ano ## Quarter of a year trimestre mês dia dias h minuto minutos segundo segundos byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes pedido pedidos data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data hora horas prim. data prim. hora data ant. hora ant. ficheiro ficheiros servidor servidores servidor virtual servidores virtuais directoria directorias domínio domínios organização organizações extensão extensões URL URLs Leitor Leitores Sistema Operativo Sistemas Operativos ## (= operating system, operating systems) tamanho termo pesquisado termos pesquisados sítio sítios utilizador utilizadores cod. estado cod. estado Estatísticas do Servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sumário Geral ## The time reports, plus "busiest" strings (at the bottom of each report) Relatório Anual Ano mais movimentado: Relatório trimestral Trimestre mais movimentado: Relatório Mensal Mês mais movimentado: Relatório Semanal Semana mais movimentada: semana começando Resumo Diário Relatório Diário Dia mais movimentado: Relatório Horário Resumo Horário Resumo de hora da Semana Hora mais movimentada: Relatório ao quarto de hora Resumo dos quartos de hora Quarto de hora mais movimentado: Relatório cada cinco minutos Resumo dos cinco minutos Cinco minutos mais movimentados: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Relatório de Servidores Servidor Servidores m Relatório de reencaminhamento do Servidor servidor servidores m Relatório de falhas do Servidor servidor servidores m Relatório de Directorias directoria directorias f Relatório de Tipos de Ficheiro extensão extensões f Relatório de Pedidos ficheiro ficheiros m Relatório de redireccionamento ficheiro ficheiros m Relatório de falhas ficheiro ficheiros m Relatório de referência URL de referência URLs de referência m Relatório do sítio de referência sítio de referência sítios de referência m Relatório de referência redireccionada URL de referência URLs de referência m Relatório de referência falhada URL de referência URLs de referência m Relatório de perguntas de pesquisa pergunta perguntas f Relatório de pesquisa de palavras palavra pesquisada palavras pesquisadas f Relatório de Pesquisas Internas pesquisas pesquisa f Relatório de Palavras Pesquisadas Internamente palavra pesquisada palavras pesquisadas f Relatório de Servidor Virtual servidor virtual servidores virtuais m Relatório de Reencaminhamento de Servidor Virtual servidor virtual servidores virtuais m Relatório de Falhas de Servidor Virtual servidor virtual servidores virtuais m Relatório de Utilizadores utilizador utilizadores m Relatório de Reencaminhamento de Utilizadores utilizador utilizadores m Relatório de Erros de Utilizadores utilizador utilizadores m Resumo de Leitores leitor leitores m Relatório de Leitores leitor leitores m Relatório de Sistemas Operativos Sistema Operativo Sistemas Operativos m Relatório de Domínios domínio domínios m Relatório de organizações organização organizações f Relatório de Códigos de Estado código de estado códigos de estado m Relatório de tempo de processamento Relatório de Tamanho de Ficheiro ## Used at the bottom of the report Estatísticas geradas por Tempo de execução Menos de 1 ## Used in the time reports Cada unidade representa ou fracção pedido de uma página pedidos de páginas ## Used at the bottom of each non-time report: need m, f & n genders não listados não listadas * ## Used on the pie charts: again need m, f & n genders Outro Outra * ## Used at the top of the report Começo do programa em Análise de pedidos desde até ## Used in the General Summary Pedidos atendidos Número médio de pedidos atendidos por dia Pedidos de páginas atendidos Número médio de pedidos de páginas atendidos por dia Linhas sem código de estado no ficheiro de log Pedidos não atendidos Pedidos redirigidos Pedidos com código de estado informativo Ficheiros diferentes solicitados Servidores diferentes atendidos Linhas inválidas no ficheiro de log Entradas não desejadas no ficheiro de log Tráfego total Tráfego médio transferido por dia Os valores entre parêntesis referem-se aos 7 dias até últimos 7 dias Ir a Início ## Some special phrases for particular reports. [endereço numérico não traduzido] [domínio não indicado] [domínio desconhecido] [directoria da raiz] [directoria ausente] [extensão ausente] [directorias] Windows desconhecido Outro Unix Robôs Sistema Operativo desconhecido ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) N.ped ped.7 dias % ped %ped. 7 dias Pgs. pgs. 7 dias % Pgs. %pgs. 7 dias bytes ?bytes bytes 7 dias ?bytes 7 dias %bytes %bytes 7 dias no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Mostrando o primeiro %s Mostrando a primeira %s * Mostrando os %d primeiros %s Mostrando as %d primeiras %s * Mostrando os %s Mostrando as %s * ## "by" in the phrase "listing the top 3 files BY number of requests" por ## All requests WITH AT LEAST 10 requests com pelo menos ## Different ways of doing floors pedido nos últimos 7 dias pedidos nos últimos 7 dias pedido de uma página nos últimos 7 dias pedido de páginas nos últimos 7 dias pedido redireccionado pedidos redireccionados pedido reencaminhado nos últimos 7 dias pedidos reencaminhados nos últimos 7 dias pedido falhado pedidos falhados pedido falhado nos últimos 7 dias pedidos falhados nos últimos 7 dias % do tráfego % do tráfego nos últimos 7 dias % da quantidade máxima de tráfego % da quantidade máxima de tráfego dos últimos 7 dias byte de tráfego bytes de tráfego ## ?bytes represents kbytes, Mbytes etc. ?bytes de tráfego byte de tráfego nos últimos 7 dias bytes de tráfego nos últimos 7 dias ?bytes de tráfego nos últimos 7 dias pedido desde com um pedido redireccionado desde com um pedido falhado desde com o primeiro pedido desde com o primeiro pedido redireccionado desde com o primeiro pedido falhado desde ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenados por ordenadas por * ## Used at the top of each report Este relatório contém dados de ## Used in pie charts Este gráfico foi traçado por ## different ways of sorting quantidade de tráfego quantidade de tráfego nos últimos 7 dias % dos pedidos % dos pedidos nos últimos 7 dias % da quantidade máxima de pedidos % da quantidade máxima de pedidos nos últimos 7 dias número de pedidos número de pedidos nos últimos 7 dias % dos pedidos de páginas % dos pedidos de páginas nos últimos 7 dias % do número máximo de pedidos de páginas % do número máximo de pedidos de páginas nos últimos 7 dias número de pedidos de páginas número de pedidos de páginas nos últimos 7 dias % dos pedidos redireccionados % dos pedidos redireccionados nos últimos 7 dias % do número máximo de pedidos redireccionados % do número máximo de pedidos redireccionados nos últimos 7 dias número de pedidos redireccionados número de pedidos redireccionados nos últimos 7 dias % dos pedidos falhados % dos pedidos falhados nos últimos 7 dias % do número máximo de pedidos falhados % do número máximo de pedidos falhados nos últimos 7 dias número de pedidos falhados número de pedidos falhados nos últimos 7 dias hora do último pedido hora do último pedido redireccionado hora do último pedido falhado hora do primeiro pedido hora do primeiro pedido redireccionado hora do primeiro pedido falhado ## 3 other ways of sorting in m, f, & n por ordem alfabética por ordem alfabética por ordem alfabética por ordem numérica por ordem numérica por ordem numérica desordenados desordenadas * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary %H ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y às %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/pta.lng000066400000000000000000000332501406366436600156630ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Portuguese version by Jaime Carvalho e Silva, 26 January 2001 ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Dom Seg Ter Qua Qui Sex Sab Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez ## Next some standard common words. ## Abbreviation for "week beginning" sem. com. ano ## Quarter of a year trimestre mes dia dias h minuto minutos segundo segundos byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes pedido pedidos data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data hora horas prim. data prim. hora data ant. hora ant. ficheiro ficheiros servidor servidores servidor virtual servidores virtuais directoria directorias dominio dominios organizacao organizacoes extensao extensoes URL URLs Leitor Leitores Sistema Operativo Sistemas Operativos ## (= operating system, operating systems) tamanho termo pesquisado termos pesquisados sitio sitios utilizador utilizadores cod. estado cod. estado Estatisticas do Servidor Web de ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sumario Geral ## The time reports, plus "busiest" strings (at the bottom of each report) Relatorio Anual Ano mais movimentado: Relatorio trimestral Trimestre mais movimentado: Relatorio Mensal Mes mais movimentado: Relatorio Semanal Semana mais movimentada: semana comecando Resumo Diario Relatorio Diario Dia mais movimentado: Relatorio Horario Resumo Horario Resumo de hora da Semana Hora mais movimentada: Relatorio ao quarto de hora Resumo dos quartos de hora Quarto de hora mais movimentado: Relatorio cada cinco minutos Resumo dos cinco minutos Cinco minutos mais movimentados: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Relatorio de Servidores Servidor Servidores m Relatorio de reencaminhamento do Servidor servidor servidores m Relatorio de falhas do Servidor servidor servidores m Relatorio de Directorias directoria directorias f Relatorio de Tipos de Ficheiro extensao extensoes f Relatorio de Pedidos ficheiro ficheiros m Relatorio de redireccionamento ficheiro ficheiros m Relatorio de falhas ficheiro ficheiros m Relatorio de referencia URL de referencia URLs de referencia m Relatorio do sitio de referencia sitio de referencia sitios de referencia m Relatorio de referencia redireccionada URL de referencia URLs de referencia m Relatorio de referencia falhada URL de referencia URLs de referencia m Relatorio de perguntas de pesquisa pergunta perguntas f Relatorio de pesquisa de palavras palavra pesquisada palavras pesquisadas f Relatorio de Pesquisas Internas pesquisas pesquisa f Relatorio de Palavras Pesquisadas Internamente palavra pesquisada palavras pesquisadas f Relatorio de Servidor Virtual servidor virtual servidores virtuais m Relatorio de Reencaminhamento de Servidor Virtual servidor virtual servidores virtuais m Relatorio de Falhas de Servidor Virtual servidor virtual servidores virtuais m Relatorio de Utilizadores utilizador utilizadores m Relatorio de Reencaminhamento de Utilizadores utilizador utilizadores m Relatorio de Erros de Utilizadores utilizador utilizadores m Resumo de Leitores leitor leitores m Relatorio de Leitores leitor leitores m Relatorio de Sistemas Operativos Sistema Operativo Sistemas Operativos m Relatorio de Dominios dominio dominios m Relatorio de organizacoes organizacao organizacoes f Relatorio de Codigos de Estado codigo de estado codigos de estado m Relatorio de tempo de processamento Relatorio de Tamanho de Ficheiro ## Used at the bottom of the report Estatisticas geradas por Tempo de execucao Menos de 1 ## Used in the time reports Cada unidade representa ou fraccao pedido de uma pagina pedidos de paginas ## Used at the bottom of each non-time report: need m, f & n genders nao listados nao listadas * ## Used on the pie charts: again need m, f & n genders Outro Outra * ## Used at the top of the report Comeco do programa em Analise de pedidos desde Ate' ## Used in the General Summary Pedidos atendidos Numero medio de pedidos atendidos por dia Pedidos de paginas atendidos Numero medio de pedidos de paginas atendidos por dia Linhas sem codigo de estado no ficheiro de log Pedidos nao atendidos Pedidos redirigidos Pedidos com codigo de estado informativo Ficheiros diferentes solicitados Servidores diferentes atendidos Linhas invalidas no ficheiro de log Entradas nao desejadas no ficheiro de log Trafego total Trafego medio transferido por dia Os valores entre parentesis referem-se aos 7 dias ate' ultimos 7 dias Ir a Inicio ## Some special phrases for particular reports. [endereco numerico nao traduzido] [dominio nao indicado] [dominio desconhecido] [directoria da raiz] [directoria ausente] [extensao ausente] [directorias] Windows desconhecido Outro Unix Robos Sistema Operativo desconhecido ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) N.ped ped.7 dias % ped %ped. 7 dias Pgs. pgs. 7 dias % Pgs. %pgs. 7 dias bytes ?bytes bytes 7 dias ?bytes 7 dias %bytes %bytes 7 dias no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Mostrando o primeiro %s Mostrando a primeira %s * Mostrando os %d primeiros %s Mostrando as %d primeiras %s * Mostrando os %s Mostrando as %s * ## "by" in the phrase "listing the top 3 files BY number of requests" por ## All requests WITH AT LEAST 10 requests com pelo menos ## Different ways of doing floors pedido nos ultimos 7 dias pedidos nos ultimos 7 dias pedido de uma pagina nos ultimos 7 dias pedido de paginas nos ultimos 7 dias pedido redireccionado pedidos redireccionados pedido reencaminhado nos ultimos 7 dias pedidos reencaminhados nos ultimos 7 dias pedido falhado pedidos falhados pedido falhado nos ultimos 7 dias pedidos falhados nos ultimos 7 dias % do trafego % do trafego nos ultimos 7 dias % da quantidade maxima de trafego % da quantidade maxima de trafego dos ultimos 7 dias byte de trafego bytes de trafego ## ?bytes represents kbytes, Mbytes etc. ?bytes de trafego byte de trafego nos ultimos 7 dias bytes de trafego nos ultimos 7 dias ?bytes de trafego nos ultimos 7 dias pedido desde com um pedido redireccionado desde com um pedido falhado desde com o primeiro pedido desde com o primeiro pedido redireccionado desde com o primeiro pedido falhado desde ## Now "sorted by": again, in m, f & n (only needed in plural though) ordenados por ordenadas por * ## Used at the top of each report Este relatorio contem dados de ## Used in pie charts Este grafico foi tracado por ## different ways of sorting quantidade de trafego quantidade de trafego nos ultimos 7 dias % dos pedidos % dos pedidos nos ultimos 7 dias % da quantidade maxima de pedidos % da quantidade maxima de pedidos nos ultimos 7 dias numero de pedidos numero de pedidos nos ultimos 7 dias % dos pedidos de paginas % dos pedidos de paginas nos ultimos 7 dias % do numero maximo de pedidos de paginas % do numero maximo de pedidos de paginas nos ultimos 7 dias numero de pedidos de paginas numero de pedidos de paginas nos ultimos 7 dias % dos pedidos redireccionados % dos pedidos redireccionados nos ultimos 7 dias % do numero maximo de pedidos redireccionados % do numero maximo de pedidos redireccionados nos ultimos 7 dias numero de pedidos redireccionados numero de pedidos redireccionados nos ultimos 7 dias % dos pedidos falhados % dos pedidos falhados nos ultimos 7 dias % do numero maximo de pedidos falhados % do numero maximo de pedidos falhados nos ultimos 7 dias numero de pedidos falhados numero de pedidos falhados nos ultimos 7 dias hora do ultimo pedido hora do ultimo pedido redireccionado hora do ultimo pedido falhado hora do primeiro pedido hora do primeiro pedido redireccionado hora do primeiro pedido falhado ## 3 other ways of sorting in m, f, & n por ordem alfabetica por ordem alfabetica por ordem alfabetica por ordem numerica por ordem numerica por ordem numerica desordenados desordenadas * ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary %H ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y as %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/ptadesc.txt000066400000000000000000000111551406366436600165610ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Este relatorio lista a actividade em cada ano. # Quarterly Report Este relatorio lista a actividade em cada trimestre. # Monthly Report Este relatorio lista a actividade em cada mes. # Weekly Report Este relatorio lista a actividade em cada semana. # Daily Report Este relatorio lista a actividade em cada dia. # Hourly Report Este relatorio lista a actividade em cada hora. # Quarter-Hour Report Este relatorio lista a actividade em cada quarto de hora. # Five-Minute Report Este relatorio lista a actividade em cada periodo de cinco minutos. # Daily Summary Este relatorio lista a actividade total para cada dia da semana, somada ao longo de todas semanas do relatorio. # Hourly Summary Este relatorio lista a actividade total para cada hora do dia, somada ao longo de todos os dias do relatorio. # Hour of the Week Summary Este relatorio lista a actividade total para cada hora da semana, somada ao longo de todas as semanas do relatorio. # Quarter-Hour Summary Este relatorio lista a actividade total em cada quarto de hora, somada ao longo de todos os dias do relatorio. # Five-Minute Summary Este relatorio lista a actividade total para cada periodo de cinco minutos, somada ao longo de todos os dias do relatorio. # General Summary Este relatorio contem as estatisticas globais. # Request Report Este relatorio lista os ficheiros no servidor. # Redirection Report Este relatorio lista os ficheiros que fizeram com que os pedidos fossem reencaminhados para outro ficheiro. (Geralmente as directorias sem a barra final, ou 'scripts' CGI forcaram os reencaminhamentos.) # Failure Report Este relatorio lista os ficheiros que provocaram falhas, por exemplo ficheiros nao encontrados. # File Type Report Este relatorio lista as extensoes dos ficheiros solicitados. # Directory Report Este relatorio lista as directorias cujos ficheiros foram solicitados. (Os numeros para cada directoria incluem todas as suas subdirectorias.) # Host Report Este relatorio lista os computadores que solicitaram ficheiros. # Host Redirection Report Este relatorio lista os computadores que foram redireccionados para outro ficheiro. # Host Failure Report Este relatorio lista os computadores que encontraram pedidos falhados. # Domain Report Este relatorio lista os paises dos computadores que pediram ficheiros. # Referrer Report Este relatorio lista os referenciadores (donde as pessoas seguiram ligacoes, ou paginas que incluiam as imagens deste sitio). # Referring Site Report Este relatorio lista os servidores donde as pessoas seguiram ligacoes. # Redirected Referrer Report Este relatorio lista os referenciadores que provocaram reencaminhamento de pedidos. # Failed Referrer Report Este relatorio lista os referenciadores contendo ligacoes quebradas para o sitio. # Browser Report Este relatorio lista os navegadores usados pelos vistantes. # Virtual Host Report Este relatorio lista a actividade em cada um dos dominios virtuais no sitio. # Virtual Host Redirection Report Este relatorio lista os pedidos reencaminhados para cada um dos dominios virtuais. # Virtual Host Failure Report Este relatorio lista os pedidos falhados para cada um dos dominios virtuais. # User Report Este relatorio lista os utilizadores que pediram ficheiros, se os utilizadores foram autenticados ou podem ser identificados por 'cookies'. # User Redirection Report Este relatorio lista os utilizadores que foram reencaminhados para outro ficheiro. # User Failure Report Este relatorio lista os utilizadores que encontraram pedidos falhados. # Organisation Report Este relatorio lista as organizacoes dos computadores que pediram ficheiros. # Search Query Report Este relatorio lista que pesquisas as pessoas usaram nos motores de pesquisa para encontrar o sitio. # Search Word Report Este relatorio lista que palavras as pessoas usaram nos motores de pesquisa para encontrar o sitio. # Internal Search Query Report Este relatorio lista que pesquisas as pessoas usaram nos 'scripts' do sitio. # Internal Search Word Report Este relatorio lista que palavras as pessoas usaram nos 'scripts' do sitio. # Browser Summary Este relatorio lista os fabricantes dos navegadores dos visitantes. # Operating System Report Este relatorio lista os sistemas operativos usados pelos visitantes. # File Size Report Este relatorio lista os tamanhos dos ficheiros. # Status Code Report Este relatorio lista os codigos de estado HTTP de todos os pedidos. # Processing Time Report Este relatorio lista os tempos gastos a processar os pedidos bem sucedidos. analog-ce-6.0.17/lang/ptadom.tab000066400000000000000000000117331406366436600163530ustar00rootroot00000000000000ad 2 Andorra ae 3 Emiratos Arabes Unidos af 1 Afeganistao ag 2 Antigua e Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antilhas Holandesas ao 1 Angola aq 1 Antarctida ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijao ba 3 Bosnia Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgica bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benim bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasil bs 1 Bahamas bt 1 Butao bv 1 Ilha Bouvet bw 1 Botswana by 1 Lituania bz 1 Belize ca 3 Canada cc 1 Ilhas Cocos (Keeling) cd 1 Congo cf 1 Republica Centro-Africana cg 1 Congo ch 2 Suica ci 1 Costa do Marfim ck 1 Ilhas Cook cl 2 Chile cm 1 Camaroes cn 3 China co 3 Colombia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Ilha Christmas cy 3 Chipre cz 2 Republica Theca de 2 Alemanha dj 1 Djibuti dk 2 Dinamarca dm 2 Dominica do 3 Republica Dominicana dz 1 Argelia ec 3 Equador edu 2 Educacional ee 2 Estonia eg 3 Egito eh 1 Saara Oriental er 1 Eritreia es 2 Espanha et 1 Etiopia fi 2 Finlandia fj 3 Fiji fk 1 Ilhas Malvinas (Falkland) fm 1 Estados Federados da Micronesia fo 1 Ilhas Faroe fr 2 Franca fx 1 Franca (Territorio Europeu) ga 1 Gabao gb 1 Gra-Bretanha gd 1 Granada ge 1 Georgia gf 1 Guiana Francesa gg 1 Ilha de Guernesey gh 3 Gana gi 1 Gibraltar gl 1 Gronelandia gm 1 Gambia gn 1 Guine gov 2 Governo norte-americano gp 1 Ilha de Guadalupe gq 1 Guine Equatorial gr 2 Grecia gs 1 Ilhas de Georgia do Sul e Sandwich do Sul gt 3 Guatemala gu 1 Ilha de Guam gw 1 Guine-Bissau gy 1 Guiana (ex. Guiana Inglesa) hk 3 Hong Kong hm 1 Ilhas Heard e McDonald hn 2 Honduras hr 2 Croacia ht 1 Haiti hu 2 Hungria id 3 Indonesia ie 2 Irlanda il 3 Israel im 1 Ilha de Man in 3 India int 1 Internacional io 1 Territorio Indico-britanico iq 1 Iraque ir 1 Irao is 2 Islandia it 2 Italia je 1 Ilha de Jersey jm 3 Jamaica jo 3 Jordania jp 3 Japao ke 3 Quenia kg 1 Kyrgyzstan kh 1 Camboja ki 1 Kiribati km 1 Ilhas Comores kn 1 Ilhas Saint Kitts e Nevis kp 1 Coreia do Norte kr 3 Coreia do Sul kw 3 Kuwait ky 1 Ilhas Cayman kz 1 Cazaquistao la 1 Laos lb 3 Libano lc 1 Ilha de Santa Lucia li 2 Liechtenstein lk 1 Sri-Lanka lr 1 Liberia ls 1 Lesoto lt 2 Lituania lu 2 Luxemburgo lv 2 Letonia ly 1 Libia ma 1 Marrocos mc 2 Principado de Monaco md 1 Moldavia mg 1 Madagascar mh 1 Ilhas Marshall mil 2 Militar norte-americano mk 3 Macedonia (Antiga Jugoslavia) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macau mp 1 Ilhas Marianas do Norte mq 1 Martinica mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Ilhas Mauricias mv 1 Ilhas Maldivas mw 1 Malaui mx 3 Mexico my 3 Malasia mz 1 Mocambique na 1 Namibia nc 1 Nova Caledonia ne 1 Niger net 2 Redes nf 1 Ilha Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Holanda no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Niue (Polinesia) nz 3 Nova Zelandia om 1 Oma org 2 Organizacoes nao-governamentais pa 3 Panama pe 3 Peru pf 1 Polinesia Francesa pg 3 Papua Nova Guine ph 3 Filipinas pk 3 Paquistao pl 3 Polônia pm 1 Ilhas Saint Pierre e Miquelon pn 1 Ilha Pitcairn pr 1 Porto Rico ps 3 Palestina pt 2 Portugal pw 1 Palau py 3 Paraguai qa 1 Qatar re 1 Ilhas Reuniao ro 2 Romenia ru 2 Russia rw 1 Ruanda sa 3 Arabia Saudita sb 1 Ilhas Salomao sc 1 Ilhas Seychelles sd 1 Sudao se 2 Suecia sg 3 Singapura sh 1 Ilha de Santa Helena si 2 Eslovenia sj 1 Ilhas Svalbard e Jan Mayen sk 2 Eslovaquia sl 1 Serra Leoa sm 1 Principado de San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Sao Tome e Principe su 2 Antiga Uniao Sovietica sv 3 El Salvador sy 1 Siria sz 1 Suazilandia tc 1 Ilhas Turks e Caicos td 1 Chade tf 1 Territorios Franceses do Ultramar tg 1 Togo th 3 Tailandia tj 1 Tadjiquistao tk 1 Ilha Tokelau tl 1 Timor Leste tm 1 Turquemenistao tn 1 Tunisia to 1 Tonga tp 1 Timor Leste tr 3 Turquia tt 3 Trinidade e Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ucrania ug 3 Uganda uk 3 Reino Unido um 1 Territorios americanos do ultramar us 4 Estados Unidos da America uy 3 Uruguai uz 1 Uzbequistao va 1 Cidade do Vaticano vc 1 Ilhas de Saint Vincent e Grenadines ve 3 Venezuela vg 1 Ilhas Virgens Britanicas vi 1 Ilhas Virgens vn 1 Vietname vu 1 Vanuatu wf 1 Ilhas Wallis e Fortuna ws 1 Samoa ye 1 Iemen yt 1 Ilha Mayotte yu 3 Jugoslavia za 3 Africa do Sul zm 1 Zambia zr 1 Republica Democratica do Congo zw 3 Zimbabue analog-ce-6.0.17/lang/ptdesc.txt000066400000000000000000000111551406366436600164200ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Este relatório lista a actividade em cada ano. # Quarterly Report Este relatório lista a actividade em cada trimestre. # Monthly Report Este relatório lista a actividade em cada mês. # Weekly Report Este relatório lista a actividade em cada semana. # Daily Report Este relatório lista a actividade em cada dia. # Hourly Report Este relatório lista a actividade em cada hora. # Quarter-Hour Report Este relatório lista a actividade em cada quarto de hora. # Five-Minute Report Este relatório lista a actividade em cada período de cinco minutos. # Daily Summary Este relatório lista a actividade total para cada dia da semana, somada ao longo de todas semanas do relatório. # Hourly Summary Este relatório lista a actividade total para cada hora do dia, somada ao longo de todos os dias do relatório. # Hour of the Week Summary Este relatório lista a actividade total para cada hora da semana, somada ao longo de todas as semanas do relatório. # Quarter-Hour Summary Este relatório lista a actividade total em cada quarto de hora, somada ao longo de todos os dias do relatório. # Five-Minute Summary Este relatório lista a actividade total para cada período de cinco minutos, somada ao longo de todos os dias do relatório. # General Summary Este relatório contém as estatísticas globais. # Request Report Este relatório lista os ficheiros no servidor. # Redirection Report Este relatório lista os ficheiros que fizeram com que os pedidos fossem reencaminhados para outro ficheiro. (Geralmente as directorias sem a barra final, ou 'scripts' CGI forçaram os reencaminhamentos.) # Failure Report Este relatório lista os ficheiros que provocaram falhas, por exemplo ficheiros não encontrados. # File Type Report Este relatório lista as extensões dos ficheiros solicitados. # Directory Report Este relatório lista as directorias cujos ficheiros foram solicitados. (Os números para cada directoria incluem todas as suas subdirectorias.) # Host Report Este relatório lista os computadores que solicitaram ficheiros. # Host Redirection Report Este relatório lista os computadores que foram redireccionados para outro ficheiro. # Host Failure Report Este relatório lista os computadores que encontraram pedidos falhados. # Domain Report Este relatório lista os países dos computadores que pediram ficheiros. # Referrer Report Este relatório lista os referenciadores (donde as pessoas seguiram ligações, ou páginas que incluiam as imagens deste sítio). # Referring Site Report Este relatório lista os servidores donde as pessoas seguiram ligações. # Redirected Referrer Report Este relatório lista os referenciadores que provocaram reencaminhamento de pedidos. # Failed Referrer Report Este relatório lista os referenciadores contendo ligações quebradas para o sítio. # Browser Report Este relatório lista os navegadores usados pelos vistantes. # Virtual Host Report Este relatório lista a actividade em cada um dos domínios virtuais no sítio. # Virtual Host Redirection Report Este relatório lista os pedidos reencaminhados para cada um dos domínios virtuais. # Virtual Host Failure Report Este relatório lista os pedidos falhados para cada um dos domínios virtuais. # User Report Este relatório lista os utilizadores que pediram ficheiros, se os utilizadores foram autenticados ou podem ser identificados por 'cookies'. # User Redirection Report Este relatório lista os utilizadores que foram reencaminhados para outro ficheiro. # User Failure Report Este relatório lista os utilizadores que encontraram pedidos falhados. # Organisation Report Este relatório lista as organizações dos computadores que pediram ficheiros. # Search Query Report Este relatório lista que pesquisas as pessoas usaram nos motores de pesquisa para encontrar o sítio. # Search Word Report Este relatório lista que palavras as pessoas usaram nos motores de pesquisa para encontrar o sítio. # Internal Search Query Report Este relatório lista que pesquisas as pessoas usaram nos 'scripts' do sítio. # Internal Search Word Report Este relatório lista que palavras as pessoas usaram nos 'scripts' do sítio. # Browser Summary Este relatório lista os fabricantes dos navegadores dos visitantes. # Operating System Report Este relatório lista os sistemas operativos usados pelos visitantes. # File Size Report Este relatório lista os tamanhos dos ficheiros. # Status Code Report Este relatório lista os códigos de estado HTTP de todos os pedidos. # Processing Time Report Este relatório lista os tempos gastos a processar os pedidos bem sucedidos. analog-ce-6.0.17/lang/ptdom.tab000066400000000000000000000117331406366436600162120ustar00rootroot00000000000000ad 2 Andorra ae 3 Emirados Árabes Unidos af 1 Afeganistão ag 2 Antígua e Barbuda ai 1 Anguilla al 1 Albânia am 2 Arménia an 1 Antilhas Holandesas ao 1 Angola aq 1 Antarctida ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Áustria au 3 Austrália aw 1 Aruba az 1 Azerbaijão ba 3 Bósnia Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Bélgica bf 1 Burkina Faso bg 2 Bulgária bh 1 Bahrain bi 1 Burundi bj 1 Benim bm 1 Bermuda bn 1 Brunei bo 3 Bolívia br 3 Brasil bs 1 Bahamas bt 1 Butão bv 1 Ilha Bouvet bw 1 Botswana by 1 Lituânia bz 1 Belize ca 3 Canadá cc 1 Ilhas Cocos (Keeling) cd 1 Congo cf 1 República Centro-Africana cg 1 Congo ch 2 Suíça ci 1 Costa do Marfim ck 1 Ilhas Cook cl 2 Chile cm 1 Camarões cn 3 China co 3 Colômbia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Cabo Verde cx 2 Ilha Christmas cy 3 Chipre cz 2 República Theca de 2 Alemanha dj 1 Djibuti dk 2 Dinamarca dm 2 Dominica do 3 República Dominicana dz 1 Argélia ec 3 Equador edu 2 Educacional ee 2 Estónia eg 3 Egito eh 1 Saara Oriental er 1 Eritreia es 2 Espanha et 1 Etiópia fi 2 Finlândia fj 3 Fiji fk 1 Ilhas Malvinas (Falkland) fm 1 Estados Federados da Micronésia fo 1 Ilhas Faroe fr 2 França fx 1 França (Território Europeu) ga 1 Gabão gb 1 Grã-Bretanha gd 1 Granada ge 1 Geórgia gf 1 Guiana Francesa gg 1 Ilha de Guernesey gh 3 Gana gi 1 Gibraltar gl 1 Gronelândia gm 1 Gâmbia gn 1 Guiné gov 2 Governo norte-americano gp 1 Ilha de Guadalupe gq 1 Guiné Equatorial gr 2 Grécia gs 1 Ilhas de Geórgia do Sul e Sandwich do Sul gt 3 Guatemala gu 1 Ilha de Guam gw 1 Guiné-Bissau gy 1 Guiana (ex. Guiana Inglesa) hk 3 Hong Kong hm 1 Ilhas Heard e McDonald hn 2 Honduras hr 2 Croácia ht 1 Haiti hu 2 Hungria id 3 Indonésia ie 2 Irlanda il 3 Israel im 1 Ilha de Man in 3 Índia int 1 Internacional io 1 Território Índico-britânico iq 1 Iraque ir 1 Irão is 2 Islândia it 2 Itália je 1 Ilha de Jersey jm 3 Jamaica jo 3 Jordânia jp 3 Japão ke 3 Quénia kg 1 Kyrgyzstan kh 1 Camboja ki 1 Kiribati km 1 Ilhas Comores kn 1 Ilhas Saint Kitts e Nevis kp 1 Coreia do Norte kr 3 Coreia do Sul kw 3 Kuwait ky 1 Ilhas Cayman kz 1 Cazaquistão la 1 Laos lb 3 Líbano lc 1 Ilha de Santa Lucia li 2 Liechtenstein lk 1 Sri-Lanka lr 1 Libéria ls 1 Lesoto lt 2 Lituânia lu 2 Luxemburgo lv 2 Letónia ly 1 Líbia ma 1 Marrocos mc 2 Principado de Mónaco md 1 Moldávia mg 1 Madagascar mh 1 Ilhas Marshall mil 2 Militar norte-americano mk 3 Macedónia (Antiga Jugoslávia) ml 1 Mali mm 1 Myanmar mn 1 Mongólia mo 1 Macau mp 1 Ilhas Marianas do Norte mq 1 Martinica mr 1 Mauritânia ms 1 Montserrat mt 3 Malta mu 1 Ilhas Maurícias mv 1 Ilhas Maldivas mw 1 Malaui mx 3 México my 3 Malásia mz 1 Moçambique na 1 Namíbia nc 1 Nova Caledónia ne 1 Níger net 2 Redes nf 1 Ilha Norfolk ng 1 Nigéria ni 3 Nicarágua nl 2 Holanda no 2 Noruega np 1 Nepal nr 1 Nauru nu 2 Niue (Polinésia) nz 3 Nova Zelândia om 1 Omã org 2 Organizações não-governamentais pa 3 Panamá pe 3 Peru pf 1 Polinésia Francesa pg 3 Papua Nova Guiné ph 3 Filipinas pk 3 Paquistão pl 3 Polônia pm 1 Ilhas Saint Pierre e Miquelon pn 1 Ilha Pitcairn pr 1 Porto Rico ps 3 Palestina pt 2 Portugal pw 1 Palau py 3 Paraguai qa 1 Qatar re 1 Ilhas Reunião ro 2 Romênia ru 2 Rússia rw 1 Ruanda sa 3 Arábia Saudita sb 1 Ilhas Salomão sc 1 Ilhas Seychelles sd 1 Sudão se 2 Suécia sg 3 Singapura sh 1 Ilha de Santa Helena si 2 Eslovênia sj 1 Ilhas Svalbard e Jan Mayen sk 2 Eslováquia sl 1 Serra Leoa sm 1 Principado de San Marino sn 1 Senegal so 1 Somália sr 1 Suriname st 1 São Tomé e Príncipe su 2 Antiga União Soviética sv 3 El Salvador sy 1 Síria sz 1 Suazilândia tc 1 Ilhas Turks e Caicos td 1 Chade tf 1 Territórios Franceses do Ultramar tg 1 Togo th 3 Tailândia tj 1 Tadjiquistão tk 1 Ilha Tokelau tl 1 Timor Leste tm 1 Turquemenistão tn 1 Tunísia to 1 Tonga tp 1 Timor Leste tr 3 Turquia tt 3 Trinidade e Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzânia ua 3 Ucrânia ug 3 Uganda uk 3 Reino Unido um 1 Territórios americanos do ultramar us 4 Estados Unidos da América uy 3 Uruguai uz 1 Uzbequistão va 1 Cidade do Vaticano vc 1 Ilhas de Saint Vincent e Grenadines ve 3 Venezuela vg 1 Ilhas Virgens Britânicas vi 1 Ilhas Virgens vn 1 Vietname vu 1 Vanuatu wf 1 Ilhas Wallis e Fortuna ws 1 Samoa ye 1 Iémen yt 1 Ilha Mayotte yu 3 Jugoslávia za 3 África do Sul zm 1 Zâmbia zr 1 República Democrática do Congo zw 3 Zimbabué analog-ce-6.0.17/lang/ro.lng000066400000000000000000000317201406366436600155170ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. Dum Lun Mar Mie Joi Vin Sam Ian Feb Mar Apr Mai Iun Iul Aug Sep Oct Noi Dec ## Next some standard common words. ## Abbreviation for "week beginning" sapt incepind cu ++year++ ## Quarter of a year ++quarter++ luna zi zile ora minut minute secunda seconde bit biti ## ?bytes represents kbytes, Mbytes etc. ++?bytes++ cerere cereri data ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 data ora ++time++ data initiala ora initiala ultima data ultima ora fisier fisiere host host-uri host virtual host-uri virtuale director directoare domeniu domenii organizatie organizatii extensie extensii URL URL-uri browser browsere SO SO-uri ## (= operating system, operating systems) marime termen cautare termeni cautare site site-uri utilizator utilizatori cod status coduri status Statistica pentru ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sumar General ## The time reports, plus "busiest" strings (at the bottom of each report) ++Yearly Report++ ++Busiest year:++ ++Quarterly Report++ ++Busiest quarter:++ Raport Lunar Luna de virf: Raport Saptaminal Saptaina de virf: incepind cu Sumar Zilnic Raport Zilnic Ziua ce mai aglomerata: Raport Orar Sumar Orar ++Hour of the Week Summary++ Ora de virf: Raport la un sfert de ora ++Quarter-Hour Summary++ Perioada de virf: Raport la 5 minute ++Five-Minute Summary++ Perioada de virf: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Raport Host-uri host host-uri n ++Host Redirection Report++ ++host++ ++hosts++ ++n++ ++Host Failure Report++ ++host++ ++hosts++ ++n++ Raport Directoare director directoare n Raport pe Tipuri de Fisiere extensie extensii n Raport Cereri fisier fisiere n Raport Redirectionari fisier filsiere n Raport Erori fisier fisiere n Raport Refererinte referinta la URL referinta la URL-uri n Raport Referinte la Sit-uri referinta la sit referinte la sit-uri n Raport Referinte Redirectionate URL referinta URL-uri referinta n Raport Erori Referinte URL referinta URL-uri referinta n Raport Cautari cautare cautari n Raport Cautari Cuvinte cautare cuvinte cautari cuvinte n ++Internal Search Query Report++ ++query++ ++queries++ ++n++ ++Internal Search Word Report++ ++query word++ ++query words++ ++n++ Raport Host Virtual host virtual host-uri virtuale n ++Virtual Host Redirection Report++ ++virtual host++ ++virtual hosts++ ++n++ ++Virtual Host Failure Report++ ++virtual host++ ++virtual hosts++ ++n++ Raport Utilizatori utilizator utilizatori n ++User Redirection Report++ ++user++ ++users++ ++n++ Raport Erori Utilizator utilizator utilizatori n Sumar Browser browser browsere n Raport Browser browser browsere n Raport Sisteme de Operare sistem de operare sisteme de operare n Raport Domeniu domeniu domenii n Raport Organizatii organizatie organizatii n Raport Cod Status cod status coduri status n Raport Timp de Procesare Raport Marimi Fisiere ## Used at the bottom of the report Aceasta analiza a fost efectuata cu Timp de rulare Sub 1 ## Used in the time reports Fiecare unitate reprezinta parti de cerere pentru o pagina cereri de pagini ## Used at the bottom of each non-time report: need m, f & n genders ne-listat ne-listat ne-listat ## Used on the pie charts: again need m, f & n genders ++*++ ++*++ ++Other++ ## Used at the top of the report Program pornit la Analiza ceruta de la la ## Used in the General Summary Cereri satisfacute Media cererilor satisfacute zilnic Creri de pagina satisfacute Media cererilor de pagini satisfacute zilnic Linii din log fara coduri status Cereri esuatee Cereri redirectionate Cereri cu cod status informational Fisiere distincte cerute Servere distincte servite Linii de log corupte Intrari nedorite in log Date transferate Media transferurilor zilnice Cifrele din paranteze se refera la 7 zile pin la ultimele 7 zile Vezi: Inceput ## Some special phrases for particular reports. [adrese numerice nerezolvate] [domeniu negasit] [domeniu necunoscut] [director de baza] [fara director] [fara extensie] [directoare] Windows necunoscut Unix necunoscut ++Robots++ SO necunoscut ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #cer. ++7-day reqs++ %cer. ++%7-day reqs++ #pagini ++7-day pages++ %pagini ++%7-day pages++ bytes ++?bytes++ ++7-day bytes++ ++7-day ?bytes++ %bytes ++%7-day bytes++ nr. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Lista primelor %s * * Lista primelor %d %s * * Lista %s ## "by" in the phrase "listing the top 3 files BY number of requests" dupa ## All requests WITH AT LEAST 10 requests cu cel putin ## Different ways of doing floors ++request in the last 7 days++ ++requests in the last 7 days++ ++request for a page in the last 7 days++ ++requests for pages in the last 7 days++ cerere redirectionata cereri redirectionate ++redirected request in the last 7 days++ ++redirected requests in the last 7 days++ cerere esuata cereri esuate ++failed request in the last 7 days++ ++failed requests in the last 7 days++ % trafic ++% of the traffic in the last 7 days++ % trafic maxim ++% of the maximum amount of traffic in the last 7 days++ ++byte of traffic++ biti trafic ## ?bytes represents kbytes, Mbytes etc. ++?bytes of traffic++ ++byte of traffic in the last 7 days++ ++bytes of traffic in the last 7 days++ ++?bytes of traffic in the last 7 days++ cerute din cu cereri redirectate din cu cereri esuate din ++with first request since++ ++with first redirected request since++ ++with first failed request since++ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortate dupa ## Used at the top of each report ++This report contains data from++ ## Used in pie charts ++The wedges are plotted by++ ## different ways of sorting trafic ++the amount of traffic in the last 7 days++ % de cereri ++% of the requests in the last 7 days++ % nr. maxim de cereri ++% of the maximum number of requests in the last 7 days++ numarul de cereri ++the number of requests in the last 7 days++ % de cereri pagini ++% of the requests for pages in the last 7 days++ % maxim de cereri de pagini ++% of the maximum number of requests for pages in the last 7 days++ numar de cereri de pagini ++the number of requests for pages in the last 7 days++ % de cereri redirectionate ++% of the redirected requests in the last 7 days++ % maxim de cereri redirectionate ++% of the maximum number of redirected requests in the last 7 days++ numar de cereri redirectionate ++the number of redirected requests in the last 7 days++ % de cereri nesatisfacute ++% of the failed requests in the last 7 days++ % maxim de cereri nesatisfacute ++% of the maximum number of failed requests in the last 7 days++ numar de cereri nesatisfacute ++the number of failed requests in the last 7 days++ ora ultimei cereri ora ultimei cereri redirectionate ora ultimei cereri esuate ++the time of the first request++ ++the time of the first redirected request++ ++the time of the first failed request++ ## 3 other ways of sorting in m, f, & n * * sortate alfabetic * * sortate numeric * * nesortate ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. ++,++ ++.++ ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. ++am++ ++pm++ ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d-%m-%Y %h:%n ## "Program started at" and "Analysed requests from" %d-%m-%Y %h:%n ## In Daily Report %d-%m-%y ## In Daily Summary ++%w++ ## In Hourly Report %d-%m-%y %h:%n%x%i:%o ## In Hourly Summary ++%h++ ## In Hour of the Week Summary ++%w %H:%n%x%I:%o++ ## In Quarter-Hour and Five-Minute Reports %d-%m-%y %h:%n%x%i:%o ## In Quarter-Hour and Five-Minute Summaries ++%H:%n%x%I:%o++ ## In Weekly Report %d-%m-%y ## In Monthly Report %m-%Y ## In Quarterly Report ++%m%x%l %Y++ ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report ++%Y++ ## The date (d) column in non-time reports %d-%m-%y ## The date & time (D) column in non-time reports %d-%m-%y %h:%n ## In non-time reports: "including all files with requests since [date]" %d-%m-%y la %h:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continua cu cererea 101 Schimb protocoalele 1xx [Informatii diverse] 200 OK 201 Creat 202 Acceptat pt. procesare ulterioara 203 Informatie Non-authoritativa 204 OK, dar nimic de trimis 205 Reset document 206 Continut partial 2xx [Diverse succese] 300 Documente multiple disponibile 301 Document mutat permanent 302 Document gasit in alta parte 303 Vezi alt document 304 Nemodificat de la ultima cerere 305 Filoseste proxy 306 Schimba proxy 307 Document motat temporar 3xx [Diverse redirectari] 400 Cerere gresita 401 Authentificare necesara 402 Plata necesara 403 Access interzis 404 Documentul nu a fost gasit 405 Metoda neacceptata 406 Document inacceptabil pt. client 407 Autentificare Proxy necesara 408 Timeout cerere 409 Cererea este in conflict cu statusul resurselor 410 Documentul sters definitiv 411 Lungime necesara 412 Preconditie esuata 413 Cerere prea lunga 414 Nume fisier solicitat prea lung 415 Tip media nesuportat 416 Domeniu cerut nu e valid 417 Asteptare esuata 4xx [Diverse erori client/utilizator] 500 Eroare Interna a Serverului 501 Tip de cerere nesuportata 502 Eroare la serverul amonte 503 Serviciu indisponibil temporar 504 Gateway timeout 505 Versiune HTTP version ne-suportata 506 Redirectare esuata 5xx [Diverse erori ale Serverului] xxx [Necunoscut] analog-ce-6.0.17/lang/rodom.tab000066400000000000000000000114021406366436600162000ustar00rootroot00000000000000ad 2 Andora ae 3 Emiratele Arabe Unite af 1 Afganistan ag 2 Antigua si Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Antilele Olandeze ao 1 Angola aq 1 Antarctica ar 3 Argentina arpa 1 Arpanet as 1 Samoa Americana at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaidjan ba 3 Bosnia-Hetegovina bb 2 Barbados bd 1 Bangladej be 3 Belgia bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazila bs 1 Bahama bt 1 Bhutan bv 1 Insula Bouvet bw 1 Botswana by 1 Bielorusia bz 1 Belize ca 3 Canada cc 1 Insulele Cocos (Keeling) cd 1 Republica Democrata Congo cf 1 Republica Centr-Africana cg 1 Congo ch 2 Elvetia ci 1 Coasta de Fildes (Cote d'Ivoire) ck 1 Insulele Cook cl 2 Chile cm 1 Camerun cn 3 China co 3 Columbia com 2 Comercial cr 3 Costa Rica cu 2 Cuba cv 1 Capul Verde cx 2 Insula Christmas cy 3 Cipru cz 2 Republica Ceha de 2 Germania dj 1 Djibouti dk 2 Danemarca dm 2 Dominica do 3 Republica Dominicana dz 1 Algeria ec 3 Ecuador edu 2 Educational ee 2 Estonia eg 3 Egipt eh 1 Sahara Vestica er 1 Eritrea es 2 Spania et 1 Etiopia fi 2 Finlanda fj 3 Fiji fk 1 Insulele Falkland fm 1 Micronesia fo 1 Insulele Faroe fr 2 Franta fx 1 Franta (Europa) ga 1 Gabon gb 1 Marea Britanie gd 1 Grenada ge 1 Georgia gf 1 Guiana Franceza gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenlanda gm 1 Gambia gn 1 Guinea gov 2 Guvern gp 1 Guadelupa (France) gq 1 Guinea Ecuatoriala gr 2 Grecia gs 1 Insulele S. Georgia si S. Sandwich gt 3 Guatemala gu 1 Guam (USA) gw 1 Guinea Bissau gy 1 Guiana hk 3 Hong Kong hm 1 Insulele Heard and McDonald hn 2 Honduras hr 2 Croatia ht 1 Haiti hu 2 Ungaria id 3 Indonezia ie 2 Irlanda il 3 Israel im 1 Isle of Man in 3 India int 1 International io 1 British Indian Ocean iq 1 Iraq ir 1 Iran is 2 Islanda it 2 Italia je 1 Jersey jm 3 Jamaica jo 3 Iordania jp 3 Japonia ke 3 Kenya kg 1 Kirgizstan kh 1 Cambogia ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts & Nevis kp 1 Corea de Nord kr 3 Corea de Sud kw 3 Kuweit ky 1 Insulele Cayman kz 1 Kazakstan la 1 Laos lb 3 Liban lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lituania lu 2 Luxemburg lv 2 Lituania ly 1 Libia ma 1 Maroc mc 2 Monaco md 1 Moldova mg 1 Madagascar mh 1 Insulele Marshall mil 2 Militar mk 3 Macedonia ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Insulele Northern Mariana mq 1 Martinica (Franceza) mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldive mw 1 Malawi mx 3 Mexic my 3 Malaezia mz 1 Mozambic na 1 Namibia nc 1 Noua Caledonie (Franceza) ne 1 Niger net 2 Network nf 1 Insula Norfolk ng 1 Nigeria ni 3 Nicaragua nl 2 Olanda no 2 Norvegia np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Noua Zeelanda om 1 Oman org 2 Organizatii Non-Profit pa 3 Panama pe 3 Peru pf 1 Polinezia (Franceza) pg 3 Papua Noua Guinee ph 3 Filipine pk 3 Pakistan pl 3 Polonia pm 1 Saint Pierre and Miquelon pn 1 Insula Pitcairn pr 1 Porto Rico pt 2 Portugalia pw 1 Palau py 3 Paraguai qa 1 Qatar re 1 Reunion (Franceza) ro 2 Romania ru 2 Rusia rw 1 Rwanda sa 3 Arabia Saudita sb 1 Insulele Solomon sc 1 Seichele sd 1 Sudan se 2 Suedia sg 3 Singapore sh 1 Saint Helena si 2 Slovenia sj 1 Insulele Svalbard and Jan Mayen sk 2 Republica Slovaca sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Saint Tome and Principe su 2 Fosta URSS sv 3 El Salvador sy 1 Siria sz 1 Swaziland tc 1 Insulele Turks and Caicos td 1 Ciad tf 1 Teritoriile Franceze de Sud tg 1 Togo th 3 Tailanda tj 1 Tadjikistan tk 1 Tokelau tl 1 Timor de Est tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 Timor de Est tr 3 Turcia tt 3 Trinidad and Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Marea Britanie um 1 Insule minore SUA us 4 Statele Unite uy 3 Uruguai uz 1 Uzbekistan va 1 Vatican vc 1 Saint Vincent & Grenadines ve 3 Venezuela vg 1 Insulele Virgin (Britanice) vi 1 Insulele Virgin (SUA) vn 1 Vietnam vu 1 Vanuatu wf 1 Insulele Wallis si Futuna ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Iugoslavia za 3 Africa de Sud zm 1 Zambia zr 1 Republica Democrata Congo zw 3 Zimbabue analog-ce-6.0.17/lang/ru.lng000066400000000000000000000330231406366436600155230ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Russification made by Boris Litvinenko ## weber@vips.icn.gov.ru http://www-vips.icn.gov.ru ## ## Updates to version 5 and corrects by Denis Zhukov at 26/03/2002 ## mailto: sav@iclub.nsu.ru ## ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP KOI8-R ## Abbreviations for the day and month names. ×Ó. ÐÎ. ×Ô. ÓÒ. ÞÔ. ÐÔ. ÓÂ. ÑÎ× ÆÅ× ÍÁÒ ÁÐÒ ÍÁÑ ÉÀÎ ÉÀÌ Á×Ç ÓÅÎ ÏËÔ ÎÏÑ ÄÅË ## Next some standard common words. ## Abbreviation for "week beginning" ÎÁÞÁÌÏ ÎÅÄÅÌÉ ÇÏÄ ## Quarter of a year Ë×ÁÒÔÁÌ ÍÅÓÑà ÄÅÎØ ÄÎÅÊ ÞÁÓ ÍÉÎÕÔÁ ÍÉÎÕÔ ÓÅËÕÎÄÁ ÓÅËÕÎÄ ÂÁÊÔ ÂÁÊÔ ## ?bytes represents kbytes, Mbytes etc. ?ÂÁÊÔ ÚÁÐÒÏÓÁ ÚÁÐÒÏÓÏ× ÄÁÎÎÙÈ ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ÄÁÔÁ ×ÒÅÍÑ ×ÒÅÍÑ ÐÅÒ×ÁÑ ÄÁÔÁ ÐÅÒ×ÏÅ ×ÒÅÍÑ ÐÏÓÌÅÄÎÑÑ ÄÁÔÁ ÐÏÓÌÅÄÎÅÅ ×ÒÅÍÑ ÆÁÊÌ ÆÁÊÌÏ× ÈÏÓÔ ÈÏÓÔÏ× ×ÉÒÔÕÁÌØÎÙÊ ÈÏÓÔ ×ÉÒÔÕÁÌØÎÙÈ ÈÏÓÔÏ× ÄÉÒÅËÔÏÒÉÑ ÄÉÒÅËÔÏÒÉÊ ÄÏÍÅÎ ÄÏÍÅÎÏ× ÏÒÇÁÎÉÚÁÃÉÑ ÏÒÇÁÎÉÚÁÃÉÊ ÒÁÓÛÉÒÅÎÉÅ ÒÁÓÛÉÒÅÎÉÊ URL URLÅÊ ÂÒÁÕÚÅÒ ÂÒÁÕÚÅÒÏ× ïó OS's ## (= operating system, operating systems) ÒÁÚÍÅÒ ÐÏÉÓËÏ×ÏÅ ×ÙÒÁÖÅÎÉÅ ÐÏÉÓËÏ×ÙÅ ×ÙÒÁÖÅÎÉÑ ÓÁÊÔ ÓÁÊÔÏ× ËÌÉÅÎÔ ËÌÉÅÎÔÏ× ËÏÄ ÓÔÁÔÕÓ ÓÔÁÔÕÓ ËÏÄÙ óÔÁÔÉÓÔÉËÁ ÏÂÒÁÝÅÎÉÊ Ë ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. ËÉÌÏ ÍÅÇÁ ÇÉÇÁ ÔÅÒÁ ÐÅÔÁ ÅËÚÁ ÚÅÔÁ ÊÏÔÁ ## Shorter versions of the same prefixes for column headings Ë í ç ô ð å ú ê ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports ïÓÎÏ×ÎÁÑ éÎÆÏÒÍÁÃÉÑ ## The time reports, plus "busiest" strings (at the bottom of each report) óÔÁÒÙÊ ÏÔÞÅÔ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÙÊ ÇÏÄ: ë×ÁÒÔÁÌØÎÙÊ ÏÔÞÅÔ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÙÊ Ë×ÁÒÔÁÌ: óÔÁÔÉÓÔÉËÁ ÐÏ ÍÅÓÑÃÁÍ îÁÉÂÏÌØÛÅÅ ËÏÌÉÞÅÓÔ×Ï ÏÂÒÁÝÅÎÉÊ × óÔÁÔÉÓÔÉËÁ ÐÏ ÎÅÄÅÌÑÍ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÁÑ ÎÅÄÅÌÑ: ÎÁÞÁÌÏ ÎÅÄÅÌÉ óÔÁÔÉÓÔÉËÁ ÐÏ ÄÎÑÍ ÎÅÄÅÌÉ óÔÁÔÉÓÔÉËÁ ÐÏ ÄÎÑÍ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÙÊ ÄÅÎØ: óÔÁÔÉÓÔÉËÁ ÐÏ ×ÒÅÍÅÎÉ ÓÕÔÏË óÔÁÔÉÓÔÉËÁ ÐÏ ×ÒÅÍÅÎÉ ÓÕÔÏË óÔÁÔÉÓÔÉËÁ ÐÏ ÞÁÓÁÍ ÎÅÄÅÌÉ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÙÊ ÞÁÓ: 15-ÔÉ ÍÉÎÕÔÎÙÊ ÏÔÞÅÔ 15-ÔÉ ÍÉÎÕÔÎÙÊ ÏÔÞÅÔ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÙÅ 15 ÍÉÎ. × ÞÁÓÅ: 5-ÔÉ ÍÉÎÕÔÎÙÊ ÏÔÞÅÔ 5-ÔÉ ÍÉÎÕÔÎÙÊ ÏÔÞÅÔ îÁÉÂÏÌÅÅ ÚÁÇÒÕÖÅÎÎÙÅ 5 ÍÉÎ. × ÞÁÓÅ: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! óÔÁÔÉÓÔÉËÁ ÐÏ ÈÏÓÔÁÍ ÈÏÓÔ ÈÏÓÔÏ× n ïÔÞÅÔ Ï ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑÈ ÈÏÓÔ ÈÏÓÔÏ× n ïÔÞÅÔ Ï ÏÛÉÂËÁÈ ÈÏÓÔÁ ÈÏÓÔ ÈÏÓÔÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÄÉÒÅËÔÏÒÉÑÍ ÄÉÒÅËÔÏÒÉÑ ÄÉÒÅËÔÏÒÉÊ n óÔÁÔÉÓÔÉËÁ ÐÏ ÔÉÐÁÍ ÆÁÊÌÏ× ÒÁÓÛÉÒÅÎÉÅ ÒÁÓÛÉÒÅÎÉÊ n óÔÁÔÉÓÔÉËÁ ÐÏ ÚÁÐÒÏÓÁÍ ÆÁÊÌ ÆÁÊÌÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÒÅÄÉÒÅËÔÁÍ ÆÁÊÌ ÆÁÊÌÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÏÔËÁÚÁÍ ÆÁÊÌ ÆÁÊÌÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÓÓÙÌËÁÍ ÓÓÙÌÁÀÝÉÊÓÑ URL ÓÓÙÌÁÀÝÉÈÓÑ URLÅÊ n óÔÁÔÉÓÔÉËÁ ÐÏ ÓÓÙÌÁÀÝÉÍÓÑ ÓÁÊÔÁÍ ÓÓÙÌÁÀÝÉÊÓÑ ÓÁÊÔ ÓÓÙÌÁÀÝÉÈÓÑ ÓÁÊÔÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÐÅÒÅÎÁÐÒÁ×ÌÑÀÝÉÍ ÓÓÙÌËÁÍ ÓÓÙÌÁÀÝÉÊÓÑ URL ÓÓÙÌÁÀÝÉÈÓÑ URLÅÊ n óÔÁÔÉÓÔÉËÁ ÏÔËÁÚÏ× ÐÏ ÓÓÙÌËÁÍ ÓÙÙÌÁÀÝÉÊÓÑ URL ÓÓÙÌÁÀÝÉÈÓÑ URLs n óÔÁÔÉÓÔÉËÁ ÐÏ ÐÏÉÓËÏ×ÙÍ ÚÁÐÒÏÓÁÍ ÚÁÐÒÏÓ ÚÁÐÒÏÓÙ n óÔÁÔÉÓÔÉËÁ ÐÏ ÐÏÉÓËÏ×ÙÍ ÓÌÏ×ÁÍ ÓÌÏ×Ï ÚÁÐÒÏÓÁ ÓÌÏ×Á ÚÁÐÒÏÓÏ× n ïÔÞÅÔ Ï ×ÎÕÔÒÅÎÎÉÈ ÐÏÉÓËÏ×ÙÈ ÚÁÐÒÏÓÁÈ ÚÁÐÒÏÓ ÚÁÐÒÏÓÏ× n ïÔÞÅÔ Ï ×ÎÕÔÒÅÎÎÉÈ ÐÏÉÓËÏ×ÙÈ ÚÁÐÒÏÓÁÈ (ÉÓÐÏÌØÚÕÅÍÙÅ ÓÌÏ×Á) ÓÌÏ×Ï ÓÌÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ×ÉÒÔÕÁÌØÎÙÍ ÈÏÓÔÁÍ ×ÉÒÔÕÁÌØÎÙÊ ÈÏÓÔ ×ÉÒÔÕÁÌØÎÙÈ ÈÏÓÔÏ× n ïÔÞÅÔ Ï ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑÈ (×ÉÒÔÕÁÌØÎÙÅ ÄÏÍÅÎÙ) ×ÉÒÔÕÁÌØÎÙÊ ÄÏÍÅÎ ×ÉÒÔÕÁÌØÎÙÈ ÄÏÍÅÎÏ× n ïÔÞÅÔ Ï ÏÛÉÂËÁÈ (×ÉÒÔÕÁÌØÎÙÅ ÄÏÍÅÎÙ) ×ÉÒÔÕÁÌØÎÙÊ ÄÏÍÅÎ ×ÉÒÔÕÁÌØÎÙÈ ÄÏÍÅÎÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ËÌÉÅÎÔÁÍ ËÌÉÅÎÔ ËÌÉÅÎÔÏ× n ïÔÞÅÔ Ï ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑÈ ÐÏÌØÚÏ×ÁÔÅÌØ ÐÏÌØÚÏ×ÁÔÅÌÅÊ n óÔÁÔÉÓÔÉËÁ ÏÔËÁÚÏ× ÐÏ ËÌÉÅÎÔÁÍ ËÌÉÅÎÔ ËÌÉÎÔÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÂÒÁÕÚÅÒÁÍ (ÓÕÍÍÁÒÎÁÑ) ÂÒÁÕÚÅÒ ÂÒÁÕÚÅÒÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÂÒÁÕÚÅÒÁÍ (ÐÏÄÒÏÂÎÁÑ) ÂÒÁÕÚÅÒ ÂÒÁÕÚÅÒÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÏÐÅÒÁÃÉÏÎÎÙÍ ÓÉÓÔÅÍÁÍ ÏÐÅÒÁÃÉÏÎÎÁÑ ÓÉÓÔÅÍÁ ÏÐÅÒÁÃÉÏÎÎÙÈ ÓÉÓÔÅÍ n óÔÁÔÉÓÔÉËÁ ÐÏ ÄÏÍÅÎÁÍ ÄÏÍÅÎ ÄÏÍÅÎÏ× n óÔÁÔÉÓÔÉËÁ ÐÏ ÏÒÇÁÎÉÚÁÃÉÑÍ ÏÒÇÁÎÉÚÁÃÉÑ ÏÒÇÁÎÉÚÁÃÉÊ n óÔÁÔÉÓÔÉËÁ ÐÏ ËÏÄÕ ×ÏÚ×ÒÁÔÁ ËÏÄ ×ÏÚ×ÒÁÔÁ ËÏÄÏ× ×ÏÚ×ÒÁÔÁ n óÔÁÔÉÓÔÉËÁ ÐÏ ×ÒÅÍÅÎÉ ÏÂÒÁÂÏÔËÉ ÚÁÐÒÏÓÁ óÔÁÔÉÓÔÉËÁ ÐÏ ÒÁÚÍÅÒÁÍ ÆÁÊÌÏ× ## Used at the bottom of the report üÔÏÔ ÁÎÁÌÉÚ ×ÙÐÏÌÎÅÎ ÐÒÏÇÒÁÍÍÏÊ ÷ÒÅÍÑ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ íÅÎØÛÅ ÞÅÍ 1 ## Used in the time reports ëÁÖÄÙÊ ÓÉÍ×ÏÌ ÏÔÏÂÒÁÖÁÅÔ ÉÌÉ ÏËÏÌÏ ÜÔÏÇÏ ÏÂÒÁÝÅÎÉÅ Ë ÓÔÒÁÎÉÃÅ ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ ## Used at the bottom of each non-time report: need m, f & n genders ÎÅ ÒÁÓÐÏÚÎÁÎÏ ÎÅ ÒÁÓÐÏÚÎÁÎÏ ÎÅ ÒÁÓÐÏÚÎÁÎÏ ## Used on the pie charts: again need m, f & n genders * * ÄÒÕÇÏÅ ## Used at the top of the report ðÒÏÇÒÁÍÍÁ ÓÔÁÒÔÏ×ÁÌÁ × áÎÁÌÉÚ ÏÂÒÁÝÅÎÉÊ Ë ÓÅÒ×ÅÒÕ Ó ÐÏ ## Used in the General Summary õÓÐÅÛÎÙÈ ÏÂÒÁÝÅÎÉÊ óÒÅÄÎÅÅ ËÏÌ. ÕÓÐÅÛÎÙÈ ÏÂÒÁÝÅÎÉÊ × ÄÅÎØ õÓÐÅÛÎÙÈ ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ óÒÅÄÎÅÅ ËÏÌ. ÕÓÐÅÛÎÙÈ ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ × ÄÅÎØ óÔÒÏË ÌÏÇÆÁÊÌÁ, ÎÅ ÓÏÄÅÒÖÁÝÉÈ ËÏÄÁ ×ÏÚ×ÒÁÔÁ îÅÕÓÐÅÛÎÙÈ ÚÁÐÒÏÓÏ× ðÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× úÁÐÒÏÓÏ× Ó ËÏÄÏÍ ×ÏÚ×ÒÁÔÁ ëÏÌÉÞÅÓÔ×Ï ÚÁÐÒÏÛÅÎÎÙÈ ÆÁÊÌÏ× ëÏÌÉÞÅÓÔ×Ï ÏÂÓÌÕÖÅÎÎÙÈ ÈÏÓÔÏ× éÓÐÏÒÞÅÎÎÙÈ ÓÔÒÏË × logfile îÅÖÅÌÁÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ × ÌÏÇÆÁÊÌÅ äÁÎÎÙÈ ÐÅÒÅÄÁÎÏ óÒÅÄÎÅÅ ËÏÌ. ÐÅÒÅÄÁÎÎÙÈ ÄÁÎÎÙÈ × ÄÅÎØ úÁÐÉÓØ × ËÒÕÇÌÙÈ ÓËÏÂËÁÈ - ÄÁÎÎÙÅ ÚÁ 7 ÄÎÅÊ ÄÏ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ðÅÒÅÈÏÄ ÷×ÅÒÈ ## Some special phrases for particular reports. [ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ IP-ÁÄÒÅÓ] [ÄÏÍÅÎ ÎÅ ÏÐÒÅÄÅÌÅÎ] [ÎÅÉÚ×ÅÓÔÎÙÊ ÄÏÍÅÎ] [ËÏÒÎÅ×ÏÊ ËÁÔÁÌÏÇ] [ÎÅ ËÁÔÁÌÏÇ] [ÂÅÚ ÒÁÓÛÉÒÅÎÉÑ] [ÄÉÒÅËÔÏÒÉÉ] îÅÉÚ×ÅÓÔÎÁÑ Windows-ÓÉÓÔÅÍÁ äÒÕÇÉÅ Unix-ÓÉÓÔÅÍÙ ÒÏÂÏÔÙ îÅÉÚ×ÅÓÔÎÁÑ ïó ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) ÚÁÐÒÏÓÙ ÚÁÐÒÏÓÙ (7ÄÎÅÊ) %ÚÁÐÒ %ÚÁÐÒÏÓÙ (7 ÄÎÅÊ) ÓÔÒÁÎÉà ÓÔÒÁÎÉÃÙ (7 ÄÎÅÊ) %ÓÔÒÁÎÉà %ÓÔÒÁÎÉÃÙ (7 ÄÎÅÊ) ÂÁÊÔ ?ÂÁÊÔ ÂÁÊÔ ÚÁ 7 ÄÎÅÊ ?ÂÁÊÔ ÚÁ 7 ÄÎÅÊ %ÂÁÊÔ %ÂÁÊÔ ÚÁ 7 ÄÎÅÊ N ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ðÏËÁÚÁÎÏ ÐÅÒ×ÙÅ %s * * ðÏËÁÚÁÎÏ ÐÅÒ×ÙÅ %d %s * * óÐÉÓÏË %s ## "by" in the phrase "listing the top 3 files BY number of requests" - ## All requests WITH AT LEAST 10 requests ÎÁ ËÏÔÏÒÙÅ ÐÒÉÈÏÄÉÔØÓÑ, ËÁË ÍÉÎÉÍÕÍ ## Different ways of doing floors ÚÁÐÒÏÓ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÚÁÐÒÏÓ ÓÔÒÁÎÉà ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÚÁÐÒÏÓÏ× ÓÔÒÁÎÉà ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÊ ÚÁÐÒÏÓ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÊ ÚÁÐÒÏÓ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÎÅÕÓÐÅÛÎÙÊ ÚÁÐÒÏÓ ÎÅÕÓÐÅÛÎÙÈ ÚÁÐÒÏÓÏ× ÎÅÕÓÐÅÛÎÙÊ ÚÁÐÒÏÓ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÎÅÕÓÐÅÛÎÙÈ ÚÁÐÒÏÓÏ× Ú× ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÔÒÁÆÉËÁ % ÔÒÁÆÉËÁ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌ. ÔÒÁÆÉËÁ % ÍÁËÓÉÍÁÌØÎÏÇÏ ËÏÌ. ÔÒÁÆÉËÁ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÂÁÊÔ ÔÒÁÆÉËÁ ÂÁÊÔÏ× ÚÁ ÔÒÁÆÉË ## ?bytes represents kbytes, Mbytes etc. ?ÂÁÊÔ ÔÒÁÆÉËÁ ÂÁÊÔ ÔÒÁÆÉËÁ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÂÁÊÔ ÔÒÁÆÉËÁ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ?ÂÁÊÔ ÔÒÁÆÉËÁ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÚÁÐÒÏÛÅÎÏ Ó ÔÅÈ ÐÏÒ Ó ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÅÍ Ó Ó ÏÛÉÂËÏÊ Ó Ó ÐÅÒ×ÙÍ ÚÁÐÒÏÓÏÍ Ó Ó ÐÅÒ×ÙÍ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÍ ÚÁÐÒÏÓÏÍ Ó Ó ÐÅÒ×ÙÍ ÏÛÉÂÏÞÎÙÍ ÚÁÐÒÏÓÏÍ Ó ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ÏÔÓÏÒÔÉÒÏ×ÁÎÏ ## Used at the top of each report üÔÏÔ ÏÔÞÅÔ ÓÏÄÅÒÖÉÔ ÄÁÎÎÙÅ ÉÚ ## Used in pie charts ðÏÄÅÌÅÎÏ ÎÁ ÓÅËÔÏÒÁ ## different ways of sorting ÐÏ ÓÕÍÍÁÒÎÏÍÕ ÔÒÁÆÉËÕ ÏÂßÅÍ ÔÒÁÆÉËÁ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÚÁÐÒÏÓÁ % ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÍÁËÓÉÍÁÌØÎÏÇÏ ÞÉÓÌÁ ÚÁÐÒÏÓÏ× % ÍÁËÓÉÍÁÌØÎÏÇÏ ÞÉÓÌÁ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÐÏ ËÏÌÉÞÅÓÔ×Õ ÏÂÒÁÝÅÎÉÊ ËÏÌÉÞÅÓÔ×Ï ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ % ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ % ÍÁËÓÉÍÁÌØÎÏÇÏ ÞÉÓÌÁ ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÐÏ ËÏÌÉÞÅÓÔ×Õ ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÅ ÞÉÓÌÏ ÏÂÒÁÝÅÎÉÊ Ë ÓÔÒÁÎÉÃÁÍ ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙÈ ÚÁÐÒÏÓÏ× % ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× % ÍÁËÓÉÍÁÌØÎÏÇÏ ÞÉÓÌÁ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ËÏÌÉÞÅÓÔ×Ï ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× ËÏÌÉÞÅÓÔ×Ï ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÈ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÏÛÉÂÏÞÎÙÈ ÚÁÐÒÏÓÏ× % ÏÛÉÂÏÞÎÙÈ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ % ÍÁÓÉÍÁÌØÎÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏÞÎÙÈ ÚÁÐÒÏÓÏ× % ÍÁÓÉÍÁÌØÎÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏÞÎÙÈ ÚÁÐÒÏÓÏ× ÚÁ ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÐÏ ËÏÌÉÞÅÓÔ×Õ ÏÔËÁÚÏ× ËÏÌÉÞÅÓÔ×Ï ÏÛÉÂÏÞÎÙÈ ÚÁÐÒÏÓÏ× Ú× ÐÏÓÌÅÄÎÉÅ 7 ÄÎÅÊ ÐÏ ÄÁÔÅ ÐÏÓÌÅÄÎÅÇÏ ÄÏÓÔÕÐÁ ×ÒÅÍÑ ÐÏÓÌÅÄÎÅÇÏ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÏÇÏ ÚÁÐÒÏÓÁ ×ÒÅÍÑ ÐÏÓÌÅÄÎÅÇÏ ÏÛÉÂÏÞÎÏÇÏ ÚÁÐÒÏÓÁ ×ÒÅÍÑ ÐÅÒ×ÏÇÏ ÚÁÐÒÏÓÁ ×ÒÅÍÑ ÐÅÒ×ÏÇÏ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÏÇÏ ÚÁÐÒÏÓÁ ×ÒÅÍÑ ÐÅÒ×ÏÇÏ ÏÛÉÂÏÞÎÏÇÏ ÚÁÐÒÏÓÁ ## 3 other ways of sorting in m, f, & n * * ÏÔÓÏÒÔÉÒÏ×ÁÎÎÙÊ ÐÏ ÁÌÆÁ×ÉÔÕ * * ÏÔÓÏÒÔÉÒÏ×ÁÎÎÙÊ ÐÏ ÐÏÒÑÄËÏ×ÙÍ ÎÏÍÅÒÁÍ * * ÎÅÏÔÓÏÒÔÉÒÏ×ÁÎÎÙÊ ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %H:%n ## "Program started at" and "Analysed requests from" %w %d %m %Y %H:%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [òÁÚÌÉÞÎÁÑ ÉÎÆÏÒÍÁÃÉÑ] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/ru1.lng000066400000000000000000000331271406366436600156110ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Russification made by Boris Litvinenko ## weber@vips.icn.gov.ru http://www-vips.icn.gov.ru ## ## Updates to version 5 and corrects by Denis Zhukov at 26/03/2002 ## mailto: sav@iclub.nsu.ru ## This language file is in cp1251 (M$ Windows cyrillic) charset. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1251 ## Abbreviations for the day and month names. âñ. ïí. âò. ñð. ÷ò. ïò. ñá. ÿíâ ôåâ ìàð àïð ìàÿ èþí èþë àâã ñåí îêò íîÿ äåê ## Next some standard common words. ## Abbreviation for "week beginning" íà÷àëî íåäåëè ãîä ## Quarter of a year êâàðòàë ìåñÿö äåíü äíåé ÷àñ ìèíóòà ìèíóò ñåêóíäà ñåêóíä áàéò áàéò ## ?bytes represents kbytes, Mbytes etc. ?áàéò çàïðîñà çàïðîñîâ äàííûõ ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 äàòà âðåìÿ âðåìÿ ïåðâàÿ äàòà ïåðâîå âðåìÿ ïîñëåäíÿÿ äàòà ïîñëåäíåå âðåìÿ ôàéë ôàéëîâ õîñò õîñòîâ âèðòóàëüíûé õîñò âèðòóàëüíûõ õîñòîâ äèðåêòîðèÿ äèðåêòîðèé äîìåí äîìåíîâ îðãàíèçàöèÿ îðãàíèçàöèé ðàñøèðåíèå ðàñøèðåíèé URL URLåé áðàóçåð áðàóçåðîâ ÎÑ OS's ## (= operating system, operating systems) ðàçìåð ïîèñêîâîå âûðàæåíèå ïîèñêîâûå âûðàæåíèÿ ñàéò ñàéòîâ êëèåíò êëèåíòîâ êîä ñòàòóñ ñòàòóñ êîäû Ñòàòèñòèêà îáðàùåíèé ê ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. êèëî ìåãà ãèãà òåðà ïåòà åêçà çåòà éîòà ## Shorter versions of the same prefixes for column headings ê Ì Ã Ò Ï Å Ç É ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Îñíîâíàÿ Èíôîðìàöèÿ ## The time reports, plus "busiest" strings (at the bottom of each report) Ñòàðûé îò÷åò Íàèáîëåå çàãðóæåííûé ãîä: Êâàðòàëüíûé îò÷åò Íàèáîëåå çàãðóæåííûé êâàðòàë: Ñòàòèñòèêà ïî ìåñÿöàì Íàèáîëüøåå êîëè÷åñòâî îáðàùåíèé â Ñòàòèñòèêà ïî íåäåëÿì Íàèáîëåå çàãðóæåííàÿ íåäåëÿ: íà÷àëî íåäåëè Ñòàòèñòèêà ïî äíÿì íåäåëè Ñòàòèñòèêà ïî äíÿì Íàèáîëåå çàãðóæåííûé äåíü: Ñòàòèñòèêà ïî âðåìåíè ñóòîê Ñòàòèñòèêà ïî âðåìåíè ñóòîê Ñòàòèñòèêà ïî ÷àñàì íåäåëè Íàèáîëåå çàãðóæåííûé ÷àñ: 15-òè ìèíóòíûé îò÷åò 15-òè ìèíóòíûé îò÷åò Íàèáîëåå çàãðóæåííûå 15 ìèí. â ÷àñå: 5-òè ìèíóòíûé îò÷åò 5-òè ìèíóòíûé îò÷åò Íàèáîëåå çàãðóæåííûå 5 ìèí. â ÷àñå: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Ñòàòèñòèêà ïî õîñòàì õîñò õîñòîâ n Îò÷åò î ïåðåíàïðàâëåíèÿõ õîñò õîñòîâ n Îò÷åò îá îøèáêàõ õîñòà õîñò õîñòîâ n Ñòàòèñòèêà ïî äèðåêòîðèÿì äèðåêòîðèÿ äèðåêòîðèé n Ñòàòèñòèêà ïî òèïàì ôàéëîâ ðàñøèðåíèå ðàñøèðåíèé n Ñòàòèñòèêà ïî çàïðîñàì ôàéë ôàéëîâ n Ñòàòèñòèêà ïî ðåäèðåêòàì ôàéë ôàéëîâ n Ñòàòèñòèêà ïî îòêàçàì ôàéë ôàéëîâ n Ñòàòèñòèêà ïî ññûëêàì ññûëàþùèéñÿ URL ññûëàþùèõñÿ URLåé n Ñòàòèñòèêà ïî ññûëàþùèìñÿ ñàéòàì ññûëàþùèéñÿ ñàéò ññûëàþùèõñÿ ñàéòîâ n Ñòàòèñòèêà ïî ïåðåíàïðàâëÿþùèì ññûëêàì ññûëàþùèéñÿ URL ññûëàþùèõñÿ URLåé n Ñòàòèñòèêà îòêàçîâ ïî ññûëêàì ñûûëàþùèéñÿ URL ññûëàþùèõñÿ URLs n Ñòàòèñòèêà ïî ïîèñêîâûì çàïðîñàì çàïðîñ çàïðîñû n Ñòàòèñòèêà ïî ïîèñêîâûì ñëîâàì ñëîâî çàïðîñà ñëîâà çàïðîñîâ n Îò÷åò î âíóòðåííèõ ïîèñêîâûõ çàïðîñàõ çàïðîñ çàïðîñîâ n Îò÷åò î âíóòðåííèõ ïîèñêîâûõ çàïðîñàõ (èñïîëüçóåìûå ñëîâà) ñëîâî ñëîâ n Ñòàòèñòèêà ïî âèðòóàëüíûì õîñòàì âèðòóàëüíûé õîñò âèðòóàëüíûõ õîñòîâ n Îò÷åò î ïåðåíàïðàâëåíèÿõ (âèðòóàëüíûå äîìåíû) âèðòóàëüíûé äîìåí âèðòóàëüíûõ äîìåíîâ n Îò÷åò îá îøèáêàõ (âèðòóàëüíûå äîìåíû) âèðòóàëüíûé äîìåí âèðòóàëüíûõ äîìåíîâ n Ñòàòèñòèêà ïî êëèåíòàì êëèåíò êëèåíòîâ n Îò÷åò î ïåðåíàïðàâëåíèÿõ ïîëüçîâàòåëü ïîëüçîâàòåëåé n Ñòàòèñòèêà îòêàçîâ ïî êëèåíòàì êëèåíò êëèíòîâ n Ñòàòèñòèêà ïî áðàóçåðàì (ñóììàðíàÿ) áðàóçåð áðàóçåðîâ n Ñòàòèñòèêà ïî áðàóçåðàì (ïîäðîáíàÿ) áðàóçåð áðàóçåðîâ n Ñòàòèñòèêà ïî îïåðàöèîííûì ñèñòåìàì îïåðàöèîííàÿ ñèñòåìà îïåðàöèîííûõ ñèñòåì n Ñòàòèñòèêà ïî äîìåíàì äîìåí äîìåíîâ n Ñòàòèñòèêà ïî îðãàíèçàöèÿì îðãàíèçàöèÿ îðãàíèçàöèé n Ñòàòèñòèêà ïî êîäó âîçâðàòà êîä âîçâðàòà êîäîâ âîçâðàòà n Ñòàòèñòèêà ïî âðåìåíè îáðàáîòêè çàïðîñà Ñòàòèñòèêà ïî ðàçìåðàì ôàéëîâ ## Used at the bottom of the report Ýòîò àíàëèç âûïîëíåí ïðîãðàììîé Âðåìÿ ðàáîòû ïðîãðàììû Ìåíüøå ÷åì 1 ## Used in the time reports Êàæäûé ñèìâîë îòîáðàæàåò èëè îêîëî ýòîãî îáðàùåíèå ê ñòðàíèöå îáðàùåíèé ê ñòðàíèöàì ## Used at the bottom of each non-time report: need m, f & n genders íå ðàñïîçíàíî íå ðàñïîçíàíî íå ðàñïîçíàíî ## Used on the pie charts: again need m, f & n genders * * äðóãîå ## Used at the top of the report Ïðîãðàììà ñòàðòîâàëà â Àíàëèç îáðàùåíèé ê ñåðâåðó ñ ïî ## Used in the General Summary Óñïåøíûõ îáðàùåíèé Ñðåäíåå êîë. óñïåøíûõ îáðàùåíèé â äåíü Óñïåøíûõ îáðàùåíèé ê ñòðàíèöàì Ñðåäíåå êîë. óñïåøíûõ îáðàùåíèé ê ñòðàíèöàì â äåíü Ñòðîê ëîãôàéëà, íå ñîäåðæàùèõ êîäà âîçâðàòà Íåóñïåøíûõ çàïðîñîâ Ïåðåíàïðàâëåííûõ çàïðîñîâ Çàïðîñîâ ñ êîäîì âîçâðàòà Êîëè÷åñòâî çàïðîøåííûõ ôàéëîâ Êîëè÷åñòâî îáñëóæåííûõ õîñòîâ Èñïîð÷åííûõ ñòðîê â logfile Íåæåëàòåëüíûõ çàïèñåé â ëîãôàéëå Äàííûõ ïåðåäàíî Ñðåäíåå êîë. ïåðåäàííûõ äàííûõ â äåíü Çàïèñü â êðóãëûõ ñêîáêàõ - äàííûå çà 7 äíåé äî ïîñëåäíèå 7 äíåé Ïåðåõîä Ââåðõ ## Some special phrases for particular reports. [íåðàñïîçíàííûé IP-àäðåñ] [äîìåí íå îïðåäåëåí] [íåèçâåñòíûé äîìåí] [êîðíåâîé êàòàëîã] [íå êàòàëîã] [áåç ðàñøèðåíèÿ] [äèðåêòîðèè] Íåèçâåñòíàÿ Windows-ñèñòåìà Äðóãèå Unix-ñèñòåìû ðîáîòû Íåèçâåñòíàÿ ÎÑ ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) çàïðîñû çàïðîñû (7äíåé) %çàïð %çàïðîñû (7 äíåé) ñòðàíèö ñòðàíèöû (7 äíåé) %ñòðàíèö %ñòðàíèöû (7 äíåé) áàéò ?áàéò áàéò çà 7 äíåé ?áàéò çà 7 äíåé %áàéò %áàéò çà 7 äíåé N ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ïîêàçàíî ïåðâûå %s * * Ïîêàçàíî ïåðâûå %d %s * * Ñïèñîê %s ## "by" in the phrase "listing the top 3 files BY number of requests" - ## All requests WITH AT LEAST 10 requests íà êîòîðûå ïðèõîäèòüñÿ, êàê ìèíèìóì ## Different ways of doing floors çàïðîñ çà ïîñëåäíèå 7 äíåé çàïðîñîâ çà ïîñëåäíèå 7 äíåé çàïðîñ ñòðàíèö çà ïîñëåäíèå 7 äíåé çàïðîñîâ ñòðàíèö çà ïîñëåäíèå 7 äíåé ïåðåíàïðàâëåííûé çàïðîñ ïåðåíàïðàâëåííûõ çàïðîñîâ ïåðåíàïðàâëåííûé çàïðîñ çà ïîñëåäíèå 7 äíåé ïåðåíàïðàâëåííûõ çàïðîñîâ çà ïîñëåäíèå 7 äíåé íåóñïåøíûé çàïðîñ íåóñïåøíûõ çàïðîñîâ íåóñïåøíûé çàïðîñ çà ïîñëåäíèå 7 äíåé íåóñïåøíûõ çàïðîñîâ çâ ïîñëåäíèå 7 äíåé % òðàôèêà % òðàôèêà çà ïîñëåäíèå 7 äíåé % ìàêñèìàëüíîå êîë. òðàôèêà % ìàêñèìàëüíîãî êîë. òðàôèêà çà ïîñëåäíèå 7 äíåé áàéò òðàôèêà áàéòîâ çà òðàôèê ## ?bytes represents kbytes, Mbytes etc. ?áàéò òðàôèêà áàéò òðàôèêà çà ïîñëåäíèå 7 äíåé áàéò òðàôèêà çà ïîñëåäíèå 7 äíåé ?áàéò òðàôèêà çà ïîñëåäíèå 7 äíåé çàïðîøåíî ñ òåõ ïîð ñ ïåðåíàïðàâëåíèåì ñ ñ îøèáêîé ñ ñ ïåðâûì çàïðîñîì ñ ñ ïåðâûì ïåðåíàïðàâëåííûì çàïðîñîì ñ ñ ïåðâûì îøèáî÷íûì çàïðîñîì ñ ## Now "sorted by": again, in m, f & n (only needed in plural though) * * îòñîðòèðîâàíî ## Used at the top of each report Ýòîò îò÷åò ñîäåðæèò äàííûå èç ## Used in pie charts Ïîäåëåíî íà ñåêòîðà ## different ways of sorting ïî ñóììàðíîìó òðàôèêó îáúåì òðàôèêà çà ïîñëåäíèå 7 äíåé % çàïðîñà % çàïðîñîâ çà ïîñëåäíèå 7 äíåé % ìàêñèìàëüíîãî ÷èñëà çàïðîñîâ % ìàêñèìàëüíîãî ÷èñëà çàïðîñîâ çà ïîñëåäíèå 7 äíåé ïî êîëè÷åñòâó îáðàùåíèé êîëè÷åñòâî çàïðîñîâ çà ïîñëåäíèå 7 äíåé % îáðàùåíèé ê ñòðàíèöàì % îáðàùåíèé ê ñòðàíèöàì çà ïîñëåäíèå 7 äíåé % ìàêñèìàëüíîå êîëè÷åñòâî îáðàùåíèé ê ñòðàíèöàì % ìàêñèìàëüíîãî ÷èñëà îáðàùåíèé ê ñòðàíèöàì çà ïîñëåäíèå 7 äíåé ïî êîëè÷åñòâó îáðàùåíèé ê ñòðàíèöå ÷èñëî îáðàùåíèé ê ñòðàíèöàì çà ïîñëåäíèå 7 äíåé % ïåðåíàïðàâëåíûõ çàïðîñîâ % ïåðåíàïðàâëåííûõ çàïðîñîâ çà ïîñëåäíèå 7 äíåé % ìàêñèìàëüíîå êîëè÷åñòâî ïåðåíàïðàâëåííûõ çàïðîñîâ % ìàêñèìàëüíîãî ÷èñëà ïåðåíàïðàâëåííûõ çàïðîñîâ çà ïîñëåäíèå 7 äíåé êîëè÷åñòâî ïåðåíàïðàâëåííûõ çàïðîñîâ êîëè÷åñòâî ïåðåíàïðàâëåííûõ çàïðîñîâ çà ïîñëåäíèå 7 äíåé % îøèáî÷íûõ çàïðîñîâ % îøèáî÷íûõ çàïðîñîâ çà ïîñëåäíèå 7 äíåé % ìàñèìàëüíîãî êîëè÷åñòâà îøèáî÷íûõ çàïðîñîâ % ìàñèìàëüíîãî êîëè÷åñòâà îøèáî÷íûõ çàïðîñîâ çà ïîñëåäíèå 7 äíåé ïî êîëè÷åñòâó îòêàçîâ êîëè÷åñòâî îøèáî÷íûõ çàïðîñîâ çâ ïîñëåäíèå 7 äíåé ïî äàòå ïîñëåäíåãî äîñòóïà âðåìÿ ïîñëåäíåãî ïåðåíàïðàâëåííîãî çàïðîñà âðåìÿ ïîñëåäíåãî îøèáî÷íîãî çàïðîñà âðåìÿ ïåðâîãî çàïðîñà âðåìÿ ïåðâîãî ïåðåíàïðàâëåííîãî çàïðîñà âðåìÿ ïåðâîãî îøèáî÷íîãî çàïðîñà ## 3 other ways of sorting in m, f, & n * * îòñîðòèðîâàííûé ïî àëôàâèòó * * îòñîðòèðîâàííûé ïî ïîðÿäêîâûì íîìåðàì * * íåîòñîðòèðîâàííûé ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %H:%n ## "Program started at" and "Analysed requests from" %w %d %m %Y %H:%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Ðàçëè÷íàÿ èíôîðìàöèÿ] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/ru1desc.txt000066400000000000000000000105371406366436600165070ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # Russian translation made by Denis Zhukov at 26/03/2002 # mailto: sav@iclub.nsu.ru # This language file is in cp1251 (M$ Windows cyrillic) charset. # # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # # # # # Yearly Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî ãîäà. # Quarterly Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî êâàðòàëà. # Monthly Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî ìåñÿöà. # Weekly Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîé íåäåëè. # Daily Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî äíÿ. # Hourly Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî ÷àñà. # Quarter-Hour Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäûõ 15 ìèíóò. # Five-Minute Report Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäûõ 5 ìèíóò. # Daily Summary Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî äíÿ íåäåëè, ñóììèðîâàííîé ïî âñåì íåäåëÿì, ïðåäñòàâëåííûì â îò÷åòå. # Hourly Summary Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî ÷àñà äíÿ, ñóììèðîâàííîé ïî âñåì äíÿì, ïðåäñòàâëåííûì â îò÷åòå. # Hour of the Week Summary Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäîãî ÷àñà íåäåëè, ñóììèðîâàííîé ïî âñåì íåäåëÿì, ïðåäñòàâëåííûì â îò÷åòå. # Quarter-Hour Summary Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäûõ 15 ìèíóò äíÿ, ñóììèðîâàííîé ïî âñåì äíÿì, ïðåäñòàâëåííûì â îò÷åòå. # Five-Minute Summary Îò÷åò îá àêòèâíîñòè â òå÷åíèå êàæäûõ 5 ìèíóò äíÿ, ñóììèðîâàííîé ïî âñåì äíÿì, ïðåäñòàâëåííûì â îò÷åòå. # General Summary Ýòîò îò÷åò ñîäåðæèò âñþ äîñòóïíóþ èíôîðìàöèþ. # Request Report Ýòîò îò÷åò ïîêàçûâàåò ñïèñîê ôàéëîâ íà ñàéòå. # Redirection Report Ýòîò îò÷åò ïîêàçûâàåò ñïèñîê ôàéëîâ, êîòîðûå ïîñëóæèëè ïðè÷èíîé ïåðåíàïðàâëåíèÿ çàïðîñà. # Failure Report Ýòîò îò÷åò ïîêàçûâàåò ôàéëû, êîòîðûå ÿâèëèñü ïðè÷èíîé îøèáîê, íàïðèìåð, òå ôàéëû, êîòîðûå íå áûëè íàéäåíû. # File Type Report Ýòîò îò÷åò ïîêàçûâàåò ðàñøèðåíèÿ çàòðåáîâàííûõ ôàéëîâ. # Directory Report Ýòîò îò÷åò ïîêàçûâàåò êàòàëîãè, èç êîòîðûõ áûëè çàòðåáîâàíû ôàéëû. # Host Report Ýòîò îò÷åò ïîêàçûâàåò ñïèñîê ìàøèí, ñ êîòîðûõ áûëè çàòðåáîâàíû ôàéëû. # Host Redirection Report Ýòîò îò÷åò ïîêàçûâàåò ñïèñîê ìàøèí, çàïðîñû ñ êîòîðûõ áûëè ïåðåíàïðàâëåíû ê äðóãîìó ôàéëó. # Host Failure Report Ýòîò îò÷åò ïîêàçûâàåò ñïèñîê ìàøèí, êîòîðûå ñäåëàëè îøèáî÷íûé çàïðîñ. # Domain Report Ýòîò îò÷åò ïîêàçûâàåò ñòðàíû (äîìåíû), ìàøèíû êîòîðûõ äåëàëè çàïðîñ. # Referrer Report Ýòîò îò÷åò ïîêàçûâàåò èñòî÷íèêè, îòêóäà ëþäè ïåðåøëè íà íàø ñàéò. # Referring Site Report Ýòîò îò÷åò ïîêàçûâàåò ñåðâåðà, ñ êîòîðûõ ëþäè çàøëè íà íàø ñàéò. # Redirected Referrer Report Ýòîò îò÷åò ïîêàçûâàåò èñòî÷íèêè, âûçâàâøèå ïåðåíàïðàâëåíèå çàïðîñà. # Failed Referrer Report Ýòîò îò÷åò ïîêàçûâàåò èñòî÷íèêè, êîòîðûå ñîäåðæàò íåäåéñòâèòåëüíûå ññûëêè íà íàø ñàéò. # Browser Report Ýòîò îò÷åò ïîêàçûâàåò áðîóçåðû, èñïîëüçóåìûå ïîñåòèòåëÿìè. # Virtual Host Report Ýòîò îò÷åò ïîêàçûâàåò ïîñåùàåìîñòü êàæäîãî èç âèðòóàëüíûõ äîìåíîâ ñèñòåìû. # Virtual Host Redirection Report Ýòîò îò÷åò ïîêàçûâàåò ïåðåíàïðàâëåííûå çàïðîñû ê êàæäîìó âèðòóàëüíîìó äîìåíó. # Virtual Host Failure Report Ýòîò îò÷åò ïîêàçûâàåò îøèáî÷íûå çàïðîñû ê êàæäîìó èç âèðòóàëüíûõ äîìåíîâ. # User Report Ýòîò îò÷åò ïîêàçûâàåò ïîëüçîâàòåëåé, êîòîðûå çàòðåáîâàëè ôàéëû, åñëè ïîëüçîâàòåëÿ óäàëîñü èäåíòèôèöèðîâàòü. # User Redirection Report Ýòîò îò÷åò ïîêàçûâàåò ïîëüçîâàòåëåé, êîòîðûå áûëè ïåðåíàïðàâëåíû ê äðóãîìó ôàéëó. # User Failure Report Ýòîò îò÷åò ïîêàçûâàåò ïîëüçîâàòåëåé, êîòîðûå ïðîèçâåëè îøèáî÷íûé çàïðîñ. # Organisation Report Ýòîò îò÷åò ïîêàçûâàåò îðãàíèçàöèè, êîòîðûå ïðîèçâåëè çàïðîñ. # Search Query Report Ýòîò îò÷åò ïîêàçûâàåò, êàêèå çàïðîñû ïðîèçâåëè ïîëüçîâàòåëè â ïîèñêîâûõ ìàøèíàõ, ÷òîáû íàéòè íàø ñàéò. # Search Word Report Ýòîò îò÷åò ïîêàçûâàåò, êàêèå ñëîâà èñïîëüçîâàëè ïîëüçîâàòåëè, ÷òîáû íàéòè íàø ñàéò. # Internal Search Query Report Ýòîò îò÷åò ïîêàçûâàåò, êàêèå çàïðîñû èñïîëüçîâàëè ïîëüçîâàòåëè â ñêðèïòàõ íà íàøåì ñàéòå. # Internal Search Word Report Ýòîò îò÷åò ïîêàçûâàåò, êàêèå ñëîâà èñïîëüçîâàëè ïîëüçîâàòåëè â ñêðèïòàõ íà íàøåì ñàéòå. # Browser Summary Ýòîò îò÷åò ïîêàçûâàåò, êàêèå ïðîèçâîäèòåëåé áðîóçåðîâ ïîëüçîâàòåëåé. # Operating System Report Ýòîò îò÷åò ïîêàçûâàåò îïåðàöèîííûå ñèñòåìû, èñïîëüçóåìûå ïîëüçîâàòåëÿìè. # File Size Report Ýòîò îò÷åò ïîêàçûâàåò ðàçìåð ôàéëîâ. # Status Code Report Ýòîò îò÷åò ïîêàçûâàåò HTTP êîäû âñåõ çàïðîñîâ. # Processing Time Report Ýòîò îò÷åò ïîêàçûâàåò âðåìÿ, ïîòðåáîâàâøååñÿ äëÿ âûïîëíåíèÿ óñïåøíûõ çàïðîñîâ.analog-ce-6.0.17/lang/ru1dom.tab000066400000000000000000000130401406366436600162670ustar00rootroot00000000000000## This version of Domains for Analog on Russian has ## translated Nikitich (nikitich@yahoo.com). ## The given text is submitted in the codepage ## KOI8-R. Good luck. ## ## Updates and corrects by Denis Zhukov at 26/03/2002 ## mailto: sav@iclub.nsu.ru ## This language file is in cp1251 (M$ Windows cyrillic) charset. ## ## aero 2 Èíäóñòðèÿ âîçäóøíîãî òðàíñïîðòà arpa 1 Àðïàíåò biz 2 Áèçíåñ com 2 Êîììåð÷åñêèå îðãàíèçàöèè coop 2 Êîîïåðàòèâû edu 2 Âûñøèå ó÷åáíûå çàâåäåíèÿ ÑØÀ gov 2 Ïðàâèòåëüñòâî ÑØÀ info 2 Èíôîðìàöèîííûé äîìåí int 2 International Treaty Organizations mil 2 Âîîðóæåííûå ñèëû ÑØÀ museum 2 Ìóçåè name 2 ×àñòíûå ëèöà net 2 Êîìïàíèè, ïðåäîñòàâëÿþùèå ñåòâûå è ïðîâàéäåðñêèå óñëóãè org 2 Íåêîììåð÷åñêèå îðãàíèçàöèè pro 3 Ïðîôåññèîíàëüíûå îðãàíèçàöèè ac 1 Ascension Island ad 2 Àíäîððà ae 3 Îáúåäèíåííûå Àðàáñêèå Ýìèðàòû (ÎÀÝ) af 1 Àôãàíèñòàí ag 2 Àíòèãóà è Áàðáóäà ai 1 Àíãèëüÿ al 1 Àëáàíèÿ am 2 Àðìåíèÿ an 1 Àíòèëüñêèå îñòðîâà (Íèäåðëàíäû) ao 1 Àíãîëà aq 1 Àíòàðêòèêà ar 3 Àðãåíòèíà arpa 1 Arpanet (ñòàðûé âàðèàíò) as 1 Àìåðèêàíñêîå Ñàìîà at 3 Àâñòðèÿ au 3 Àâñòðàëèÿ aw 1 Àðóáà az 1 Àçåðáàéäæàí ba 3 Áîñíèÿ-Ãåðöåãîâèíà bb 2 Áàðáàäîñ bd 1 Áàíãëàäåø be 3 Áåëüãèÿ bf 1 Áóðêèíà-Ôàñî bg 2 Áîëãàðèÿ bh 1 Áàõðåéí bi 1 Áóðóíäè bj 1 Áåíèí bm 1 Áåðìóäû bn 1 Áðóíåé bo 3 Áîëèâèÿ br 3 Áðàçèëèÿ bs 1 Áàãàìû bt 1 Áóòàí bv 1 Îñòðîâ Áóâåò bw 1 Áîòñòâàíà by 1 Áåëàðóñü bz 1 Áåëèç ca 3 Êàíàäà cc 1 Êîêîñîâûå îñòðîâà cd 1 Äåìîêðàòè÷åñêàÿ ðåñïóáëèêà Êîíãî cf 1 Öåíòðàëüíàÿ Àôðèêàíñêàÿ Ðåñïóáëèêà cg 1 Êîíãî ch 2 Øâåéöàðèÿ ci 1 Êîò-Ä-Âóàð ck 1 Îñòðîâà Êóêà cl 2 ×èëè cm 1 Êàìåðóí cn 3 Êèòàé co 3 Êîëóìáèÿ com 2 Êîìåð÷åñêèé äîìåí cr 3 Êîñòà-Ðèêà cu 2 Êóáà cv 1 Êàïå-Âåðäå cx 2 Îñòðîâ Ðîæäåñòâà cy 3 Êèïð cz 2 ×åøñêàÿ Ðåñïóáëèêà de 2 Ãåðìàíèÿ dj 1 Äæèáóòè dk 2 Äàíèÿ dm 2 Äîìèíèêà do 3 Äîìèíèêàíñêàÿ Ðåñïóáëèêà dz 1 Àëæèð ec 3 Ýêâàäîð edu 2 Îáðàçîâàòåëüíûé äîìåí ÑØÀ ee 2 Ýñòîíèÿ eg 3 Åãèïåò eh 1 Çàïàäíàÿ Ñàõàðà er 1 Ýðèòðåÿ es 2 Èñïàíèÿ et 1 Ýôèîïèÿ fi 2 Ôèíëÿíäèÿ fj 3 Ôèäæè fk 1 Ôîëêëåíäñêèå îñòðîâà fm 1 Ìèêðîíåçèÿ fo 1 Ôàðåðñêèå îñòðîâà fr 2 Ôðàíöèÿ fx 1 Ôðàíöèÿ (Åâðîïåéñêàÿ òåððèòîðèÿ) ga 1 Ãàáîí gb 1 Âåëèêîáðèòàíèÿ gd 1 Ãðåíàäà ge 1 Ãðóçèÿ gf 1 Ôðàíöóçñêàÿ Ãàéàíà gg 1 Ãåðíñè gh 3 Ãàíà gi 1 Ãèáðàëòàð gl 1 Îñòðîâ Ãðåíëàíäèÿ gm 1 Ãàìáèÿ gn 1 Ãâèíåÿ gov 2 Ïðàâèòåëüñòâåííûé äîìåí ÑØÀ gp 1 Ãâàäåëóïà (Ôðàíöèÿ) gq 1 Ýêâàòîðèàëüíàÿ Ãâèíåÿ gr 2 Ãðåöèÿ gs 1 Þæíàÿ Äæîðäæèÿ è Ñýíäâè÷åâû îñòðîâà gt 3 Ãâàòåìàëà gu 1 Ãóàì (ÑØÀ) gw 1 Ãâèíåÿ-Áåñàó gy 1 Ãàéàíà hk 3 Ãîíêîíã hm 1 Õèðä è îñòðîâà Ìàêäîíàëüäà hn 2 Ãîíäóðàñ hr 2 Õîðâàòèÿ ht 1 Ãàèòè hu 2 Âåíãðèÿ id 3 Èíäîíåçèÿ ie 2 Èðëàíäèÿ il 3 Èçðàèëü im 1 Îñòðîâ Ìýí in 3 Èíäèÿ int 1 Äîìåí ìåæäóíàðîäíûõ îðãàíèçàöèé io 1 Áðèòàíñêàÿ òåððèòîðèÿ Èíäèéñêîãî Îêåàíà iq 1 Èðàê ir 1 Èðàí is 2 Èñëàíäèÿ it 2 Èòàëèÿ je 1 Äæåðñè jm 3 ßìàéêà jo 3 Èîðäàíèÿ jp 3 ßïîíèÿ ke 3 Êåíèÿ kg 1 Êèðãèçñòàí kh 1 Êàìáîäæà ki 1 Êèðèáàòè km 1 Êîìîðî kn 1 Ñåíò-Êèòñ è Íåâèñ kp 1 Ñåâåðíàÿ Êîðåÿ kr 3 Þæíàÿ Êîðåÿ kw 3 Êóâåéò ky 1 Êàéìàíîâû îñòðîâà kz 1 Êàçàõñòàí la 1 Ëàîñ lb 3 Ëèâàí lc 1 Ñåíò-Ëþñèÿ li 2 Ëèõòåíøòåéí lk 1 Øðè-Ëàíêà lr 1 Ëèáåðèÿ ls 1 Ëåñîòî lt 2 Ëèòâà lu 2 Ëþêñåìáóðã lv 2 Ëàòâèÿ ly 1 Ëèâèÿ ma 1 Ìàðîêêî mc 2 Ìîíàêî md 1 Ìîëäàâèÿ mg 1 Ìàäàãàñêàð mh 1 Ìàðøàëîâû îñòðîâà mil 2 Äîìåí Âîîðóæåííûõ Ñèë ÑØÀ mk 3 Ìàêåäîíèÿ ml 1 Ìàëè mm 1 Ìàÿíìàð mn 1 Ìîíãîëèÿ mo 1 Ìàêàî mp 1 Ñåâåðíûå Ìàðèàíñêèå îñòðîâà mq 1 Ìàðòèíèêà (Ôðàíöèÿ) mr 1 Ìàâðèòàíèÿ ms 1 Ìîíñåððàò mt 3 Ìàëüòà mu 1 Ìàâðèêèé mv 1 Ìàëüäèâû mw 1 Ìàëàâè mx 3 Ìåêñèêà my 3 Ìàëàéçèÿ mz 1 Ìîçàìáèê na 1 Íàìèáèÿ nc 1 Íîâàÿ Êàëåäîíèÿ (Ôðàíöèÿ) ne 1 Íèãåð net 2 Ñåòåâîé äîìåí nf 1 Îñòðîâà Íîðôîëêà ng 1 Íèãåðèÿ ni 3 Íèêàðàãóà nl 2 Íèäåðëàíäû no 2 Íîðâåãèÿ np 1 Íåïàë nr 1 Íàóðó nu 2 Íèóý nz 3 Íîâàÿ Çåëàíäèÿ om 1 Îìàí org 2 Äîìåí íåêîììåð÷åñêèõ îðãàíèçàöèé pa 3 Ïàíàìà pe 3 Ïåðó pf 1 Ôðàíöóçñêàÿ Ïîëèíåçèÿ pg 3 Ïàïóà-Íîâàÿ Ãâèíåÿ ph 3 Ôèëèïïèíû pk 3 Ïàêèñòàí pl 3 Ïîëüøà pm 1 Ñåí-Ïüåð è Ìèêåëîí pn 1 Îñòðîâ Ïèòêåðí pr 1 Ïóåðòî-Ðèêî pt 2 Ïîðòóãàëèÿ pw 1 Ïàëàó py 3 Ïàðàãâàé qa 1 Êàòàð re 1 Ôðàíöóçñêèé Ðåþíüîí ro 2 Ðóìûíèÿ ru 2 Ðîññèÿ rw 1 Ðóàíäà sa 3 Ñàóäîâñêàÿ Àðàâèÿ sb 1 Ñîëîìîíîâû îñòðîâà sc 1 Ñåéøåëüñêèå îñòðîâà sd 1 Ñóäàí se 2 Øâåöèÿ sg 3 Ñèíãàïóð sh 1 Îñòðîâ Ñâÿòîé Åëåíû si 2 Ñëîâåíèÿ sj 1 Ñâàëüáåðä è îñòðîâà ßí Ìåéåí sk 2 Ðåñïóáëèêà Ñëîâàêèÿ sl 1 Ñüåððà-Ëåîíå sm 1 Ñàí-Ìàðèíî sn 1 Ñåíåãàë so 1 Ñîìàëè sr 1 Ñóðèíàì st 1 Ñàí-Òîìå è Ïðèíñèïè su 2 Ñòàðûé äîìåí ÑÑÑÐ sv 3 Ñàëüâàäîð sy 1 Ñèðèÿ sz 1 Ñâàçèëåíä tc 1 Îñòðîâà Òåðêñ è Êàéêîñ td 1 ×àä tf 1 Ôðàíöóçñêèå þæíûå òåððèòîðèè tg 1 Òîãî th 3 Òàèëàíä tj 1 Òàäæèêèñòàí tk 1 Òîêåëàó tl 1 Âîñòî÷íûé Òèìîð tm 1 Òóðêìåíèñòàí tn 1 Òóíèñ to 1 Òîíãà tp 1 Âîñòî÷íûé Òèìîð tr 3 Òóðöèÿ tt 3 Òðèíèäàä è Òîáàãî tv 1 Òóâàëó tw 3 Òàéâàíü tz 1 Òàíçàíèÿ ua 3 Óêðàèíà ug 3 Óãàíäà uk 3 Îáúåäèíåííîå Êîðîëåâñòâî Âåëèêîáðèòàíèè um 1 Îñòðîâà USA Minor Outlying us 4 Ñîåäèíåííûå Øòàòû Àìåðèêè uy 3 Óðóãâàé uz 1 Óçáåêèñòàí va 1 Âàòèêàí vc 1 Ñåíò-Âèíñåíò è Ãðåíàäèíåñ ve 3 Âåíèñóýëà vg 1 Îñòðîâà Âèðãèíèè (Âåëèêîáðèòàíèÿ) vi 1 Îñòðîâà Âèðãèíèè (ÑØÀ) vn 1 Âüåòíàì vu 1 Âàíóàòó wf 1 Îñòðîâà Âîëëèñ è Ôóòóíà ws 1 Ñàìîà ye 1 Éåìåí yt 1 Ìàéîòòå yu 3 Þãîñëàâèÿ za 3 Þæíî-Àôðèêàíñêàÿ Ðåñïóáëèêà zm 1 Çàìáèÿ zr 1 Äåìîêðàòè÷åñêàÿ ðåñïóáëèêà Êîíãî zw 3 Çèìáàáâå analog-ce-6.0.17/lang/rudesc.txt000066400000000000000000000104331406366436600164210ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # Russian translation made by Denis Zhukov at 26/03/2002 # mailto: sav@iclub.nsu.ru # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # # # # # Yearly Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÇÏÄÁ. # Quarterly Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ Ë×ÁÒÔÁÌÁ. # Monthly Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÍÅÓÑÃÁ. # Weekly Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÊ ÎÅÄÅÌÉ. # Daily Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÄÎÑ. # Hourly Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÞÁÓÁ. # Quarter-Hour Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÙÈ 15 ÍÉÎÕÔ. # Five-Minute Report ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÙÈ 5 ÍÉÎÕÔ. # Daily Summary ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÄÎÑ ÎÅÄÅÌÉ, ÓÕÍÍÉÒÏ×ÁÎÎÏÊ ÐÏ ×ÓÅÍ ÎÅÄÅÌÑÍ, ÐÒÅÄÓÔÁ×ÌÅÎÎÙÍ × ÏÔÞÅÔÅ. # Hourly Summary ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÞÁÓÁ ÄÎÑ, ÓÕÍÍÉÒÏ×ÁÎÎÏÊ ÐÏ ×ÓÅÍ ÄÎÑÍ, ÐÒÅÄÓÔÁ×ÌÅÎÎÙÍ × ÏÔÞÅÔÅ. # Hour of the Week Summary ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÏÇÏ ÞÁÓÁ ÎÅÄÅÌÉ, ÓÕÍÍÉÒÏ×ÁÎÎÏÊ ÐÏ ×ÓÅÍ ÎÅÄÅÌÑÍ, ÐÒÅÄÓÔÁ×ÌÅÎÎÙÍ × ÏÔÞÅÔÅ. # Quarter-Hour Summary ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÙÈ 15 ÍÉÎÕÔ ÄÎÑ, ÓÕÍÍÉÒÏ×ÁÎÎÏÊ ÐÏ ×ÓÅÍ ÄÎÑÍ, ÐÒÅÄÓÔÁ×ÌÅÎÎÙÍ × ÏÔÞÅÔÅ. # Five-Minute Summary ïÔÞÅÔ Ï ÁËÔÉ×ÎÏÓÔÉ × ÔÅÞÅÎÉÅ ËÁÖÄÙÈ 5 ÍÉÎÕÔ ÄÎÑ, ÓÕÍÍÉÒÏ×ÁÎÎÏÊ ÐÏ ×ÓÅÍ ÄÎÑÍ, ÐÒÅÄÓÔÁ×ÌÅÎÎÙÍ × ÏÔÞÅÔÅ. # General Summary üÔÏÔ ÏÔÞÅÔ ÓÏÄÅÒÖÉÔ ×ÓÀ ÄÏÓÔÕÐÎÕÀ ÉÎÆÏÒÍÁÃÉÀ. # Request Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÐÉÓÏË ÆÁÊÌÏ× ÎÁ ÓÁÊÔÅ. # Redirection Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÐÉÓÏË ÆÁÊÌÏ×, ËÏÔÏÒÙÅ ÐÏÓÌÕÖÉÌÉ ÐÒÉÞÉÎÏÊ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ÚÁÐÒÏÓÁ. # Failure Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÆÁÊÌÙ, ËÏÔÏÒÙÅ Ñ×ÉÌÉÓØ ÐÒÉÞÉÎÏÊ ÏÛÉÂÏË, ÎÁÐÒÉÍÅÒ, ÔÅ ÆÁÊÌÙ, ËÏÔÏÒÙÅ ÎÅ ÂÙÌÉ ÎÁÊÄÅÎÙ. # File Type Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÒÁÓÛÉÒÅÎÉÑ ÚÁÔÒÅÂÏ×ÁÎÎÙÈ ÆÁÊÌÏ×. # Directory Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ËÁÔÁÌÏÇÉ, ÉÚ ËÏÔÏÒÙÈ ÂÙÌÉ ÚÁÔÒÅÂÏ×ÁÎÙ ÆÁÊÌÙ. # Host Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÐÉÓÏË ÍÁÛÉÎ, Ó ËÏÔÏÒÙÈ ÂÙÌÉ ÚÁÔÒÅÂÏ×ÁÎÙ ÆÁÊÌÙ. # Host Redirection Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÐÉÓÏË ÍÁÛÉÎ, ÚÁÐÒÏÓÙ Ó ËÏÔÏÒÙÈ ÂÙÌÉ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ Ë ÄÒÕÇÏÍÕ ÆÁÊÌÕ. # Host Failure Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÐÉÓÏË ÍÁÛÉÎ, ËÏÔÏÒÙÅ ÓÄÅÌÁÌÉ ÏÛÉÂÏÞÎÙÊ ÚÁÐÒÏÓ. # Domain Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÔÒÁÎÙ (ÄÏÍÅÎÙ), ÍÁÛÉÎÙ ËÏÔÏÒÙÈ ÄÅÌÁÌÉ ÚÁÐÒÏÓ. # Referrer Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÉÓÔÏÞÎÉËÉ, ÏÔËÕÄÁ ÌÀÄÉ ÐÅÒÅÛÌÉ ÎÁ ÎÁÛ ÓÁÊÔ. # Referring Site Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÓÅÒ×ÅÒÁ, Ó ËÏÔÏÒÙÈ ÌÀÄÉ ÚÁÛÌÉ ÎÁ ÎÁÛ ÓÁÊÔ. # Redirected Referrer Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÉÓÔÏÞÎÉËÉ, ×ÙÚ×Á×ÛÉÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ ÚÁÐÒÏÓÁ. # Failed Referrer Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÉÓÔÏÞÎÉËÉ, ËÏÔÏÒÙÅ ÓÏÄÅÒÖÁÔ ÎÅÄÅÊÓÔ×ÉÔÅÌØÎÙÅ ÓÓÙÌËÉ ÎÁ ÎÁÛ ÓÁÊÔ. # Browser Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÂÒÏÕÚÅÒÙ, ÉÓÐÏÌØÚÕÅÍÙÅ ÐÏÓÅÔÉÔÅÌÑÍÉ. # Virtual Host Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÐÏÓÅÝÁÅÍÏÓÔØ ËÁÖÄÏÇÏ ÉÚ ×ÉÒÔÕÁÌØÎÙÈ ÄÏÍÅÎÏ× ÓÉÓÔÅÍÙ. # Virtual Host Redirection Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÎÙÅ ÚÁÐÒÏÓÙ Ë ËÁÖÄÏÍÕ ×ÉÒÔÕÁÌØÎÏÍÕ ÄÏÍÅÎÕ. # Virtual Host Failure Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÏÛÉÂÏÞÎÙÅ ÚÁÐÒÏÓÙ Ë ËÁÖÄÏÍÕ ÉÚ ×ÉÒÔÕÁÌØÎÙÈ ÄÏÍÅÎÏ×. # User Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ËÏÔÏÒÙÅ ÚÁÔÒÅÂÏ×ÁÌÉ ÆÁÊÌÙ, ÅÓÌÉ ÐÏÌØÚÏ×ÁÔÅÌÑ ÕÄÁÌÏÓØ ÉÄÅÎÔÉÆÉÃÉÒÏ×ÁÔØ. # User Redirection Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ËÏÔÏÒÙÅ ÂÙÌÉ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ Ë ÄÒÕÇÏÍÕ ÆÁÊÌÕ. # User Failure Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ËÏÔÏÒÙÅ ÐÒÏÉÚ×ÅÌÉ ÏÛÉÂÏÞÎÙÊ ÚÁÐÒÏÓ. # Organisation Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÏÒÇÁÎÉÚÁÃÉÉ, ËÏÔÏÒÙÅ ÐÒÏÉÚ×ÅÌÉ ÚÁÐÒÏÓ. # Search Query Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ, ËÁËÉÅ ÚÁÐÒÏÓÙ ÐÒÏÉÚ×ÅÌÉ ÐÏÌØÚÏ×ÁÔÅÌÉ × ÐÏÉÓËÏ×ÙÈ ÍÁÛÉÎÁÈ, ÞÔÏÂÙ ÎÁÊÔÉ ÎÁÛ ÓÁÊÔ. # Search Word Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ, ËÁËÉÅ ÓÌÏ×Á ÉÓÐÏÌØÚÏ×ÁÌÉ ÐÏÌØÚÏ×ÁÔÅÌÉ, ÞÔÏÂÙ ÎÁÊÔÉ ÎÁÛ ÓÁÊÔ. # Internal Search Query Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ, ËÁËÉÅ ÚÁÐÒÏÓÙ ÉÓÐÏÌØÚÏ×ÁÌÉ ÐÏÌØÚÏ×ÁÔÅÌÉ × ÓËÒÉÐÔÁÈ ÎÁ ÎÁÛÅÍ ÓÁÊÔÅ. # Internal Search Word Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ, ËÁËÉÅ ÓÌÏ×Á ÉÓÐÏÌØÚÏ×ÁÌÉ ÐÏÌØÚÏ×ÁÔÅÌÉ × ÓËÒÉÐÔÁÈ ÎÁ ÎÁÛÅÍ ÓÁÊÔÅ. # Browser Summary üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ, ËÁËÉÅ ÐÒÏÉÚ×ÏÄÉÔÅÌÅÊ ÂÒÏÕÚÅÒÏ× ÐÏÌØÚÏ×ÁÔÅÌÅÊ. # Operating System Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÏÐÅÒÁÃÉÏÎÎÙÅ ÓÉÓÔÅÍÙ, ÉÓÐÏÌØÚÕÅÍÙÅ ÐÏÌØÚÏ×ÁÔÅÌÑÍÉ. # File Size Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ÒÁÚÍÅÒ ÆÁÊÌÏ×. # Status Code Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ HTTP ËÏÄÙ ×ÓÅÈ ÚÁÐÒÏÓÏ×. # Processing Time Report üÔÏÔ ÏÔÞÅÔ ÐÏËÁÚÙ×ÁÅÔ ×ÒÅÍÑ, ÐÏÔÒÅÂÏ×Á×ÛÅÅÓÑ ÄÌÑ ×ÙÐÏÌÎÅÎÉÑ ÕÓÐÅÛÎÙÈ ÚÁÐÒÏÓÏ×.analog-ce-6.0.17/lang/rudom.tab000066400000000000000000000127351406366436600162200ustar00rootroot00000000000000## This version of Domains for Analog on Russian has ## translated Nikitich (nikitich@yahoo.com). ## The given text is submitted in the codepage ## KOI8-R. Good luck. ## ## Updates and corrects by Denis Zhukov at 26/03/2002 ## mailto: sav@iclub.nsu.ru ## ## aero 2 éÎÄÕÓÔÒÉÑ ×ÏÚÄÕÛÎÏÇÏ ÔÒÁÎÓÐÏÒÔÁ arpa 1 áÒÐÁÎÅÔ biz 2 âÉÚÎÅÓ com 2 ëÏÍÍÅÒÞÅÓËÉÅ ÏÒÇÁÎÉÚÁÃÉÉ coop 2 ëÏÏÐÅÒÁÔÉ×Ù edu 2 ÷ÙÓÛÉÅ ÕÞÅÂÎÙÅ ÚÁ×ÅÄÅÎÉÑ óûá gov 2 ðÒÁ×ÉÔÅÌØÓÔ×Ï óûá info 2 éÎÆÏÒÍÁÃÉÏÎÎÙÊ ÄÏÍÅÎ int 2 International Treaty Organizations mil 2 ÷ÏÏÒÕÖÅÎÎÙÅ ÓÉÌÙ óûá museum 2 íÕÚÅÉ name 2 þÁÓÔÎÙÅ ÌÉÃÁ net 2 ëÏÍÐÁÎÉÉ, ÐÒÅÄÏÓÔÁ×ÌÑÀÝÉÅ ÓÅÔ×ÙÅ É ÐÒÏ×ÁÊÄÅÒÓËÉÅ ÕÓÌÕÇÉ org 2 îÅËÏÍÍÅÒÞÅÓËÉÅ ÏÒÇÁÎÉÚÁÃÉÉ pro 3 ðÒÏÆÅÓÓÉÏÎÁÌØÎÙÅ ÏÒÇÁÎÉÚÁÃÉÉ ac 1 Ascension Island ad 2 áÎÄÏÒÒÁ ae 3 ïÂßÅÄÉÎÅÎÎÙÅ áÒÁÂÓËÉÅ üÍÉÒÁÔÙ (ïáü) af 1 áÆÇÁÎÉÓÔÁÎ ag 2 áÎÔÉÇÕÁ É âÁÒÂÕÄÁ ai 1 áÎÇÉÌØÑ al 1 áÌÂÁÎÉÑ am 2 áÒÍÅÎÉÑ an 1 áÎÔÉÌØÓËÉÅ ÏÓÔÒÏ×Á (îÉÄÅÒÌÁÎÄÙ) ao 1 áÎÇÏÌÁ aq 1 áÎÔÁÒËÔÉËÁ ar 3 áÒÇÅÎÔÉÎÁ arpa 1 Arpanet (ÓÔÁÒÙÊ ×ÁÒÉÁÎÔ) as 1 áÍÅÒÉËÁÎÓËÏÅ óÁÍÏÁ at 3 á×ÓÔÒÉÑ au 3 á×ÓÔÒÁÌÉÑ aw 1 áÒÕÂÁ az 1 áÚÅÒÂÁÊÄÖÁÎ ba 3 âÏÓÎÉÑ-çÅÒÃÅÇÏ×ÉÎÁ bb 2 âÁÒÂÁÄÏÓ bd 1 âÁÎÇÌÁÄÅÛ be 3 âÅÌØÇÉÑ bf 1 âÕÒËÉÎÁ-æÁÓÏ bg 2 âÏÌÇÁÒÉÑ bh 1 âÁÈÒÅÊÎ bi 1 âÕÒÕÎÄÉ bj 1 âÅÎÉÎ bm 1 âÅÒÍÕÄÙ bn 1 âÒÕÎÅÊ bo 3 âÏÌÉ×ÉÑ br 3 âÒÁÚÉÌÉÑ bs 1 âÁÇÁÍÙ bt 1 âÕÔÁÎ bv 1 ïÓÔÒÏ× âÕ×ÅÔ bw 1 âÏÔÓÔ×ÁÎÁ by 1 âÅÌÁÒÕÓØ bz 1 âÅÌÉÚ ca 3 ëÁÎÁÄÁ cc 1 ëÏËÏÓÏ×ÙÅ ÏÓÔÒÏ×Á cd 1 äÅÍÏËÒÁÔÉÞÅÓËÁÑ ÒÅÓÐÕÂÌÉËÁ ëÏÎÇÏ cf 1 ãÅÎÔÒÁÌØÎÁÑ áÆÒÉËÁÎÓËÁÑ òÅÓÐÕÂÌÉËÁ cg 1 ëÏÎÇÏ ch 2 û×ÅÊÃÁÒÉÑ ci 1 ëÏÔ-ä-÷ÕÁÒ ck 1 ïÓÔÒÏ×Á ëÕËÁ cl 2 þÉÌÉ cm 1 ëÁÍÅÒÕÎ cn 3 ëÉÔÁÊ co 3 ëÏÌÕÍÂÉÑ com 2 ëÏÍÅÒÞÅÓËÉÊ ÄÏÍÅÎ cr 3 ëÏÓÔÁ-òÉËÁ cu 2 ëÕÂÁ cv 1 ëÁÐÅ-÷ÅÒÄÅ cx 2 ïÓÔÒÏ× òÏÖÄÅÓÔ×Á cy 3 ëÉÐÒ cz 2 þÅÛÓËÁÑ òÅÓÐÕÂÌÉËÁ de 2 çÅÒÍÁÎÉÑ dj 1 äÖÉÂÕÔÉ dk 2 äÁÎÉÑ dm 2 äÏÍÉÎÉËÁ do 3 äÏÍÉÎÉËÁÎÓËÁÑ òÅÓÐÕÂÌÉËÁ dz 1 áÌÖÉÒ ec 3 üË×ÁÄÏÒ edu 2 ïÂÒÁÚÏ×ÁÔÅÌØÎÙÊ ÄÏÍÅÎ óûá ee 2 üÓÔÏÎÉÑ eg 3 åÇÉÐÅÔ eh 1 úÁÐÁÄÎÁÑ óÁÈÁÒÁ er 1 üÒÉÔÒÅÑ es 2 éÓÐÁÎÉÑ et 1 üÆÉÏÐÉÑ fi 2 æÉÎÌÑÎÄÉÑ fj 3 æÉÄÖÉ fk 1 æÏÌËÌÅÎÄÓËÉÅ ÏÓÔÒÏ×Á fm 1 íÉËÒÏÎÅÚÉÑ fo 1 æÁÒÅÒÓËÉÅ ÏÓÔÒÏ×Á fr 2 æÒÁÎÃÉÑ fx 1 æÒÁÎÃÉÑ (å×ÒÏÐÅÊÓËÁÑ ÔÅÒÒÉÔÏÒÉÑ) ga 1 çÁÂÏÎ gb 1 ÷ÅÌÉËÏÂÒÉÔÁÎÉÑ gd 1 çÒÅÎÁÄÁ ge 1 çÒÕÚÉÑ gf 1 æÒÁÎÃÕÚÓËÁÑ çÁÊÁÎÁ gg 1 çÅÒÎÓÉ gh 3 çÁÎÁ gi 1 çÉÂÒÁÌÔÁÒ gl 1 ïÓÔÒÏ× çÒÅÎÌÁÎÄÉÑ gm 1 çÁÍÂÉÑ gn 1 ç×ÉÎÅÑ gov 2 ðÒÁ×ÉÔÅÌØÓÔ×ÅÎÎÙÊ ÄÏÍÅÎ óûá gp 1 ç×ÁÄÅÌÕÐÁ (æÒÁÎÃÉÑ) gq 1 üË×ÁÔÏÒÉÁÌØÎÁÑ ç×ÉÎÅÑ gr 2 çÒÅÃÉÑ gs 1 àÖÎÁÑ äÖÏÒÄÖÉÑ É óÜÎÄ×ÉÞÅ×Ù ÏÓÔÒÏ×Á gt 3 ç×ÁÔÅÍÁÌÁ gu 1 çÕÁÍ (óûá) gw 1 ç×ÉÎÅÑ-âÅÓÁÕ gy 1 çÁÊÁÎÁ hk 3 çÏÎËÏÎÇ hm 1 èÉÒÄ É ÏÓÔÒÏ×Á íÁËÄÏÎÁÌØÄÁ hn 2 çÏÎÄÕÒÁÓ hr 2 èÏÒ×ÁÔÉÑ ht 1 çÁÉÔÉ hu 2 ÷ÅÎÇÒÉÑ id 3 éÎÄÏÎÅÚÉÑ ie 2 éÒÌÁÎÄÉÑ il 3 éÚÒÁÉÌØ im 1 ïÓÔÒÏ× íÜÎ in 3 éÎÄÉÑ int 1 äÏÍÅÎ ÍÅÖÄÕÎÁÒÏÄÎÙÈ ÏÒÇÁÎÉÚÁÃÉÊ io 1 âÒÉÔÁÎÓËÁÑ ÔÅÒÒÉÔÏÒÉÑ éÎÄÉÊÓËÏÇÏ ïËÅÁÎÁ iq 1 éÒÁË ir 1 éÒÁÎ is 2 éÓÌÁÎÄÉÑ it 2 éÔÁÌÉÑ je 1 äÖÅÒÓÉ jm 3 ñÍÁÊËÁ jo 3 éÏÒÄÁÎÉÑ jp 3 ñÐÏÎÉÑ ke 3 ëÅÎÉÑ kg 1 ëÉÒÇÉÚÓÔÁÎ kh 1 ëÁÍÂÏÄÖÁ ki 1 ëÉÒÉÂÁÔÉ km 1 ëÏÍÏÒÏ kn 1 óÅÎÔ-ëÉÔÓ É îÅ×ÉÓ kp 1 óÅ×ÅÒÎÁÑ ëÏÒÅÑ kr 3 àÖÎÁÑ ëÏÒÅÑ kw 3 ëÕ×ÅÊÔ ky 1 ëÁÊÍÁÎÏ×Ù ÏÓÔÒÏ×Á kz 1 ëÁÚÁÈÓÔÁÎ la 1 ìÁÏÓ lb 3 ìÉ×ÁÎ lc 1 óÅÎÔ-ìÀÓÉÑ li 2 ìÉÈÔÅÎÛÔÅÊÎ lk 1 ûÒÉ-ìÁÎËÁ lr 1 ìÉÂÅÒÉÑ ls 1 ìÅÓÏÔÏ lt 2 ìÉÔ×Á lu 2 ìÀËÓÅÍÂÕÒÇ lv 2 ìÁÔ×ÉÑ ly 1 ìÉ×ÉÑ ma 1 íÁÒÏËËÏ mc 2 íÏÎÁËÏ md 1 íÏÌÄÁ×ÉÑ mg 1 íÁÄÁÇÁÓËÁÒ mh 1 íÁÒÛÁÌÏ×Ù ÏÓÔÒÏ×Á mil 2 äÏÍÅÎ ÷ÏÏÒÕÖÅÎÎÙÈ óÉÌ óûá mk 3 íÁËÅÄÏÎÉÑ ml 1 íÁÌÉ mm 1 íÁÑÎÍÁÒ mn 1 íÏÎÇÏÌÉÑ mo 1 íÁËÁÏ mp 1 óÅ×ÅÒÎÙÅ íÁÒÉÁÎÓËÉÅ ÏÓÔÒÏ×Á mq 1 íÁÒÔÉÎÉËÁ (æÒÁÎÃÉÑ) mr 1 íÁ×ÒÉÔÁÎÉÑ ms 1 íÏÎÓÅÒÒÁÔ mt 3 íÁÌØÔÁ mu 1 íÁ×ÒÉËÉÊ mv 1 íÁÌØÄÉ×Ù mw 1 íÁÌÁ×É mx 3 íÅËÓÉËÁ my 3 íÁÌÁÊÚÉÑ mz 1 íÏÚÁÍÂÉË na 1 îÁÍÉÂÉÑ nc 1 îÏ×ÁÑ ëÁÌÅÄÏÎÉÑ (æÒÁÎÃÉÑ) ne 1 îÉÇÅÒ net 2 óÅÔÅ×ÏÊ ÄÏÍÅÎ nf 1 ïÓÔÒÏ×Á îÏÒÆÏÌËÁ ng 1 îÉÇÅÒÉÑ ni 3 îÉËÁÒÁÇÕÁ nl 2 îÉÄÅÒÌÁÎÄÙ no 2 îÏÒ×ÅÇÉÑ np 1 îÅÐÁÌ nr 1 îÁÕÒÕ nu 2 îÉÕÜ nz 3 îÏ×ÁÑ úÅÌÁÎÄÉÑ om 1 ïÍÁÎ org 2 äÏÍÅÎ ÎÅËÏÍÍÅÒÞÅÓËÉÈ ÏÒÇÁÎÉÚÁÃÉÊ pa 3 ðÁÎÁÍÁ pe 3 ðÅÒÕ pf 1 æÒÁÎÃÕÚÓËÁÑ ðÏÌÉÎÅÚÉÑ pg 3 ðÁÐÕÁ-îÏ×ÁÑ ç×ÉÎÅÑ ph 3 æÉÌÉÐÐÉÎÙ pk 3 ðÁËÉÓÔÁÎ pl 3 ðÏÌØÛÁ pm 1 óÅÎ-ðØÅÒ É íÉËÅÌÏÎ pn 1 ïÓÔÒÏ× ðÉÔËÅÒÎ pr 1 ðÕÅÒÔÏ-òÉËÏ pt 2 ðÏÒÔÕÇÁÌÉÑ pw 1 ðÁÌÁÕ py 3 ðÁÒÁÇ×ÁÊ qa 1 ëÁÔÁÒ re 1 æÒÁÎÃÕÚÓËÉÊ òÅÀÎØÏÎ ro 2 òÕÍÙÎÉÑ ru 2 òÏÓÓÉÑ rw 1 òÕÁÎÄÁ sa 3 óÁÕÄÏ×ÓËÁÑ áÒÁ×ÉÑ sb 1 óÏÌÏÍÏÎÏ×Ù ÏÓÔÒÏ×Á sc 1 óÅÊÛÅÌØÓËÉÅ ÏÓÔÒÏ×Á sd 1 óÕÄÁÎ se 2 û×ÅÃÉÑ sg 3 óÉÎÇÁÐÕÒ sh 1 ïÓÔÒÏ× ó×ÑÔÏÊ åÌÅÎÙ si 2 óÌÏ×ÅÎÉÑ sj 1 ó×ÁÌØÂÅÒÄ É ÏÓÔÒÏ×Á ñÎ íÅÊÅÎ sk 2 òÅÓÐÕÂÌÉËÁ óÌÏ×ÁËÉÑ sl 1 óØÅÒÒÁ-ìÅÏÎÅ sm 1 óÁÎ-íÁÒÉÎÏ sn 1 óÅÎÅÇÁÌ so 1 óÏÍÁÌÉ sr 1 óÕÒÉÎÁÍ st 1 óÁÎ-ôÏÍÅ É ðÒÉÎÓÉÐÉ su 2 óÔÁÒÙÊ ÄÏÍÅÎ óóóò sv 3 óÁÌØ×ÁÄÏÒ sy 1 óÉÒÉÑ sz 1 ó×ÁÚÉÌÅÎÄ tc 1 ïÓÔÒÏ×Á ôÅÒËÓ É ëÁÊËÏÓ td 1 þÁÄ tf 1 æÒÁÎÃÕÚÓËÉÅ ÀÖÎÙÅ ÔÅÒÒÉÔÏÒÉÉ tg 1 ôÏÇÏ th 3 ôÁÉÌÁÎÄ tj 1 ôÁÄÖÉËÉÓÔÁÎ tk 1 ôÏËÅÌÁÕ tl 1 ÷ÏÓÔÏÞÎÙÊ ôÉÍÏÒ tm 1 ôÕÒËÍÅÎÉÓÔÁÎ tn 1 ôÕÎÉÓ to 1 ôÏÎÇÁ tp 1 ÷ÏÓÔÏÞÎÙÊ ôÉÍÏÒ tr 3 ôÕÒÃÉÑ tt 3 ôÒÉÎÉÄÁÄ É ôÏÂÁÇÏ tv 1 ôÕ×ÁÌÕ tw 3 ôÁÊ×ÁÎØ tz 1 ôÁÎÚÁÎÉÑ ua 3 õËÒÁÉÎÁ ug 3 õÇÁÎÄÁ uk 3 ïÂßÅÄÉÎÅÎÎÏÅ ëÏÒÏÌÅ×ÓÔ×Ï ÷ÅÌÉËÏÂÒÉÔÁÎÉÉ um 1 ïÓÔÒÏ×Á USA Minor Outlying us 4 óÏÅÄÉÎÅÎÎÙÅ ûÔÁÔÙ áÍÅÒÉËÉ uy 3 õÒÕÇ×ÁÊ uz 1 õÚÂÅËÉÓÔÁÎ va 1 ÷ÁÔÉËÁÎ vc 1 óÅÎÔ-÷ÉÎÓÅÎÔ É çÒÅÎÁÄÉÎÅÓ ve 3 ÷ÅÎÉÓÕÜÌÁ vg 1 ïÓÔÒÏ×Á ÷ÉÒÇÉÎÉÉ (÷ÅÌÉËÏÂÒÉÔÁÎÉÑ) vi 1 ïÓÔÒÏ×Á ÷ÉÒÇÉÎÉÉ (óûá) vn 1 ÷ØÅÔÎÁÍ vu 1 ÷ÁÎÕÁÔÕ wf 1 ïÓÔÒÏ×Á ÷ÏÌÌÉÓ É æÕÔÕÎÁ ws 1 óÁÍÏÁ ye 1 êÅÍÅÎ yt 1 íÁÊÏÔÔÅ yu 3 àÇÏÓÌÁ×ÉÑ za 3 àÖÎÏ-áÆÒÉËÁÎÓËÁÑ òÅÓÐÕÂÌÉËÁ zm 1 úÁÍÂÉÑ zr 1 äÅÍÏËÒÁÔÉÞÅÓËÁÑ ÒÅÓÐÕÂÌÉËÁ ëÏÎÇÏ zw 3 úÉÍÂÁÂ×Å analog-ce-6.0.17/lang/ruform.html000066400000000000000000000207601406366436600165770ustar00rootroot00000000000000 æÏÒÍÁ ÕÐÒÁ×ÌÅÎÉÑ ÁÎÁÌÉÚÁÔÏÒÏÍ ÌÏÇÏ× Analog

æÏÒÍÁ ÕÐÒÁ×ÌÅÎÉÑ ÁÎÁÌÉÚÁÔÏÒÏÍ ÌÏÇÏ× Analog


1. îÁÓÔÒÏÊËÁ ÏÔÞ£ÔÁ

÷ÎÉÍÁÎÉÅ ! äÁÎÎÁÑ ÆÏÒÍÁ ÐÏËÁ ÎÅ ÎÁÓÔÒÏÅÎÁ, É, ×ÏÚÍÏÖÎÏ, ÎÅ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ. ÷ÁÍ ÎÅÏÂÈÏÄÉÍÏ ×ÒÕÞÎÕÀ ÎÁÓÔÒÏÉÔØ ÎÅËÏÔÏÒÙÅ ÐÁÒÁÍÅÔÒÙ É ÐÕÔÉ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ × ÆÁÊÌÅ ruform.html ðÏÓÌÅ ÎÁÓÔÒÏÊËÉ ÜÔÏ ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ ÍÏÖÎÏ ÕÄÁÌÉÔØ.
óÍ. ÏÓÎÏ×ÎÏÊ ÓÁÊÔ ÐÒÏÇÒÁÍÍÙ analog ÄÌÑ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ ÉÍÅÀÝÉÈÓÑ ×ÏÚÍÏÖÎÏÓÔÅÊ.

ëÁËÉÅ ÏÔÞÅÔÙ ×Ù×ÏÄÉÔØ?


[÷ËÌ.] [ïÔËÌ.] ïÂÝÁÑ ÉÎÆÏÒÍÁÃÉÑ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô ÐÏ ÍÅÓÑÃÁÍ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô ÐÏ ÎÅÄÅÌÑÍ
[÷ËÌ.] [ïÔËÌ.] éÔÏÇÉ ÐÏ ÄÎÑÍ
[÷ËÌ.] [ïÔËÌ.] ëÁÖÄÙÊ ÄÅÎØ ÐÏÄÒÏÂÎÏ
[÷ËÌ.] [ïÔËÌ.] éÔÏÇÉ ÐÏ ÞÁÓÁÍ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô ÐÏ ÄÏÍÅÎÁÍ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô ÐÏ ÐÏÄÄÏÍÅÎÁÍ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô Ï ËÁÔÁÌÏÇÁÈ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô Ï ÔÉÐÁÈ ÆÁÊÌÏ×
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô Ï ÚÁÐÒÏÓÁÈ
[÷ËÌ.] [ïÔËÌ.] òÁÚÍÅÒÙ ÆÁÊÌÏ×
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô Ï ÓÓÙÌËÁÈ
[÷ËÌ.] [ïÔËÌ.] óÓÙÌËÉ Ó ÐÏÉÓËÏ×ÉËÏ×
[÷ËÌ.] [ïÔËÌ.] ëÌÀÞÅ×ÙÅ ÓÌÏ×Á ÐÒÉ ÕÓÐÅÛÎÏÍ ÐÏÉÓËÅ
[÷ËÌ.] [ïÔËÌ.] òÁÓËÌÁÄ ÐÏ ÂÒÁÕÚÅÒÁÍ
[÷ËÌ.] [ïÔËÌ.] òÁÓËÌÁÄ ÐÏ ÏÐÅÒÁÃÉÏÎÎÙÍ ÓÉÓÔÅÍÁÍ
[÷ËÌ.] [ïÔËÌ.] ïÔÞ£Ô Ï ÓÔÁÔÕÓÅ ÚÁÐÒÏÓÏ×

óÅÊÞÁÓ ÍÏÖÎÏ ÚÁÐÕÓÔÉÔØ ÐÒÏÇÒÁÍÍÕ ÁÎÁÌÉÚÁ:
, ÌÉÂÏ ÍÏÖÎÏ ÕÔÏÞÎÉÔØ ÐÁÒÁÍÅÔÒÙ ÏÔÄÅÌØÎÙÈ ÏÔÞ£ÔÏ× × ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÆÏÒÍÅ, ÒÁÓÐÏÌÏÖÅÎÎÏÊ ÎÉÖÅ.
÷Ù ÍÏÖÅÔÅ ÄÌÑ ÎÅËÏÔÏÒÙÈ ÐÏÌÅÊ ÕËÁÚÁÔØ ÚÎÁÞÅÎÉÑ. îÁÐÒÉÍÅÒ, (Ó ÁÎÇÌ. ÂÕË×ÏÊ) ÄÌÑ ÒÁÚÍÅÒÁ 10 MB; ÉÌÉ (Ó ÍÉÎÕÓÏÍ) ÄÌÑ ÏÓÔÁÌØÎÙÈ ÐÁÒÁÍÅÔÒÏ×.


2. äÅÔÁÌØÎÙÅ ÏÐÃÉÉ ÄÌÑ ÏÔÄÅÌØÎÙÈ ÏÔÞ£ÔÏ×

ïÔÞ£Ô Ï ÄÏÍÅÎÁÈ

ðÏÒÑÄÏË ÓÏÒÔÉÒÏ×ËÉ × ÏÔÞ£ÔÅ ÐÏ ÄÏÍÅÎÁÍ
÷ËÌÀÞÁÔØ ×ÓÅ ÄÏÍÅÎÙ, ÐÒÅ×ÙÓÉ×ÛÉÅ:

ïÔÞ£Ô ÐÏ ÐÏÄÄÏÍÅÎÁÍ

ðÏÒÑÄÏË ÓÏÒÔÉÒÏ×ËÉ
÷ËÌÀÞÁÔØ ×ÓÅ ÐÏÄÄÏÍÅÎÙ, ÐÒÅ×ÙÓÉ×ÛÉÅ:

ïÔÞ£Ô ÐÏ ËÁÔÁÌÏÇÁÍ

ðÏÒÑÄÏË ÓÏÒÔÉÒÏ×ËÉ ÏÔÞ£ÔÁ ÐÏ ËÁÔÁÌÏÇÁÍ
÷ËÌÀÞÁÔØ ×ÓÅ ÐÏÄÄÏÍÅÎÙ ÐÒÅ×ÙÓÉ×ÛÉÅ:

ïÔÞ£Ô ÐÏ ËÏÌÉÞÅÓÔ×Õ ÚÁÐÒÏÓÏ×

ðÏÒÑÄÏË ÓÏÒÔÉÒÏ×ËÉ ÏÔÞ£ÔÁ Ï ÏÂÝÅÍ ËÏÌÉÞÅÓÔ×Å ÚÁÐÒÏÓÏ×
÷ËÌÀÞÁÔØ ×ÓÅ ÆÁÊÌÙ, ÐÒÅ×ÙÓÉ×ÛÉÅ:
ðÏËÁÚÁÔØ

ïÔÞ£Ô Ï ÓÓÙÌËÁÈ ÎÁ ÓÅÒ×ÅÒ

ðÏÒÑÄÏË ÓÏÒÔÉÒÏ×ËÉ ÏÔÞ£ÔÁ
÷ËÌÀÞÁÔØ ×ÓÅ ÓÓÙÌÁÀÝÉÅÓÑ ÎÁ ÎÁÓ ÓÔÒÁÎÉÃÙ, ÐÒÅ×ÙÓÉ×ÛÉÅ:

3. áÎÁÌÉÚÉÒÏ×ÁÔØ ÔÏÌØËÏ ÞÁÓÔØ ÖÕÒÎÁÌØÎÏÇÏ ÆÁÊÌÁ

ðÒÏÓÍÏÔÒÅÔØ ÔÏÌØËÏ ÕËÁÚÁÎÎÙÊ ÄÉÁÐÁÚÏÎ ÄÁÔ ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÉÎÔÅÒÅÓÕÀÝÉÊ ×ÁÓ ÄÉÁÐÁÚÏÎ ÄÁÔ × ÆÏÒÍÁÔÅ yymmdd; ÎÁÐÒÉÍÅÒ, 011020 ÄÌÑ 20 ÏËÔÑÂÒÑ 2001 ÇÏÄÁ. ÷Ù ÍÏÖÅÔÅ ÕËÁÚÁÔØ ÔÏÌØËÏ ÏÄÎÕ ÄÁÔÕ, ÔÏÇÄÁ ×ÔÏÒÁÑ ÄÁÔÁ ÂÕÄÅÔ ÏÔÓÞÉÔÙ×ÁÔØÓÑ ÏÔ ÎÁÞÁÌÁ (ÉÌÉ ÄÏ ËÏÎÃÁ) ÌÏÇÁ.
From to

ðÒÏÓÍÏÔÒÅÔØ ÔÏÌØËÏ ÕËÁÚÁÎÎÙÊ ÖÕÒÎÁÌØÎÙÊ ÆÁÊÌ
÷Ù ÍÏÖÅÔÅ ÚÁÄÁÔØ ÓÐÉÓÏË ÌÏÇ-ÆÁÊÌÏ×, ÒÁÚÄÅÌ£ÎÎÙÈ ÚÁÐÑÔÙÍÉ. íÅÔÁ-ÓÉÍ×ÏÌ * ÂÕÄÅÔ ÒÁÓÛÉÒÅÎ ÄÏ ÓÐÉÓËÁ ÕÄÏ×ÌÅÔ×ÏÒÑÀÝÉÈ ÛÁÂÌÏÎÕ ÆÁÊÌÏ×.

éÓËÌÀÞÉÔØ ÕËÁÚÁÎÎÙÅ ÆÁÊÌÙ, ÐÒÁ×ÉÌÁ ÔÁËÉÅ ÖÅ.


4. úÁÇÏÌÏ×ÏË ÏÔÞ£ÔÁ

îÁÚ×ÁÎÉÅ ÏÒÇÁÎÉÚÁÃÉÉ (ÓÁÊÔÁ), ÓÔÁÎÅÔ ÎÁÚ×ÁÎÉÅÍ ÏÔÞÅÔÏÍ

áÄÒÅÓ ÓÁÊÔÁ × ÉÎÔÅÒÎÅÔÅ
URL:


analog-ce-6.0.17/lang/se.lng000066400000000000000000000312201406366436600155010ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Svensk version av www.imc-ab.com ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Sö Må Ti On To Fr Lö Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" veckostart år ## Quarter of a year kvartal månad dag dagar tim minut minuter sekund sekunder byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes anrop anrop datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum tid tid startdatum starttid senaste datum senaste gången fil filer domän domäner virtuell domän virtuella domäner katalog kataloger domän domäner organisation organisationer filtyp filtyper URL URLer webbklient webbklienter OS OS ## (= operating system, operating systems) storlek sökord sökord sajt sajter användare användare statuskod statuskoder Webserverstatistik för ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Allmänt ## The time reports, plus "busiest" strings (at the bottom of each report) Årsrapport Intensivaste år: Kvartalsrapport Intensivaste kvartal: Månadsrapport Intensivaste månad: Veckorapport Intensivaste vecka: vecka börjar Daglig summering Daglig rapport Bästa dag: Timrapport Timsummering Summering, veckotimme Intensivaste timma: Kvartsrapport Summering, kvartar Intensivaste kvart: Femminutsrapport Femminutssummering Intensivaste fem minuter: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Domänrapport domän domäner n Omdirigeringsrapport, värdar värd värdar n Felrapport, värdar värd värdar n Katalograpport katalog kataloger n Filtypsrapport filtyp filtyper n Anropsrapport fil filer n Omdirigeringsrapport fil filer n Felrapport fil filer n Referensrapport refererande URL refererande URLer n Refererande Sajt-rapport refererande sajt refererande sajter n Omdirigerad Referens-rapport referring URL referring URLs n Felaktig Referens-rapport referring URL referring URLs n Sökrapport sökbegrepp sökbegrepp n Sökordsrapport sökord sökord n Intern sökrapport förfrågan förfrågningar n Intern sökordsrapport sökord sökord n Virtuell domänrapport virtuell domän virtuella domäner n Omdirigeringsrapport, virtuella värdar virtuell värd virtuella värdar n Felrapport, virtuella värdar virtuell värd virtuella värdar n Användarrapport användare användare n Omdirigeringsrapport, användare användare användare n Felande användare-rapport användare användare n Webbklientsummering webbklient webbklienter n Webbklientrapport webbklient webbklienter n Operativsystemsrapport operativsystem operativsystem n Toppdomänsrapport toppdomän toppdomäner n Organisationsrapport organisation organisationer n Statuskodrapport statuskod statuskoder n Exekveringstidsrapport Filstorleksrapport ## Used at the bottom of the report Analysen gjord av Exekveringstid Mindre än 1 ## Used in the time reports Varje enhet representerar eller del av access till en sida accesser till sidor ## Used at the bottom of each non-time report: need m, f & n genders inte listade inte listade inte listade ## Used on the pie charts: again need m, f & n genders Andra Andra Andra ## Used at the top of the report Programmet startade Analyserade accesser från till ## Used in the General Summary Serveranrop Medeltal serveranrop per dag Serveranrop till sidor Medeltal serveranrop till sidor per dag Logfilsrader utan statuskod Felaktiga serveranrop Omdirigerade serveranrop serveranrop med infostatuskod Distinkta filer accessade Distinkta domäner servade Fel i rader ur loggfilen Felande loggfilsrader Data skickade Medeltal data skickade per dag Data inom parentes visar 7 dagar till senaste 7 dagarna Gå till Topp ## Some special phrases for particular reports. [oupplösta numeriska adresser] [domän ej angiven] [okänd domän] [rootmapp] [saknar mapp] [saknar tillägg] [kataloger] Okänd Windows Annan Unix Robotar OS okänt ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #acc 7 dagar Anrop %acc %7 dagar Anrop sidor 7 dagar Sidor %sidor %7 dagar Sidor bytes ?bytes 7 dagar bytes 7 dagar ?bytes %bytes %7 dagar bytes antal ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listar de första %s * * Listar de första %d %s * * Listar %s ## "by" in the phrase "listing the top 3 files BY number of requests" efter ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors serveranrop de senaste 7 dagarna serveranrop de senaste 7 dagarna anrop till sida de senaste 7 dagarna anrop till sidor de senaste 7 dagarna Omdirigerat serveranrop Omdirigerade serveranrop omdirigerat serveranrop de senaste 7 dagarna omdirigerade serveranrop de senaste 7 dagarna felaktigt serveranrop felaktiga serveranrop felaktigt serveranrop de senaste 7 dagarna felaktiga serveranrop de senaste 7 dagarna % av trafiken % av trafiken de senaste 7 dagarna % av den maximala trafiken % av den maximala trafiken de senaste 7 dagarna byte, trafik bytes, trafik ## ?bytes represents kbytes, Mbytes etc. ?bytes, trafik byte, trafik de senaste 7 dagarna bytes, trafik de senaste 7 dagarna ?bytes, trafik de senaste 7 dagarna serveranrop sedan med ett omdirigerat serveranrop sedan med ett felaktigt serveranrop sedan med första serveranrop sedan med första omdirigerade serveranrop sedan med första felaktiga serveranrop sedan ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorterad efter ## Used at the top of each report Denna rapport innehåller data från ## Used in pie charts Plottat som ## different ways of sorting procent av antal bytes trafikmängden de senaste 7 dagarna % av serveranrop % av serveranrop de senaste 7 dagarna % av det maximala antalet anrop % av det maximala antalet anrop de senaste 7 dagarna antal serveranrop antal serveranrop de senaste 7 dagarna % av anrop till sidor % av anrop till sidor de senaste 7 dagarna % av det maximala antalet anrop till sidor % av det maximala antalet anrop till sidor de senaste 7 dagarna antal anrop till sidor antal anrop till sidor de senaste 7 dagarna % av omdirigerade anrop % av omdirigerade anrop de senaste 7 dagarna % av det maximala antalet omdirigerade anrop % av det maximala antalet omdirigerade anrop de senaste 7 dagarna antal omdirigerade anrop antal omdirigerade anrop de senaste 7 dagarna % av felaktiga anrop % av felaktiga anrop de senaste 7 dagarna % av det maximala antalet felaktiga anrop % av det maximala antalet felaktiga anrop de senaste 7 dagarna antal felaktiga anrop antal felaktiga anrop de senaste 7 dagarna senaste serveranrop senaste omdirigerade serveranrop senaste felaktiga serveranrop tidpunkt för första anrop tidpunkt för första omdirigerade serveranrop tidpunkt för första felaktiga serveranrop ## 3 other ways of sorting in m, f, & n * * i alfabetisk ordning * * sorterat numeriskt * * ej sorterat ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y-%m-%D %H:%n ## "Program started at" and "Analysed requests from" %w %D %m %Y %H:%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:% ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %y klockan %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/se2.lng000066400000000000000000000323271406366436600155740ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Alternative Swedish translation by Christian Rose . ## (This translation aims to use fewer Anglicisms than the other Swedish ## translation.) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. sön mån tis ons tor fre lör jan feb mar apr maj jun jul aug sep okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" veckostart år ## Quarter of a year kvartal månad dygn dygn timme minut minuter sekund sekunder byte byte ## ?bytes represents kbytes, Mbytes etc. ?byte begäran begäranden datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum tid tid startdatum starttid slutdatum sluttid fil filer värd värdar virtuell värd virtuella värdar katalog kataloger domän domäner organisation organisationer filändelse filändelser URL URL:er webbläsare webbläsare operativsystem operativsystem ## (= operating system, operating systems) storlek sökuttryck sökuttryck webbplats webbplatser användare användare statuskod statuskoder Webbserverstatistik för ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sammanfattning ## The time reports, plus "busiest" strings (at the bottom of each report) Årsrapport Intensivaste året: Kvartalsrapport Intensivaste kvartalet: Månadsrapport Intensivaste månaden: Veckorapport Intensivaste veckan: veckan som började Dygnssammanfattning Dygnsrapport Intensivaste dygnet: Timrapport Timsammanfattning Sammanfattning för intensivaste timmen i veckan Intensivaste timmen: Kvartrapport Kvartsammanfattning Intensivaste kvarten: Femminutersrapport Femminuterssammanfattning Intensivaste fem minuterna: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Värdrapport värd värdarna n Värdomdirigeringsrapport värd värdarna n Värdfelrapport värd värdarna n Katalograpport katalog katalogerna n Filtypsrapport filändelse filändelserna n Begäransrapport fil filerna n Omdirigeringsrapport fil filerna n Felrapport fil filerna n Hänvisarrapport hänvisande URL hänvisande URL:erna n Rapport över hänvisande webbplatser hänvisande webbplats hänvisande webbplatserna n Rapport över omdirigerade hänvisningar hänvisande URL hänvisande URL:erna n Rapport över misslyckade hänvisningar hänvisande URL hänvisande URL:erna n Sökuttrycksrapport sökuttryck sökuttrycken n Sökordsrapport sökord sökorden n Rapport över interna sökuttryck sökuttryck sökuttrycken n Rapport över interna sökord sökord sökorden n Rapport över virtuella domäner virtuell domän virtuella domänerna n Rapport över omdirigering i virtuella domäner virtuell domän virtuella domänerna n Rapport över fel i virtuella domäner virtuell värd virtuella värdarna n Användarrapport användare användarna n Användaromdirigeringsrapport användare användarna n Användarfelrapport användare användarna n Webbläsarsammanfattning webbläsare webbläsarna n Webbläsarrapport webbläsare webbläsarna n Operativsystemsrapport operativsystem operativsystemen n Domänrapport domän domänerna n Organisationsrapport organisation organisationerna n Statuskodsrapport statuskod statuskoderna n Exekveringstidsrapport Filstorleksrapport ## Used at the bottom of the report Denna analys gjordes av Exekveringstid Mindre än 1 ## Used in the time reports Varje enhet motsvarar eller del av begäran av en sida begäranden av sidor ## Used at the bottom of each non-time report: need m, f & n genders * * inte listade ## Used on the pie charts: again need m, f & n genders * * Annat ## Used at the top of the report Programmet startade Analyserade begäranden från till ## Used in the General Summary Lyckade begäranden Medelantal lyckade begäranden per dygn Lyckade begäranden av sidor Medelantal lyckade begäranden av sidor per dygn Loggfilsrader utan statuskod Misslyckade begäranden Omdirigerade begäranden Begäranden med informativ statuskod Distinkta begärda filer Distinkta betjänade värdar Felaktiga loggfilsrader Oönskade loggfilsrader Skickad data Medeltal skickad data per dygn Data inom parantes är de 7 dygnen innan senaste 7 dygnen Gå till Början ## Some special phrases for particular reports. [ouppslagna numeriska adresser] [domän inte angiven] [okänd domän] [rotkatalog] [ingen katalog] [ingen filändelse] [kataloger] Okänt Windows Annat Unix Robotar Okänt operativsystem ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) beg 7-dygns beg %beg %7-dygns beg sidor 7-dygns sidor %sidor %7-dygns sidor byte ?byte 7-dygns byte 7-dygns ?byte %byte %7-dygns byte nr ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listar de översta %s * * Listar de översta %d %s * * Listar %s ## "by" in the phrase "listing the top 3 files BY number of requests" efter ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors begäran de senaste 7 dygnen begäranden de senaste 7 dygnen begäran av en sida de senaste 7 dygnen begäranden av sidor de senaste 7 dygnen omdirigerad begäran omdirigerade begäranden omdirigerad begäran de senaste 7 dygnen omdirigerade begäranden de senaste 7 dygnen misslyckad begäran misslyckade begäranden misslyckad begäran de senaste 7 dygnen misslyckade begäranden de senaste 7 dygnen % av trafiken % av trafiken de senaste 7 dygnen % av den största mängden trafik % av den största mängden trafik de senaste 7 dygnen byte trafik byte trafik ## ?bytes represents kbytes, Mbytes etc. ?byte trafik byte trafik de senaste 7 dygnen byte trafik de senaste 7 dygnen ?byte trafik de senaste 7 dygnen med en begäran sedan med en omdirigerad begäran sedan med en misslyckad begäran sedan med första begäran sedan med första omdirigerade begäran sedan med första misslyckade begäran sedan ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorterade efter ## Used at the top of each report Denna rapport innehåller data från ## Used in pie charts Tårtbitarna ritas efter ## different ways of sorting mängden trafik mängden trafik de senaste 7 dygnen % av antalet begäranden % av antalet begäranden de senaste 7 dygnen % av det största antalet begäranden % av det största antalet begäranden de senaste 7 dygnen antalet begäranden antalet begäranden de senaste 7 dygnen % av antalet begäranden av sidor % av antalet begäranden av sidor de senaste 7 dygnen % av det största antalet begäranden av sidor % av det största antalet begäranden av sidor de senaste 7 dygnen antalet begäranden av sidor antalet begäranden av sidor de senaste 7 dygnen % av antalet omdirigerade begäranden % av antalet omdirigerade begäranden de senaste 7 dygnen % av det största antalet omdirigerade begäranden % av det största antalet omdirigerade begäranden de senaste 7 dygnen antalet omdirigerade begäranden antalet omdirigerade begäranden de senaste 7 dygnen % av misslyckade begäranden % av misslyckade begäranden de senaste 7 dygnen % av största antalet misslyckade begäranden % av största antalet misslyckade begäranden de senaste 7 dygnen antalet misslyckade begäranden antalet misslyckade begäranden de senaste 7 dygnen tiden för senaste begäran tiden för senaste omdirigerade begäran tiden för senaste misslyckade begäran tiden för första begäran tiden för första omdirigerade begäran tiden för första misslyckade begäran ## 3 other ways of sorting in m, f, & n * * sorterat alfabetiskt * * sorterat numeriskt * * inte sorterat ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. fm em ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %H.%n ## "Program started at" and "Analysed requests from" %w %d %m %Y %H.%n ## In Daily Report %d %m %Y ## In Daily Summary %w ## In Hourly Report %d %m %Y %H.%n%x%I.%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H.%n%x%I.%o ## In Quarter-Hour and Five-Minute Reports %d %m %Y %H.%n%x%I.%o ## In Quarter-Hour and Five-Minute Summaries %H.%n%x%I.%o ## In Weekly Report %d %m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %Y ## The date & time (D) column in non-time reports %d %m %Y %H.%n ## In non-time reports: "listing files with requests since [date]" %d %m %Y kl. %H.%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Fortsätt med begäran 101 Byter protokoll 1xx [Diverse informativa] 200 OK 201 Skapad 202 Accepterad för fortsatt behandling 203 Ickeauktorativ information 204 OK, men ingenting att skicka 205 Nollställ dokument 206 Endast del av dokument 2xx [Diverse lyckade] 300 Flera dokument finns tillgängliga 301 Dokumentet har flyttat permanent 302 Dokumentet hittat på annan plats 303 Se annat dokument 304 Inte ändrat sedan senaste hämtningen 305 Använd proxy 306 Byt proxy 307 Dokumentet har flyttats temporärt 3xx [Diverse omdirigeringar] 400 Felaktig begäran 401 Autentisering krävs 402 Betalning krävs 403 Tillträde förbjudet 404 Dokumentet kunde inte hittas 405 Metoden inte tillåten 406 Dokumentet inte godtagbart av klienten 407 Proxyautentisering krävs 408 Time-out av begäran 409 Begäran är i konflikt med resursens tillstånd 410 Dokumentet är borta permanent 411 Längd krävs 412 Förutsättning krävs 413 Begäran är för lång 414 Begärt filnamn är för långt 415 Mediatypen stöds inte 416 Begärt intervall är ogiltigt 417 Förväntan misslyckades 4xx [Diverse klient- och användarfel] 500 Internt serverfel 501 Typen av begäran stöds inte 502 Fel vid servern uppströms 503 Tjänsten är tillfälligt otillgänglig 504 Gateway-timeout 505 HTTP-versionen stöds inte 506 Omdirigering misslyckades 5xx [Diverse serverfel] xxx [Okända] analog-ce-6.0.17/lang/se2a.lng000066400000000000000000000327171406366436600157400ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Alternative Swedish translation by Christian Rose . ## (This translation aims to use fewer Anglicisms than the other Swedish ## translation.) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. soe maa tis ons tor fre loe jan feb mar apr maj jun jul aug sep okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" veckostart aar ## Quarter of a year kvartal maanad dygn dygn timme minut minuter sekund sekunder byte byte ## ?bytes represents kbytes, Mbytes etc. ?byte begaeran begaeranden datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum tid tid startdatum starttid slutdatum sluttid fil filer vaerd vaerdar virtuell vaerd virtuella vaerdar katalog kataloger domaen domaener organisation organisationer filaendelse filaendelser URL URL:er webblaesare webblaesare operativsystem operativsystem ## (= operating system, operating systems) storlek soekuttryck soekuttryck webbplats webbplatser anvaendare anvaendare statuskod statuskoder Webbserverstatistik foer ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Sammanfattning ## The time reports, plus "busiest" strings (at the bottom of each report) AArsrapport Intensivaste aaret: Kvartalsrapport Intensivaste kvartalet: Maanadsrapport Intensivaste maanaden: Veckorapport Intensivaste veckan: veckan som boerjade Dygnssammanfattning Dygnsrapport Intensivaste dygnet: Timrapport Timsammanfattning Sammanfattning foer intensivaste timmen i veckan Intensivaste timmen: Kvartrapport Kvartsammanfattning Intensivaste kvarten: Femminutersrapport Femminuterssammanfattning Intensivaste fem minuterna: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Vaerdrapport vaerd vaerdarna n Vaerdomdirigeringsrapport vaerd vaerdarna n Vaerdfelrapport vaerd vaerdarna n Katalograpport katalog katalogerna n Filtypsrapport filaendelse filaendelserna n Begaeransrapport fil filerna n Omdirigeringsrapport fil filerna n Felrapport fil filerna n Haenvisarrapport haenvisande URL haenvisande URL:erna n Rapport oever haenvisande webbplatser haenvisande webbplats haenvisande webbplatserna n Rapport oever omdirigerade haenvisningar haenvisande URL haenvisande URL:erna n Rapport oever misslyckade haenvisningar haenvisande URL haenvisande URL:erna n Soekuttrycksrapport soekuttryck soekuttrycken n Soekordsrapport soekord soekorden n Rapport oever interna soekuttryck soekuttryck soekuttrycken n Rapport oever interna soekord soekord soekorden n Rapport oever virtuella domaener virtuell domaen virtuella domaenerna n Rapport oever omdirigering i virtuella domaener virtuell domaen virtuella domaenerna n Rapport oever fel i virtuella domaener virtuell vaerd virtuella vaerdarna n Anvaendarrapport anvaendare anvaendarna n Anvaendaromdirigeringsrapport anvaendare anvaendarna n Anvaendarfelrapport anvaendare anvaendarna n Webblaesarsammanfattning webblaesare webblaesarna n Webblaesarrapport webblaesare webblaesarna n Operativsystemsrapport operativsystem operativsystemen n Domaenrapport domaen domaenerna n Organisationsrapport organisation organisationerna n Statuskodsrapport statuskod statuskoderna n Exekveringstidsrapport Filstorleksrapport ## Used at the bottom of the report Denna analys gjordes av Exekveringstid Mindre aen 1 ## Used in the time reports Varje enhet motsvarar eller del av begaeran av en sida begaeranden av sidor ## Used at the bottom of each non-time report: need m, f & n genders * * inte listade ## Used on the pie charts: again need m, f & n genders * * Annat ## Used at the top of the report Programmet startade Analyserade begaeranden fraan till ## Used in the General Summary Lyckade begaeranden Medelantal lyckade begaeranden per dygn Lyckade begaeranden av sidor Medelantal lyckade begaeranden av sidor per dygn Loggfilsrader utan statuskod Misslyckade begaeranden Omdirigerade begaeranden Begaeranden med informativ statuskod Distinkta begaerda filer Distinkta betjaenade vaerdar Felaktiga loggfilsrader Ooenskade loggfilsrader Skickad data Medeltal skickad data per dygn Data inom parantes aer de 7 dygnen innan senaste 7 dygnen Gaa till Boerjan ## Some special phrases for particular reports. [ouppslagna numeriska adresser] [domaen inte angiven] [okaend domaen] [rotkatalog] [ingen katalog] [ingen filaendelse] [kataloger] Okaent Windows Annat Unix Robotar Okaent operativsystem ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) beg 7-dygns beg %beg %7-dygns beg sidor 7-dygns sidor %sidor %7-dygns sidor byte ?byte 7-dygns byte 7-dygns ?byte %byte %7-dygns byte nr ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listar de oeversta %s * * Listar de oeversta %d %s * * Listar %s ## "by" in the phrase "listing the top 3 files BY number of requests" efter ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors begaeran de senaste 7 dygnen begaeranden de senaste 7 dygnen begaeran av en sida de senaste 7 dygnen begaeranden av sidor de senaste 7 dygnen omdirigerad begaeran omdirigerade begaeranden omdirigerad begaeran de senaste 7 dygnen omdirigerade begaeranden de senaste 7 dygnen misslyckad begaeran misslyckade begaeranden misslyckad begaeran de senaste 7 dygnen misslyckade begaeranden de senaste 7 dygnen % av trafiken % av trafiken de senaste 7 dygnen % av den stoersta maengden trafik % av den stoersta maengden trafik de senaste 7 dygnen byte trafik byte trafik ## ?bytes represents kbytes, Mbytes etc. ?byte trafik byte trafik de senaste 7 dygnen byte trafik de senaste 7 dygnen ?byte trafik de senaste 7 dygnen med en begaeran sedan med en omdirigerad begaeran sedan med en misslyckad begaeran sedan med foersta begaeran sedan med foersta omdirigerade begaeran sedan med foersta misslyckade begaeran sedan ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorterade efter ## Used at the top of each report Denna rapport innehaaller data fraan ## Used in pie charts Taartbitarna ritas efter ## different ways of sorting maengden trafik maengden trafik de senaste 7 dygnen % av antalet begaeranden % av antalet begaeranden de senaste 7 dygnen % av det stoersta antalet begaeranden % av det stoersta antalet begaeranden de senaste 7 dygnen antalet begaeranden antalet begaeranden de senaste 7 dygnen % av antalet begaeranden av sidor % av antalet begaeranden av sidor de senaste 7 dygnen % av det stoersta antalet begaeranden av sidor % av det stoersta antalet begaeranden av sidor de senaste 7 dygnen antalet begaeranden av sidor antalet begaeranden av sidor de senaste 7 dygnen % av antalet omdirigerade begaeranden % av antalet omdirigerade begaeranden de senaste 7 dygnen % av det stoersta antalet omdirigerade begaeranden % av det stoersta antalet omdirigerade begaeranden de senaste 7 dygnen antalet omdirigerade begaeranden antalet omdirigerade begaeranden de senaste 7 dygnen % av misslyckade begaeranden % av misslyckade begaeranden de senaste 7 dygnen % av stoersta antalet misslyckade begaeranden % av stoersta antalet misslyckade begaeranden de senaste 7 dygnen antalet misslyckade begaeranden antalet misslyckade begaeranden de senaste 7 dygnen tiden foer senaste begaeran tiden foer senaste omdirigerade begaeran tiden foer senaste misslyckade begaeran tiden foer foersta begaeran tiden foer foersta omdirigerade begaeran tiden foer foersta misslyckade begaeran ## 3 other ways of sorting in m, f, & n * * sorterat alfabetiskt * * sorterat numeriskt * * inte sorterat ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. fm em ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d %m %Y %H.%n ## "Program started at" and "Analysed requests from" %w %d %m %Y %H.%n ## In Daily Report %d %m %Y ## In Daily Summary %w ## In Hourly Report %d %m %Y %H.%n%x%I.%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H.%n%x%I.%o ## In Quarter-Hour and Five-Minute Reports %d %m %Y %H.%n%x%I.%o ## In Quarter-Hour and Five-Minute Summaries %H.%n%x%I.%o ## In Weekly Report %d %m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %Y ## The date & time (D) column in non-time reports %d %m %Y %H.%n ## In non-time reports: "listing files with requests since [date]" %d %m %Y kl. %H.%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Fortsaett med begaeran 101 Byter protokoll 1xx [Diverse informativa] 200 OK 201 Skapad 202 Accepterad foer fortsatt behandling 203 Ickeauktorativ information 204 OK, men ingenting att skicka 205 Nollstaell dokument 206 Endast del av dokument 2xx [Diverse lyckade] 300 Flera dokument finns tillgaengliga 301 Dokumentet har flyttat permanent 302 Dokumentet hittat paa annan plats 303 Se annat dokument 304 Inte aendrat sedan senaste haemtningen 305 Anvaend proxy 306 Byt proxy 307 Dokumentet har flyttats temporaert 3xx [Diverse omdirigeringar] 400 Felaktig begaeran 401 Autentisering kraevs 402 Betalning kraevs 403 Tilltraede foerbjudet 404 Dokumentet kunde inte hittas 405 Metoden inte tillaaten 406 Dokumentet inte godtagbart av klienten 407 Proxyautentisering kraevs 408 Time-out av begaeran 409 Begaeran aer i konflikt med resursens tillstaand 410 Dokumentet aer borta permanent 411 Laengd kraevs 412 Foerutsaettning kraevs 413 Begaeran aer foer laang 414 Begaert filnamn aer foer laangt 415 Mediatypen stoeds inte 416 Begaert intervall aer ogiltigt 417 Foervaentan misslyckades 4xx [Diverse klient- och anvaendarfel] 500 Internt serverfel 501 Typen av begaeran stoeds inte 502 Fel vid servern uppstroems 503 Tjaensten aer tillfaelligt otillgaenglig 504 Gateway-timeout 505 HTTP-versionen stoeds inte 506 Omdirigering misslyckades 5xx [Diverse serverfel] xxx [Okaenda] analog-ce-6.0.17/lang/se2adesc.txt000066400000000000000000000107171406366436600166320ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Denna rapport visar aktiviteten under varje aar. # Quarterly Report Denna rapport visar aktiviteten under varje kvartal. # Monthly Report Denna rapport visar aktiviteten under varje maanad. # Weekly Report Denna rapport visar aktiviteten under varje vecka. # Daily Report Denna rapport visar aktiviteten under varje dygn. # Hourly Report Denna rapport visar aktiviteten under varje timme. # Quarter-Hour Report Denna rapport visar aktiviteten under varje kvart. # Five-Minute Report Denna rapport visar aktiviteten under varje femminutersperiod. # Daily Summary Denna rapport visar totala aktiviteten foer varje dygn i veckan, summerat oever alla veckor i rapporten. # Hourly Summary Denna rapport visar totala aktiviteten foer varje timme paa dygnet, summerat oever alla dygn i rapporten. # Hour of the Week Summary Denna rapport visar totala aktiviteten foer varje dag i veckan, summerat oever alla veckor i rapporten. # Quarter-Hour Summary Denna rapport visar totala aktiviteten foer varje kvart under dygnet, summerat oever alla dygn i rapporten. # Five-Minute Summary Denna rapport visar totala aktiviten foer varje femminutersperiod under dygnet, summerat oever alla dygn i rapporten. # General Summary Denna rapport innehaaller oevergripande statistik. # Request Report Denna rapport visar filerna paa webbplatsen. # Redirection Report Denna rapport visar filerna som orsakade att begaeranden omdirigerades till en annan fil (normalt kataloger som saknade ett snedstreck paa slutet, eller CGI-skript som tvingade omdirigeringar). # Failure Report Denna rapport visar de filer som orsakade misslyckanden, till exempel filer som inte kunde hittas. # File Type Report Denna rapport visar filaendelserna paa begaerda filer. # Directory Report Denna rapport visar de kataloger som filer begaerdes ifraan (siffrorna foer varje katalog inkluderar alla dess underkataloger). # Host Report Denna rapport visar de datorer som begaerde filer. # Host Redirection Report Denna rapport visar de datorer som omdirigerades till en annan fil. # Host Failure Report Denna rapport visar de datorer som raakade ut foer misslyckade begaeran. # Domain Report Denna rapport visar laenderna foer de datorer som begaerde filer. # Referrer Report Denna rapport visar haenvisarna (de platser som besoekare foeljde laenkar ifraan, eller sidor som inkluderade den haer webbplatsens bilder). # Referring Site Report Denna rapport visar de servrar som besoekare foeljt laenkar ifraan. # Redirected Referrer Report Denna rapport visar de haenvisare som orsakade omdirigerade begaeran. # Failed Referrer Report Denna rapport visar de haenvisare som innehaaller trasiga laenkar till webbplatsen. # Browser Report Denna rapport visar webblaesarna som besoekare anvaender. # Virtual Host Report Denna rapport visar aktiviteten foer varje virtuell domaen pae servern. # Virtual Host Redirection Report Denna rapport visar omdirigerade begaeran till varje virtuell domaen. # Virtual Host Failure Report Denna rapport visar misslyckade begaeran foer varje virtuell domaen. # User Report Denna rapport visar de anvaendare som begaerde filer, om anvaendare kan autentiseras eller identifieras av kakor. # User Redirection Report Denna rapport visar de anvaendare som omdirigerades till en annan fil. # User Failure Report Denna rapport visar de anvaendare som raakade ut foer misslyckade begaeran. # Organisation Report Denna rapport visar de organisationer som de datorer som begaerde filer tillhoer. # Search Query Report Denna rapport visar de soekuttryck som besoekare anvaent i soekmotorer foer att hitta webbplatsen. # Search Word Report Denna rapport visar de soekord som besoekare anvaent i soekmotorer foer att hitta webbplatsen. # Internal Search Query Report Denna rapport visar de soekuttryck som besoekare anvaent i skript paa webbplatsen. # Internal Search Word Report Denna rapport visar de soekord som besoekare anvaent i skript paa webbplatsen. # Browser Summary Denna rapport visar vilka webblaesare besoekarna har anvaent. # Operating System Report Denna rapport visar de operativsystem som besoekarna har anvaent. # File Size Report Denna rapport visar storlekarna paa filer. # Status Code Report Denna rapport visar HTTP-statuskoderna foer alla begaeranden. # Processing Time Report Denna rapport visar tiden det har tagit foer att bearbeta lyckade begaeranden. analog-ce-6.0.17/lang/se2adom.tab000066400000000000000000000120221406366436600164110ustar00rootroot00000000000000aero 2 Flygindustri arpa 1 Arpanet biz 2 Foeretag com 2 Kommersiellt coop 2 Kooperativ edu 2 Utbildningsvaesendet i USA gov 2 Myndigheter i USA info 2 Informativt int 2 Internationella foerdragsorganisationer mil 2 Militaer i USA museum 2 Museum name 3 Individer net 2 Naetverk org 2 Ideella organisationer pro 3 Yrkesmaen ac 1 Ascensionoen ad 2 Andorra ae 3 Foerenade Arabemiraten af 1 Afghanistan ag 2 Antigua och Barbuda ai 1 Anguilla al 1 Albanien am 2 Armenien an 1 Nederlaendska Antillerna ao 1 Angola aq 1 Antarktis ar 3 Argentina as 1 Amerikanska Samoa at 3 Oesterrike au 3 Australien aw 1 Aruba az 1 Azerbajdzjan ba 3 Bosnien-Hercegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgien bf 1 Burkina Faso bg 2 Bulgarien bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasilien bs 1 Bahamas bt 1 Bhutan bv 1 Bouvetoen bw 1 Botswana by 1 Vitryssland bz 1 Belize ca 3 Kanada cc 1 Kokosoearna cd 1 Demokratiska republiken Kongo cf 1 Centralafrikanska republiken cg 1 Kongo ch 2 Schweiz ci 1 Elfenbenskusten ck 1 Cookoearna cl 2 Chile cm 1 Kamerun cn 3 Kina co 3 Colombia cr 3 Costa Rica cu 2 Kuba cv 1 Kap Verdeoearna cx 2 Juloen cy 3 Cypern cz 2 Tjeckien de 2 Tyskland dj 1 Djibouti dk 2 Danmark dm 2 Dominica do 3 Dominikanska republiken dz 1 Algeriet ec 3 Ecuador ee 2 Estland eg 3 Egypten eh 1 Vaestsahara er 1 Eritrea es 2 Spanien et 1 Etiopien fi 2 Finland fj 3 Fidji fk 1 Falklandsoearna fm 1 Mikronesien fo 1 Faeroearna fr 2 Frankrike fx 1 Frankrike (Europeiskt territorium) ga 1 Gabon gb 1 Storbritannien gd 1 Grenada ge 1 Georgien gf 1 Franska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Ekvatorialguinea gr 2 Grekland gs 1 Sydgeorgien och Sydsandwichoearna gt 3 Guatemala gu 1 Guam gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heardoen och McDonaldoearna hn 2 Honduras hr 2 Kroatien ht 1 Haiti hu 2 Ungern id 3 Indonesien ie 2 Irland il 3 Israel im 1 Isle of Man in 3 Indien io 1 Brittiskt territorium i Indiska Oceanen iq 1 Irak ir 1 Iran is 2 Island it 2 Italien je 1 Jersey jm 3 Jamaica jo 3 Jordanien jp 3 Japan ke 3 Kenya kg 1 Kirgizistan kh 1 Kambodja ki 1 Kiribati km 1 Komorerna kn 1 Sankt Kitts och Nevis kp 1 Nordkorea kr 3 Sydkorea kw 3 Kuwait ky 1 Caymanoearna kz 1 Kazakstan la 1 Laos lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litauen lu 2 Luxemburg lv 2 Lettland ly 1 Libyen ma 1 Marocko mc 2 Monaco md 1 Moldavien mg 1 Madagaskar mh 1 Marshalloearna mk 3 Makedonien (foere detta del av Jugoslavien) ml 1 Mali mm 1 Burma (Myanmar) mn 1 Mongoliet mo 1 Macau mp 1 Nordmarianerna mq 1 Martinique mr 1 Mauretanien ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldiverna mw 1 Malawi mx 3 Mexiko my 3 Malaysia mz 1 Mocambique na 1 Namibia nc 1 Nya Kaledonien ne 1 Niger nf 1 Norfolkoen ng 1 Nigeria ni 3 Nicaragua nl 2 Nederlaenderna no 2 Norge np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nya Zeeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Franska Polynesien pg 3 Papua Nya Guinea ph 3 Filippinerna pk 3 Pakistan pl 3 Polen pm 1 Sankt Pierre och Miquelon pn 1 Pitcairnoen pr 1 Puerto Rico ps 3 Palestinska territoriet pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Rumaenien ru 2 Ryssland rw 1 Rwanda sa 3 Saudiarabien sb 1 Solomonoearna sc 1 Seychellerna sd 1 Sudan se 2 Sverige sg 3 Singapore sh 1 Sankt Helena si 2 Slovenien sj 1 Svalbard och Jan Mayen sk 2 Slovakien sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Sankt Tome och Principe su 2 F.d. Sovjetunionen sv 3 El Salvador sy 1 Syrien sz 1 Swaziland tc 1 Turks- och Caicosoearna td 1 Tchad tf 1 Franska soedra territorierna tg 1 Togo th 3 Thailand tj 1 Tadjikistan tk 1 Tokelau tl 1 Oesttimor tm 1 Turkmenistan tn 1 Tunisien to 1 Tonga tp 1 Oesttimor tr 3 Turkiet tt 3 Trinidad och Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Storbritannien um 1 USAs yttre oear us 4 USA uy 3 Uruguay uz 1 Uzbekistan va 1 Vatikanstaten vc 1 Sankt Vincent och Grenadinerna ve 3 Venezuela vg 1 Brittiska Jungfruoearna vi 1 Jungfruoearna vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis- och Futunaoearna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavien za 3 Sydafrika zm 1 Zambia zr 1 Demokratiska republiken Kongo zw 3 Zimbabwe analog-ce-6.0.17/lang/se2desc.txt000066400000000000000000000105601406366436600164650ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Denna rapport visar aktiviteten under varje år. # Quarterly Report Denna rapport visar aktiviteten under varje kvartal. # Monthly Report Denna rapport visar aktiviteten under varje månad. # Weekly Report Denna rapport visar aktiviteten under varje vecka. # Daily Report Denna rapport visar aktiviteten under varje dygn. # Hourly Report Denna rapport visar aktiviteten under varje timme. # Quarter-Hour Report Denna rapport visar aktiviteten under varje kvart. # Five-Minute Report Denna rapport visar aktiviteten under varje femminutersperiod. # Daily Summary Denna rapport visar totala aktiviteten för varje dygn i veckan, summerat över alla veckor i rapporten. # Hourly Summary Denna rapport visar totala aktiviteten för varje timme på dygnet, summerat över alla dygn i rapporten. # Hour of the Week Summary Denna rapport visar totala aktiviteten för varje dag i veckan, summerat över alla veckor i rapporten. # Quarter-Hour Summary Denna rapport visar totala aktiviteten för varje kvart under dygnet, summerat över alla dygn i rapporten. # Five-Minute Summary Denna rapport visar totala aktiviten för varje femminutersperiod under dygnet, summerat över alla dygn i rapporten. # General Summary Denna rapport innehåller övergripande statistik. # Request Report Denna rapport visar filerna på webbplatsen. # Redirection Report Denna rapport visar filerna som orsakade att begäranden omdirigerades till en annan fil (normalt kataloger som saknade ett snedstreck på slutet, eller CGI-skript som tvingade omdirigeringar). # Failure Report Denna rapport visar de filer som orsakade misslyckanden, till exempel filer som inte kunde hittas. # File Type Report Denna rapport visar filändelserna på begärda filer. # Directory Report Denna rapport visar de kataloger som filer begärdes ifrån (siffrorna för varje katalog inkluderar alla dess underkataloger). # Host Report Denna rapport visar de datorer som begärde filer. # Host Redirection Report Denna rapport visar de datorer som omdirigerades till en annan fil. # Host Failure Report Denna rapport visar de datorer som råkade ut för misslyckade begäran. # Domain Report Denna rapport visar länderna för de datorer som begärde filer. # Referrer Report Denna rapport visar hänvisarna (de platser som besökare följde länkar ifrån, eller sidor som inkluderade den här webbplatsens bilder). # Referring Site Report Denna rapport visar de servrar som besökare följt länkar ifrån. # Redirected Referrer Report Denna rapport visar de hänvisare som orsakade omdirigerade begäran. # Failed Referrer Report Denna rapport visar de hänvisare som innehåller trasiga länkar till webbplatsen. # Browser Report Denna rapport visar webbläsarna som besökare använder. # Virtual Host Report Denna rapport visar aktiviteten för varje virtuell domän pä servern. # Virtual Host Redirection Report Denna rapport visar omdirigerade begäran till varje virtuell domän. # Virtual Host Failure Report Denna rapport visar misslyckade begäran för varje virtuell domän. # User Report Denna rapport visar de användare som begärde filer, om användare kan autentiseras eller identifieras av kakor. # User Redirection Report Denna rapport visar de användare som omdirigerades till en annan fil. # User Failure Report Denna rapport visar de användare som råkade ut för misslyckade begäran. # Organisation Report Denna rapport visar de organisationer som de datorer som begärde filer tillhör. # Search Query Report Denna rapport visar de sökuttryck som besökare använt i sökmotorer för att hitta webbplatsen. # Search Word Report Denna rapport visar de sökord som besökare använt i sökmotorer för att hitta webbplatsen. # Internal Search Query Report Denna rapport visar de sökuttryck som besökare använt i skript på webbplatsen. # Internal Search Word Report Denna rapport visar de sökord som besökare använt i skript på webbplatsen. # Browser Summary Denna rapport visar vilka webbläsare besökarna har använt. # Operating System Report Denna rapport visar de operativsystem som besökarna har använt. # File Size Report Denna rapport visar storlekarna på filer. # Status Code Report Denna rapport visar HTTP-statuskoderna för alla begäranden. # Processing Time Report Denna rapport visar tiden det har tagit för att bearbeta lyckade begäranden. analog-ce-6.0.17/lang/se2dom.tab000066400000000000000000000117531406366436600162620ustar00rootroot00000000000000aero 2 Flygindustri arpa 1 Arpanet biz 2 Företag com 2 Kommersiellt coop 2 Kooperativ edu 2 Utbildningsväsendet i USA gov 2 Myndigheter i USA info 2 Informativt int 2 Internationella fördragsorganisationer mil 2 Militär i USA museum 2 Museum name 3 Individer net 2 Nätverk org 2 Ideella organisationer pro 3 Yrkesmän ac 1 Ascensionön ad 2 Andorra ae 3 Förenade Arabemiraten af 1 Afghanistan ag 2 Antigua och Barbuda ai 1 Anguilla al 1 Albanien am 2 Armenien an 1 Nederländska Antillerna ao 1 Angola aq 1 Antarktis ar 3 Argentina as 1 Amerikanska Samoa at 3 Österrike au 3 Australien aw 1 Aruba az 1 Azerbajdzjan ba 3 Bosnien-Hercegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgien bf 1 Burkina Faso bg 2 Bulgarien bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasilien bs 1 Bahamas bt 1 Bhutan bv 1 Bouvetön bw 1 Botswana by 1 Vitryssland bz 1 Belize ca 3 Kanada cc 1 Kokosöarna cd 1 Demokratiska republiken Kongo cf 1 Centralafrikanska republiken cg 1 Kongo ch 2 Schweiz ci 1 Elfenbenskusten ck 1 Cooköarna cl 2 Chile cm 1 Kamerun cn 3 Kina co 3 Colombia cr 3 Costa Rica cu 2 Kuba cv 1 Kap Verdeöarna cx 2 Julön cy 3 Cypern cz 2 Tjeckien de 2 Tyskland dj 1 Djibouti dk 2 Danmark dm 2 Dominica do 3 Dominikanska republiken dz 1 Algeriet ec 3 Ecuador ee 2 Estland eg 3 Egypten eh 1 Västsahara er 1 Eritrea es 2 Spanien et 1 Etiopien fi 2 Finland fj 3 Fidji fk 1 Falklandsöarna fm 1 Mikronesien fo 1 Färöarna fr 2 Frankrike fx 1 Frankrike (Europeiskt territorium) ga 1 Gabon gb 1 Storbritannien gd 1 Grenada ge 1 Georgien gf 1 Franska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Grönland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Ekvatorialguinea gr 2 Grekland gs 1 Sydgeorgien och Sydsandwichöarna gt 3 Guatemala gu 1 Guam gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heardön och McDonaldöarna hn 2 Honduras hr 2 Kroatien ht 1 Haiti hu 2 Ungern id 3 Indonesien ie 2 Irland il 3 Israel im 1 Isle of Man in 3 Indien io 1 Brittiskt territorium i Indiska Oceanen iq 1 Irak ir 1 Iran is 2 Island it 2 Italien je 1 Jersey jm 3 Jamaica jo 3 Jordanien jp 3 Japan ke 3 Kenya kg 1 Kirgizistan kh 1 Kambodja ki 1 Kiribati km 1 Komorerna kn 1 Sankt Kitts och Nevis kp 1 Nordkorea kr 3 Sydkorea kw 3 Kuwait ky 1 Caymanöarna kz 1 Kazakstan la 1 Laos lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litauen lu 2 Luxemburg lv 2 Lettland ly 1 Libyen ma 1 Marocko mc 2 Monaco md 1 Moldavien mg 1 Madagaskar mh 1 Marshallöarna mk 3 Makedonien (före detta del av Jugoslavien) ml 1 Mali mm 1 Burma (Myanmar) mn 1 Mongoliet mo 1 Macau mp 1 Nordmarianerna mq 1 Martinique mr 1 Mauretanien ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldiverna mw 1 Malawi mx 3 Mexiko my 3 Malaysia mz 1 Mocambique na 1 Namibia nc 1 Nya Kaledonien ne 1 Niger nf 1 Norfolkön ng 1 Nigeria ni 3 Nicaragua nl 2 Nederländerna no 2 Norge np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nya Zeeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Franska Polynesien pg 3 Papua Nya Guinea ph 3 Filippinerna pk 3 Pakistan pl 3 Polen pm 1 Sankt Pierre och Miquelon pn 1 Pitcairnön pr 1 Puerto Rico ps 3 Palestinska territoriet pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Rumänien ru 2 Ryssland rw 1 Rwanda sa 3 Saudiarabien sb 1 Solomonöarna sc 1 Seychellerna sd 1 Sudan se 2 Sverige sg 3 Singapore sh 1 Sankt Helena si 2 Slovenien sj 1 Svalbard och Jan Mayen sk 2 Slovakien sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Sankt Tome och Principe su 2 F.d. Sovjetunionen sv 3 El Salvador sy 1 Syrien sz 1 Swaziland tc 1 Turks- och Caicosöarna td 1 Tchad tf 1 Franska södra territorierna tg 1 Togo th 3 Thailand tj 1 Tadjikistan tk 1 Tokelau tl 1 Östtimor tm 1 Turkmenistan tn 1 Tunisien to 1 Tonga tp 1 Östtimor tr 3 Turkiet tt 3 Trinidad och Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Storbritannien um 1 USAs yttre öar us 4 USA uy 3 Uruguay uz 1 Uzbekistan va 1 Vatikanstaten vc 1 Sankt Vincent och Grenadinerna ve 3 Venezuela vg 1 Brittiska Jungfruöarna vi 1 Jungfruöarna vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis- och Futunaöarna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavien za 3 Sydafrika zm 1 Zambia zr 1 Demokratiska republiken Kongo zw 3 Zimbabwe analog-ce-6.0.17/lang/sea.lng000066400000000000000000000313231406366436600156460ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Svensk version av www.imc-ab.com ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. So Ma Ti On To Fr Lo Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" veckostart Aar ## Quarter of a year kvartal maanad dag dagar tim minut minuter sekund sekunder byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes anrop anrop datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum tid tid startdatum starttid senaste datum senaste gaangen fil filer domaen domaener virtuell domaen virtuella domaener katalog kataloger domaen domaener organisation organisationer filtyp filtyper URL URLer webbklient webbklienter OS OS ## (= operating system, operating systems) storlek soekord soekord sajt sajter anvaendare anvaendare statuskod statuskoder Webserverstatistik foer ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Allmaent ## The time reports, plus "busiest" strings (at the bottom of each report) Aarsrapport Intensivaste aar: Kvartalsrapport Intensivaste kvartal: Maanadsrapport Intensivaste maanad: Veckorapport Intensivaste vecka: vecka boerjar Daglig summering Daglig rapport Baesta dag: Timrapport Timsummering Summering, veckotimme Intensivaste timma: Kvartsrapport Summering, kvartar Intensivaste kvart: Femminutsrapport Femminutssummering Intensivaste fem minuter: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Domaenrapport domaen domaener n Omdirigeringsrapport, vaerdar vaerd vaerdar n Felrapport, vaerdar vaerd vaerdar n Katalograpport katalog kataloger n Filtypsrapport filtyp filtyper n Anropsrapport fil filer n Omdirigeringsrapport fil filer n Felrapport fil filer n Referensrapport refererande URL refererande URLer n Refererande Sajt-rapport refererande sajt refererande sajter n Omdirigerad Referens-rapport referring URL referring URLs n Felaktig Referens-rapport referring URL referring URLs n Soekrapport soekbegrepp soekbegrepp n Soekordsrapport soekord soekord n Intern soekrapport foerfraagan foerfraagningar n Intern soekordsrapport soekord soekord n Virtuell domaenrapport virtuell domaen virtuella domaener n Omdirigeringsrapport, virtuella vaerdar virtuell vaerd virtuella vaerdar n Felrapport, virtuella vaerdar virtuell vaerd virtuella vaerdar n Anvaendarrapport anvaendare anvaendare n Omdirigeringsrapport, anvaendare anvaendare anvaendare n Felande anvaendare-rapport anvaendare anvaendare n Webbklientsummering webbklient webbklienter n Webbklientrapport webbklient webbklienter n Operativsystemsrapport operativsystem operativsystem n Toppdomaensrapport toppdomaen toppdomaener n Organisationsrapport organisation organisationer n Statuskodrapport statuskod statuskoder n Exekveringstidsrapport Filstorleksrapport ## Used at the bottom of the report Analysen gjord av Exekveringstid Mindre aen 1 ## Used in the time reports Varje enhet representerar eller del av access till en sida accesser till sidor ## Used at the bottom of each non-time report: need m, f & n genders inte listade inte listade inte listade ## Used on the pie charts: again need m, f & n genders Andra Andra Andra ## Used at the top of the report Programmet startade Analyserade accesser fraan till ## Used in the General Summary Serveranrop Medeltal serveranrop per dag Serveranrop till sidor Medeltal av serveranrop till sidor per dag Logfilsrader utan statuskod Felaktiga serveranrop Omdirigerade serveranrop serveranrop med infostatuskod Distinkta filer accessade Distinkta domaener servade Fel i rader ur loggfilen Felande loggfilsrader Data skickade Medeltal data skickade per dag Data inom parentes visar 7 dagar till senaste 7 dagarna Gaa till Topp ## Some special phrases for particular reports. [oupploesta numeriska adresser] [domaen ej angiven] [okaend domaen] [rootmapp] [saknar mapp] [saknar tillaegg] [kataloger] Okaend Windows Annan Unix Robotar OS okaent ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #acc 7 dagar Anrop %acc %7 dagar Anrop sidor 7 dagar Sidor %sidor %7 dagar Sidor bytes ?bytes 7 dagar bytes 7 dagar ?bytes %bytes %7 dagar bytes antal ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listar de foersta %s * * Listar de foersta %d %s * * Listar %s ## "by" in the phrase "listing the top 3 files BY number of requests" efter ## All requests WITH AT LEAST 10 requests med minst ## Different ways of doing floors serveranrop de senaste 7 dagarna serveranrop de senaste 7 dagarna anrop till sida de senaste 7 dagarna anrop till sidor de senaste 7 dagarna Omdirigerat anrop Omdirigerade anrop omdirigerat serveranrop de senaste 7 dagarna omdirigerade serveranrop de senaste 7 dagarna felaktigt serveranrop felaktiga serveranrop felaktigt serveranrop de senaste 7 dagarna felaktiga serveranrop de senaste 7 dagarna % av trafiken % av trafiken de senaste 7 dagarna % av den maximala trafiken % av den maximala trafiken de senaste 7 dagarna byte, trafik bytes, trafik ## ?bytes represents kbytes, Mbytes etc. ?bytes, trafik byte, trafik de senaste 7 dagarna bytes, trafik de senaste 7 dagarna ?bytes, trafik de senaste 7 dagarna serveranrop sedan med ett omdirigerat anrop sedan med ett felaktigt anrop sedan med foersta serveranrop sedan med foersta omdirigerade serveranrop sedan med foersta felaktiga serveranrop sedan ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorterad efter ## Used at the top of each report Denna rapport innehaaller data fraan ## Used in pie charts Plottat som ## different ways of sorting procent av antal bytes trafikmängden de senaste 7 dagarna % av serveranrop % av serveranrop de senaste 7 dagarna % av det maximala antalet anrop % av det maximala antalet anrop de senaste 7 dagarna antal serveranrop antal serveranrop de senaste 7 dagarna % av anrop till sidor % av anrop till sidor de senaste 7 dagarna % av det maximala antalet anrop till sidor % av det maximala antalet anrop till sidor de senaste 7 dagarna antal anrop till sidor antal anrop till sidor de senaste 7 dagarna % av omdirigerade anrop % av omdirigerade anrop de senaste 7 dagarna % av det maximala antalet omdirigerade anrop % av det maximala antalet omdirigerade anrop de senaste 7 dagarna antal omdirigerade anrop antal omdirigerade anrop de senaste 7 dagarna % av felaktiga anrop % av felaktiga anrop de senaste 7 dagarna % av det maximala antalet felaktiga anrop % av det maximala antalet felaktiga anrop de senaste 7 dagarna antal felaktiga anrop antal felaktiga anrop de senaste 7 dagarna senaste serveranrop senaste omdirigerade serveranrop senaste felaktiga serveranrop tidpunkt foer foersta anrop tidpunkt foer foersta omdirigerade serveranrop tidpunkt foer foersta felaktiga serveranrop ## 3 other ways of sorting in m, f, & n * * i alfabetsik ordning * * sorterat numeriskt * * ej sorterat ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %Y-%m-%D %H:%n ## "Program started at" and "Analysed requests from" %w %D %m %Y %H:%n ## In Daily Report %d %m %y ## In Daily Summary %w ## In Hourly Report %d %m %y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d %m %y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d %m %y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d %m %y ## The date & time (D) column in non-time reports %d %m %y %H:%n ## In non-time reports: "including all files with requests since [date]" %d %m %y klockan %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/seadom.tab000066400000000000000000000120221406366436600163270ustar00rootroot00000000000000aero 2 Flygindustri arpa 1 Arpanet biz 2 Foeretag com 2 Kommersiellt coop 2 Kooperativ edu 2 Utbildningsvaesendet i USA gov 2 Myndigheter i USA info 2 Informativt int 2 Internationella foerdragsorganisationer mil 2 Militaer i USA museum 2 Museum name 3 Individer net 2 Naetverk org 2 Ideella organisationer pro 3 Yrkesmaen ac 1 Ascensionoen ad 2 Andorra ae 3 Foerenade Arabemiraten af 1 Afghanistan ag 2 Antigua och Barbuda ai 1 Anguilla al 1 Albanien am 2 Armenien an 1 Nederlaendska Antillerna ao 1 Angola aq 1 Antarktis ar 3 Argentina as 1 Amerikanska Samoa at 3 Oesterrike au 3 Australien aw 1 Aruba az 1 Azerbajdzjan ba 3 Bosnien-Hercegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgien bf 1 Burkina Faso bg 2 Bulgarien bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasilien bs 1 Bahamas bt 1 Bhutan bv 1 Bouvetoen bw 1 Botswana by 1 Vitryssland bz 1 Belize ca 3 Kanada cc 1 Kokosoearna cd 1 Demokratiska republiken Kongo cf 1 Centralafrikanska republiken cg 1 Kongo ch 2 Schweiz ci 1 Elfenbenskusten ck 1 Cookoearna cl 2 Chile cm 1 Kamerun cn 3 Kina co 3 Colombia cr 3 Costa Rica cu 2 Kuba cv 1 Kap Verdeoearna cx 2 Juloen cy 3 Cypern cz 2 Tjeckien de 2 Tyskland dj 1 Djibouti dk 2 Danmark dm 2 Dominica do 3 Dominikanska republiken dz 1 Algeriet ec 3 Ecuador ee 2 Estland eg 3 Egypten eh 1 Vaestsahara er 1 Eritrea es 2 Spanien et 1 Etiopien fi 2 Finland fj 3 Fidji fk 1 Falklandsoearna fm 1 Mikronesien fo 1 Faeroearna fr 2 Frankrike fx 1 Frankrike (Europeiskt territorium) ga 1 Gabon gb 1 Storbritannien gd 1 Grenada ge 1 Georgien gf 1 Franska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Groenland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Ekvatorialguinea gr 2 Grekland gs 1 Sydgeorgien och Sydsandwichoearna gt 3 Guatemala gu 1 Guam gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heardoen och McDonaldoearna hn 2 Honduras hr 2 Kroatien ht 1 Haiti hu 2 Ungern id 3 Indonesien ie 2 Irland il 3 Israel im 1 Isle of Man in 3 Indien io 1 Brittiskt territorium i Indiska Oceanen iq 1 Irak ir 1 Iran is 2 Island it 2 Italien je 1 Jersey jm 3 Jamaica jo 3 Jordanien jp 3 Japan ke 3 Kenya kg 1 Kirgizistan kh 1 Kambodja ki 1 Kiribati km 1 Komorerna kn 1 Sankt Kitts och Nevis kp 1 Nordkorea kr 3 Sydkorea kw 3 Kuwait ky 1 Caymanoearna kz 1 Kazakstan la 1 Laos lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litauen lu 2 Luxemburg lv 2 Lettland ly 1 Libyen ma 1 Marocko mc 2 Monaco md 1 Moldavien mg 1 Madagaskar mh 1 Marshalloearna mk 3 Makedonien (foere detta del av Jugoslavien) ml 1 Mali mm 1 Burma (Myanmar) mn 1 Mongoliet mo 1 Macau mp 1 Nordmarianerna mq 1 Martinique mr 1 Mauretanien ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldiverna mw 1 Malawi mx 3 Mexiko my 3 Malaysia mz 1 Mocambique na 1 Namibia nc 1 Nya Kaledonien ne 1 Niger nf 1 Norfolkoen ng 1 Nigeria ni 3 Nicaragua nl 2 Nederlaenderna no 2 Norge np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nya Zeeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Franska Polynesien pg 3 Papua Nya Guinea ph 3 Filippinerna pk 3 Pakistan pl 3 Polen pm 1 Sankt Pierre och Miquelon pn 1 Pitcairnoen pr 1 Puerto Rico ps 3 Palestinska territoriet pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Rumaenien ru 2 Ryssland rw 1 Rwanda sa 3 Saudiarabien sb 1 Solomonoearna sc 1 Seychellerna sd 1 Sudan se 2 Sverige sg 3 Singapore sh 1 Sankt Helena si 2 Slovenien sj 1 Svalbard och Jan Mayen sk 2 Slovakien sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Sankt Tome och Principe su 2 F.d. Sovjetunionen sv 3 El Salvador sy 1 Syrien sz 1 Swaziland tc 1 Turks- och Caicosoearna td 1 Tchad tf 1 Franska soedra territorierna tg 1 Togo th 3 Thailand tj 1 Tadjikistan tk 1 Tokelau tl 1 Oesttimor tm 1 Turkmenistan tn 1 Tunisien to 1 Tonga tp 1 Oesttimor tr 3 Turkiet tt 3 Trinidad och Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Storbritannien um 1 USAs yttre oear us 4 USA uy 3 Uruguay uz 1 Uzbekistan va 1 Vatikanstaten vc 1 Sankt Vincent och Grenadinerna ve 3 Venezuela vg 1 Brittiska Jungfruoearna vi 1 Jungfruoearna vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis- och Futunaoearna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavien za 3 Sydafrika zm 1 Zambia zr 1 Demokratiska republiken Kongo zw 3 Zimbabwe analog-ce-6.0.17/lang/sedom.tab000066400000000000000000000117531406366436600162000ustar00rootroot00000000000000aero 2 Flygindustri arpa 1 Arpanet biz 2 Företag com 2 Kommersiellt coop 2 Kooperativ edu 2 Utbildningsväsendet i USA gov 2 Myndigheter i USA info 2 Informativt int 2 Internationella fördragsorganisationer mil 2 Militär i USA museum 2 Museum name 3 Individer net 2 Nätverk org 2 Ideella organisationer pro 3 Yrkesmän ac 1 Ascensionön ad 2 Andorra ae 3 Förenade Arabemiraten af 1 Afghanistan ag 2 Antigua och Barbuda ai 1 Anguilla al 1 Albanien am 2 Armenien an 1 Nederländska Antillerna ao 1 Angola aq 1 Antarktis ar 3 Argentina as 1 Amerikanska Samoa at 3 Österrike au 3 Australien aw 1 Aruba az 1 Azerbajdzjan ba 3 Bosnien-Hercegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgien bf 1 Burkina Faso bg 2 Bulgarien bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivia br 3 Brasilien bs 1 Bahamas bt 1 Bhutan bv 1 Bouvetön bw 1 Botswana by 1 Vitryssland bz 1 Belize ca 3 Kanada cc 1 Kokosöarna cd 1 Demokratiska republiken Kongo cf 1 Centralafrikanska republiken cg 1 Kongo ch 2 Schweiz ci 1 Elfenbenskusten ck 1 Cooköarna cl 2 Chile cm 1 Kamerun cn 3 Kina co 3 Colombia cr 3 Costa Rica cu 2 Kuba cv 1 Kap Verdeöarna cx 2 Julön cy 3 Cypern cz 2 Tjeckien de 2 Tyskland dj 1 Djibouti dk 2 Danmark dm 2 Dominica do 3 Dominikanska republiken dz 1 Algeriet ec 3 Ecuador ee 2 Estland eg 3 Egypten eh 1 Västsahara er 1 Eritrea es 2 Spanien et 1 Etiopien fi 2 Finland fj 3 Fidji fk 1 Falklandsöarna fm 1 Mikronesien fo 1 Färöarna fr 2 Frankrike fx 1 Frankrike (Europeiskt territorium) ga 1 Gabon gb 1 Storbritannien gd 1 Grenada ge 1 Georgien gf 1 Franska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Grönland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Ekvatorialguinea gr 2 Grekland gs 1 Sydgeorgien och Sydsandwichöarna gt 3 Guatemala gu 1 Guam gw 1 Guinea Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heardön och McDonaldöarna hn 2 Honduras hr 2 Kroatien ht 1 Haiti hu 2 Ungern id 3 Indonesien ie 2 Irland il 3 Israel im 1 Isle of Man in 3 Indien io 1 Brittiskt territorium i Indiska Oceanen iq 1 Irak ir 1 Iran is 2 Island it 2 Italien je 1 Jersey jm 3 Jamaica jo 3 Jordanien jp 3 Japan ke 3 Kenya kg 1 Kirgizistan kh 1 Kambodja ki 1 Kiribati km 1 Komorerna kn 1 Sankt Kitts och Nevis kp 1 Nordkorea kr 3 Sydkorea kw 3 Kuwait ky 1 Caymanöarna kz 1 Kazakstan la 1 Laos lb 3 Libanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litauen lu 2 Luxemburg lv 2 Lettland ly 1 Libyen ma 1 Marocko mc 2 Monaco md 1 Moldavien mg 1 Madagaskar mh 1 Marshallöarna mk 3 Makedonien (före detta del av Jugoslavien) ml 1 Mali mm 1 Burma (Myanmar) mn 1 Mongoliet mo 1 Macau mp 1 Nordmarianerna mq 1 Martinique mr 1 Mauretanien ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldiverna mw 1 Malawi mx 3 Mexiko my 3 Malaysia mz 1 Mocambique na 1 Namibia nc 1 Nya Kaledonien ne 1 Niger nf 1 Norfolkön ng 1 Nigeria ni 3 Nicaragua nl 2 Nederländerna no 2 Norge np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Nya Zeeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Franska Polynesien pg 3 Papua Nya Guinea ph 3 Filippinerna pk 3 Pakistan pl 3 Polen pm 1 Sankt Pierre och Miquelon pn 1 Pitcairnön pr 1 Puerto Rico ps 3 Palestinska territoriet pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Rumänien ru 2 Ryssland rw 1 Rwanda sa 3 Saudiarabien sb 1 Solomonöarna sc 1 Seychellerna sd 1 Sudan se 2 Sverige sg 3 Singapore sh 1 Sankt Helena si 2 Slovenien sj 1 Svalbard och Jan Mayen sk 2 Slovakien sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Surinam st 1 Sankt Tome och Principe su 2 F.d. Sovjetunionen sv 3 El Salvador sy 1 Syrien sz 1 Swaziland tc 1 Turks- och Caicosöarna td 1 Tchad tf 1 Franska södra territorierna tg 1 Togo th 3 Thailand tj 1 Tadjikistan tk 1 Tokelau tl 1 Östtimor tm 1 Turkmenistan tn 1 Tunisien to 1 Tonga tp 1 Östtimor tr 3 Turkiet tt 3 Trinidad och Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraina ug 3 Uganda uk 3 Storbritannien um 1 USAs yttre öar us 4 USA uy 3 Uruguay uz 1 Uzbekistan va 1 Vatikanstaten vc 1 Sankt Vincent och Grenadinerna ve 3 Venezuela vg 1 Brittiska Jungfruöarna vi 1 Jungfruöarna vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis- och Futunaöarna ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavien za 3 Sydafrika zm 1 Zambia zr 1 Demokratiska republiken Kongo zw 3 Zimbabwe analog-ce-6.0.17/lang/si.lng000066400000000000000000000326361406366436600155210ustar00rootroot00000000000000## Slovenian language file for analog 6.0. ## May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. ned pon tor sre èet pet sob jan feb mar apr maj jun jul avg sep okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" teden od: leto ## Quarter of a year èetrtletje mesec dan dni ura minuta minut sekunda sekund(e) byte bytov ## ?bytes represents kbytes, Mbytes etc. ?bytov zahtevek zahtevki(ov) datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum ura èas prvi datum prva ura zadnji obisk zadnji datum datoteka datotek(e) gostitelj gostitelji(ev) virtualni gostitelj virtualni gostitelji(ev) imenik imenikov domena domen(e) organizacija organizacije podalj¹ek podalj¹ki URL URL-ji brskalnik brskalniki OS OS ## (= operating system, operating systems) velikost iskalni niz iskalni nizi spletno podroèje spletna podroèja uporabnik uporabniki(ov) statusna koda statusne kode Statistika spletnega stre¾nika ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Splo¹ni povzetek ## The time reports, plus "busiest" strings (at the bottom of each report) Poroèilo po letih Leto z najveè obiski: Poroèilo po èetrtletjih Èetrtletje z najveè obiski: Poroèilo po mesecih Mesec z najveè obiski: Poroèilo po tednih Teden z najveè obiski: teden od Povzetek po dnevih Poroèilo po dnevih Dan z najveè obiski: Poroèilo po urah Povzetek po urah Povzetek po uri tedna Ura z najveè obiski: Poroèilo po èetrt ure Povzetek po èetrt ure Èetrt ure z najveè obiskov: Poroèilo po skupinah po pet minut Povzetek po petih minutah Pet minut z najveè obiski: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Poroèilo po gostiteljih gostitelja gostitelji(ev) m Poroèilo o preusmeritvah gostiteljev gostitelj gostiteljev m Poroèilo o neuspehih gostiteljev gostitelj gostiteljev m Poroèilo po imenikih imenik imeniki m Poroèilo po vrstah datotek podalj¹ek podalj¹ki m Poroèilo po zahtevkih datoteka datoteke f Poroèilo o preusmeritveh (redirekciji) datoteka datoteke f Poroèilo o napakah datoteka datoteke f Poroèilo po straneh, od koder so pri¹li URL naslov URL naslovi m Poroèilo po spletnih podroèjih, od koder so pri¹li spletno podroèje spletna podroèja n Poroèilo o preusmerjenih zahtevkih URL naslov URL naslovi m Poroèilo o neuspelih preusmerjenih zahtevkih URL naslov URL naslovi m Poroèilo o povpra¹evanju povpra¹evanje povpra¹evanja n Poroèilo o povpra¹evanju z besedami povpre¹evalna beseda povpra¹evalne besede n Poroèilo o internem povpra¹evanju povpra¹evanje povpra¹evanja n Poroèilo o internem povpra¹evanju z besedami povpra¹evalna beseda povpra¹evalne besede f Poroèilo po virtualnih gostiteljih virtualni gostitelj virtualni gostitelji m Poroèilo o preusmeritvah virtualnih gostiteljev virtualni gostitelj virtualni gostitelji m Poroèilo o neuspehih virtualnih gostiteljev virtualni gostitelj virtualni gostitelji m Poroèilo po uporabnikih uporabnik uporabniki(ov) m Poroèilo o preusmerjenih uporabnikih uporabnik uporabniki(ov) m Poroèilo o neuspelih uporabnikih uporabnik uporabniki(ov) m Povzetek po brskalnikih brskalnik brskalniki(ov) m Poroèilo po brskalnikih brskalnik brskalniki(ov) m Poroèilo operacijskega sistema operacijski sistem operacijski sistemi m Poroèilo po domenah domena domene f Poroèilo o organizaciji organizacija organizacije f Poroèilo o statusu posredovanih strani oznaka statusa oznake statusa m Poroèilo o procesnem èasu Poroèilo po velikosti datotek ## Used at the bottom of the report Analizo opravil Èas dela Manj kot 1 ## Used in the time reports Vsaka enota predstavlja ali manj¹i dele¾ zahtevek za stran zahtevkov za stran ## Used at the bottom of each non-time report: need m, f & n genders nenavedeno nenavedeno nenavedeno ## Used on the pie charts: again need m, f & n genders * * Drugo ## Used at the top of the report Datum obdelave: Analizirani so zahtevki od do ## Used in the General Summary Uspe¹nih zahtevkov (skupaj) Povpreèno uspe¹nih zahtevkov dnevno Uspe¹nih zahtevkov za strani (skupaj) Povpreèno uspe¹nih zahtevkov za strani dnevno Vrstice v log datoteki brez oznake statusa Neuspe¹ni zahtevki Preusmerjeni zahtevki Zahtevki z oznako "informational status" ©tevilo posredovanih strani na drugih stre¾nikih ©tevilo posredovanih drugih stre¾nikov Okvarjene vrstice v log datoteki Ne¾eljeni vnosi v log datoteki Celoten obseg prenesenih podatkov Povpreèno ¹tevilo prenesenih podatkov dnevno ©tevilke v oklepajih se nana¹ajo na 7 dni do zadnjih 7 dni Pojdi na Zaèetek ## Some special phrases for particular reports. [nere¹ene ¹tevilène adrese] [nepodana domena] [neznana domena] [glavni imenik] [ni imenika] [ni podalj¹ka] [imeniki] Neznani Windows Drugi Unix Roboti OS neznan ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) ¹t.zaht. ted.¹t.zaht. % zaht. % ted.zaht. strani ted.strani % strani % ted.strani bytov ?bytov ted.bytov ted.?bytov % bytov % ted.bytov ¹t. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Izpisani prvi Izpisane prve Izpisani prvi %s Izpisani prvi %d %s Izpisane prve %d %s Izpisani prvi %d %s Izpisani %s Izpisane %s Izpisani %s ## "by" in the phrase "listing the top 3 files BY number of requests" po ## All requests WITH AT LEAST 10 requests z vsaj ## Different ways of doing floors zahtevek v zadnjih 7. dnevih zahtevkov v zadnjih 7. dnevih zahtevek za stran v zadnjih 7. dnevih zahtevkov za strani v zadnjih 7. dnevih preusmerjeni zahtevek preusmerjeni zahtevki preusmerjeni zahtevek v zadnjih 7. dnevih preusmerjeni zahtevki v zadnjih 7. dnevih neuspe¹ni zahtevek neuspe¹ni zahtevki neuspe¹ni zahtevek v zadnjih 7. dnevih neuspe¹ni zahtevki v zadnjih 7. dnevih % prometa % prometa v zadnjih 7. dnevih % od najveèjega obsega prometa % od najveèjega obsega prometa v zadnjih 7. dnevih byte prometa bytov prometa ## ?bytes represents kbytes, Mbytes etc. ?bytov prometa byte prometa v zadnjih 7. dnevih bytov prometa v zadnjih 7. dnevih ?bytov prometa v zadnjih 7. dnevih zahtevanih od s preusmerjenimi zahtevki od z neuspe¹nimi zahtevki od s prvim zahtevkom od s prvim preusmerjenim zahtevkom od s prvim neuspe¹nim zahtevkom od ## Now "sorted by": again, in m, f & n (only needed in plural though) razporejeni po razporejene po razporejeni po ## Used at the top of each report To poroèilo vsebuje podatke iz ## Used in pie charts Rezine so narisane z ## different ways of sorting obsegu prometa obsegu prometa v zadnjih 7. dnevih % zahtevkov % zahtevkov v zadnjih 7. dnevih % od najveèjega ¹tevila zahtevkov % od najveèjega ¹tevila zahtevkov v zadnjih 7. dnevih ¹tevilu zahtevkov ¹tevilu zahtevkov v zadnjih 7. dnevih % zahtevkov za strani % zahtevkov za strani v zadnjih 7. dnevih % od najveèjega ¹tevila zahtevkov za strani % od najveèjega ¹tevila zahtevkov za strani v zadnjih 7. dnevih ¹tevilu zahtevkov za strani ¹tevilu zahtevkov za strani v zadnjih 7. dnevih % od preusmerjenih zahtevkov % od preusmerjenih zahtevkov v zadnjih 7. dnevih % od najveèjega ¹tevila preusmerjenih zahtevkov % od najveèjega ¹tevila preusmerjenih zahtevkov v zadnjih 7. dnevih ¹tevilu preusmerjenih zahtevkov ¹tevilu preusmerjenih zahtevkov v zadnjih 7. dnevih % od neuspe¹nih zahtevkov % od neuspe¹nih zahtevkov v zadnjih 7. dnevih % od najveèjega ¹tevila neuspe¹nih zahtevkov % od najveèjega ¹tevila neuspe¹nih zahtevkov v zadnjih 7. dnevih ¹tevilu neuspe¹nih zahtevkov ¹tevilu neuspe¹nih zahtevkov v zadnjih 7. dnevih èasu zadnjega zahtevka èasu zadnjega preusmerjenega zahtevka èasu zadnjega neuspe¹nega zahtevka èasu prvega zahtevka èasu prvega preusmerjenega zahtevka èasu prvega neuspe¹nega zahtevka ## 3 other ways of sorting in m, f, & n razporejeni po abecedi razporejene po abecedi razporejeno po abecedi razporejeni numerièno razporejene numerièno razporejeno numerièno nerazporejeni nerazporejene nerazporejeno ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dopoldan popoldan ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d. %m. %Y %H.%n ## "Program started at" and "Analysed requests from" %d. %m. %Y ob %H.%n ## In Daily Report %d. %m. %y ## In Daily Summary %w ## In Hourly Report %d. %m. %y %H.%n%x%I.%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d. %m. %y %H.%n%x%I.%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m. %y ## In Monthly Report %m. %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m. %y ## The date & time (D) column in non-time reports %d. %m. %y ob %H.%n ## In non-time reports: "including all files with requests since [date]" %d. %m. %y %H.%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Nadaljuj z zahtevo 101 Pretikanje protokolov 1xx [Informacije] 200 V redu 201 Narejeno 202 Sprejeto 203 Informacija ni izvirna 204 Ni vsebine 205 Poèisti dokument 206 Delna vsebina 2xx [Uspehi] 300 Veè izbir 301 Stalno premaknjen dokument 302 Dokument najden drugje 303 Poglej ostalo dokumentacijo 304 Nespremenjeno od zadnjega zahtevka 305 Uporabi proxy 306 Pretikanje proxy-ja 307 Zaèasno premaknjen dokument 3xx [Preusmeritev] 400 Neveljavna zahteva 401 Neavtorizirano 402 Zahtevano plaèilo 403 Dostop zavrnjen 404 Dokument ni najden 405 Nedovoljena metoda 406 Dokument ni veljaven za klienta 407 Zahtevana izvirnost Proxy-ja 408 Zahteva je potekla 409 Zahteva v sporu s sredstvi 410 Dokument za stalno odstranjen 411 Zahtevana dol¾ina 412 Predpogoj je spodletel 413 Zahteva je predolga 414 Zahtevano ime datoteke je predolgo 415 Ne podpira tipa datoteke 416 Zahtevan interval neveljaven 417 Prièakovanja spodletela 4xx [Razliène klient/uporabnik napake] 500 Notranja napaka pri procesorju 501 Nepodpiranje zahtevanega tipa 502 Napaka na serverju 503 Usluga trenutno nedosegljiva 504 Gateway je potekel 505 Verzija HTTP ni podprta 506 Preusmeritev spodletela 5xx [Napake na serverju] xxx [Neznan] analog-ce-6.0.17/lang/si1.lng000066400000000000000000000326401406366436600155750ustar00rootroot00000000000000## Slovenian language file for analog 6.0. ## May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1250 ## Abbreviations for the day and month names. ned pon tor sre èet pet sob jan feb mar apr maj jun jul avg sep okt nov dec ## Next some standard common words. ## Abbreviation for "week beginning" teden od: leto ## Quarter of a year èetrtletje mesec dan dni ura minuta minut sekunda sekund(e) byte bytov ## ?bytes represents kbytes, Mbytes etc. ?bytov zahtevek zahtevki(ov) datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum ura èas prvi datum prva ura zadnji obisk zadnji datum datoteka datotek(e) gostitelj gostitelji(ev) virtualni gostitelj virtualni gostitelji(ev) imenik imenikov domena domen(e) organizacija organizacije podaljšek podaljški URL URL-ji brskalnik brskalniki OS OS ## (= operating system, operating systems) velikost iskalni niz iskalni nizi spletno podroèje spletna podroèja uporabnik uporabniki(ov) statusna koda statusne kode Statistika spletnega strežnika ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Splošni povzetek ## The time reports, plus "busiest" strings (at the bottom of each report) Poroèilo po letih Leto z najveè obiski: Poroèilo po èetrtletjih Èetrtletje z najveè obiski: Poroèilo po mesecih Mesec z najveè obiski: Poroèilo po tednih Teden z najveè obiski: teden od Povzetek po dnevih Poroèilo po dnevih Dan z najveè obiski: Poroèilo po urah Povzetek po urah Povzetek po uri tedna Ura z najveè obiski: Poroèilo po èetrt ure Povzetek po èetrt ure Èetrt ure z najveè obiskov: Poroèilo po skupinah po pet minut Povzetek po petih minutah Pet minut z najveè obiski: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Poroèilo po gostiteljih gostitelja gostitelji(ev) m Poroèilo o preusmeritvah gostiteljev gostitelj gostiteljev m Poroèilo o neuspehih gostiteljev gostitelj gostiteljev m Poroèilo po imenikih imenik imeniki m Poroèilo po vrstah datotek podaljšek podaljški m Poroèilo po zahtevkih datoteka datoteke f Poroèilo o preusmeritveh (redirekciji) datoteka datoteke f Poroèilo o napakah datoteka datoteke f Poroèilo po straneh, od koder so prišli URL naslov URL naslovi m Poroèilo po spletnih podroèjih, od koder so prišli spletno podroèje spletna podroèja n Poroèilo o preusmerjenih zahtevkih URL naslov URL naslovi m Poroèilo o neuspelih preusmerjenih zahtevkih URL naslov URL naslovi m Poroèilo o povpraševanju povpraševanje povpraševanja n Poroèilo o povpraševanju z besedami povpreševalna beseda povpraševalne besede n Poroèilo o internem povpraševanju povpraševanje povpraševanja n Poroèilo o internem povpraševanju z besedami povpraševalna beseda povpraševalne besede f Poroèilo po virtualnih gostiteljih virtualni gostitelj virtualni gostitelji m Poroèilo o preusmeritvah virtualnih gostiteljev virtualni gostitelj virtualni gostitelji m Poroèilo o neuspehih virtualnih gostiteljev virtualni gostitelj virtualni gostitelji m Poroèilo po uporabnikih uporabnik uporabniki(ov) m Poroèilo o preusmerjenih uporabnikih uporabnik uporabniki(ov) m Poroèilo o neuspelih uporabnikih uporabnik uporabniki(ov) m Povzetek po brskalnikih brskalnik brskalniki(ov) m Poroèilo po brskalnikih brskalnik brskalniki(ov) m Poroèilo operacijskega sistema operacijski sistem operacijski sistemi m Poroèilo po domenah domena domene f Poroèilo o organizaciji organizacija organizacije f Poroèilo o statusu posredovanih strani oznaka statusa oznake statusa m Poroèilo o procesnem èasu Poroèilo po velikosti datotek ## Used at the bottom of the report Analizo opravil Èas dela Manj kot 1 ## Used in the time reports Vsaka enota predstavlja ali manjši delež zahtevek za stran zahtevkov za stran ## Used at the bottom of each non-time report: need m, f & n genders nenavedeno nenavedeno nenavedeno ## Used on the pie charts: again need m, f & n genders * * Drugo ## Used at the top of the report Datum obdelave: Analizirani so zahtevki od do ## Used in the General Summary Uspešnih zahtevkov (skupaj) Povpreèno uspešnih zahtevkov dnevno Uspešnih zahtevkov za strani (skupaj) Povpreèno uspešnih zahtevkov za strani dnevno Vrstice v log datoteki brez oznake statusa Neuspešni zahtevki Preusmerjeni zahtevki Zahtevki z oznako "informational status" Število posredovanih strani na drugih strežnikih Število posredovanih drugih strežnikov Okvarjene vrstice v log datoteki Neželjeni vnosi v log datoteki Celoten obseg prenesenih podatkov Povpreèno število prenesenih podatkov dnevno Številke v oklepajih se nanašajo na 7 dni do zadnjih 7 dni Pojdi na Zaèetek ## Some special phrases for particular reports. [nerešene številène adrese] [nepodana domena] [neznana domena] [glavni imenik] [ni imenika] [ni podaljška] [imeniki] Neznani Windows Drugi Unix Roboti OS neznan ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) št.zaht. ted.št.zaht. % zaht. % ted.zaht. strani ted.strani % strani % ted.strani bytov ?bytov ted.bytov ted.?bytov % bytov % ted.bytov št. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n Izpisani prvi Izpisane prve Izpisani prvi %s Izpisani prvi %d %s Izpisane prve %d %s Izpisani prvi %d %s Izpisani %s Izpisane %s Izpisani %s ## "by" in the phrase "listing the top 3 files BY number of requests" po ## All requests WITH AT LEAST 10 requests z vsaj ## Different ways of doing floors zahtevek v zadnjih 7. dnevih zahtevkov v zadnjih 7. dnevih zahtevek za stran v zadnjih 7. dnevih zahtevkov za strani v zadnjih 7. dnevih preusmerjeni zahtevek preusmerjeni zahtevki preusmerjeni zahtevek v zadnjih 7. dnevih preusmerjeni zahtevki v zadnjih 7. dnevih neuspešni zahtevek neuspešni zahtevki neuspešni zahtevek v zadnjih 7. dnevih neuspešni zahtevki v zadnjih 7. dnevih % prometa % prometa v zadnjih 7. dnevih % od najveèjega obsega prometa % od najveèjega obsega prometa v zadnjih 7. dnevih byte prometa bytov prometa ## ?bytes represents kbytes, Mbytes etc. ?bytov prometa byte prometa v zadnjih 7. dnevih bytov prometa v zadnjih 7. dnevih ?bytov prometa v zadnjih 7. dnevih zahtevanih od s preusmerjenimi zahtevki od z neuspešnimi zahtevki od s prvim zahtevkom od s prvim preusmerjenim zahtevkom od s prvim neuspešnim zahtevkom od ## Now "sorted by": again, in m, f & n (only needed in plural though) razporejeni po razporejene po razporejeni po ## Used at the top of each report To poroèilo vsebuje podatke iz ## Used in pie charts Rezine so narisane z ## different ways of sorting obsegu prometa obsegu prometa v zadnjih 7. dnevih % zahtevkov % zahtevkov v zadnjih 7. dnevih % od najveèjega števila zahtevkov % od najveèjega števila zahtevkov v zadnjih 7. dnevih številu zahtevkov številu zahtevkov v zadnjih 7. dnevih % zahtevkov za strani % zahtevkov za strani v zadnjih 7. dnevih % od najveèjega števila zahtevkov za strani % od najveèjega števila zahtevkov za strani v zadnjih 7. dnevih številu zahtevkov za strani številu zahtevkov za strani v zadnjih 7. dnevih % od preusmerjenih zahtevkov % od preusmerjenih zahtevkov v zadnjih 7. dnevih % od najveèjega števila preusmerjenih zahtevkov % od najveèjega števila preusmerjenih zahtevkov v zadnjih 7. dnevih številu preusmerjenih zahtevkov številu preusmerjenih zahtevkov v zadnjih 7. dnevih % od neuspešnih zahtevkov % od neuspešnih zahtevkov v zadnjih 7. dnevih % od najveèjega števila neuspešnih zahtevkov % od najveèjega števila neuspešnih zahtevkov v zadnjih 7. dnevih številu neuspešnih zahtevkov številu neuspešnih zahtevkov v zadnjih 7. dnevih èasu zadnjega zahtevka èasu zadnjega preusmerjenega zahtevka èasu zadnjega neuspešnega zahtevka èasu prvega zahtevka èasu prvega preusmerjenega zahtevka èasu prvega neuspešnega zahtevka ## 3 other ways of sorting in m, f, & n razporejeni po abecedi razporejene po abecedi razporejeno po abecedi razporejeni numerièno razporejene numerièno razporejeno numerièno nerazporejeni nerazporejene nerazporejeno ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dopoldan popoldan ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %d. %m. %Y %H.%n ## "Program started at" and "Analysed requests from" %d. %m. %Y ob %H.%n ## In Daily Report %d. %m. %y ## In Daily Summary %w ## In Hourly Report %d. %m. %y %H.%n%x%I.%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d. %m. %y %H.%n%x%I.%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m. %y ## In Monthly Report %m. %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m. %y ## The date & time (D) column in non-time reports %d. %m. %y ob %H.%n ## In non-time reports: "including all files with requests since [date]" %d. %m. %y %H.%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Nadaljuj z zahtevo 101 Pretikanje protokolov 1xx [Informacije] 200 V redu 201 Narejeno 202 Sprejeto 203 Informacija ni izvirna 204 Ni vsebine 205 Poèisti dokument 206 Delna vsebina 2xx [Uspehi] 300 Veè izbir 301 Stalno premaknjen dokument 302 Dokument najden drugje 303 Poglej ostalo dokumentacijo 304 Nespremenjeno od zadnjega zahtevka 305 Uporabi proxy 306 Pretikanje proxy-ja 307 Zaèasno premaknjen dokument 3xx [Preusmeritev] 400 Neveljavna zahteva 401 Neavtorizirano 402 Zahtevano plaèilo 403 Dostop zavrnjen 404 Dokument ni najden 405 Nedovoljena metoda 406 Dokument ni veljaven za klienta 407 Zahtevana izvirnost Proxy-ja 408 Zahteva je potekla 409 Zahteva v sporu s sredstvi 410 Dokument za stalno odstranjen 411 Zahtevana dolžina 412 Predpogoj je spodletel 413 Zahteva je predolga 414 Zahtevano ime datoteke je predolgo 415 Ne podpira tipa datoteke 416 Zahtevan interval neveljaven 417 Prièakovanja spodletela 4xx [Razliène klient/uporabnik napake] 500 Notranja napaka pri procesorju 501 Nepodpiranje zahtevanega tipa 502 Napaka na serverju 503 Usluga trenutno nedosegljiva 504 Gateway je potekel 505 Verzija HTTP ni podprta 506 Preusmeritev spodletela 5xx [Napake na serverju] xxx [Neznan] analog-ce-6.0.17/lang/sk.lng000066400000000000000000000322201406366436600155100ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-2 ## Abbreviations for the day and month names. Ne Po Ut St ©t Pi So Jan Feb Mar Apr Máj Jún Júl Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" tý¾deò od rok ## Quarter of a year ¹tvr»rok mesiac deò dní hod. minúta min. sekunda s bajt bajtov ## ?bytes represents kbytes, Mbytes etc. ?bajtov po¾iadavku po¾iadaviek dátum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dátum èas èas prvý dátum prvý krát naposledy naposledy súbor súborov hostiteµ hostiteµov virtuálny server virtuálnych serverov adresár adresárov doména domén organizácia organizácií prípona prípon URL URLs prehliadaè prehliadaèov operaèný systém operaèných systémov ## (= operating system, operating systems) veµkos» hµadaná fráza hµadaných fráz web server web serverov u¾ívateµ u¾ívateµov návratový kód návratových kódov ©tatistika web servera ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports V¹eobecný prehµad ## The time reports, plus "busiest" strings (at the bottom of each report) Roèný prehµad Najru¹nej¹í rok: ©tvr»roèný prehµad Najru¹nej¹í ¹tvr»rok: Mesaèný prehµad Najru¹nej¹í mesiac: Tý¾denný prehµad Najru¹nej¹í tý¾deò: zaèínajúci Denný súhrn Denný prehµad Najru¹nej¹í deò: Hodinový prehµad Hodinový súhrn Tý¾dòový súhrn podµa hodín Najru¹nej¹ia hodina: ©tvr»hodinový prehµad ©tvr»hodinový súhrn Najru¹nej¹ia ¹tvr»hodina: Pä»minútový prehµad Pä»minútový súhrn Najru¹nej¹ích pä» minút: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Prehµad hostiteµov hostiteµ hostiteµov n Prehµad presmerovaní hostiteµov hostiteµ hostiteµov n Prehµad chýbajúcich hostiteµov hostiteµ hostiteµov n Prehµad adresárov adresár adresárov n Prehµad typov súborov prípona prípon n Prehµad po¾iadaviek súbor súborov n Prehµad presmerovaní súbor súborov n Prehµad chýb súbor súborov n Prehµad referencií odkazujúce URL odkazujúcich URL n Prehµad odkazujúcich serverov odkazujúci server odkazujúcich serverov n Prehµad presmerovaných referencií odkazované URL odkazovaných URL n Prehµad chybných referencií odkazované URL odkazovaných URL n Prehµad vyhµadávaných výrazov výraz výrazov n Prehµad vyhµadávaných slov hµadané slovo hµadaných slov n Prehµad interne hµadaných výrazov výraz výrazov n Prehµad interne hµadaných slov hµadané slovo hµadaných slov n Prehµad virtuálnych web serverov virtuálny server virtuálnych serverov n Prehµad presmerovaní virtuálnych serverov virtuálny server virtuálnych serverov n Prehµad chýb virtuálnych serverov virtuálny server virtuálnych serverov n Prehµad u¾ívateµov u¾ívateµ u¾ívateµov n Prehµad presmerovaní u¾ívateµov u¾ívateµ u¾ívateµov n Prehµad chýb u¾ívateµov u¾ívateµ u¾ívateµov n Súhrn prehliadaèov prehliadaè prehliadaèov n Prehµad prehliadaèov prehliadaè prehliadaèov n Prehµad operaèných systémov operaèný systém operaèných systémov n Prehµad domén doména domén n Prehµad organizácií organizácia organizácií n Prehµad návratových kódov návratový kód návratových kódov n Prehµad doby spracovania Prehµad veµkostí súborov ## Used at the bottom of the report Táto analýzu vytvoril Doba spracovania menej ako 1 ## Used in the time reports Ka¾dý dielik predstavuje alebo èas» po¾iadavka na stránku po¾iadaviek na stránku ## Used at the bottom of each non-time report: need m, f & n genders * * nezahrnuté ## Used on the pie charts: again need m, f & n genders * * ostatné ## Used at the top of the report Program bol spustený v Analýza sa vz»ahuje na obdobie od do ## Used in the General Summary Úspe¹né po¾iadavky Úspe¹né po¾iadavky v priemere za deò Úspe¹né po¾iadavky na stránky Úspe¹né po¾iadavky na stránky v priemere za deò Riadky logovacieho súboru bez stavového kódu Neúspe¹né po¾iadavky Presmerované po¾iadavky Po¾iadavky s informatívnym stavovým kódom Rozdielne po¾adované súbory Rozdielne obslú¾ené servery Poru¹ené riadky logovacieho súboru Ne¾iaduce polo¾ky logovacieho súboru Prenesené dáta Prenesené dáta v priemere za deò údaje v zátvorkách sa vz»ahujú na 7 dní konèiacich posledných 7 dní Prechod na Zaèiatok ## Some special phrases for particular reports. [nerozoznané èíselné adresy] [doména neuvedená] [neznáma doména] [koreòový adresár] [bez adresára] [bez prípony] [adresáre] neznáme Windows iný UNIX roboty neznámy OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) po¾. po¾. za 7 dní % po¾. % po¾. za 7 dní str. str. za 7 dní % str. % str. za 7 dní bajtov ?bajtov bajtov za 7 dní ?bajtov za 7 dní % bajtov % bajtov za 7 dní è. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Zoznam prvých %s * * Zoznam prvých %d %s * * Zoznam %s ## "by" in the phrase "listing the top 3 files BY number of requests" podµa ## All requests WITH AT LEAST 10 requests majúcich aspoò ## Different ways of doing floors po¾iadavka za posledných 7 dní po¾iadaviek za posledných 7 dní po¾iadavka na stránku za posledných 7 dní po¾iadaviek na stránky za posledných 7 dní presmerovaná po¾iadavka presmerovaných po¾iadaviek presmerovaná po¾iadavka za posledných 7 dní presmerovaných po¾iadaviek za posledných 7 dní neúspe¹ná po¾iadavka neúspe¹ných po¾iadaviek neúspe¹ná po¾iadavka za posledných 7 dní neúspe¹ných po¾iadaviek za posledných 7 dní % prenosu % prenosu za posledných 7 dní % maximálneho mno¾stva prenesených dát % maximálneho mno¾stva prenesených dát za posledných 7 dní bajtu prenosu bajtov prenosu ## ?bytes represents kbytes, Mbytes etc. ?bajtov prenosu bajtu prenosu za posledných 7 dní bajtov prenosu za posledných 7 dní ?bajtov prenosu za posledných 7 dní po¾adovaných od s presmerovanou po¾iadavkou od s neúspe¹nou po¾iadavkou od s prvou po¾iadavkou s prvou presmerovanou po¾iadavkou od s prvou neúspe¹nou po¾iadavkou od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * zatriedený podµa ## Used at the top of each report Tento prehµad obsahuje údaje od ## Used in pie charts Výseky sú vykreslené podµa ## different ways of sorting mno¾stva prenesených dát mno¾stva prenesených dát za posledných 7 dní % po¾iadaviek % po¾iadaviek za posledných 7 dní % maximálneho poètu po¾iadaviek % maximálneho poètu po¾iadaviek za posledných 7 dní poètu po¾iadaviek poètu po¾iadaviek za posledných 7 dní % po¾iadaviek na stránky % po¾iadaviek na stránky za posledných 7 dní % maximálneho poètu po¾iadaviek na stránky % maximálneho poètu po¾iadaviek na stránky za posledných 7 dní poètu po¾iadaviek na stránky poètu po¾iadaviek na stránky za posledných 7 dní % presmerovaných po¾iadaviek % presmerovaných po¾iadaviek za posledných 7 dní % maximálneho poètu presmerovaných po¾iadaviek % maximálneho poètu presmerovaných po¾iadaviek za posledných 7 dní poètu presmerovaných po¾iadaviek poètu presmerovaných po¾iadaviek za posledných 7 dní % neúspe¹ných po¾iadaviek % neúspe¹ných po¾iadaviek za posledných 7 dní % maximálneho poètu neúspe¹ných po¾iadaviek % maximálneho poètu neúspe¹ných po¾iadaviek za posledných 7 dní poètu neúspe¹ných po¾iadaviek poètu neúspe¹ných po¾iadaviek za posledných 7 dní èasu poslednej po¾iadavky èasu poslednej presmerovanej po¾iadavky èasu poslednej neúspe¹nej po¾iadavky èasu prvej po¾iadavky èasu prvej presmerovanej po¾iadavky èasu prvej neúspe¹nej po¾iadavky ## 3 other ways of sorting in m, f, & n * * zatriedený abecedne * * zatriedený èíselne * * nezatriedený ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y, %H:%n ## "Program started at" and "Analysed requests from" %w, %D. %m %Y, %H:%n ## In Daily Report %d. %m '%y ## In Daily Summary %w ## In Hourly Report %d. %m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d. %m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m '%y ## The date & time (D) column in non-time reports %d. %m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [rôzne informaèné] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [rôzne uspe¹né] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [rôzne presmerovania] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [rôzne chyby klienta] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [rôzne chyby servera] xxx [neznáme] analog-ce-6.0.17/lang/sk1.lng000066400000000000000000000322221406366436600155730ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1250 ## Abbreviations for the day and month names. Ne Po Ut St Št Pi So Jan Feb Mar Apr Máj Jún Júl Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" týždeò od rok ## Quarter of a year štvrrok mesiac deò dní hod. minúta min. sekunda s bajt bajtov ## ?bytes represents kbytes, Mbytes etc. ?bajtov požiadavku požiadaviek dátum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 dátum èas èas prvý dátum prvý krát naposledy naposledy súbor súborov hostite¾ hostite¾ov virtuálny server virtuálnych serverov adresár adresárov doména domén organizácia organizácií prípona prípon URL URLs prehliadaè prehliadaèov operaèný systém operaèných systémov ## (= operating system, operating systems) ve¾kos h¾adaná fráza h¾adaných fráz web server web serverov užívate¾ užívate¾ov návratový kód návratových kódov Štatistika web servera ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Všeobecný preh¾ad ## The time reports, plus "busiest" strings (at the bottom of each report) Roèný preh¾ad Najrušnejší rok: Štvrroèný preh¾ad Najrušnejší štvrrok: Mesaèný preh¾ad Najrušnejší mesiac: Týždenný preh¾ad Najrušnejší týždeò: zaèínajúci Denný súhrn Denný preh¾ad Najrušnejší deò: Hodinový preh¾ad Hodinový súhrn Týždòový súhrn pod¾a hodín Najrušnejšia hodina: Štvrhodinový preh¾ad Štvrhodinový súhrn Najrušnejšia štvrhodina: Päminútový preh¾ad Päminútový súhrn Najrušnejších pä minút: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Preh¾ad hostite¾ov hostite¾ hostite¾ov n Preh¾ad presmerovaní hostite¾ov hostite¾ hostite¾ov n Preh¾ad chýbajúcich hostite¾ov hostite¾ hostite¾ov n Preh¾ad adresárov adresár adresárov n Preh¾ad typov súborov prípona prípon n Preh¾ad požiadaviek súbor súborov n Preh¾ad presmerovaní súbor súborov n Preh¾ad chýb súbor súborov n Preh¾ad referencií odkazujúce URL odkazujúcich URL n Preh¾ad odkazujúcich serverov odkazujúci server odkazujúcich serverov n Preh¾ad presmerovaných referencií odkazované URL odkazovaných URL n Preh¾ad chybných referencií odkazované URL odkazovaných URL n Preh¾ad vyh¾adávaných výrazov výraz výrazov n Preh¾ad vyh¾adávaných slov h¾adané slovo h¾adaných slov n Preh¾ad interne h¾adaných výrazov výraz výrazov n Preh¾ad interne h¾adaných slov h¾adané slovo h¾adaných slov n Preh¾ad virtuálnych web serverov virtuálny server virtuálnych serverov n Preh¾ad presmerovaní virtuálnych serverov virtuálny server virtuálnych serverov n Preh¾ad chýb virtuálnych serverov virtuálny server virtuálnych serverov n Preh¾ad užívate¾ov užívate¾ užívate¾ov n Preh¾ad presmerovaní užívate¾ov užívate¾ užívate¾ov n Preh¾ad chýb užívate¾ov užívate¾ užívate¾ov n Súhrn prehliadaèov prehliadaè prehliadaèov n Preh¾ad prehliadaèov prehliadaè prehliadaèov n Preh¾ad operaèných systémov operaèný systém operaèných systémov n Preh¾ad domén doména domén n Preh¾ad organizácií organizácia organizácií n Preh¾ad návratových kódov návratový kód návratových kódov n Preh¾ad doby spracovania Preh¾ad ve¾kostí súborov ## Used at the bottom of the report Táto analýzu vytvoril Doba spracovania menej ako 1 ## Used in the time reports Každý dielik predstavuje alebo èas požiadavka na stránku požiadaviek na stránku ## Used at the bottom of each non-time report: need m, f & n genders * * nezahrnuté ## Used on the pie charts: again need m, f & n genders * * ostatné ## Used at the top of the report Program bol spustený v Analýza sa vzahuje na obdobie od do ## Used in the General Summary Úspešné požiadavky Úspešné požiadavky v priemere za deò Úspešné požiadavky na stránky Úspešné požiadavky na stránky v priemere za deò Riadky logovacieho súboru bez stavového kódu Neúspešné požiadavky Presmerované požiadavky Požiadavky s informatívnym stavovým kódom Rozdielne požadované súbory Rozdielne obslúžené servery Porušené riadky logovacieho súboru Nežiaduce položky logovacieho súboru Prenesené dáta Prenesené dáta v priemere za deò údaje v zátvorkách sa vzahujú na 7 dní konèiacich posledných 7 dní Prechod na Zaèiatok ## Some special phrases for particular reports. [nerozoznané èíselné adresy] [doména neuvedená] [neznáma doména] [koreòový adresár] [bez adresára] [bez prípony] [adresáre] neznáme Windows iný UNIX roboty neznámy OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) pož. pož. za 7 dní % pož. % pož. za 7 dní str. str. za 7 dní % str. % str. za 7 dní bajtov ?bajtov bajtov za 7 dní ?bajtov za 7 dní % bajtov % bajtov za 7 dní è. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Zoznam prvých %s * * Zoznam prvých %d %s * * Zoznam %s ## "by" in the phrase "listing the top 3 files BY number of requests" pod¾a ## All requests WITH AT LEAST 10 requests majúcich aspoò ## Different ways of doing floors požiadavka za posledných 7 dní požiadaviek za posledných 7 dní požiadavka na stránku za posledných 7 dní požiadaviek na stránky za posledných 7 dní presmerovaná požiadavka presmerovaných požiadaviek presmerovaná požiadavka za posledných 7 dní presmerovaných požiadaviek za posledných 7 dní neúspešná požiadavka neúspešných požiadaviek neúspešná požiadavka za posledných 7 dní neúspešných požiadaviek za posledných 7 dní % prenosu % prenosu za posledných 7 dní % maximálneho množstva prenesených dát % maximálneho množstva prenesených dát za posledných 7 dní bajtu prenosu bajtov prenosu ## ?bytes represents kbytes, Mbytes etc. ?bajtov prenosu bajtu prenosu za posledných 7 dní bajtov prenosu za posledných 7 dní ?bajtov prenosu za posledných 7 dní požadovaných od s presmerovanou požiadavkou od s neúspešnou požiadavkou od s prvou požiadavkou s prvou presmerovanou požiadavkou od s prvou neúspešnou požiadavkou od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * zatriedený pod¾a ## Used at the top of each report Tento preh¾ad obsahuje údaje od ## Used in pie charts Výseky sú vykreslené pod¾a ## different ways of sorting množstva prenesených dát množstva prenesených dát za posledných 7 dní % požiadaviek % požiadaviek za posledných 7 dní % maximálneho poètu požiadaviek % maximálneho poètu požiadaviek za posledných 7 dní poètu požiadaviek poètu požiadaviek za posledných 7 dní % požiadaviek na stránky % požiadaviek na stránky za posledných 7 dní % maximálneho poètu požiadaviek na stránky % maximálneho poètu požiadaviek na stránky za posledných 7 dní poètu požiadaviek na stránky poètu požiadaviek na stránky za posledných 7 dní % presmerovaných požiadaviek % presmerovaných požiadaviek za posledných 7 dní % maximálneho poètu presmerovaných požiadaviek % maximálneho poètu presmerovaných požiadaviek za posledných 7 dní poètu presmerovaných požiadaviek poètu presmerovaných požiadaviek za posledných 7 dní % neúspešných požiadaviek % neúspešných požiadaviek za posledných 7 dní % maximálneho poètu neúspešných požiadaviek % maximálneho poètu neúspešných požiadaviek za posledných 7 dní poètu neúspešných požiadaviek poètu neúspešných požiadaviek za posledných 7 dní èasu poslednej požiadavky èasu poslednej presmerovanej požiadavky èasu poslednej neúspešnej požiadavky èasu prvej požiadavky èasu prvej presmerovanej požiadavky èasu prvej neúspešnej požiadavky ## 3 other ways of sorting in m, f, & n * * zatriedený abecedne * * zatriedený èíselne * * nezatriedený ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y, %H:%n ## "Program started at" and "Analysed requests from" %w, %D. %m %Y, %H:%n ## In Daily Report %d. %m '%y ## In Daily Summary %w ## In Hourly Report %d. %m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d. %m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m '%y ## The date & time (D) column in non-time reports %d. %m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [rôzne informaèné] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [rôzne uspešné] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [rôzne presmerovania] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [rôzne chyby klienta] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [rôzne chyby servera] xxx [neznáme] analog-ce-6.0.17/lang/sk1a.lng000066400000000000000000000322251406366436600157370ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Ned Pon Uto Str Stv Pia Sob Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" tyzden od rok ## Quarter of a year stvrtrok mesiac den dni hod. minuta min. sekunda s bajt bajtov ## ?bytes represents kbytes, Mbytes etc. ?bajtov poziadavku poziadaviek datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum cas cas prvy datum prvy krat naposledy naposledy subor suborov hostitel hostitelov virtualny server virtualnych serverov adresar adresarov domena domen organizacia organizacii pripona pripon URL URLs prehliadac prehliadacov operacny system operacnych systemov ## (= operating system, operating systems) velkost hladana fraza hladanych fraz web server web serverov uzivatel uzivatelov navratovy kod navratovych kodov Statistika web servera ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Vseobecny prehlad ## The time reports, plus "busiest" strings (at the bottom of each report) Rocny prehlad Najrusnejsi rok: Stvrtrocny prehlad Najrusnejsi stvrtrok: Mesacny prehlad Najrusnejsi mesiac: Tyzdenny prehlad Najrusnejsi tyzden: zacinajuci Denny suhrn Denny prehlad Najrusnejsi den: Hodinovy prehlad Hodinovy suhrn Tyzdnovy suhrn podla hodin Najrusnejsia hodina: Stvrthodinovy prehlad Stvrthodinovy suhrn Najrusnejsia stvrthodina: Patminutovy prehlad Patminutovy suhrn Najrusnejsich pat minut: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Prehlad hostitelov hostitel hostitelov n Prehlad presmerovani hostitelov hostitel hostitelov n Prehlad chybajucich hostitelov hostitel hostitelov n Prehlad adresarov adresar adresarov n Prehlad typov suborov pripona pripon n Prehlad poziadaviek subor suborov n Prehlad presmerovani subor suborov n Prehlad chyb subor suborov n Prehlad referencii odkazujuce URL odkazujucich URL n Prehlad odkazujucich serverov odkazujuci server odkazujucich serverov n Prehlad presmerovanych referencii odkazovane URL odkazovanych URL n Prehlad chybnych referencii odkazovane URL odkazovanych URL n Prehlad vyhladavanych vyrazov vyraz vyrazov n Prehlad vyhladavanych slov hladane slovo hladanych slov n Prehlad interne hladanych vyrazov vyraz vyrazov n Prehlad interne hladanych slov hladane slovo hladanych slov n Prehlad virtualnych web serverov virtualny server virtualnych serverov n Prehlad presmerovani virtualnych serverov virtualny server virtualnych serverov n Prehlad chyb virtualnych serverov virtualny server virtualnych serverov n Prehlad uzivatelov uzivatel uzivatelov n Prehlad presmerovani uzivatelov uzivatel uzivatelov n Prehlad chyb uzivatelov uzivatel uzivatelov n Suhrn prehliadacov prehliadac prehliadacov n Prehlad prehliadacov prehliadac prehliadacov n Prehlad operacnych systemov operacny system operacnych systemov n Prehlad domen domena domen n Prehlad organizacii organizacia organizacii n Prehlad navratovych kodov navratovy kod navratovych kodov n Prehlad doby spracovania Prehlad velkosti suborov ## Used at the bottom of the report Tato analyzu vytvoril Doba spracovania menej ako 1 ## Used in the time reports Kazdy dielik predstavuje alebo cast poziadavka na stranku poziadaviek na stranku ## Used at the bottom of each non-time report: need m, f & n genders * * nezahrnute ## Used on the pie charts: again need m, f & n genders * * ostatne ## Used at the top of the report Program bol spusteny v Analyza sa vztahuje na obdobie od do ## Used in the General Summary Uspesne poziadavky Uspesne poziadavky v priemere za den Uspesne poziadavky na stranky Uspesne poziadavky na stranky v priemere za den Riadky logovacieho suboru bez stavoveho kodu Neuspesne poziadavky Presmerovane poziadavky Poziadavky s informativnym stavovym kodom Rozdielne pozadovane subory Rozdielne obsluzene servery Porusene riadky logovacieho suboru Neziaduce polozky logovacieho suboru Prenesene data Prenesene data v priemere za den udaje v zatvorkach sa vztahuju na 7 dni konciacich poslednych 7 dni Prechod na Zaciatok ## Some special phrases for particular reports. [nerozoznane ciselne adresy] [domena neuvedena] [neznama domena] [korenovy adresar] [bez adresara] [bez pripony] [adresare] nezname Windows iny UNIX roboty neznamy OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) poz. poz. za 7 dni % poz. % poz. za 7 dni str. str. za 7 dni % str. % str. za 7 dni bajtov ?bajtov bajtov za 7 dni ?bajtov za 7 dni % bajtov % bajtov za 7 dni c. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Zoznam prvych %s * * Zoznam prvych %d %s * * Zoznam %s ## "by" in the phrase "listing the top 3 files BY number of requests" podla ## All requests WITH AT LEAST 10 requests majucich aspon ## Different ways of doing floors poziadavka za poslednych 7 dni poziadaviek za poslednych 7 dni poziadavka na stranku za poslednych 7 dni poziadaviek na stranky za poslednych 7 dni presmerovana poziadavka presmerovanych poziadaviek presmerovana poziadavka za poslednych 7 dni presmerovanych poziadaviek za poslednych 7 dni neuspesna poziadavka neuspesnych poziadaviek neuspesna poziadavka za poslednych 7 dni neuspesnych poziadaviek za poslednych 7 dni % prenosu % prenosu za poslednych 7 dni % maximalneho mnozstva prenesenych dat % maximalneho mnozstva prenesenych dat za poslednych 7 dni bajtu prenosu bajtov prenosu ## ?bytes represents kbytes, Mbytes etc. ?bajtov prenosu bajtu prenosu za poslednych 7 dni bajtov prenosu za poslednych 7 dni ?bajtov prenosu za poslednych 7 dni pozadovanych od s presmerovanou poziadavkou od s neuspesnou poziadavkou od s prvou poziadavkou s prvou presmerovanou poziadavkou od s prvou neuspesnou poziadavkou od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * zatriedeny podla ## Used at the top of each report Tento prehlad obsahuje udaje od ## Used in pie charts Vyseky su vykreslene podla ## different ways of sorting mnozstva prenesenych dat mnozstva prenesenych dat za poslednych 7 dni % poziadaviek % poziadaviek za poslednych 7 dni % maximalneho poctu poziadaviek % maximalneho poctu poziadaviek za poslednych 7 dni poctu poziadaviek poctu poziadaviek za poslednych 7 dni % poziadaviek na stranky % poziadaviek na stranky za poslednych 7 dni % maximalneho poctu poziadaviek na stranky % maximalneho poctu poziadaviek na stranky za poslednych 7 dni poctu poziadaviek na stranky poctu poziadaviek na stranky za poslednych 7 dni % presmerovanych poziadaviek % presmerovanych poziadaviek za poslednych 7 dni % maximalneho poctu presmerovanych poziadaviek % maximalneho poctu presmerovanych poziadaviek za poslednych 7 dni poctu presmerovanych poziadaviek poctu presmerovanych poziadaviek za poslednych 7 dni % neuspesnych poziadaviek % neuspesnych poziadaviek za poslednych 7 dni % maximalneho poctu neuspesnych poziadaviek % maximalneho poctu neuspesnych poziadaviek za poslednych 7 dni poctu neuspesnych poziadaviek poctu neuspesnych poziadaviek za poslednych 7 dni casu poslednej poziadavky casu poslednej presmerovanej poziadavky casu poslednej neuspesnej poziadavky casu prvej poziadavky casu prvej presmerovanej poziadavky casu prvej neuspesnej poziadavky ## 3 other ways of sorting in m, f, & n * * zatriedeny abecedne * * zatriedeny ciselne * * nezatriedeny ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y, %H:%n ## "Program started at" and "Analysed requests from" %w, %D. %m %Y, %H:%n ## In Daily Report %d. %m '%y ## In Daily Summary %w ## In Hourly Report %d. %m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d. %m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m '%y ## The date & time (D) column in non-time reports %d. %m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [rozne informacne] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [rozne uspesne] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [rozne presmerovania] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [rozne chyby klienta] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [rozne chyby servera] xxx [nezname] analog-ce-6.0.17/lang/sk1adesc.txt000066400000000000000000000111211406366436600166250ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # # Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: US-ASCII # # Yearly Report Tento prehlad zobrazuje aktivitu v kazdom roku. # Quarterly Report Tento prehlad zobrazuje aktivitu v kazdom stvrtroku. # Monthly Report Tento prehlad zobrazuje aktivitu v kazdom mesiaci. # Weekly Report Tento prehlad zobrazuje aktivitu v kazdom tyzdni. # Daily Report Tento prehlad zobrazuje aktivitu v kazdom dni. # Hourly Report Tento prehlad zobrazuje aktivitu v kazdej hodine. # Quarter-Hour Report Tento prehlad zobrazuje aktivitu v kazdom stvrthodinovom intervale. # Five-Minute Report Tento prehlad zobrazuje aktivitu v kazdom 5-minutovom intervale. # Daily Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdy den tyzdna, suhrnne pre vsetky tyzdne v prehlade. # Hourly Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdu hodinu dna, suhrnne pre vsetky dni v prehlade. # Hour of the Week Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdu hodinu tyzdna, suhrnne pre vsetky tyzdne v prehlade. # Quarter-Hour Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdy stvrthodinovy interval dna, suhrnne pre vsetky dni v prehlade. # Five-Minute Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdy 5-minutovy interval dna, suhrnne pre vsetky dni v prehlade. # General Summary Tento prehlad obsahuje celkove statistiky. # Request Report Tento prehlad zobrazuje pozadovane subory na strankach. # Redirection Report Tento prehlad zobrazuje subory, ktore sposobili presmerovanie poziadaviek na iny subor. (Zvycajne adresare s chybajucim lomitkom na konci alebo skripty, ktore vnutili presmerovanie.) # Failure Report Tento prehlad zobrazuje subory, ktore sposobili zlyhanie, napriklad nenajdene subory. # File Type Report Tento prehlad zobrazuje pripony vyziadanych suborov. # Directory Report Tento prehlad zobrazuje adresare, z ktorych boli vyziadane subory. (Diagramy pre kazdy adresar obsahuju vsetky jeho podadresare.) # Host Report Tento prehlad zobrazuje pocitace, ktore si vyziadali subory. # Host Redirection Report Tento prehlad zobrazuje pocitace, ktore boli presmerovane na iny subor. # Host Failure Report Tento prehlad zobrazuje pocitace, ktore narazili na zlyhania poziadaviek. # Domain Report Tento prehlad zobrazuje krajiny pocitacov, ktore si vyziadali subory. # Referrer Report Tento prehlad zobrazuje referencie (odkial ludia nasledovali odkazy, alebo stranky, ktore obsahuju obrazky z tychto stranok). # Referring Site Report Tento prehlad zobrazuje servery, z ktorych ludia nasledovali odkazy. # Redirected Referrer Report Tento prehlad zobrazuje referencie, ktore sposobili presmerovane poziadavky. # Failed Referrer Report Tento prehlad zobrazuje referencie, obsahujuce chybne odkazy na stranku. # Browser Report Tento prehlad zobrazuje, ktore prehliadace pouzivaju navstevnici, spolu s podrobnostami. # Virtual Host Report Tento prehlad zobrazuje aktivitu kazdej virtualnej domeny na strankach. # Virtual Host Redirection Report Tento prehlad zobrazuje presmerovane poziadavky na kazdu virtualnu domenu. # Virtual Host Failure Report Tento prehlad zobrazuje neuspesne poziadavky na kazdu virtualnu domenu. # User Report Tento prehlad zobrazuje uzivatelov, ktori si vyziadali subory, ak boli autentifikovani alebo mozu byt identifikovani cez cookies. # User Redirection Report Tento prehlad zobrazuje uzivatelov, ktori boli presmerovani na iny subor. # User Failure Report Tento prehlad zobrazuje uzivatelov, ktori narazili na neuspesne poziadavky. # Organisation Report Tento prehlad zobrazuje organizacie pocitacov, ktore si vyziadali subory. # Search Query Report Tento prehlad zobrazuje, ktore vyrazy ludia zadali do vyhladavacov, aby nasli tieto stranky. # Search Word Report Tento prehlad zobrazuje, ktore slova ludia zadali do vyhladavacov, aby nasli tieto stranky. # Internal Search Query Report Tento prehlad zobrazuje, ktore vyrazy ludia zadali do skriptov na tychto strankach. # Internal Search Word Report Tento prehlad zobrazuje, ktore slova ludia zadali do skriptov na tychto strankach. # Browser Summary Tento prehlad zobrazuje, ktore prehliadace pouzivaju navstevnici. # Operating System Report Tento prehlad zobrazuje, ktore operacne systemy pouzivaju navstevnici. # File Size Report Tento prehlad zobrazuje velkosti suborov. # Status Code Report Tento prehlad zobrazuje stavovy kod HTTP pre vsetky poziadavky. # Processing Time Report Tento prehlad zobrazuje cas potrebny na vykonanie uspesnych poziadaviek. analog-ce-6.0.17/lang/sk1adom.tab000066400000000000000000000120311406366436600164160ustar00rootroot00000000000000# Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: US-ASCII # Generic and Infrastructure domains aero 2 letecka doprava arpa 1 Arpanet biz 2 firmy com 2 komercne organizacie coop 2 kooperacie edu 2 vzdelavacie institucie USA gov 2 vlada USA info 2 informacne int 2 medzinarodne organizacie mil 2 armada USA museum 2 muzea name 3 jednotlivci net 2 sietove organizacie org 2 neziskove organizacie pro 3 profesionalne # Country code domains ac 1 ostrov Ascension ad 2 Andorra ae 3 Spojene Arabske emiraty af 1 Afganistan ag 2 Antigua a Barbuda ai 1 Anguilla al 1 Albansko am 2 Armensko an 1 Holandske Antily ao 1 Angola aq 1 Antarktida ar 3 Argentina as 1 Americka Samoa at 3 Rakusko au 3 Australia aw 1 Aruba az 1 Azerbajdzan ba 3 Bosna a Hercegovina bb 2 Barbados bd 1 Banglades be 3 Belgicko bf 1 Burkina Faso bg 2 Bulharsko bh 1 Bahrajn bi 1 Burundi bj 1 Benin bm 1 Bermudy bn 1 Brunej bo 3 Bolivia br 3 Brazilia bs 1 Bahamy bt 1 Bhutan bv 1 ostrov Bouvet bw 1 Botswana by 1 Bielorusko bz 1 Belize ca 3 Kanada cc 1 Kokosove ostrovy cd 1 Konzska demokraticka republika cf 1 Stredoafricka republika cg 1 Kongo ch 2 Svajciarsko ci 1 Pobrezie Slonoviny ck 1 Cookove ostrovy cl 2 Chile cm 1 Kamerun cn 3 Cina co 3 Kolumbia cr 3 Kostarika cu 2 Kuba cv 1 Kapverdy cx 2 Vianocny ostrov cy 3 Cyprus cz 2 Cesko de 2 Nemecko dj 1 Dzibutsko dk 2 Dansko dm 2 Dominika do 3 Dominikanska republika dz 1 Alzirsko ec 3 Ekvador ee 2 Estonsko eg 3 Egypt eh 1 Zapadna Sahara er 1 Eritrea es 2 Spanielsko et 1 Eiopia fi 2 Finsko fj 3 Fidzi fk 1 Falklandy fm 1 Mikronezia fo 1 Faerske ostrovy fr 2 Francuzsko fx 1 Francuzsko (Europske uzemie) ga 1 Gabon gb 1 Velka Britania gd 1 Grenada ge 1 Gruzinsko gf 1 Francuzska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Gronsko gm 1 Gambia gn 1 Guinea gp 1 Guadelupe gq 1 Rovnikova Guinea gr 2 Grecko gs 1 Juzna Georgia gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 ostrovy Heard a McDonald hn 2 Honduras hr 2 Chorvatsko ht 1 Haiti hu 2 Madarsko id 3 Indonezia ie 2 Irsko il 3 Izrael im 1 ostrov Man in 3 India io 1 Britske indickooceanske teritorium iq 1 Irak ir 1 Iran is 2 Island it 2 Taliansko je 1 ostrov Jersey jm 3 Jamajka jo 3 Jordansko jp 3 Japonsko ke 3 Kena kg 1 Kirgizsko kh 1 Kambodza ki 1 Kiribati km 1 Komory kn 1 Svaty Kristof kp 1 Severna Korea kr 3 Juzna Korea kw 3 Kuvajt ky 1 Kajmanie ostrovy kz 1 Kazachstan la 1 Laos lb 3 Libanon lc 1 Svata Lucia li 2 Lichtenstajnsko lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litva lu 2 Luxembursko lv 2 Lotyssko ly 1 Libya ma 1 Maroko mc 2 Monako md 1 Moldavsko mg 1 Madagaskar mh 1 Marshallove ostrovy mk 3 Macedonsko ml 1 Mali mm 1 Barma mn 1 Mongolsko mo 1 Macao mp 1 Severne Mariany mq 1 Martinik mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauricius mv 1 Maledivy mw 1 Malawi mx 3 Mexiko my 3 Malajzia mz 1 Mozambik na 1 Namibia nc 1 Nova Kaledonia ne 1 Niger nf 1 Norfolk ng 1 Nigeria ni 3 Nikaragua nl 2 Holandsko no 2 Norsko np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Novy Zeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Francuzska Polynezia pg 3 Papua - Nova Guinea ph 3 Filipiny pk 3 Pakistan pl 3 Polsko pm 1 Saint Pierre a Miguelon pn 1 Pitcairnove ostrovy pr 1 Portoriko ps 3 Palestina pt 2 Portugalsko pw 1 Palauske ostrovy py 3 Paraguaj qa 1 Katar re 1 Reunion ro 2 Rumunsko ru 2 Rusko rw 1 Rwanda sa 3 Saudska Arabia sb 1 Salamunove ostrovy sc 1 Seychely sd 1 Sudan se 2 Svedsko sg 3 Singapur sh 1 Svata Helena si 2 Slovinsko sj 1 Spicbergy sk 2 Slovensko sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalsko sr 1 Surinam st 1 Svaty Tomas su 2 Sovietsky zvaz sv 3 Salvador sy 1 Syria sz 1 Svazijsko tc 1 Turks a Caicos td 1 Cad tf 1 Francuzske juzne uzemia tg 1 Togo th 3 Thajsko tj 1 Tadzikistan tk 1 Tokelau tl 1 Vychodny Timor tm 1 Turkmensko tn 1 Tunisko to 1 Tonga tp 1 Vychodny Timor tr 3 Turecko tt 3 Trinidad a Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukrajina ug 3 Uganda uk 3 Velka Britania um 1 male ostrovy USA us 4 Spojene staty americke uy 3 Uruguaj uz 1 Uzbekistan va 1 Vatikan vc 1 Svaty Vincent ve 3 Venezuela vg 1 Britske Panenske ostrovy vi 1 Americke Panenske ostrovy vn 1 Vietnam vu 1 Vanuatu wf 1 Wallisove ostrovy ws 1 Samoa ye 1 Jemen yt 1 ostrov Mayotte yu 3 Juhoslavia za 3 Juzna Afrika zm 1 Zambia zr 1 Zair zw 3 Zimbabwe analog-ce-6.0.17/lang/sk1desc.txt000066400000000000000000000111251406366436600164700ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # # Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: Windows-1250 # # Yearly Report Tento preh¾ad zobrazuje aktivitu v každom roku. # Quarterly Report Tento preh¾ad zobrazuje aktivitu v každom štvrroku. # Monthly Report Tento preh¾ad zobrazuje aktivitu v každom mesiaci. # Weekly Report Tento preh¾ad zobrazuje aktivitu v každom týždni. # Daily Report Tento preh¾ad zobrazuje aktivitu v každom dni. # Hourly Report Tento preh¾ad zobrazuje aktivitu v každej hodine. # Quarter-Hour Report Tento preh¾ad zobrazuje aktivitu v každom štvrhodinovom intervale. # Five-Minute Report Tento preh¾ad zobrazuje aktivitu v každom 5-minútovom intervale. # Daily Summary Tento preh¾ad zobrazuje celkovú aktivitu pre každý deò týždòa, súhrnne pre všetky týždne v preh¾ade. # Hourly Summary Tento preh¾ad zobrazuje celkovú aktivitu pre každú hodinu dòa, súhrnne pre všetky dni v preh¾ade. # Hour of the Week Summary Tento preh¾ad zobrazuje celkovú aktivitu pre každú hodinu týždòa, súhrnne pre všetky týždne v preh¾ade. # Quarter-Hour Summary Tento preh¾ad zobrazuje celkovú aktivitu pre každý štvrhodinový interval dòa, súhrnne pre všetky dni v preh¾ade. # Five-Minute Summary Tento preh¾ad zobrazuje celkovú aktivitu pre každý 5-minútový interval dòa, súhrnne pre všetky dni v preh¾ade. # General Summary Tento preh¾ad obsahuje celkové štatistiky. # Request Report Tento preh¾ad zobrazuje požadované súbory na stránkach. # Redirection Report Tento preh¾ad zobrazuje súbory, ktoré spôsobili presmerovanie požiadaviek na iný súbor. (Zvyèajne adresáre s chýbajúcim lomítkom na konci alebo skripty, ktoré vnútili presmerovanie.) # Failure Report Tento preh¾ad zobrazuje súbory, ktoré spôsobili zlyhanie, napríklad nenájdené súbory. # File Type Report Tento preh¾ad zobrazuje prípony vyžiadaných súborov. # Directory Report Tento preh¾ad zobrazuje adresáre, z ktorých boli vyžiadané súbory. (Diagramy pre každý adresár obsahujú všetky jeho podadresáre.) # Host Report Tento preh¾ad zobrazuje poèítaèe, ktoré si vyžiadali súbory. # Host Redirection Report Tento preh¾ad zobrazuje poèítaèe, ktoré boli presmerované na iný súbor. # Host Failure Report Tento preh¾ad zobrazuje poèítaèe, ktoré narazili na zlyhania požiadaviek. # Domain Report Tento preh¾ad zobrazuje krajiny poèítaèov, ktoré si vyžiadali súbory. # Referrer Report Tento preh¾ad zobrazuje referencie (odkia¾ ¾udia nasledovali odkazy, alebo stránky, ktoré obsahujú obrázky z týchto stránok). # Referring Site Report Tento preh¾ad zobrazuje servery, z ktorých ¾udia nasledovali odkazy. # Redirected Referrer Report Tento preh¾ad zobrazuje referencie, ktoré spôsobili presmerované požiadavky. # Failed Referrer Report Tento preh¾ad zobrazuje referencie, obsahujúce chybné odkazy na stránku. # Browser Report Tento preh¾ad zobrazuje, ktoré prehliadaèe používajú návštevníci, spolu s podrobnosami. # Virtual Host Report Tento preh¾ad zobrazuje aktivitu každej virtuálnej domény na stránkach. # Virtual Host Redirection Report Tento preh¾ad zobrazuje presmerované požiadavky na každú virtuálnu doménu. # Virtual Host Failure Report Tento preh¾ad zobrazuje neúspešné požiadavky na každú virtuálnu doménu. # User Report Tento preh¾ad zobrazuje užívate¾ov, ktorí si vyžiadali súbory, ak boli autentifikovaní alebo môžu by identifikovaní cez cookies. # User Redirection Report Tento preh¾ad zobrazuje užívate¾ov, ktorí boli presmerovaní na iný súbor. # User Failure Report Tento preh¾ad zobrazuje užívate¾ov, ktorí narazili na neúspešné požiadavky. # Organisation Report Tento preh¾ad zobrazuje organizácie poèítaèov, ktoré si vyžiadali súbory. # Search Query Report Tento preh¾ad zobrazuje, ktoré výrazy ¾udia zadali do vyh¾adávaèov, aby našli tieto stránky. # Search Word Report Tento preh¾ad zobrazuje, ktoré slová ¾udia zadali do vyh¾adávaèov, aby našli tieto stránky. # Internal Search Query Report Tento preh¾ad zobrazuje, ktoré výrazy ¾udia zadali do skriptov na týchto stránkach. # Internal Search Word Report Tento preh¾ad zobrazuje, ktoré slová ¾udia zadali do skriptov na týchto stránkach. # Browser Summary Tento preh¾ad zobrazuje, ktoré prehliadaèe používajú návštevníci. # Operating System Report Tento preh¾ad zobrazuje, ktoré operaèné systémy používajú návštevníci. # File Size Report Tento preh¾ad zobrazuje ve¾kosti súborov. # Status Code Report Tento preh¾ad zobrazuje stavový kód HTTP pre všetky požiadavky. # Processing Time Report Tento preh¾ad zobrazuje èas potrebný na vykonanie úspešných požiadaviek. analog-ce-6.0.17/lang/sk1dom.tab000066400000000000000000000120351406366436600162610ustar00rootroot00000000000000# Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: Windows-1250 # Generic and Infrastructure domains aero 2 letecká doprava arpa 1 Arpanet biz 2 firmy com 2 komerèné organizácie coop 2 kooperácie edu 2 vzdelávacie inštitúcie USA gov 2 vláda USA info 2 informaèné int 2 medzinárodné organizácie mil 2 armáda USA museum 2 múzeá name 3 jednotlivci net 2 sieové organizácie org 2 neziskové organizácie pro 3 profesionálne # Country code domains ac 1 ostrov Ascension ad 2 Andorra ae 3 Spojené Arabské emiráty af 1 Afganistan ag 2 Antigua a Barbuda ai 1 Anguilla al 1 Albánsko am 2 Arménsko an 1 Holandské Antily ao 1 Angola aq 1 Antarktída ar 3 Argentína as 1 Americká Samoa at 3 Rakúsko au 3 Austrália aw 1 Aruba az 1 Azerbajdžan ba 3 Bosna a Hercegovina bb 2 Barbados bd 1 Bangladéš be 3 Belgicko bf 1 Burkina Faso bg 2 Bulharsko bh 1 Bahrajn bi 1 Burundi bj 1 Benin bm 1 Bermudy bn 1 Brunej bo 3 Bolívia br 3 Brazília bs 1 Bahamy bt 1 Bhután bv 1 ostrov Bouvet bw 1 Botswana by 1 Bielorusko bz 1 Belize ca 3 Kanada cc 1 Kokosové ostrovy cd 1 Konžská demokratická republika cf 1 Stredoafrická republika cg 1 Kongo ch 2 Švajèiarsko ci 1 Pobrežie Slonoviny ck 1 Cookove ostrovy cl 2 Chile cm 1 Kamerun cn 3 Èína co 3 Kolumbia cr 3 Kostarika cu 2 Kuba cv 1 Kapverdy cx 2 Vianoèný ostrov cy 3 Cyprus cz 2 Èesko de 2 Nemecko dj 1 Džibutsko dk 2 Dánsko dm 2 Dominika do 3 Dominikánska republika dz 1 Alžírsko ec 3 Ekvádor ee 2 Estónsko eg 3 Egypt eh 1 Západná Sahara er 1 Eritrea es 2 Španielsko et 1 Eiópia fi 2 Fínsko fj 3 Fidži fk 1 Falklandy fm 1 Mikronézia fo 1 Faerské ostrovy fr 2 Francúzsko fx 1 Francúzsko (Európske územie) ga 1 Gabon gb 1 Ve¾ká Británia gd 1 Grenada ge 1 Gruzínsko gf 1 Francúzska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltár gl 1 Grónsko gm 1 Gambia gn 1 Guinea gp 1 Guadelupe gq 1 Rovníková Guinea gr 2 Grécko gs 1 Južná Georgia gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 ostrovy Heard a McDonald hn 2 Honduras hr 2 Chorvátsko ht 1 Haiti hu 2 Maïarsko id 3 Indonézia ie 2 Írsko il 3 Izrael im 1 ostrov Man in 3 India io 1 Britské indickooceánske teritórium iq 1 Irak ir 1 Irán is 2 Island it 2 Taliansko je 1 ostrov Jersey jm 3 Jamajka jo 3 Jordánsko jp 3 Japonsko ke 3 Keòa kg 1 Kirgizsko kh 1 Kambodža ki 1 Kiribati km 1 Komory kn 1 Svätý Krištof kp 1 Severná Kórea kr 3 Južná Kórea kw 3 Kuvajt ky 1 Kajmanie ostrovy kz 1 Kazachstan la 1 Laos lb 3 Libanon lc 1 Svätá Lucia li 2 Lichtenštajnsko lk 1 Srí Lanka lr 1 Libéria ls 1 Lesotho lt 2 Litva lu 2 Luxembursko lv 2 Lotyšsko ly 1 Líbya ma 1 Maroko mc 2 Monako md 1 Moldavsko mg 1 Madagaskar mh 1 Marshallove ostrovy mk 3 Macedónsko ml 1 Mali mm 1 Barma mn 1 Mongolsko mo 1 Macao mp 1 Severné Mariany mq 1 Martinik mr 1 Mauritánia ms 1 Montserrat mt 3 Malta mu 1 Maurícius mv 1 Maledivy mw 1 Malawi mx 3 Mexiko my 3 Malajzia mz 1 Mozambik na 1 Namíbia nc 1 Nová Kaledónia ne 1 Niger nf 1 Norfolk ng 1 Nigéria ni 3 Nikaragua nl 2 Holandsko no 2 Nórsko np 1 Nepál nr 1 Nauru nu 2 Niue nz 3 Nový Zéland om 1 Omán pa 3 Panama pe 3 Peru pf 1 Francúzska Polynézia pg 3 Papua - Nová Guinea ph 3 Filipíny pk 3 Pakistan pl 3 Po¾sko pm 1 Saint Pierre a Miguelon pn 1 Pitcairnove ostrovy pr 1 Portoriko ps 3 Palestína pt 2 Portugalsko pw 1 Palauské ostrovy py 3 Paraguaj qa 1 Katar re 1 Réunion ro 2 Rumunsko ru 2 Rusko rw 1 Rwanda sa 3 Saudská Arábia sb 1 Šalamúnove ostrovy sc 1 Seychely sd 1 Sudán se 2 Švédsko sg 3 Singapur sh 1 Svätá Helena si 2 Slovinsko sj 1 Špicbergy sk 2 Slovensko sl 1 Sierra Leone sm 1 San Maríno sn 1 Senegal so 1 Somálsko sr 1 Surinam st 1 Svätý Tomáš su 2 Sovietsky zväz sv 3 Salvádor sy 1 Sýria sz 1 Svazijsko tc 1 Turks a Caicos td 1 Èad tf 1 Francúzske južné územia tg 1 Togo th 3 Thajsko tj 1 Tadžikistan tk 1 Tokelau tl 1 Východný Timor tm 1 Turkménsko tn 1 Tunisko to 1 Tonga tp 1 Východný Timor tr 3 Turecko tt 3 Trinidad a Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzánia ua 3 Ukrajina ug 3 Uganda uk 3 Ve¾ká Británia um 1 malé ostrovy USA us 4 Spojené štáty americké uy 3 Uruguaj uz 1 Uzbekistan va 1 Vatikán vc 1 Svätý Vincent ve 3 Venezuela vg 1 Britské Panenské ostrovy vi 1 Americké Panenské ostrovy vn 1 Vietnam vu 1 Vanuatu wf 1 Wallisove ostrovy ws 1 Samoa ye 1 Jemen yt 1 ostrov Mayotte yu 3 Juhoslávia za 3 Južná Afrika zm 1 Zambia zr 1 Zair zw 3 Zimbabwe analog-ce-6.0.17/lang/ska.lng000066400000000000000000000322251406366436600156560ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Ned Pon Uto Str Stv Pia Sob Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" tyzden od rok ## Quarter of a year stvrtrok mesiac den dni hod. minuta min. sekunda s bajt bajtov ## ?bytes represents kbytes, Mbytes etc. ?bajtov poziadavku poziadaviek datum ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum cas cas prvy datum prvy krat naposledy naposledy subor suborov hostitel hostitelov virtualny server virtualnych serverov adresar adresarov domena domen organizacia organizacii pripona pripon URL URLs prehliadac prehliadacov operacny system operacnych systemov ## (= operating system, operating systems) velkost hladana fraza hladanych fraz web server web serverov uzivatel uzivatelov navratovy kod navratovych kodov Statistika web servera ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Vseobecny prehlad ## The time reports, plus "busiest" strings (at the bottom of each report) Rocny prehlad Najrusnejsi rok: Stvrtrocny prehlad Najrusnejsi stvrtrok: Mesacny prehlad Najrusnejsi mesiac: Tyzdenny prehlad Najrusnejsi tyzden: zacinajuci Denny suhrn Denny prehlad Najrusnejsi den: Hodinovy prehlad Hodinovy suhrn Tyzdnovy suhrn podla hodin Najrusnejsia hodina: Stvrthodinovy prehlad Stvrthodinovy suhrn Najrusnejsia stvrthodina: Patminutovy prehlad Patminutovy suhrn Najrusnejsich pat minut: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Prehlad hostitelov hostitel hostitelov n Prehlad presmerovani hostitelov hostitel hostitelov n Prehlad chybajucich hostitelov hostitel hostitelov n Prehlad adresarov adresar adresarov n Prehlad typov suborov pripona pripon n Prehlad poziadaviek subor suborov n Prehlad presmerovani subor suborov n Prehlad chyb subor suborov n Prehlad referencii odkazujuce URL odkazujucich URL n Prehlad odkazujucich serverov odkazujuci server odkazujucich serverov n Prehlad presmerovanych referencii odkazovane URL odkazovanych URL n Prehlad chybnych referencii odkazovane URL odkazovanych URL n Prehlad vyhladavanych vyrazov vyraz vyrazov n Prehlad vyhladavanych slov hladane slovo hladanych slov n Prehlad interne hladanych vyrazov vyraz vyrazov n Prehlad interne hladanych slov hladane slovo hladanych slov n Prehlad virtualnych web serverov virtualny server virtualnych serverov n Prehlad presmerovani virtualnych serverov virtualny server virtualnych serverov n Prehlad chyb virtualnych serverov virtualny server virtualnych serverov n Prehlad uzivatelov uzivatel uzivatelov n Prehlad presmerovani uzivatelov uzivatel uzivatelov n Prehlad chyb uzivatelov uzivatel uzivatelov n Suhrn prehliadacov prehliadac prehliadacov n Prehlad prehliadacov prehliadac prehliadacov n Prehlad operacnych systemov operacny system operacnych systemov n Prehlad domen domena domen n Prehlad organizacii organizacia organizacii n Prehlad navratovych kodov navratovy kod navratovych kodov n Prehlad doby spracovania Prehlad velkosti suborov ## Used at the bottom of the report Tato analyzu vytvoril Doba spracovania menej ako 1 ## Used in the time reports Kazdy dielik predstavuje alebo cast poziadavka na stranku poziadaviek na stranku ## Used at the bottom of each non-time report: need m, f & n genders * * nezahrnute ## Used on the pie charts: again need m, f & n genders * * ostatne ## Used at the top of the report Program bol spusteny v Analyza sa vztahuje na obdobie od do ## Used in the General Summary Uspesne poziadavky Uspesne poziadavky v priemere za den Uspesne poziadavky na stranky Uspesne poziadavky na stranky v priemere za den Riadky logovacieho suboru bez stavoveho kodu Neuspesne poziadavky Presmerovane poziadavky Poziadavky s informativnym stavovym kodom Rozdielne pozadovane subory Rozdielne obsluzene servery Porusene riadky logovacieho suboru Neziaduce polozky logovacieho suboru Prenesene data Prenesene data v priemere za den udaje v zatvorkach sa vztahuju na 7 dni konciacich poslednych 7 dni Prechod na Zaciatok ## Some special phrases for particular reports. [nerozoznane ciselne adresy] [domena neuvedena] [neznama domena] [korenovy adresar] [bez adresara] [bez pripony] [adresare] nezname Windows iny UNIX roboty neznamy OS ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) poz. poz. za 7 dni % poz. % poz. za 7 dni str. str. za 7 dni % str. % str. za 7 dni bajtov ?bajtov bajtov za 7 dni ?bajtov za 7 dni % bajtov % bajtov za 7 dni c. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Zoznam prvych %s * * Zoznam prvych %d %s * * Zoznam %s ## "by" in the phrase "listing the top 3 files BY number of requests" podla ## All requests WITH AT LEAST 10 requests majucich aspon ## Different ways of doing floors poziadavka za poslednych 7 dni poziadaviek za poslednych 7 dni poziadavka na stranku za poslednych 7 dni poziadaviek na stranky za poslednych 7 dni presmerovana poziadavka presmerovanych poziadaviek presmerovana poziadavka za poslednych 7 dni presmerovanych poziadaviek za poslednych 7 dni neuspesna poziadavka neuspesnych poziadaviek neuspesna poziadavka za poslednych 7 dni neuspesnych poziadaviek za poslednych 7 dni % prenosu % prenosu za poslednych 7 dni % maximalneho mnozstva prenesenych dat % maximalneho mnozstva prenesenych dat za poslednych 7 dni bajtu prenosu bajtov prenosu ## ?bytes represents kbytes, Mbytes etc. ?bajtov prenosu bajtu prenosu za poslednych 7 dni bajtov prenosu za poslednych 7 dni ?bajtov prenosu za poslednych 7 dni pozadovanych od s presmerovanou poziadavkou od s neuspesnou poziadavkou od s prvou poziadavkou s prvou presmerovanou poziadavkou od s prvou neuspesnou poziadavkou od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * zatriedeny podla ## Used at the top of each report Tento prehlad obsahuje udaje od ## Used in pie charts Vyseky su vykreslene podla ## different ways of sorting mnozstva prenesenych dat mnozstva prenesenych dat za poslednych 7 dni % poziadaviek % poziadaviek za poslednych 7 dni % maximalneho poctu poziadaviek % maximalneho poctu poziadaviek za poslednych 7 dni poctu poziadaviek poctu poziadaviek za poslednych 7 dni % poziadaviek na stranky % poziadaviek na stranky za poslednych 7 dni % maximalneho poctu poziadaviek na stranky % maximalneho poctu poziadaviek na stranky za poslednych 7 dni poctu poziadaviek na stranky poctu poziadaviek na stranky za poslednych 7 dni % presmerovanych poziadaviek % presmerovanych poziadaviek za poslednych 7 dni % maximalneho poctu presmerovanych poziadaviek % maximalneho poctu presmerovanych poziadaviek za poslednych 7 dni poctu presmerovanych poziadaviek poctu presmerovanych poziadaviek za poslednych 7 dni % neuspesnych poziadaviek % neuspesnych poziadaviek za poslednych 7 dni % maximalneho poctu neuspesnych poziadaviek % maximalneho poctu neuspesnych poziadaviek za poslednych 7 dni poctu neuspesnych poziadaviek poctu neuspesnych poziadaviek za poslednych 7 dni casu poslednej poziadavky casu poslednej presmerovanej poziadavky casu poslednej neuspesnej poziadavky casu prvej poziadavky casu prvej presmerovanej poziadavky casu prvej neuspesnej poziadavky ## 3 other ways of sorting in m, f, & n * * zatriedeny abecedne * * zatriedeny ciselne * * nezatriedeny ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. dop. odp. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y, %H:%n ## "Program started at" and "Analysed requests from" %w, %D. %m %Y, %H:%n ## In Daily Report %d. %m '%y ## In Daily Summary %w ## In Hourly Report %d. %m '%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H%x%I ## In Quarter-Hour and Five-Minute Reports %d. %m '%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d. %m '%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d. %m '%y ## The date & time (D) column in non-time reports %d. %m '%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d. %m, '%y v %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [rozne informacne] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [rozne uspesne] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [rozne presmerovania] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [rozne chyby klienta] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [rozne chyby servera] xxx [nezname] analog-ce-6.0.17/lang/skadesc.txt000066400000000000000000000111211406366436600165440ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # # Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: US-ASCII # # Yearly Report Tento prehlad zobrazuje aktivitu v kazdom roku. # Quarterly Report Tento prehlad zobrazuje aktivitu v kazdom stvrtroku. # Monthly Report Tento prehlad zobrazuje aktivitu v kazdom mesiaci. # Weekly Report Tento prehlad zobrazuje aktivitu v kazdom tyzdni. # Daily Report Tento prehlad zobrazuje aktivitu v kazdom dni. # Hourly Report Tento prehlad zobrazuje aktivitu v kazdej hodine. # Quarter-Hour Report Tento prehlad zobrazuje aktivitu v kazdom stvrthodinovom intervale. # Five-Minute Report Tento prehlad zobrazuje aktivitu v kazdom 5-minutovom intervale. # Daily Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdy den tyzdna, suhrnne pre vsetky tyzdne v prehlade. # Hourly Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdu hodinu dna, suhrnne pre vsetky dni v prehlade. # Hour of the Week Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdu hodinu tyzdna, suhrnne pre vsetky tyzdne v prehlade. # Quarter-Hour Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdy stvrthodinovy interval dna, suhrnne pre vsetky dni v prehlade. # Five-Minute Summary Tento prehlad zobrazuje celkovu aktivitu pre kazdy 5-minutovy interval dna, suhrnne pre vsetky dni v prehlade. # General Summary Tento prehlad obsahuje celkove statistiky. # Request Report Tento prehlad zobrazuje pozadovane subory na strankach. # Redirection Report Tento prehlad zobrazuje subory, ktore sposobili presmerovanie poziadaviek na iny subor. (Zvycajne adresare s chybajucim lomitkom na konci alebo skripty, ktore vnutili presmerovanie.) # Failure Report Tento prehlad zobrazuje subory, ktore sposobili zlyhanie, napriklad nenajdene subory. # File Type Report Tento prehlad zobrazuje pripony vyziadanych suborov. # Directory Report Tento prehlad zobrazuje adresare, z ktorych boli vyziadane subory. (Diagramy pre kazdy adresar obsahuju vsetky jeho podadresare.) # Host Report Tento prehlad zobrazuje pocitace, ktore si vyziadali subory. # Host Redirection Report Tento prehlad zobrazuje pocitace, ktore boli presmerovane na iny subor. # Host Failure Report Tento prehlad zobrazuje pocitace, ktore narazili na zlyhania poziadaviek. # Domain Report Tento prehlad zobrazuje krajiny pocitacov, ktore si vyziadali subory. # Referrer Report Tento prehlad zobrazuje referencie (odkial ludia nasledovali odkazy, alebo stranky, ktore obsahuju obrazky z tychto stranok). # Referring Site Report Tento prehlad zobrazuje servery, z ktorych ludia nasledovali odkazy. # Redirected Referrer Report Tento prehlad zobrazuje referencie, ktore sposobili presmerovane poziadavky. # Failed Referrer Report Tento prehlad zobrazuje referencie, obsahujuce chybne odkazy na stranku. # Browser Report Tento prehlad zobrazuje, ktore prehliadace pouzivaju navstevnici, spolu s podrobnostami. # Virtual Host Report Tento prehlad zobrazuje aktivitu kazdej virtualnej domeny na strankach. # Virtual Host Redirection Report Tento prehlad zobrazuje presmerovane poziadavky na kazdu virtualnu domenu. # Virtual Host Failure Report Tento prehlad zobrazuje neuspesne poziadavky na kazdu virtualnu domenu. # User Report Tento prehlad zobrazuje uzivatelov, ktori si vyziadali subory, ak boli autentifikovani alebo mozu byt identifikovani cez cookies. # User Redirection Report Tento prehlad zobrazuje uzivatelov, ktori boli presmerovani na iny subor. # User Failure Report Tento prehlad zobrazuje uzivatelov, ktori narazili na neuspesne poziadavky. # Organisation Report Tento prehlad zobrazuje organizacie pocitacov, ktore si vyziadali subory. # Search Query Report Tento prehlad zobrazuje, ktore vyrazy ludia zadali do vyhladavacov, aby nasli tieto stranky. # Search Word Report Tento prehlad zobrazuje, ktore slova ludia zadali do vyhladavacov, aby nasli tieto stranky. # Internal Search Query Report Tento prehlad zobrazuje, ktore vyrazy ludia zadali do skriptov na tychto strankach. # Internal Search Word Report Tento prehlad zobrazuje, ktore slova ludia zadali do skriptov na tychto strankach. # Browser Summary Tento prehlad zobrazuje, ktore prehliadace pouzivaju navstevnici. # Operating System Report Tento prehlad zobrazuje, ktore operacne systemy pouzivaju navstevnici. # File Size Report Tento prehlad zobrazuje velkosti suborov. # Status Code Report Tento prehlad zobrazuje stavovy kod HTTP pre vsetky poziadavky. # Processing Time Report Tento prehlad zobrazuje cas potrebny na vykonanie uspesnych poziadaviek. analog-ce-6.0.17/lang/skadom.tab000066400000000000000000000120311406366436600163350ustar00rootroot00000000000000# Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: US-ASCII # Generic and Infrastructure domains aero 2 letecka doprava arpa 1 Arpanet biz 2 firmy com 2 komercne organizacie coop 2 kooperacie edu 2 vzdelavacie institucie USA gov 2 vlada USA info 2 informacne int 2 medzinarodne organizacie mil 2 armada USA museum 2 muzea name 3 jednotlivci net 2 sietove organizacie org 2 neziskove organizacie pro 3 profesionalne # Country code domains ac 1 ostrov Ascension ad 2 Andorra ae 3 Spojene Arabske emiraty af 1 Afganistan ag 2 Antigua a Barbuda ai 1 Anguilla al 1 Albansko am 2 Armensko an 1 Holandske Antily ao 1 Angola aq 1 Antarktida ar 3 Argentina as 1 Americka Samoa at 3 Rakusko au 3 Australia aw 1 Aruba az 1 Azerbajdzan ba 3 Bosna a Hercegovina bb 2 Barbados bd 1 Banglades be 3 Belgicko bf 1 Burkina Faso bg 2 Bulharsko bh 1 Bahrajn bi 1 Burundi bj 1 Benin bm 1 Bermudy bn 1 Brunej bo 3 Bolivia br 3 Brazilia bs 1 Bahamy bt 1 Bhutan bv 1 ostrov Bouvet bw 1 Botswana by 1 Bielorusko bz 1 Belize ca 3 Kanada cc 1 Kokosove ostrovy cd 1 Konzska demokraticka republika cf 1 Stredoafricka republika cg 1 Kongo ch 2 Svajciarsko ci 1 Pobrezie Slonoviny ck 1 Cookove ostrovy cl 2 Chile cm 1 Kamerun cn 3 Cina co 3 Kolumbia cr 3 Kostarika cu 2 Kuba cv 1 Kapverdy cx 2 Vianocny ostrov cy 3 Cyprus cz 2 Cesko de 2 Nemecko dj 1 Dzibutsko dk 2 Dansko dm 2 Dominika do 3 Dominikanska republika dz 1 Alzirsko ec 3 Ekvador ee 2 Estonsko eg 3 Egypt eh 1 Zapadna Sahara er 1 Eritrea es 2 Spanielsko et 1 Eiopia fi 2 Finsko fj 3 Fidzi fk 1 Falklandy fm 1 Mikronezia fo 1 Faerske ostrovy fr 2 Francuzsko fx 1 Francuzsko (Europske uzemie) ga 1 Gabon gb 1 Velka Britania gd 1 Grenada ge 1 Gruzinsko gf 1 Francuzska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Gronsko gm 1 Gambia gn 1 Guinea gp 1 Guadelupe gq 1 Rovnikova Guinea gr 2 Grecko gs 1 Juzna Georgia gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 ostrovy Heard a McDonald hn 2 Honduras hr 2 Chorvatsko ht 1 Haiti hu 2 Madarsko id 3 Indonezia ie 2 Irsko il 3 Izrael im 1 ostrov Man in 3 India io 1 Britske indickooceanske teritorium iq 1 Irak ir 1 Iran is 2 Island it 2 Taliansko je 1 ostrov Jersey jm 3 Jamajka jo 3 Jordansko jp 3 Japonsko ke 3 Kena kg 1 Kirgizsko kh 1 Kambodza ki 1 Kiribati km 1 Komory kn 1 Svaty Kristof kp 1 Severna Korea kr 3 Juzna Korea kw 3 Kuvajt ky 1 Kajmanie ostrovy kz 1 Kazachstan la 1 Laos lb 3 Libanon lc 1 Svata Lucia li 2 Lichtenstajnsko lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Litva lu 2 Luxembursko lv 2 Lotyssko ly 1 Libya ma 1 Maroko mc 2 Monako md 1 Moldavsko mg 1 Madagaskar mh 1 Marshallove ostrovy mk 3 Macedonsko ml 1 Mali mm 1 Barma mn 1 Mongolsko mo 1 Macao mp 1 Severne Mariany mq 1 Martinik mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauricius mv 1 Maledivy mw 1 Malawi mx 3 Mexiko my 3 Malajzia mz 1 Mozambik na 1 Namibia nc 1 Nova Kaledonia ne 1 Niger nf 1 Norfolk ng 1 Nigeria ni 3 Nikaragua nl 2 Holandsko no 2 Norsko np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Novy Zeland om 1 Oman pa 3 Panama pe 3 Peru pf 1 Francuzska Polynezia pg 3 Papua - Nova Guinea ph 3 Filipiny pk 3 Pakistan pl 3 Polsko pm 1 Saint Pierre a Miguelon pn 1 Pitcairnove ostrovy pr 1 Portoriko ps 3 Palestina pt 2 Portugalsko pw 1 Palauske ostrovy py 3 Paraguaj qa 1 Katar re 1 Reunion ro 2 Rumunsko ru 2 Rusko rw 1 Rwanda sa 3 Saudska Arabia sb 1 Salamunove ostrovy sc 1 Seychely sd 1 Sudan se 2 Svedsko sg 3 Singapur sh 1 Svata Helena si 2 Slovinsko sj 1 Spicbergy sk 2 Slovensko sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalsko sr 1 Surinam st 1 Svaty Tomas su 2 Sovietsky zvaz sv 3 Salvador sy 1 Syria sz 1 Svazijsko tc 1 Turks a Caicos td 1 Cad tf 1 Francuzske juzne uzemia tg 1 Togo th 3 Thajsko tj 1 Tadzikistan tk 1 Tokelau tl 1 Vychodny Timor tm 1 Turkmensko tn 1 Tunisko to 1 Tonga tp 1 Vychodny Timor tr 3 Turecko tt 3 Trinidad a Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukrajina ug 3 Uganda uk 3 Velka Britania um 1 male ostrovy USA us 4 Spojene staty americke uy 3 Uruguaj uz 1 Uzbekistan va 1 Vatikan vc 1 Svaty Vincent ve 3 Venezuela vg 1 Britske Panenske ostrovy vi 1 Americke Panenske ostrovy vn 1 Vietnam vu 1 Vanuatu wf 1 Wallisove ostrovy ws 1 Samoa ye 1 Jemen yt 1 ostrov Mayotte yu 3 Juhoslavia za 3 Juzna Afrika zm 1 Zambia zr 1 Zair zw 3 Zimbabwe analog-ce-6.0.17/lang/skdesc.txt000066400000000000000000000111231406366436600164050ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # # Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: ISO-8859-2 # # Yearly Report Tento prehµad zobrazuje aktivitu v ka¾dom roku. # Quarterly Report Tento prehµad zobrazuje aktivitu v ka¾dom ¹tvr»roku. # Monthly Report Tento prehµad zobrazuje aktivitu v ka¾dom mesiaci. # Weekly Report Tento prehµad zobrazuje aktivitu v ka¾dom tý¾dni. # Daily Report Tento prehµad zobrazuje aktivitu v ka¾dom dni. # Hourly Report Tento prehµad zobrazuje aktivitu v ka¾dej hodine. # Quarter-Hour Report Tento prehµad zobrazuje aktivitu v ka¾dom ¹tvr»hodinovom intervale. # Five-Minute Report Tento prehµad zobrazuje aktivitu v ka¾dom 5-minútovom intervale. # Daily Summary Tento prehµad zobrazuje celkovú aktivitu pre ka¾dý deò tý¾dòa, súhrnne pre v¹etky tý¾dne v prehµade. # Hourly Summary Tento prehµad zobrazuje celkovú aktivitu pre ka¾dú hodinu dòa, súhrnne pre v¹etky dni v prehµade. # Hour of the Week Summary Tento prehµad zobrazuje celkovú aktivitu pre ka¾dú hodinu tý¾dòa, súhrnne pre v¹etky tý¾dne v prehµade. # Quarter-Hour Summary Tento prehµad zobrazuje celkovú aktivitu pre ka¾dý ¹tvr»hodinový interval dòa, súhrnne pre v¹etky dni v prehµade. # Five-Minute Summary Tento prehµad zobrazuje celkovú aktivitu pre ka¾dý 5-minútový interval dòa, súhrnne pre v¹etky dni v prehµade. # General Summary Tento prehµad obsahuje celkové ¹tatistiky. # Request Report Tento prehµad zobrazuje po¾adované súbory na stránkach. # Redirection Report Tento prehµad zobrazuje súbory, ktoré spôsobili presmerovanie po¾iadaviek na iný súbor. (Zvyèajne adresáre s chýbajúcim lomítkom na konci alebo skripty, ktoré vnútili presmerovanie.) # Failure Report Tento prehµad zobrazuje súbory, ktoré spôsobili zlyhanie, napríklad nenájdené súbory. # File Type Report Tento prehµad zobrazuje prípony vy¾iadaných súborov. # Directory Report Tento prehµad zobrazuje adresáre, z ktorých boli vy¾iadané súbory. (Diagramy pre ka¾dý adresár obsahujú v¹etky jeho podadresáre.) # Host Report Tento prehµad zobrazuje poèítaèe, ktoré si vy¾iadali súbory. # Host Redirection Report Tento prehµad zobrazuje poèítaèe, ktoré boli presmerované na iný súbor. # Host Failure Report Tento prehµad zobrazuje poèítaèe, ktoré narazili na zlyhania po¾iadaviek. # Domain Report Tento prehµad zobrazuje krajiny poèítaèov, ktoré si vy¾iadali súbory. # Referrer Report Tento prehµad zobrazuje referencie (odkiaµ µudia nasledovali odkazy, alebo stránky, ktoré obsahujú obrázky z týchto stránok). # Referring Site Report Tento prehµad zobrazuje servery, z ktorých µudia nasledovali odkazy. # Redirected Referrer Report Tento prehµad zobrazuje referencie, ktoré spôsobili presmerované po¾iadavky. # Failed Referrer Report Tento prehµad zobrazuje referencie, obsahujúce chybné odkazy na stránku. # Browser Report Tento prehµad zobrazuje, ktoré prehliadaèe pou¾ívajú náv¹tevníci, spolu s podrobnos»ami. # Virtual Host Report Tento prehµad zobrazuje aktivitu ka¾dej virtuálnej domény na stránkach. # Virtual Host Redirection Report Tento prehµad zobrazuje presmerované po¾iadavky na ka¾dú virtuálnu doménu. # Virtual Host Failure Report Tento prehµad zobrazuje neúspe¹né po¾iadavky na ka¾dú virtuálnu doménu. # User Report Tento prehµad zobrazuje u¾ívateµov, ktorí si vy¾iadali súbory, ak boli autentifikovaní alebo mô¾u by» identifikovaní cez cookies. # User Redirection Report Tento prehµad zobrazuje u¾ívateµov, ktorí boli presmerovaní na iný súbor. # User Failure Report Tento prehµad zobrazuje u¾ívateµov, ktorí narazili na neúspe¹né po¾iadavky. # Organisation Report Tento prehµad zobrazuje organizácie poèítaèov, ktoré si vy¾iadali súbory. # Search Query Report Tento prehµad zobrazuje, ktoré výrazy µudia zadali do vyhµadávaèov, aby na¹li tieto stránky. # Search Word Report Tento prehµad zobrazuje, ktoré slová µudia zadali do vyhµadávaèov, aby na¹li tieto stránky. # Internal Search Query Report Tento prehµad zobrazuje, ktoré výrazy µudia zadali do skriptov na týchto stránkach. # Internal Search Word Report Tento prehµad zobrazuje, ktoré slová µudia zadali do skriptov na týchto stránkach. # Browser Summary Tento prehµad zobrazuje, ktoré prehliadaèe pou¾ívajú náv¹tevníci. # Operating System Report Tento prehµad zobrazuje, ktoré operaèné systémy pou¾ívajú náv¹tevníci. # File Size Report Tento prehµad zobrazuje veµkosti súborov. # Status Code Report Tento prehµad zobrazuje stavový kód HTTP pre v¹etky po¾iadavky. # Processing Time Report Tento prehµad zobrazuje èas potrebný na vykonanie úspe¹ných po¾iadaviek. analog-ce-6.0.17/lang/skdom.tab000066400000000000000000000120331406366436600161760ustar00rootroot00000000000000# Slovak language files made by DooDeeToo (http://doodeetoo.host.sk) # # character set: ISO-8859-2 # Generic and Infrastructure domains aero 2 letecká doprava arpa 1 Arpanet biz 2 firmy com 2 komerèné organizácie coop 2 kooperácie edu 2 vzdelávacie in¹titúcie USA gov 2 vláda USA info 2 informaèné int 2 medzinárodné organizácie mil 2 armáda USA museum 2 múzeá name 3 jednotlivci net 2 sie»ové organizácie org 2 neziskové organizácie pro 3 profesionálne # Country code domains ac 1 ostrov Ascension ad 2 Andorra ae 3 Spojené Arabské emiráty af 1 Afganistan ag 2 Antigua a Barbuda ai 1 Anguilla al 1 Albánsko am 2 Arménsko an 1 Holandské Antily ao 1 Angola aq 1 Antarktída ar 3 Argentína as 1 Americká Samoa at 3 Rakúsko au 3 Austrália aw 1 Aruba az 1 Azerbajd¾an ba 3 Bosna a Hercegovina bb 2 Barbados bd 1 Bangladé¹ be 3 Belgicko bf 1 Burkina Faso bg 2 Bulharsko bh 1 Bahrajn bi 1 Burundi bj 1 Benin bm 1 Bermudy bn 1 Brunej bo 3 Bolívia br 3 Brazília bs 1 Bahamy bt 1 Bhután bv 1 ostrov Bouvet bw 1 Botswana by 1 Bielorusko bz 1 Belize ca 3 Kanada cc 1 Kokosové ostrovy cd 1 Kon¾ská demokratická republika cf 1 Stredoafrická republika cg 1 Kongo ch 2 ©vajèiarsko ci 1 Pobre¾ie Slonoviny ck 1 Cookove ostrovy cl 2 Chile cm 1 Kamerun cn 3 Èína co 3 Kolumbia cr 3 Kostarika cu 2 Kuba cv 1 Kapverdy cx 2 Vianoèný ostrov cy 3 Cyprus cz 2 Èesko de 2 Nemecko dj 1 D¾ibutsko dk 2 Dánsko dm 2 Dominika do 3 Dominikánska republika dz 1 Al¾írsko ec 3 Ekvádor ee 2 Estónsko eg 3 Egypt eh 1 Západná Sahara er 1 Eritrea es 2 ©panielsko et 1 Eiópia fi 2 Fínsko fj 3 Fid¾i fk 1 Falklandy fm 1 Mikronézia fo 1 Faerské ostrovy fr 2 Francúzsko fx 1 Francúzsko (Európske územie) ga 1 Gabon gb 1 Veµká Británia gd 1 Grenada ge 1 Gruzínsko gf 1 Francúzska Guyana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltár gl 1 Grónsko gm 1 Gambia gn 1 Guinea gp 1 Guadelupe gq 1 Rovníková Guinea gr 2 Grécko gs 1 Ju¾ná Georgia gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hongkong hm 1 ostrovy Heard a McDonald hn 2 Honduras hr 2 Chorvátsko ht 1 Haiti hu 2 Maïarsko id 3 Indonézia ie 2 Írsko il 3 Izrael im 1 ostrov Man in 3 India io 1 Britské indickooceánske teritórium iq 1 Irak ir 1 Irán is 2 Island it 2 Taliansko je 1 ostrov Jersey jm 3 Jamajka jo 3 Jordánsko jp 3 Japonsko ke 3 Keòa kg 1 Kirgizsko kh 1 Kambod¾a ki 1 Kiribati km 1 Komory kn 1 Svätý Kri¹tof kp 1 Severná Kórea kr 3 Ju¾ná Kórea kw 3 Kuvajt ky 1 Kajmanie ostrovy kz 1 Kazachstan la 1 Laos lb 3 Libanon lc 1 Svätá Lucia li 2 Lichten¹tajnsko lk 1 Srí Lanka lr 1 Libéria ls 1 Lesotho lt 2 Litva lu 2 Luxembursko lv 2 Loty¹sko ly 1 Líbya ma 1 Maroko mc 2 Monako md 1 Moldavsko mg 1 Madagaskar mh 1 Marshallove ostrovy mk 3 Macedónsko ml 1 Mali mm 1 Barma mn 1 Mongolsko mo 1 Macao mp 1 Severné Mariany mq 1 Martinik mr 1 Mauritánia ms 1 Montserrat mt 3 Malta mu 1 Maurícius mv 1 Maledivy mw 1 Malawi mx 3 Mexiko my 3 Malajzia mz 1 Mozambik na 1 Namíbia nc 1 Nová Kaledónia ne 1 Niger nf 1 Norfolk ng 1 Nigéria ni 3 Nikaragua nl 2 Holandsko no 2 Nórsko np 1 Nepál nr 1 Nauru nu 2 Niue nz 3 Nový Zéland om 1 Omán pa 3 Panama pe 3 Peru pf 1 Francúzska Polynézia pg 3 Papua - Nová Guinea ph 3 Filipíny pk 3 Pakistan pl 3 Poµsko pm 1 Saint Pierre a Miguelon pn 1 Pitcairnove ostrovy pr 1 Portoriko ps 3 Palestína pt 2 Portugalsko pw 1 Palauské ostrovy py 3 Paraguaj qa 1 Katar re 1 Réunion ro 2 Rumunsko ru 2 Rusko rw 1 Rwanda sa 3 Saudská Arábia sb 1 ©alamúnove ostrovy sc 1 Seychely sd 1 Sudán se 2 ©védsko sg 3 Singapur sh 1 Svätá Helena si 2 Slovinsko sj 1 ©picbergy sk 2 Slovensko sl 1 Sierra Leone sm 1 San Maríno sn 1 Senegal so 1 Somálsko sr 1 Surinam st 1 Svätý Tomá¹ su 2 Sovietsky zväz sv 3 Salvádor sy 1 Sýria sz 1 Svazijsko tc 1 Turks a Caicos td 1 Èad tf 1 Francúzske ju¾né územia tg 1 Togo th 3 Thajsko tj 1 Tad¾ikistan tk 1 Tokelau tl 1 Východný Timor tm 1 Turkménsko tn 1 Tunisko to 1 Tonga tp 1 Východný Timor tr 3 Turecko tt 3 Trinidad a Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzánia ua 3 Ukrajina ug 3 Uganda uk 3 Veµká Británia um 1 malé ostrovy USA us 4 Spojené ¹táty americké uy 3 Uruguaj uz 1 Uzbekistan va 1 Vatikán vc 1 Svätý Vincent ve 3 Venezuela vg 1 Britské Panenské ostrovy vi 1 Americké Panenské ostrovy vn 1 Vietnam vu 1 Vanuatu wf 1 Wallisove ostrovy ws 1 Samoa ye 1 Jemen yt 1 ostrov Mayotte yu 3 Juhoslávia za 3 Ju¾ná Afrika zm 1 Zambia zr 1 Zair zw 3 Zimbabwe analog-ce-6.0.17/lang/tr.lng000066400000000000000000000315521406366436600155270ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Turkish translation for versions 3 & 4 by Nezih Erkman. ## Turkish translation for version 5 by Dikran Diragormacioglu. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-9 ## Abbreviations for the day and month names. Paz Pts Sal Çrþ Prþ Cum Cts Ock Þbt Mrt Nis May Haz Tem Aðu Eyl Ekm Ksm Ara ## Next some standard common words. ## Abbreviation for "week beginning" Hafta baþý yýl ## Quarter of a year üç aylýk süre ay gün gün sa dakika dakika saniye saniye byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes eriþim eriþim tarih ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 tarih saat saat ilk tarih ilk saat son tarih son saat dosya dosyalar host hostlar sanal host sanal hostlar bölüm bölümler site tipi site tipleri organizasyon organizasyonlar dosya uzantýsý dosya uzantýlarý URL URLs browser browserlar sistem sistemler ## (= operating system, operating systems) boyut aranan terim aranan terimler site siteler kullanýcý kullanýcýlar durum kodu durum kodlarý Web Server Ýstatistikleri: ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Genel Özet ## The time reports, plus "busiest" strings (at the bottom of each report) Yýllýk rapor En meþgul yýl Üç aylýk rapor En meþgul üç ay Aylýk Rapor En meþgul ay: Haftalýk Rapor En meþgul hafta: hafta baþý- Günlük Özet Günlük Rapor En meþgul gün: Saatlik Rapor Saatlik Özet Haftanýn saati özeti En meþgul saat: 15 dk. Raporu 15 dk. Özeti En meþgul 15 dk.: 5 dk. Raporu 5 dk. Özeti En meþgul 5 dk.: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Raporu host hostlar n Host yönlendirme raporu host hostlar n Baþarýsýz host eriþim raporu host hostlar n Dizin Raporu Dizin Dizinler n Dosya Tipi Raporu dosya tipi dosya tipleri n Eriþim Raporu dosya dosyalar n Yönlendirme Raporu dosya dosyalar n Baþarýsýz Eriþim Raporu dosya dosyalar n Gönderen Yer Raporu gönderici URL gönderici URLler n Gönderici Site Raporu gönderici site gönderici siteler n Yönlendirmeler Raporu gönderici URL gönderici URLler n Baþarýsýz Gönderiler Raporu gönderici URL gönderici URLler n Arama Sorgusu Raporu sorgu sorgular n Aranan Kelime Raporu aranan kelime aranan kelimeler n Dahili arama sorgusu raporu sorgu sorgular n Dahili kelime arama raporu aranan kelime aranan kelimeler n Sanal Host Raporu sanal host sanal hostlar n Sanal Host yönlendirme raporu Sanal Host Sanal Hostlar n Sanal Host baþarýsýz eriþim raporu Sanal Host Sanal Hostlar n Kullanýcý Raporu kullanýcý kullanýcýlar n Kullanýcý Yönlendirme Raporu kullanýcý kullanýcýlar n Eriþemeyen Kullanýcý Raporu kullanýcý kullanýcýlar n Kullanýlan Browserlar Özeti browser browserlar n Kullanýlan Browser Raporu Browser Browserlar n Ýþletim Sistemi Raporu iþletim sistemi iþlerim sistemleri n Site Tipi Raporu site tipi site tipleri n Organizasyon Raporu organizasyon organizasyonlar n Durum Kodu Raporu durum kodu durum kodlarý n Ýþlem Süresi Raporu Dosya Boyutu Raporu ## Used at the bottom of the report Bu analizi yaratmak için kullanýlan program: Çalýþma süresi 1 den az ## Used in the time reports Herbir ünite sayfaya (sayfadaki nesnelere eriþim dahil) kez eriþimi gösterir kez eriþimi gösterir ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * diðer ## Used at the top of the report Program baþlagýcý: Analiz edilen tarih aralýðý: / ## Used in the General Summary Baþarýlý eriþimler Baþarýlý eriþimler günlük ortalamasý Sayfalara yapýlan baþarýlý eriþimler Sayfalara yapýlan baþarýlý eriþimler günlük ortalamasý Durum kodu olmayan KAYIT(LOG) dosyasý satýrlarý Baþarýsýz eriþimler Yönlendirilen eriþimler Enformasyonal status kodlu eriþimler Eriþilen belirgin dosya sayýsý Servis verilen belirgin host sayýsý Bozuk KAYIT(LOG) dosyasý satýrlarý Ýstenmeyen KAYIT(LOG) dosyasý satýrlarý Transfer edilen bilgi Transfer edilen bilgi günlük ortalamasý Parantez içindeki deðerlerin temsil ettiði gün sayýsý: 7 gün-bitiþ: son 7 gün Git Ýlk Sayfa ## Some special phrases for particular reports. [Çözümlenmemiþ sayýsal adres] [Host bilinmiyor] [Bilinmeyen host] [Ana dizin] [Dizin yok] [dosya uzantýsý yok] [Dizinler] Bilinmeyen Windows Diðer Unix Robotlar iþletim sistemi bilinmiyor ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) eriþim 7 günlük eriþim eriþim% 7 günlük eriþim% sayfa 7 günlük sayfa sayfa% 7 günlük sayfa% bytes ?bytes 7 günlük bytes 7 günlük ?bytes bytes% 7 günlük bytes% no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ýlk %s listeleniyor * * Ýlk %d %s listeleniyor * * %s listeleniyor ## "by" in the phrase "listing the top 3 files BY number of requests" . Sýralama: ## All requests WITH AT LEAST 10 requests - en az ## Different ways of doing floors son 7 gün içindeki eriþim son 7 gün içindeki eriþimler son yedi gün içindeki tek sayfa eriþimi son yedi gün içindeki sayfa eriþimleri yönlendirilmiþ eriþim yönlendirilmiþ eriþimler son yedi gün içindeki yönlendirilmiþ eriþim son yedi gün içindeki yönlendirilmiþ eriþimler baþarýsýz eriþim baþarýsýz eriþimler son yedi gün içindeki baþarýsýz eriþim son yedi gün içindeki baþarýsýz eriþimler % trafiði olan son yedi günde % trafiði olan % max. trafiði olan son yedi günde % max. trafiði olan eriþim eriþim miktarý ## ?bytes represents kbytes, Mbytes etc. ?bytes cinsinden eriþim miktarý son yedi gün içindeki eriþim son yedi gün içindeki bytes cinsinden eriþim miktarý son yedi gün içindeki ?bytes cinsinden eriþim miktarý son eriþim: son yönlendirilmiþ eriþim: son baþarýsýz eriþim: ilk eriþim ilk yönlendirilmiþ eriþim ilk baþarýsýz eriþim ## Now "sorted by": again, in m, f & n (only needed in plural though) * * Sýralama: ## Used at the top of each report Bu rapordaki verilerin ait olduðu dönem: ## Used in pie charts Dilimlerin temsil ettiði büyüklük: ## different ways of sorting eriþim miktarý son yedi gün içindeki eriþim miktarý % eriþim yüzdeli son yedi gün içindeki % eriþim yüzdeli % max. eriþim yüzdeli son yedi gün içindeki % max. eriþim yüzdeli eriþim sayýsý son yedi gün içindeki eriþim sayýsý % sayfa eriþim yüzdeli son yedi gün içindeki % sayfa eriþim yüzdeli % max. sayfa eriþim yüzdeli son yedi gün içindeki % max. sayfa eriþim yüzdeli sayfa eriþim sayýsý son yedi gün içindeki sayfa eriþim sayýsý % yönlendirilmiþ eriþim yüzdeli son yedi gündeki % yönlendirilmiþ eriþim yüzdeli % max. yönlendirilmiþ eriþim yüzdeli son yedi gün içindeki % max. yönlendirilmiþ eriþim yüzdeli yönlendirilmiþ eriþim sayýsý son yedi gün içindeki yönlendirilmiþ eriþim sayýsý % baþarýsýz eriþim yüzdeli son yedi gündeki % baþarýsýz eriþim yüzdeli % max. baþarýsýz eriþim yüzdeli son yedi gün içindeki % max. baþarýsýz eriþim yüzdeli baþarýsýz eriþim sayýsý son yedi gün içindeki baþarýsýz eriþim sayýsý Son eriþim zamaný: Son yönlendirilmiþ eriþim zamaný: Son baþarýsýz eriþim zamaný: ilk eriþim zamaný ilk yönlendirilmiþ eriþim zamaný ilk baþarýsýz eriþim zamaný ## 3 other ways of sorting in m, f, & n * * Alfabetik sýralý * * Numara sýralý * * Sýralanmamýþ ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. sabah öðleden sonra ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w,%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/tw.lng000066400000000000000000000254601406366436600155350ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ## ## This file is translated by Tzu-hsien Yu (thyu@ck.tp.edu.tw), Jun 2001. ## *Big5 ## Abbreviations for the day and month names. ¶g¤é ¶g¤@ ¶g¤G ¶g¤T ¶g¥| ¶g¤­ ¶g¤» ¤@¤ë ¤G¤ë ¤T¤ë ¥|¤ë ¤­¤ë ¤»¤ë ¤C¤ë ¤K¤ë ¤E¤ë ¤Q¤ë ¤Q¤@¤ë ¤Q¤G¤ë ## Next some standard common words. ## Abbreviation for "week beginning" ¨C¶g ¦~ ## Quarter of a year ©u ¤ë ¤é ¤Ñ ¤p®É ¤ÀÄÁ ¤ÀÄÁ ¬í ¬í Byte Bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes ½Ð¨D ½Ð¨D ¤é´Á ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 ¤é´Á ®É¶¡ ®É¶¡ ³Ì¦­¤é´Á ³Ì¦­®É¶¡ ³Ìªñ¤é´Á ³Ìªñ®É¶¡ ÀÉ®× ÀÉ®× ¥D¾÷ ¥D¾÷ µêÀÀ¥D¾÷ µêÀÀ¥D¾÷ ¥Ø¿ý ¥Ø¿ý ºô°ì ºô°ì ²Õ´ ²Õ´ °ÆÀɦW °ÆÀɦW URL URLs ÂsÄý¾¹ ÂsÄý¾¹¼Æ §@·~¨t²Î §@·~¨t²Î ## (= operating system, operating systems) ¤j¤p À˯Á¦r À˯Á¦r­Ó¼Æ ºô¯¸ ºô¯¸ ¨Ï¥ÎªÌ ¨Ï¥ÎªÌ ª¬ºA¥N½X ª¬ºA¥N½X Web Server ²Î­p: ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Á`·§­n³ø§i ## The time reports, plus "busiest" strings (at the bottom of each report) ¨C¦~³ø§i °ª®p¦~: ¨C©u³ø§i °ª®p©u ¨C¤ë³ø§i °ª®p¤ë: ¨C¶g³ø§i °ª®p¶g: ¶}©l©ó ¨C¤é³ø§i·§­n ¨C¤é³ø§i °ª®p¤é: ¨C¤p®É³ø§i ¨C¤p®É³ø§i·§­n ¥»¶g¨C¤p®É³ø§i °ª®p¤p®É: ¨C¨è(15¤ÀÄÁ)³ø§i ¨C¨è(15¤ÀÄÁ)³ø§i·§­n °ª®p¤@¨è: ¤­¤ÀÄÁ³ø§i ¤­¤ÀÄÁ³ø§i·§­n °ª®p¤­¤ÀÄÁ: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! ¥D¾÷³ø§i ¥D¾÷ ¥D¾÷ n ¥D¾÷­«·s¾É¦V³ø§i ¥D¾÷ ¥D¾÷ n ¥D¾÷¥¢±Ñ³ø§i ¥D¾÷ ¥D¾÷ n ¥Ø¿ý³ø§i ¥Ø¿ý ¥Ø¿ý n ¤å¥óÃþ«¬³ø§i °ÆÀɦW °ÆÀɦW n ½Ð¨D³ø§i ÀÉ®× ÀÉ®× n ­«·s¾É¦V³ø§i ÀÉ®× ÀÉ®× n ¥¢±Ñ³ø§i ÀÉ®× ÀÉ®× n ¨Ó·½ºô­¶³ø§i ³sµ²ªº URL ³sµ²ªº URLs n ¨Ó·½ºô¯¸³ø§i ³sµ²ªººô¯¸ ³sµ²ªººô¯¸ n ­«·s¾É¦V³sµ²(Redirected Referrer)³ø§i ³sµ²ªº URL ³sµ²ªº URLs n ¥¢±Ñ³sµ²ÂI(Referrer)³ø§i ³sµ²ªº URL ³sµ²ªº URLs n ·j´MÀ˯Á³ø§i À˯Á À˯Á n À˯Á¦r³ø§i À˯Á¦r À˯Á¦r n ¤º³¡·j´MÀ˯Á³ø§i À˯Á À˯Á n ¤º³¡À˯Á¦r³ø§i À˯Á¦r À˯Á¦r n µêÀÀ¥D¾÷³ø§i µêÀÀ¥D¾÷ µêÀÀ¥D¾÷¼Æ n µêÀÀ¥D¾÷­«·s¾É¦V³ø§i µêÀÀ¥D¾÷ µêÀÀ¥D¾÷ n µêÀÀ¥D¾÷¥¢±Ñ³ø§i µêÀÀ¥D¾÷ µêÀÀ¥D¾÷ n ¨Ï¥ÎªÌ³ø§i ¨Ï¥ÎªÌ ¨Ï¥ÎªÌ n ¨Ï¥ÎªÌ­«·s¾É¦V³ø§i ¨Ï¥ÎªÌ ¨Ï¥ÎªÌ n ¨Ï¥ÎªÌ¥¢±Ñ³ø§i ¨Ï¥ÎªÌ ¨Ï¥ÎªÌ n ÂsÄý¾¹·§­n³ø§i ÂsÄý¾¹ ÂsÄý¾¹ n ÂsÄý¾¹³ø§i ÂsÄý¾¹ ÂsÄý¾¹ n §@·~¨t²Î³ø§i §@·~¨t²Î §@·~¨t²Î n ºô°ì³ø§i ºô°ì ºô°ì n ¨Ó·½²Õ´³æ¦ì³ø§i ²Õ´³æ¦ì ²Õ´³æ¦ì n ª¬ºA¥N½X³ø§i ª¬ºA¥N½X ª¬ºA¥N½X n ³B²z®É¶¡³ø§i Àɮפj¤p³ø§i ## Used at the bottom of the report ¦¹²Î­p¥H¦¹²£¥Í: °õ¦æ®É¶¡ ¤p©ó1 ## Used in the time reports ¨C³æ¦ì ¥Nªí ©Î¥¼º¡ªº³¡¤À ­¶½Ð¨D ­¶½Ð¨D ## Used at the bottom of each non-time report: need m, f & n genders * * ¨S¦³¦C¥X ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report µ{¦¡¶}©l©ó ¤ÀªR½Ð¨D¦Û ¨ì ## Used in the General Summary ¥þ³¡¦¨¥\½Ð¨D ¨C¤Ñ¥­§¡¦¨¥\½Ð¨D ­¶½Ð¨D¥þ³¡¦¨¥\½Ð¨D ¨C¤é¥­§¡¦¨¥\­¶½Ð¨D ¤£§tª¬ºA¥N½Xªº¬ö¿ý¦æ¼Æ ¥þ³¡ªº¥¢±Ñ½Ð¨D ³QÂà¦Vªº½Ð¨D §tª¬ºA¥N½Xªº½Ð¨D ¬Û²§¤£­«½Æªº½Ð¨D ¬Û²§¤£­«½Æªº¨Ó³X¥D¾÷ Ãa±¼ªº¬ö¿ý¦æ¼Æ µL¥Îªº¬ö¿ý¼Æ Á`¶Ç¿é¶q ¥­§¡¨C¤Ñ¶Ç¿é¶q ¬A©·¤ºªº¼Æ­Èªí¥Ü ¤C¤Ñ¦Ü ³Ì«á¤C¤Ñ ª½±µ¸õ¨ì ³»ºÝ ## Some special phrases for particular reports. [µLªk¤Ï¸Ñªº¦ì§}] [µLºô°ì] [¥¼ª¾ºô°ì] [®Ú¥Ø¿ý] [¨S¦³¥Ø¿ý] [µL°ÆÀɦW] [¥Ø¿ý¼Æ] ¥¼ª¾ªº Windows ¨ä¥L Unix ºô­¶¾÷¾¹¤H Robots ¥¼ª¾ªº§@·~¨t²Î ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * ¦C¥X³Ì¤W­±ªº %s * * ¦C¥X³Ì¤W­±ªº %d %s * * ¦C¥X %s ## "by" in the phrase "listing the first 3 files BY number of requests" ¨Ì ## All requests WITH AT LEAST 10 requests ¦Ü¤Ö¦³ ## Different ways of doing floors ³Ìªñ¤C¤Ñ¤ºªº½Ð¨D ³Ìªñ¤C¤Ñ¤ºªº½Ð¨D ³Ìªñ¤C¤Ñ¤º­¶½Ð¨D ³Ìªñ¤C¤Ñ¤º­¶½Ð¨D ­«·s¾É¦V½Ð¨D ­«·s¾É¦V½Ð¨D ³Ìªñ¤C¤Ñ­«·s¾É¦Vªº½Ð¨D ³Ìªñ¤C¤Ñ­«·s¾É¦Vªº½Ð¨D ¥¢±Ñ½Ð¨D ¥¢±Ñ½Ð¨D ³Ìªñ¤C¤Ñ¤ºªº¥¢±Ñ½Ð¨D ³Ìªñ¤C¤Ñ¤ºªº¥¢±Ñ½Ð¨D %¬y¶q %³Ìªñ¤C¤Ñ¤ºªº¬y¶q %³Ì¤j¬y¶q %³Ìªñ¤C¤Ñ¤ºªº³Ì¤j¬y¶q ¬y¶q(byte) ¬y¶q(bytes) ## ?bytes represents kbytes, Mbytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days ½Ð¨D¦Û±q ­«·s¾É¦V½Ð¨D¦Û±q ¥¢±Ñ½Ð¨D¦Û±q ²Ä¤@¦¸½Ð¨D¦b ²Ä¤@¦¸­«·s¾É¦V½Ð¨D¦b ²Ä¤@¦¸¥¢±Ñ½Ð¨D¦b ## Now "sorted by": again, in m, f & n (only needed in plural though) * * ±Æ§Ç: ## Used at the top of each report ³o¥÷³ø§i¥]¬A¤F ## Used in pie charts ¦¹¹Ï§Îø»s®Ú¾Ú: ## different ways of sorting ¬y¶q ³Ìªñ¤C¤Ñ¤ºªº¬y¶q %½Ð¨D %³Ìªñ¤C¤Ñ¤ºªº½Ð¨D %³Ì¤j½Ð¨D %³Ìªñ¤C¤Ñ¤ºªº³Ì¤j½Ð¨D ½Ð¨D¼Æ ³Ìªñ¤C¤Ñ¤ºªº½Ð¨D¼Æ %¹ï­¶½Ð¨D¼Æ %³Ìªñ¤C¤Ñ¤º¹ï­¶½Ð¨D¼Æ %³Ì¤j¹ï­¶½Ð¨D¼Æ %³Ìªñ¤C¤Ñ¤º³Ì¤j¹ï­¶½Ð¨D¼Æ ­¶½Ð¨D¼Æ ³Ìªñ¤C¤Ñ¤º¹ï­¶½Ð¨D¼Æ %­«·s¾É¦V½Ð¨D¼Æ %³Ìªñ¤C¤Ñ¤º­«·s¾É¦V½Ð¨D¼Æ %³Ì¤j­«·s¾É¦V½Ð¨D¼Æ %³Ìªñ¤C¤Ñ¤º³Ì¤j­«·s¾É¦V½Ð¨D¼Æ ­«·s¾É¦V½Ð¨D¼Æ ³Ìªñ¤C¤Ñ¤º­«·s¾É¦V½Ð¨D¼Æ %¥¢±Ñ½Ð¨D¼Æ %³Ìªñ¤C¤Ñ¤º¥¢±Ñ½Ð¨D¼Æ %¥¢±Ñ½Ð¨D³Ì¤j¼Æ %³Ìªñ¤C¤Ñ¤º³Ì¤j¥¢±Ñ½Ð¨D¼Æ ¥¢±Ñ½Ð¨D¼Æ ³Ìªñ¤C¤Ñ¤º¥¢±Ñ½Ð¨D¼Æ ³Ìªñ½Ð¨D®É¶¡ ³ÌªñÂà¦V½Ð¨D®É¶¡ ³Ìªñ¥¢±Ñ½Ð¨D®É¶¡ ²Ä¤@¦¸½Ð¨D®É¶¡ ²Ä¤@¦¸­«·s¾É¦V®É¶¡ ²Ä¤@¦¸¥¢±Ñ½Ð¨D®É¶¡ ## 3 other ways of sorting in m, f, & n * * «ö¦r¥À¶¶§Ç±Æ§Ç * * «ö¼Æ¦r¤j¤p±Æ§Ç * * ¥¼±Æ§Ç ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y %H:%n ## "Program started at" and "Analysed requests from" %w, %m %D %Y %H:%n ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %H:%n-%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %H:%n-%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %m/%d/%y %H:%n ## In non-time reports: "including all files with requests since [date]" %m/%d/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/twdesc.txt000066400000000000000000000061171406366436600164310ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report ³o³¡¥÷ªº³ø§i¥H¦~¬°³æ¦ì§@²Î­p. # Quarterly Report ³o³¡¥÷ªº³ø§i¥H©u¬°³æ¦ì§@²Î­p. # Monthly Report ³o³¡¥÷ªº³ø§i¥H¤ë¬°³æ¦ì§@²Î­p. # Weekly Report ³o³¡¥÷ªº³ø§i¥H¶g¬°³æ¦ì§@²Î­p. # Daily Report ³o³¡¥÷ªº³ø§i¥H¤Ñ¬°³æ¦ì§@²Î­p. # Hourly Report ³o³¡¥÷ªº³ø§i¥H¤p®É¬°³æ¦ì§@²Î­p. # Quarter-Hour Report ³o³¡¥÷ªº³ø§i¥H¨è(15¤ÀÄÁ)¬°³æ¦ì§@²Î­p. # Five-Minute Report ³o³¡¥÷ªº³ø§i¥H¤­¤ÀÄÁ¬°³æ¦ì§@²Î­p. # Daily Summary ³o³¡¥÷ªº³ø§i±N©Ò¦³°O¿ý¥H¨C¶g¦U¤é°Ï¤À§@¥[Á`²Î­p. # Hourly Summary ³o³¡¥÷ªº³ø§i±N©Ò¦³°O¿ý¥H¨C¤Ñ¦U­Ó¤p®É°Ï¤À§@¥[Á`²Î­p. # Hour of the Week Summary ³o³¡¥÷ªº³ø§i±N¥»¶g©Ò¦³°O¿ý¥H¨C¤Ñ¦U­Ó¤p®É°Ï¤À§@¥[Á`²Î­p. # Quarter-Hour Summary ³o³¡¥÷ªº³ø§i±N©Ò¦³°O¿ý¥H¨C¤Ñ¤¤ªº¨C15¤ÀÄÁ°Ï¤À§@¥[Á`²Î­p. # Five-Minute Summary ³o³¡¥÷ªº³ø§i±N©Ò¦³°O¿ý¥H¨C¤Ñ¤¤ªº¨C5¤ÀÄÁ°Ï¤À§@¥[Á`²Î­p. # General Summary ³o³¡¥÷ªº³ø§iÅã¥ÜÁ`Åé²Î­p¸ê°T. # Request Report ³o³¡¥÷ªº³ø§i¦C¥X¥»ºô¯¸¤WªºÀÉ®×. # Redirection Report ³o³¡¥÷ªº³ø§i¦C¥X³y¦¨½Ð¨D³Q¾É¦V¥t¤@ÀɮתºÀÉ®×. (³q±`³y¦¨ªº­ì¦]¦³: ¥Ø¿ý³Ì«á­±¤Ö¤F±×½u/, ©Î¬O±j­¢­«·s¾É¦Vªº CGI µ{¦¡) # Failure Report ³o³¡¥÷ªº³ø§i¦C¥X³y¦¨½Ð¨D¥¢±ÑªºÀɮצWºÙ, ¨Ò¦p§ä¤£¨ìÀÉ®×. # File Type Report ³o³¡¥÷ªº³ø§i¦C¥X³Q½Ð¨DªºÀɮתº°ÆÀɦW. # Directory Report ³o³¡¥÷ªº³ø§i¦C¥X³Q½Ð¨DÀɮשÒÄݪº¥Ø¿ý. (¦C¥Xªº¥Ø¿ý¥]¬A¨ä¤l¥Ø¿ýªº°O¿ý) # Host Report ³o³¡¥÷ªº³ø§i¦C¥X°e¥X½Ð¨Dªº¥D¾÷¦ì§}. # Host Redirection Report ³o³¡¥÷ªº³ø§i¦C¥X³Q­«·s¾É¦Vªº¥D¾÷¦ì§}. # Host Failure Report ³o³¡¥÷ªº³ø§i¦C¥X°e¥X¥¢±Ñ½Ð¨Dªº¥D¾÷. # Domain Report ³o³¡¥÷ªº³ø§i¦C¥Xºô¯¸°Ñ³XªÌªº¨Ó·½°ê®a. # Referrer Report ³o³¡¥÷ªº³ø§i¦C¥X¥»ºô¯¸ªº³sµ²ÂI. (Referrer, §Y³s¦Ü¥»ºô¯¸¤ºÀɮתººô­¶¨ä¦ì¸m, ©Î¬O¥»ºô¯¸¤W¦³¥]¬A¹Ï¤ùªººô­¶µ¥) # Referring Site Report ³o³¡¥÷ªº³ø§i¦C¥X³sµ²¦Ü¥»¯¸¤ºÀɮתº¥D¾÷²Î­p. # Redirected Referrer Report ³o³¡¥÷ªº³ø§i¦C¥X³y¦¨³Q­«·s¾É¦Vªº½Ð¨Dªº¨Ó·½. # Failed Referrer Report ³o³¡¥÷ªº³ø§i¦C¥X³sµ²¦Ü¥»¯¸¤º¤w¤£¦s¦bÀɮתº³sµ²ÂI²Î­p. # Browser Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ©Ò¨Ï¥ÎªºÂsÄý¾¹. # Virtual Host Report ³o³¡¥÷ªº³ø§i¦C¥X­Ó§OµêÀÀ¥D¾÷ªº°O¿ý²Î­p. # Virtual Host Redirection Report ³o³¡¥÷ªº³ø§i¦C¥X­Ó§OµêÀÀ¥D¾÷³Q­«·s¾É¦Vªº½Ð¨D²Î­p. # Virtual Host Failure Report ³o³¡¥÷ªº³ø§i¦C¥X­Ó§OµêÀÀ¥D¾÷ªº¥¢±Ñ½Ð¨D²Î­p. # User Report ³o³¡¥÷ªº³ø§i¦C¥X°e¥X½Ð¨Dªº¨Ï¥ÎªÌ(¦pªG¥i¥H¥Ñ»{ÃÒ©Î cookie ±o¨ì). # User Redirection Report ³o³¡¥÷ªº³ø§i¦C¥X³Q­«·s¾É¦Vªº¨Ï¥ÎªÌ. # User Failure Report ³o³¡¥÷ªº³ø§i¦C¥X°e¥X¥¢±Ñ½Ð¨Dªº¨Ï¥ÎªÌ. # Organisation Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ¦ì§}©ÒÄݪº²Õ´. # Search Query Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ¦b·j´M¤ÞÀº¤¤³s¨ì¦¹¯¸©Ò¨Ï¥ÎªºÀ˯Á±ø¥ó. # Search Word Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ¦b·j´M¤ÞÀº¤¤³s¨ì¦¹¯¸©Ò¨Ï¥ÎªºÀ˯ÁÃöÁä¦r. # Internal Search Query Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ¦b¯¸¤º©Ò¨Ï¥ÎªºÀ˯Á±ø¥ó. # Internal Search Word Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ¦b¯¸¤º©Ò¨Ï¥ÎªºÀ˯ÁÃöÁä¦r. # Browser Summary ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ©Ò¨Ï¥ÎªºÂsÄý¾¹²Î­p. # Operating System Report ³o³¡¥÷ªº³ø§i¦C¥X°Ñ³XªÌ©Ò¨Ï¥Îªº§@·~¨t²Î²Î­p. # File Size Report ³o³¡¥÷ªº³ø§i¦C¥X³Q½Ð¨DªºÀɮפj¤p²Î­p. # Status Code Report ³o³¡¥÷ªº³ø§i¦C¥X HTTP ª¬ºA¥N½Xªº²Î­p. # Processing Time Report ³o³¡¥÷ªº³ø§i¦C¥X¦¨¥\ªº½Ð¨D³B²z©Òªáªº®É¶¡. analog-ce-6.0.17/lang/twdom.tab000066400000000000000000000164521406366436600162240ustar00rootroot00000000000000aero 2 Air Transport Industry ¯è¤Ó·~ arpa 1 Arpanet biz 2 Businesses °Ó·~ com 2 Commercial °Ó·~ coop 2 Co-operatives ¦X§@ªÀ(²Õ´) edu 2 ¬ü°ê±Ð¨|³æ¦ì gov 2 ¬ü°ê¬F©²³æ¦ì info 2 Informational ¤@¯ë¸ê°T int 2 International Treaty Organizations °ê»Ú²Õ´ mil 2 ¬ü°ê­x¨Æ³æ¦ì museum 2 Museums ³Õª«À]µ¥®iÄý¾÷ºc name 3 Individuals ­Ó¤H¨Ï¥Î net 2 Network ºô¸ô org 2 «DÀç§Q©Ê²Õ´ pro 3 Professionals ±M·~¤H¤h©Î¾÷ºc ac 1 Ascension Island ¨È´ËªY®q ad 2 Andorra ¦w¹Dº¸¦@©M°ê ae 3 United Arab Emirates ªü©Ô§BÁp¦X¤j¤½°ê af 1 Afghanistan ªü´I¦½ ag 2 Antigua and Barbuda ¦w¦a¥d¤Î¤Ú¥¬¹F ai 1 Anguilla ­^Äݦw¥j©Ô®q al 1 Albania ªüº¸¤Ú¥§¨È am 2 Armenia ¨È¬ü¥§¨È an 1 Netherlands Antilles ²üÄݦw¦a¨½´µ¸s®q ao 1 Angola ¦w­ô©Ô aq 1 Antartica «n·¥¬w ar 3 Argentina ªü®Ú§Ê as 1 American Samoa ¬üÄÝÂļ¯¨È at 3 Austria ¶ø¦a§Q au 3 Australia ¿D¤j§Q¨È aw 1 Aruba ªü¾|¤Ú®q az 1 Azerbaijan ¨È¶ë«ôµM ba 3 Bosnia and Herzegovina ªi¦è¥§¨È-»®¯÷ªGºû¨È bb 2 Barbados ¤Ú¨©¦h bd 1 Bangladesh ©s¥[©Ô¦@©M°ê be 2 Belgium ¤ñ§Q®É bf 1 Burkina Faso ¥¬°ò¨ºªk¯Á bg 2 Bulgaria «O¥[§Q¨È bh 1 Bahrain ¤ÚªL bi 1 Burundi »Z¶©¦a bj 1 Benin ¨©«n bm 1 Bermuda ¦Ê¼}¹F¸s®q bn 1 Brunei Darussalam ¨ZµÜ bo 3 Bolivia ¬Á§Qºû¨È br 3 Brazil ¤Ú¦è bs 1 Bahamas ¤Ú«¢°¨ bt 1 Bhutan ¤£¤¦ bv 1 Bouvet Island ¥¬«Â®q bw 1 Botswana ªi²Ï¨º¦@©M°ê by 1 Belarus ¥Õ«Xù´µ bz 1 Belize ¨©¨½´µ ca 2 Canada ¥[®³¤j cc 1 Cocos (Keeling) Islands ¦©¦©´µ¸s®q cd 1 Democratic Republic of the Congo ­èªG¥Á¥D¦@©M°ê cf 1 Central African Republic ¤¤«D¦@©M°ê cg 1 Republic of Congo ­èªG ch 2 Switzerland ·ç¤h ci 1 Ivory Coast (Cote d'Ivoire) ¶H¤ú®ü©¤¦@©M°ê ck 1 Cook Islands ®w§J¸s®q cl 2 Chile ´¼§Q cm 1 Cameroon ³Ø³Á¶© cn 3 China ¤¤°ê co 3 Colombia ­ô­Û¤ñ¨È cr 3 Costa Rica ­ô´µ¤j¾¤¥[ cu 1 Cuba ¥j¤Ú cv 1 Cape Verde ºû¼w¨¤ cx 1 Christmas Island ¸t½Ï®q cy 3 Cyprus ¶ë´¶°Ç´µ cz 2 Czech Republic ±¶§J¦@©M°ê de 2 Germany ¼w°ê dj 1 Djibouti ¦N¥¬¦a dk 2 Denmark ¤¦³Á dm 2 Dominica ¦h¦Ì¥§§J do 2 Dominican Republic ¦h¦Ì¥§§J¦@©M°ê dz 1 Algeria ªüº¸¤Î§Q¨È ec 3 Ecuador ¤Ì¥Ê¦hº¸ ee 2 Estonia ·R¨F¥§¨È eg 3 Egypt ®J¤Î eh 1 Western Sahara ¦è¼»«¢©Ô er 1 Eritrea ¤Ì¥ß¯S¨½¨È es 2 Spain ¦è¯Z¤ú et 1 Ethiopia ¦ç¯Á¤ñ¨È fi 2 Finland ªâÄõ fj 3 Fiji ´´ÀÙ fk 1 Falkland Islands (Malvina) ­^Äݺ֧JÄõ¸s®q fm 1 Federal State of Micronesia ±K§Jù¦è¥§¨È fo 1 Faroe Islands «D¬¥¸s®q fr 2 France ªk°ê ga 1 Gabon ¥[´^ gd 1 Grenada ®æ·ç¯Ç¹F ge 1 Georgia ³ìªv¨È gf 1 French Guiana ªkÄÝ»\¨È¨º gg 1 Guernsey ­^Äݯզè®q gh 3 Ghana ­{¯Ç gi 1 Gibraltar ª½¥¬Ã¹ªû gl 1 Greenland ®æ³®Äõ gm 1 Gambia ¥Ì¤ñ¨È gn 1 Guinea ´X¤º¨È gp 1 Guadeloupe (French) ªkÄݥʹF¸ô®q gq 1 Equatorial Guinea ¨ª¹D´X¤º¨È gr 2 Greece §ÆÃ¾ gs 1 South Georgia and the South Sandwich Islands «n³ìªv¨È¤Î«n¤T©úªv¸s®q gt 3 Guatemala ¥Ê¦a°¨©Ô gu 1 Guam (USA) Ãö®q gw 1 Guinea-Bissau ´X¤º¨È¤ñ²Ð¦@©M°ê gy 1 Guyana »\¨È¨º hk 3 Hong Kong ­»´ä hm 1 Heard and McDonald Islands »®¼w³Á·í³Ò¸s®q hn 2 Honduras §»³£©Ô´µ hr 2 Croatia (Hrvatske) §Jù®J¦è¨È ht 1 Haiti ®ü¦a hu 2 Hungary ¦I¤ú§Q id 3 Indonesia ¦L¥§ ie 2 Ireland ·Rº¸Äõ il 3 Israel ¥H¦â¦C im 1 Isle of Man °Ò«°®q in 3 India ¦L«× io 1 British Indian Ocean Territory ­^ÄݦL«×¬v»â¦a iq 1 Iraq ¥ì©Ô§J ir 1 Iran ¥ì®Ô is 2 Iceland ¦B®q it 2 Italy ¸q¤j§Q je 1 Jersey ­^ÄÝ¿A¦è®q jm 3 Jamaica ¤ú¶R¥[ jo 3 Jordan ¬ù¥¹ jp 3 Japan ¤é¥» ke 3 Kenya ªÖ¨È kg 1 Kyrgyzstan ¦Nº¸¦N´µ kh 1 Cambodia ¬Z®H¹ë ki 1 Kiribati ¦N¨½¤Ú´µ¦@©M°ê km 1 Comoros ¬ì¼¯¬¥ kn 1 Saint Kitts & Nevis ¸t§J¨½´µ¦hºÖ¤Î¥§ºû´µ kp 1 North Korea (Democratic People's Republic of Korea) ¥_Áú kr 3 South Korea (Republic of Korea) «nÁú kw 3 Kuwait ¬ì«Â¯S ky 1 Cayman Islands ¶}°Ò¸s®q kz 1 Kazakhstan «¢ÂħJ la 1 Laos ¼d°ê lb 3 Lebanon ¾¤¤Ú¹à lc 1 Saint Lucia ¸t¸ô¦è¨È®q li 2 Liechtenstein ¦C¤ä´°´µµn lk 1 Sri Lanka ´µ¨½Äõ¥d lr 1 Liberia ¿à¤ñ·ç¨È ls 1 Lesotho ¿à¯Á¦« lt 2 Lithuania ¥ß³³©{ lu 2 Luxembourg ¿c´Ë³ù lv 2 Latvia ©Ô²æºû¨È ly 1 Libya Arab Jamahiriya §Q¤ñ¨È ma 1 Morocco ¼¯¬¥­ô mc 2 Monaco ¼¯¯Ç­ô md 1 Moldova ¼¯º¸¹Fºû¨È mg 1 Madagascar °¨¹F¥[´µ¥[ mh 1 Marshall Islands °¨²Ðº¸¸s®q mk 3 Macedonia °¨¨ä¹y ml 1 Mali °¨§Q mm 1 Myanmar ½q¨l mn 1 Mongolia »X¥j mo 1 Macau ¿Dªù mp 1 Northern Mariana Islands ¥_°¨¨½¦w¯Ç¸s®q mq 1 Martinique (French) ªkÄݰ¨´£¥§®q mr 1 Mauritania ­T§Q¶ð¥§¨È ms 1 Montserrat »X¯S¦â©Ô¯S®q mt 3 Malta °¨º¸¥L mu 1 Mauritius ¼Ò¨½¦è´µ mv 1 Maldives °¨º¸¦a¤Ò mw 1 Malawi °¨©Ô«Â mx 3 Mexico ¾¥¦è­ô my 3 Malaysia °¨¨Ó¦è¨È mz 1 Mozambique ²ö¤T¤ñ§J na 1 Namibia ¨º¦Ì¤ñ¨È nc 1 New Caledonia (French) ·s³Ø¨½¦h¥§¨È¸s®q ne 1 Niger ¥§¤é nf 1 Norfolk Island ¿ÕºÖ§J®q ng 1 Nigeria ©`¤Î§Q¨È ni 3 Nicaragua ¥§¥[©Ô¥Ê nl 2 Netherlands ²üÄõ no 2 Norway ®¿«Â np 1 Nepal ¥§ªyº¸ nr 1 Nauru ¿Õ¾| nu 2 Niue ¯Ã«Â®q nz 3 New Zealand ¯Ã¦èÄõ om 1 Oman ªü°Ò pa 3 Panama ¤Ú®³°¨ pe 3 Peru ¯¦¾| pf 1 Polynesia (French) ªkÄݬÁ¨½¥§¦è¨È pg 3 Papua New Guinea ¤Ú¥¬·s´X¤º¨È ph 3 Philippines µá«ß»« pk 3 Pakistan ¤Ú°ò´µ©Z pl 3 Poland ªiÄõ pm 1 Saint Pierre and Miquelon ¸t¤Ç®q pn 1 Pitcairn Island ¥Ö¯S±d®q pr 1 Puerto Rico ¬üÄݪi¦h¾¤¦U ps 1 Palestinian Territories ¤Ú°Ç´µ©Z»â¦a pt 2 Portugal ¸²µå¤ú pw 1 Palau ©­¯[ py 3 Paraguay ¤Ú©Ô¦c qa 1 Qatar ¥d¹F re 1 Reunion Island (French) ¯d¥§©ô ro 2 Romania ù°¨¥§¨È ru 2 Russia «Xù´µ rw 1 Rwanda ¿c¦w¹F sa 3 Saudi Arabia ¨F¯Q¦aªü©Ô§B sb 1 Solomon Islands ©Òùªù¸s®q sc 1 Seychelles ¶ë®uº¸¸s®q sd 1 Sudan Ĭ¤¦ se 2 Sweden ·ç¨å sg 3 Singapore ·s¥[©Y sh 1 Saint Helena ¸t»®°Ç®³®q si 2 Slovenia ´µ¬¥ºû¥§¶® sj 1 Svalbard and Jan Mayen Islands §N©¤¤Î¥¡³Á®¦¸s®q sk 2 Slovak Republic ´µ¬¥¥ï§J¦@©M°ê sl 1 Sierra Leone ·à¤l¤s sm 1 San Marino ¸t°¨§Q¿Õ sn 1 Senegal ¶ë¤º¥[º¸ so 1 Somalia ¯Á°¨§Q¨È sr 1 Suriname Ĭ§Q«n²ö st 1 Sao Tome and Principe ¸t¦h¬ü´¶ªL¦è¤ñ sv 3 El Salvador Âĺ¸¥Ë¦h sy 1 Syria Arab Republic ±Ô§Q¨È sz 1 Swaziland ¥v¥ËÀÙÄõ tc 1 Turks and Caicos Islands ¤g§J´µ¤Î¶}¬ì´µ¸s®q td 1 Chad ¬d¼w tf 1 French Southern Territories ªk°ê«n¤è»â¦a tg 1 Togo ¦h­ô th 3 Thailand ®õ°ê tj 1 Tajikistan ¶ð¦N§J tk 1 Tokelau ¦«§J³Ò¸s®q tl 1 East Timor ªF«Ò¨Z tm 1 Turkmenistan ¤g®w°Ò tn 1 Tunisia ¬ð¥§¦è¨È to 1 Tonga ªF¥[ tp 1 East Timor ªF«Ò¨Z tr 3 Turkey ¤g¦Õ¨ä tt 3 Trinidad and Tobago ¤d¨½¹F¦«¨©­ô tv 1 Tuvalu ¦R¥Ë¾|¸s®q tw 3 Taiwan ¥xÆW tz 1 Tanzania ©Z©|¥§¨È ua 3 Ukraine ¯Q§JÄõ ug 3 Uganda ¯Q¤z¹F uk 3 United Kingdom ­^°ê um 1 US Minor Outlying Islands ¬ü°ê¥~®q us 4 United States ¬ü°ê uy 3 Uruguay ¯Q©Ô¦c uz 1 Uzbekistan ¯Q¯÷§O§J´µ©Z va 1 Vatican City State ±ë¸¦©£ vc 1 Saint Vincent & Grenadines ¸t¤å´Ë¤Î®æ·ç¨º¤B ve 3 Venezuela ©e¤º·ç©Ô vg 1 Virgin Islands (British) ­^Äݺûº¸¨Ê¸s®q vi 1 Virgin Islands (USA) ¬üÄݺûº¸¨Ê¸s®q vn 1 Vietnam ¶V«n vu 1 Vanuatu ¥Ë¨º¹Ï¦@©M°ê wf 1 Wallis and Futuna Islands ¥Ë§Q´µ©MºÖ§ù¯Ç¸s®q ws 1 Western Samoa Âļ¯¨È ye 1 Yemen ¸­ªù yt 1 Mayotte ¼¯¨È¯S yu 3 Yugoslavia «n´µ©Ô¤Ò za 3 South Africa «n«D zm 1 Zambia ©|¤ñ¨È zr 1 Zaire ÂÄ¥ì zw 3 Zimbabwe ¨¯¤Ú«Â analog-ce-6.0.17/lang/ua.lng000066400000000000000000000314111406366436600155010ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## Hi mens I try to make translation file for ukrainian and I hope you can ## use it. In any case you may contact direct to me mb@serv.biph.kiev.ua ## or take the last version of this file at http://wek.kiev.ua/analog/ ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP Windows-1251 ## Abbreviations for the day and month names. Íåä³ëÿ Ïîíåä³ëîê ³âòîðîê Ñåðåäà ×åòâåð Ï'ÿòíèöÿ Ñóáîòà 01 02 03 04 05 06 07 08 09 10 11 12 ## Next some standard common words. ## Abbreviation for "week beginning" Ïî÷àòîê òèæíÿ ð³ê ## Quarter of a year êâàðòàë ì³ñÿöü äåíü äí³â ãîä. õâèëèíà õâèëèí(è) ñåêóíäà ñåêóíä(è) áàéò áàéòè ## ?bytes represents kbytes, Mbytes etc. ?áàéò çàïèò çàïèòè äàòà ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 äàòà ÷àñ ÷àñ ïåðøèé äåíü ïåðøà ãîäèíà îñòàíí³é çàïèò ÷àñ çàïèòó çàïèò ùîäî çàïèòè ùîäî õîñò õîñòè â³ðòóàëüíèé õîñò â³ðòóàëüí³ õîñòè äèðåêòîð³ÿ äèðåêòî𳿠ðåã³îí ðåã³îíè îðãàí³çàö³ÿ îðãàí³çàö³¿ òèï òèïè URL URLs øóêà÷ øóêà÷³ îïåðàö³éíà ñèñòåìà îïåðàö³éí³ ñèñòåìè ## (= operating system, operating systems) ðîçìið ïîøóê ùîäî ïîøóê ùîäî ñàéò ñàéòè êîðèñòóâà÷ êîðèñòóâà÷³ êîä ñòàòóñó êîäè ñòàòóñó Ñòàòèñòèêà web-ñåðâåðà ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. ê³ëî ìåãà ã³ãà òåðà ïåòà åêñà çåòà éîòà ## Shorter versions of the same prefixes for column headings Ê Ì Ã Ò Ï Å Ç É ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1á- 10á 11á- 100á 101á- 1Êá 1Êá- 10Êá 10Êá-100Ìá 100Êá- 1Ìá 1Ìá- 10Ìá 10Ìá-100Ìá 100Ìá- 1Ãá > 1Ãá ## Now the names of reports Çàãàëüí³ ðåçóëüòàòè ## The time reports, plus "busiest" strings (at the bottom of each report) Ùîð³÷íà гê ç íàéá³ëüøîþ ê³ëüê³ñòþ çàïèò³â Ùîêâàðòàëüíà Êâàðòàë ç íàéá³ëüøîþ ê³ëüê³ñòþ çàïèò³â Ùîì³ñÿ÷íà ̳ñÿöü ç íàéá³ëüøîþ ê³ëüê³ñòþ çàïèò³â Ùîòèæíåâà Íàéá³ëüøå çàïèò³â ó òèæäåíü, ùî ïî÷àâñÿ Äí³ òèæíÿ Ùîäåííà Íàéá³ëüøå çàïèò³â Ùîãîäèííà Ãîäèíè äîáè Äí³ òèæíÿ ïî ãîäèíàõ Ãîäèíà ç íàéá³ëüøîþ ê³ëüê³ñòþ çàïèò³â Ùî÷âåðòüãîäèííà Çà êîæí³ ï'ÿòíàäöÿòü õâèëèí ×âåðòü ãîäèíè ç íàéá³ëüøîþ ê³ëüê³ñòþ çàïèò³â Ùîï'ÿòèõâèëèííà Çà êîæí³ ï'ÿòü õâèëèí Ï'ÿòü õâèëèí ç íàéá³ëüøîþ ê³ëüê³ñòþ çàïèò³â ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Õîñòè õîñò õîñò³â õîñòè Ïåðåíàïðàâëåííÿ õîñò³â õîñò õîñò³â õîñòè Ïîìèëêè ç õîñò³â õîñò õîñò³â õîñòè Ïàïêè ïàïêà ïàïîê ïàïêè Òèïè ôàéë³â òèï òèï³â òèïè Ôàéëè íàçâà ôàéë³â ôàéëè Ïåðåíàïðàâëåííÿ àäðåñà àäðåñ àäðåñè Ïîìèëêè çàïèò ùîäî ïîìèëîê ïîìèëêè Ïîñèëàííÿ (ñòîð³íêè) ñòîð³íêà ñòîð³íîê ñòîð³íêè Ïîñèëàííÿ (ñàéòè) ñàéò ñàéò³â ñàéòè Ïîñèëàííÿ (çàãàëüíèé) URL URLs n Ñàéòè, ùî ç íèõ îòðèìóâàëè ïîìèëêè ñàéò ñàéò³â ñàéòè Øóêàëè ñòðî÷êà ñòðî÷îê ñòðî÷êè Ñëîâà ïîøóêó ñë³â ñë³â n Øóêàëè íà ñàéò³ ôðàçà ôðàç ôðàçè Øóêàëè ñëîâà íà ñàéò³ ñëîâî ñë³â ñëîâà ³ðòóàëüí³ õîñòè õîñò õîñò³â õîñòè Ïåðåíàïðàâëåí³ â³ðòóàëüí³ õîñòè õîñò õîñò³â õîñòè Ïîìèëêîâ³ â³ðòóàëüí³ õîñòè õîñò õîñò³â õîñòè Êîðèñòóâà÷³ êîðèñòóâà÷ êîðèñòóâà÷³â êîðèñòóâà÷³ Ïåðåíàïðàâëåí³ êîðèñòóâà÷³ êîðèñòóâà÷ êîðèñòóâà÷³â êîðèñòóâà÷³ Ïîìèëêè êîðèñòóâà÷³â êîðèñòóâà÷ êîðèñòóâà÷³â êîðèñòóâà÷³ Øóêà÷³ íàçâà øóêà÷³â øóêà÷³ Øóêà÷³ (çàãàëüíèé) íàçâà øóêà÷³â øóêà÷³ Îïåðàö³éí³ ñèñòåìè íàçâà îïåðàö³éíèõ ñèñòåì îïåðàö³éí³ ñèñòåìè Ðåã³îíè ðåã³îí ðåã³îí³â ðåã³îíè Îðãàí³çàö³¿ îðãàíèçàö³ÿ îðãàí³çàö³é îðãàí³çàö³¿ Êîäè âèêîíàííÿ êîä êîä³â êîäè ×àñ âèêîíàííÿ Ðîçì³ðè ôàéë³â ## Used at the bottom of the report Öþ ñòîð³íêó ñòâîðåíî ïðîãðàìîþ ×àñ âèêîíàííÿ Ìåíüøå í³æ 1 ## Used in the time reports Çíà÷îê äîð³âíþº çàïèòó àáî º ÷àñòêîþ ñòîð³íêè ñòîð³íîê ## Used at the bottom of each non-time report: need m, f & n genders * * ³íø³ ## Used on the pie charts: again need m, f & n genders * * ³íø³ ## Used at the top of the report Îñòàííº îíîâëåííÿ î Ïðîàíàë³çîâàíî çàïèòè ç ïî ## Used in the General Summary Ñëóøí³ çàïèòè Ñåðåäíÿ ê³ëüê³ñòü çàïèò³â íà äåíü Ñëóøí³ çàïèòè ñòîð³íîê Ñåðåäíÿ ê³ëüê³ñòü çàïèò³â ñòîð³íîê íà äåíü Ñòðî÷êè áåç êîäó âèêîííàííÿ Ïîìèëêîâ³ çàïèòè Ïåðåíàïðàâëåí³ çàïèòè Çàïèòè áåç äîäàòêîâîãî êîäó âèêîííàííÿ Çàïèòàíî ð³çíèõ ñòîð³íîê Îáñëóãîâàíî õîñò³â Ïîøêîäæåíèõ ñòðî÷îê Íåçàðàõîâàíî çàïèñ³â Ïåðåäàíî äàííèõ Ñåðåäíÿ ê³ëüê³ñòü ïåðåäàíèõ äàííèõ íà äåíü Ó ñêîáêàõ ðåçóëüòàòè çà 7 äí³â, ùî ïåðåäóþòü îñòàíí³ 7 äí³â Ïîäèâèòèñü Ïî÷àòîê ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) çàïèòè çàï çà 7 äí³â %(çàï) %(çàï çà 7 äí³â) ñòîð³íêè ñòîð çà 7 äí³â %(ñòîð) %(ñòîð çà 7 äí³â) áàéòè ?Êáàéòè áàéòè çà 7 äí³â ?Êáàéòè çà 7 äí³â %(áàéò) %(áàéòè çà 7 äí³â) ¹ ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ïåðø³ %s * * Ïåðø³ %d %s * * Ñïèñîê %s ## "by" in the phrase "listing the top 3 files BY number of requests" çà ## All requests WITH AT LEAST 10 requests ùî ìàþòü íå ìåíüø í³æ ## Different ways of doing floors çàïèò çà îñòàíí³ 7 äí³â çàïèòè çà îñòàíí³ 7 äí³â çàïèò ñòîð³íêè çà îñòàíí³ 7 äí³â çàïèòè ñòîð³íîê çà îñòàíí³ 7 äí³â çàïèò çàïèòè ïåðåíàïðàâëåíèé çàïèò çà îñòàíí³ 7 äí³â ïåðåíàïðàâëåí³ çàïèòè çà îñòàíí³ 7 äí³â ïîìèëêîâèé çàïèò ïîìèëêîâ³ çàïèòè ïîìèëêîâèé çàïèò çà îñòàíí³ 7 äí³â ïîìèëêîâ³ çàïèòè çà îñòàíí³ 7 äí³â % â³ä çàãàëüíîãî % â³ä çàãàëüíîãî çà îñòàíí³ 7 äí³â % â³ä íàéá³ëüøîãî ê³ëüêîñò³ % â³ä íàéá³ëüøîãî ê³ëüêîñò³ çà îñòàíí³ 7 äí³â ïåðåäàíî áàéò³â çà ÿêèìè ïåðåäàíî áàéò³â íå ìåíüø í³æ ## ?bytes represents kbytes, Mbytes etc. ïåðåäàíî ?Êáàéò³â byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days ùî ç íèõ ðîáèëè çàïèòè â³ä çàïèòè ç ïîìèëêîâ³ çàïèòè ç with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * â³äñîðòîâàíî çà ## Used at the top of each report Äàíí³ çà ## Used in pie charts Ïîçíà÷åíî çà ## different ways of sorting òðàô³êîì òðàô³êîì çà îñòàíí³ 7 äí³â % â³ä ê³ëüêîñò³ çàïèò³â % â³ä ê³ëüêîñò³ çàïèò³â çà îñòàíí³ 7 äí³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ çàïèò³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ çàïèò³â çà îñòàíí³ 7 äí³â ê³ëüê³ñòþ çàïèò³â ê³ëüê³ñòþ çàïèò³â çà îñòàíí³ 7 äí³â % â³ä ê³ëüêîñò³ çàïèò³â ñòîð³íîê % â³ä ê³ëüêîñò³ çàïèò³â ñòîð³íîê çà îñòàíí³ 7 äí³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ çàïèò³â ñòîð³íîê % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ çàïèò³â ñòîð³íîê çà îñòàíí³ 7 äí³â ê³ëüê³ñòþ çàïèò³â ñòîð³íîê ê³ëüê³ñòþ çàïèò³â ñòîð³íîê çà îñòàíí³ 7 äí³â % â³ä ê³ëüêîñò³ ïåðåíàïðàâëåíèõ çàïèò³â % â³ä ê³ëüêîñò³ ïåðåíàïðàâëåíèõ çàïèò³â çà îñòàíí³ 7 äí³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ ïåðåíàïðàâëåíèõ çàïèò³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ ïåðåíàïðàâëåíèõ çàïèò³â çà îñòàíí³ 7 äí³â ê³ëüê³ñòþ ïåðåíàïðàâëåíèõ çàïèò³â ê³ëüê³ñòþ ïåðåíàïðàâëåíèõ çàïèò³â çà îñòàíí³ 7 äí³â % â³ä ê³ëüêîñò³ ïîìèëêîâèõ çàïèò³â % â³ä ê³ëüêîñò³ ïîìèëêîâèõ çàïèò³â çà îñòàíí³ 7 äí³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ ïîìèëêîâèõ çàïèò³â % â³ä íàéá³ëüøî¿ ê³ëüêîñò³ ïîìèëêîâèõ çàïèò³â çà îñòàíí³ 7 äí³â ê³ëüê³ñòþ ïîìèëêîâèõ çàïèò³â ê³ëüê³ñòþ ïîìèëêîâèõ çàïèò³â çà îñòàíí³ 7 äí³â ÷àñîì îñòàíüîãî çàïèòó ÷àñîì îñòàíüîãî ïåðåíàïðàâëåíîãî çàïèòó ÷àñîì îñòàíüîãî ïîìèëêîâîãî çàïèòó ÷àñ ïåðøîãî çàïèòó ÷àñ ïåðøîãî ïåðåíàïðàâëåíîãî çàïèòó ÷àñ ïåðøîãî ïîìèëêîâîãî çàïèòó ## 3 other ways of sorting in m, f, & n * * çà àëôàâ³òîì * * çà íîìåðîì * * íå â³äñîðòîâàíî ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. ## am and pm in the sense of morning and afternoon. ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D.%m.%Y %H:%n ## "Program started at" and "Analysed requests from" %H:%n %D.%m.%Y ## In Daily Report %d.%m.%Y ## In Daily Summary %w ## In Hourly Report %d.%m.%Y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m.%Y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m.%Y ## In Monthly Report %m - %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m.%y ## The date & time (D) column in non-time reports %d.%m.%y %H:%n ## In non-time reports: "including all files with requests since [date]" %H:%n ãîäèí %d.%m.%y ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/uadesc.txt000066400000000000000000000105371406366436600164050ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî ðîêàõ. # Quarterly Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî êâàðòàëàõ. # Monthly Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî ì³ñÿöÿõ. # Weekly Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî òèæíÿõ. # Daily Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî äîáàõ. # Hourly Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî ãîäèíàõ. # Quarter-Hour Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî êîæí³é ÷åòâåðòèí³ ãîäèíè. # Five-Minute Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî êîæíèõ ï'ÿòè õâèëèíàõ # Daily Summary Ïðåäñòàâëåíî ñåðåäí³ çíà÷åííÿ äëÿ êîæíîãî äíÿ òèæíÿ â³äíîñíî âñüîãî ïåð³îäó. # Hourly Summary Ïðåäñòàâëåíî ñåðåäí³ çíà÷åííÿ äëÿ êîæíî¿ ãîäèíè äîáè â³äíîñíî âñüîãî ïåð³îäó. # Hour of the Week Summary Ïðåäñòàâëåíî ñåðåäí³ çíà÷åííÿ äëÿ êîæíî¿ ãîäèíè òèæíÿ â³äíîñíî âñüîãî ïåð³îäó. # Quarter-Hour Summary Ïðåäñòàâëåíî ñåðåäí³ çíà÷åííÿ äëÿ êîæíèõ ï'ÿòíàäöÿòè õâèëèí äîáè â³äíîñíî âñüîãî ïåð³îäó. # Five-Minute Summary Ïðåäñòàâëåíî ñåðåäí³ çíà÷åííÿ äëÿ êîæíèõ ï'ÿòè õâèëèí äîáè â³äíîñíî âñüîãî ïåð³îäó. # General Summary Ïðåäñòàâëåíî çàãàëüí³ çíà÷åííÿ. # Request Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ôàéëàõ, ùî ¿õ çàïèòóâàëè. # Redirection Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ôàéëàõ, ùî ç íèõ áóëî ïåðåíàïðàâëåíî çàïèò (çàçâè÷àé öå çàïèòè äèðåêòî𳿠áåç êîñî¿ íà ê³íö³ òà ïåðåíàïðàâëåííÿ ç CGI ñêðèïò³â). # Failure Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ôàéëàõ, ùî íà ¿õ çàïèò âèíèêàëà ïîìèëêà (íàïðèêëàä: ôàéëó íå ³ñíóâàëî). # File Type Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî òèïàõ ôàéë³â (çà ðîçøèðåííÿì). # Directory Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ äèðåêòîð³ÿõ, ùî ç íèõ çàïèòóâàëè ôàéëè. (Äèðåêòî𳿠ðåïðåçåíòóþòü òàêîæ ñâî¿ ï³ääèðåêòîð³¿) # Host Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ õîñòàõ (êîìï'þòåðàõ), ùî ç íèõ ðîáèëè çàïèò. # Host Redirection Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ õîñòàõ (êîìï'þòåðàõ), ùî çàïèò ç íèõ áóëî ïåðåíàïðàâëåíî äî ³íøî¿ ñòîð³íêè.. # Host Failure Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ õîñòàõ (êîìï'þòåðàõ), ùî ç íèõ ðîáèëè ïîìèëêîâ³ çàïèòè. # Domain Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ äîìåíàõ, ùî ç íèõ ðîáèëè çàïèò. # Referrer Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ñòîð³íêàõ, ùî íà íèõ º ïîñèëàííÿ (òåêñò àáî çîáðàæåííÿ) íà ñàéò. # Referring Site Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ñàéòàõ, ùî íà íèõ º ïîñèëàííÿ (òåêñò àáî çîáðàæåííÿ) íà ñàéò. # Redirected Referrer Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ñòîð³íêàõ, ùî íà íèõ º ïîñèëàííÿ (òåêñò àáî çîáðàæåííÿ) íà ñàéò. Òà çàïèò ç íèõ áóëî ïåðåíàïðàâëåíî. # Failed Referrer Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ñòîð³íêàõ, ùî íà íèõ º ïîñèëàííÿ (òåêñò àáî çîáðàæåííÿ) íà ñàéò. Òà çàïèò ç íèõ áóâ ïîìèëêîâèì. # Browser Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî âñ³õ ïîøóêà÷àõ, âèêîðèñòîâóþ÷³ ÿê³, ðîáèëè çàïèòè. # Virtual Host Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî â³ðòóàëüíèõ õîñòàõ. # Virtual Host Redirection Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî â³ðòóàëüíèõ õîñòàõ, ùî ç íèõ ïåðåíàïðàâëÿëè çàïèòè. # Virtual Host Failure Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî â³ðòóàëüíèõ õîñòàõ, ùî íà íèõ îòðèìóâàëè ïîìèëêè. # User Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî êîðèñòóâà÷àõ (àóòåíòèô³êîâàíèõ çà çàïèòîì àáî çà êóê³ (cookies)). # User Redirection Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî êîðèñòóâà÷àõ, ùî ¿õ áóëî ïåðåíàïðàâëåíî äî ³íøîãî ôàéëó. # User Failure Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî êîðèñòóâà÷àõ, ùî ìàëè ïîìèëêîâ³ çàïèòè. # Organisation Report Ïðåäñòàâëåíî ñòàòèñòèêó ïî îðãàí³çàö³ÿõ, ùî ç íèõ ðîáèëè çàïèòè. # Search Query Report Ïðåäñòàâëåíî ñòàòèñòèêó çà ôðàçàìè ïîøóêó, çà ÿêèìè ïðèõîäèëè íà ñàéò ç ïîøóêîâèõ ñåðâåð³â. # Search Word Report Ïðåäñòàâëåíî ñòàòèñòèêó çà ðîçøóêóâàíèìè ñëîâàìè, çà ÿêèìè ïðèõîäèëè íà ñàéò ç ïîøóêîâèõ ñåðâåð³â. # Internal Search Query Report Ïðåäñòàâëåíî ñòàòèñòèêó çà ôðàçàìè ïîøóêó, ÿê³ øóêàëè çà äîïîìîãîþ âíóòð³øí³õ ñêðèïò³â àáî ìàøèí. # Internal Search Word Report Ïðåäñòàâëåíî ñòàòèñòèêó çà ðîçøóêóâàíèìè ñëîâàìè, ÿê³ øóêàëè çà äîïîìîãîþ âíóòð³øí³õ ñêðèïò³â àáî ìàøèí. # Browser Summary Ïðåäñòàâëåíî ñòàòèñòèêó çà ðîçðîáíèêàìè ïîøóêà÷³â. # Operating System Report Ïðåäñòàâëåíî ñòàòèñòèêó çà îïåðàö³éíèìè ñèñòåìàìè êîðèñòóâà÷³â. # File Size Report Ïðåäñòàâëåíî ñòàòèñòèêó çà ðîçì³ðàìè ôàéë³â. # Status Code Report Ïðåäñòàâëåíî ñòàòèñòèêó çà HTTP êîäàìè âèêîíàííÿ çàïèòó. # Processing Time Report Ïðåäñòàâëåíî ñòàòèñòèêó çà ÷àñîì, ùî íåîáõ³äíèé äëÿ âèêîíàííÿ çàïèòó. analog-ce-6.0.17/lang/uk.lng000066400000000000000000000324441406366436600155220ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Sun Mon Tue Wed Thu Fri Sat Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. year ## Quarter of a year quarter month day days hour minute minutes second seconds byte bytes ## ?bytes represents kilobytes, megabytes etc. ?bytes request requests date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date time time first date first time last date last time file files host hosts virtual host virtual hosts directory directories domain domains organisation organisations extension extensions URL URLs browser browsers OS OS's ## (= operating system, operating systems) size search term search terms site sites user users status code status codes Web Server Statistics ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports General Summary ## The time reports, plus "busiest" strings (at the bottom of each report) Yearly Report Busiest year: Quarterly Report Busiest quarter: Monthly Report Busiest month: Weekly Report Busiest week: week beginning Daily Summary Daily Report Busiest day: Hourly Report Hourly Summary Hour of the Week Summary Busiest hour: Quarter-Hour Report Quarter-Hour Summary Busiest quarter of an hour: Five-Minute Report Five-Minute Summary Busiest five minutes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Report host hosts n Host Redirection Report host hosts n Host Failure Report host hosts n Directory Report directory directories n File Type Report extension extensions n Request Report file files n Redirection Report file files n Failure Report file files n Referrer Report referring URL referring URLs n Referring Site Report referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Search Query Report query queries n Search Word Report query word query words n Internal Search Query Report query queries n Internal Search Word Report query word query words n Virtual Host Report virtual host virtual hosts n Virtual Host Redirection Report virtual host virtual hosts n Virtual Host Failure Report virtual host virtual hosts n User Report user users n User Redirection Report user users n User Failure Report user users n Browser Summary browser browsers n Browser Report browser browsers n Operating System Report operating system operating systems n Domain Report domain domains n Organisation Report organisation organisations n Status Code Report status code status codes n Processing Time Report File Size Report ## Used at the bottom of the report This analysis was produced by Running time Less than 1 ## Used in the time reports Each unit represents or part thereof request for a page requests for pages ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report Program started at Analysed requests from to ## Used in the General Summary Successful requests Average successful requests per day Successful requests for pages Average successful requests for pages per day Logfile lines without status code Failed requests Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data transferred Average data transferred per day Figures in parentheses refer to the 7-day period ending last 7 days Go To Top ## Some special phrases for particular reports. ## Note to self: these phrases also occur in anlghea3.h and Pnextname(). [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) reqs 7-day reqs %reqs %7-day reqs pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors request in the last 7 days requests in the last 7 days request for a page in the last 7 days requests for pages in the last 7 days redirected request redirected requests redirected request in the last 7 days redirected requests in the last 7 days failed request failed requests failed request in the last 7 days failed requests in the last 7 days % of the traffic % of the traffic in the last 7 days % of the maximum amount of traffic % of the maximum amount of traffic in the last 7 days byte of traffic bytes of traffic ## ?bytes represents kilobytes, megabytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report This report contains data from ## Used in pie charts The wedges are plotted by ## different ways of sorting the amount of traffic the amount of traffic in the last 7 days % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days the number of requests the number of requests in the last 7 days % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days the number of requests for pages the number of requests for pages in the last 7 days % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests in the last 7 days the number of redirected requests the number of redirected requests in the last 7 days % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days the number of failed requests the number of failed requests in the last 7 days the time of the last request the time of the last redirected request the time of the last failed request the time of the first request the time of the first redirected request the time of the first failed request ## 3 other ways of sorting in m, f, & n * * sorted alphabetically * * sorted numerically * * unsorted ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "listing files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/uk12.lng000066400000000000000000000323601406366436600156620ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Sun Mon Tue Wed Thu Fri Sat Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. year ## Quarter of a year quarter month day days hour minute minutes second seconds byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes request requests date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date time time first date first time last date last time file files host hosts virtual host virtual hosts directory directories domain domains organisation organisations extension extensions URL URLs browser browsers OS OS's ## (= operating system, operating systems) size search term search terms site sites user users status code status codes Web Server Statistics ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports General Summary ## The time reports, plus "busiest" strings (at the bottom of each report) Yearly Report Busiest year: Quarterly Report Busiest quarter: Monthly Report Busiest month: Weekly Report Busiest week: week beginning Daily Summary Daily Report Busiest day: Hourly Report Hourly Summary Hour of the Week Summary Busiest hour: Quarter-Hour Report Quarter-Hour Summary Busiest quarter of an hour: Five-Minute Report Five-Minute Summary Busiest five minutes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Report host hosts n Host Redirection Report host hosts n Host Failure Report host hosts n Directory Report directory directories n File Type Report extension extensions n Request Report file files n Redirection Report file files n Failure Report file files n Referrer Report referring URL referring URLs n Referring Site Report referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Search Query Report query queries n Search Word Report query word query words n Internal Search Query Report query queries n Internal Search Word Report query word query words n Virtual Host Report virtual host virtual hosts n Virtual Host Redirection Report virtual host virtual hosts n Virtual Host Failure Report virtual host virtual hosts n User Report user users n User Redirection Report user users n User Failure Report user users n Browser Summary browser browsers n Browser Report browser browsers n Operating System Report operating system operating systems n Domain Report domain domains n Organisation Report organisation organisations n Status Code Report status code status codes n Processing Time Report File Size Report ## Used at the bottom of the report This analysis was produced by Running time Less than 1 ## Used in the time reports Each unit represents or part thereof request for a page requests for pages ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report Program started on Analysed requests from to ## Used in the General Summary Successful requests Average successful requests per day Successful requests for pages Average successful requests for pages per day Logfile lines without status code Failed requests Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data transferred Average data transferred per day Figures in parentheses refer to the 7-day period ending last 7 days Go To Top ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) reqs 7-day reqs %reqs %7-day reqs pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors request in the last 7 days requests in the last 7 days request for a page in the last 7 days requests for pages in the last 7 days redirected request redirected requests redirected request in the last 7 days redirected requests in the last 7 days failed request failed requests failed request in the last 7 days failed requests in the last 7 days % of the traffic % of the traffic in the last 7 days % of the maximum amount of traffic % of the maximum amount of traffic in the last 7 days byte of traffic bytes of traffic ## ?bytes represents kbytes, Mbytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report This report contains data from ## Used in pie charts The wedges are plotted by ## different ways of sorting the amount of traffic the amount of traffic in the last 7 days % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days the number of requests the number of requests in the last 7 days % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days the number of requests for pages the number of requests for pages in the last 7 days % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests in the last 7 days the number of redirected requests the number of redirected requests in the last 7 days % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days the number of failed requests the number of failed requests in the last 7 days the time of the last request the time of the last redirected request the time of the last failed request the time of the first request the time of the first redirected request the time of the first failed request ## 3 other ways of sorting in m, f, & n * * sorted alphabetically * * sorted numerically * * unsorted ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y at %j:%n%a ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y at %j:%n%a ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %j:%n%a%x%k:%o%b ## In Hourly Summary %h ## In Hour of the Week Summary %w %j:%n%a%x%k:%o%b ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %j:%n%a%x%k:%o%b ## In Quarter-Hour and Five-Minute Summaries %j:%n%a%x%k:%o%b ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %j:%n%a ## In non-time reports: "listing files with requests since [date]" %d/%m/%y at %j:%n%a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/uka.lng000066400000000000000000000324421406366436600156610ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Sun Mon Tue Wed Thu Fri Sat Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. year ## Quarter of a year quarter month day days hour minute minutes second seconds byte bytes ## ?bytes represents kilobytes, megabytes etc. ?bytes request requests date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date time time first date first time last date last time file files host hosts virtual host virtual hosts directory directories domain domains organisation organisations extension extensions URL URLs browser browsers OS OS's ## (= operating system, operating systems) size search term search terms site sites user users status code status codes Web Server Statistics ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports General Summary ## The time reports, plus "busiest" strings (at the bottom of each report) Yearly Report Busiest year: Quarterly Report Busiest quarter: Monthly Report Busiest month: Weekly Report Busiest week: week beginning Daily Summary Daily Report Busiest day: Hourly Report Hourly Summary Hour of the Week Summary Busiest hour: Quarter-Hour Report Quarter-Hour Summary Busiest quarter of an hour: Five-Minute Report Five-Minute Summary Busiest five minutes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Report host hosts n Host Redirection Report host hosts n Host Failure Report host hosts n Directory Report directory directories n File Type Report extension extensions n Request Report file files n Redirection Report file files n Failure Report file files n Referrer Report referring URL referring URLs n Referring Site Report referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Search Query Report query queries n Search Word Report query word query words n Internal Search Query Report query queries n Internal Search Word Report query word query words n Virtual Host Report virtual host virtual hosts n Virtual Host Redirection Report virtual host virtual hosts n Virtual Host Failure Report virtual host virtual hosts n User Report user users n User Redirection Report user users n User Failure Report user users n Browser Summary browser browsers n Browser Report browser browsers n Operating System Report operating system operating systems n Domain Report domain domains n Organisation Report organisation organisations n Status Code Report status code status codes n Processing Time Report File Size Report ## Used at the bottom of the report This analysis was produced by Running time Less than 1 ## Used in the time reports Each unit represents or part thereof request for a page requests for pages ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report Program started at Analysed requests from to ## Used in the General Summary Successful requests Average successful requests per day Successful requests for pages Average successful requests for pages per day Logfile lines without status code Failed requests Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data transferred Average data transferred per day Figures in parentheses refer to the 7-day period ending last 7 days Go To Top ## Some special phrases for particular reports. ## Note to self: these phrases also occur in anlghea3.h and Pnextname(). [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) reqs 7-day reqs %reqs %7-day reqs pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes no. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors request in the last 7 days requests in the last 7 days request for a page in the last 7 days requests for pages in the last 7 days redirected request redirected requests redirected request in the last 7 days redirected requests in the last 7 days failed request failed requests failed request in the last 7 days failed requests in the last 7 days % of the traffic % of the traffic in the last 7 days % of the maximum amount of traffic % of the maximum amount of traffic in the last 7 days byte of traffic bytes of traffic ## ?bytes represents kilobytes, megabytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report This report contains data from ## Used in pie charts The wedges are plotted by ## different ways of sorting the amount of traffic the amount of traffic in the last 7 days % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days the number of requests the number of requests in the last 7 days % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days the number of requests for pages the number of requests for pages in the last 7 days % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests in the last 7 days the number of redirected requests the number of redirected requests in the last 7 days % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days the number of failed requests the number of failed requests in the last 7 days the time of the last request the time of the last redirected request the time of the last failed request the time of the first request the time of the first redirected request the time of the first failed request ## 3 other ways of sorting in m, f, & n * * sorted alphabetically * * sorted numerically * * unsorted ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. am pm ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D-%m-%Y %H:%n ## "Program started at" and "Analysed requests from" %w-%D-%m-%Y %H:%n ## In Daily Report %d/%m/%y ## In Daily Summary %w ## In Hourly Report %d/%m/%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d/%m/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d/%m/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d/%m/%y ## The date & time (D) column in non-time reports %d/%m/%y %H:%n ## In non-time reports: "listing files with requests since [date]" %d/%m/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/ukdesc.txt000066400000000000000000000103241406366436600164110ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report This report lists the activity in each year. # Quarterly Report This report lists the activity in each quarter. # Monthly Report This report lists the activity in each month. # Weekly Report This report lists the activity in each week. # Daily Report This report lists the activity in each day. # Hourly Report This report lists the activity in each hour. # Quarter-Hour Report This report lists the activity in each quarter-hour period. # Five-Minute Report This report lists the activity in each five-minute period. # Daily Summary This report lists the total activity for each day of the week, summed over all the weeks in the report. # Hourly Summary This report lists the total activity for each hour of the day, summed over all the days in the report. # Hour of the Week Summary This report lists the total activity for each hour of the week, summed over all the weeks in the report. # Quarter-Hour Summary This report lists the total activity for each quarter-hour period of the day, summed over all the days in the report. # Five-Minute Summary This report lists the total activity for each five-minute period of the day, summed over all the days in the report. # General Summary This report contains overall statistics. # Request Report This report lists the files on the site. # Redirection Report This report lists the files that caused requests to be redirected to another file. (Usually directories with the final slash missing, or CGI scripts that forced redirections.) # Failure Report This report lists the files that caused failures, for example files not found. # File Type Report This report lists the extensions of files. # Directory Report This report lists the directories from which files were requested. (The figures for each directory include all of its subdirectories.) # Host Report This report lists the computers which requested files. # Host Redirection Report This report lists the computers which were redirected to another file. # Host Failure Report This report lists the computers which encountered failed requests. # Domain Report This report lists the countries of the computers which requested files. # Referrer Report This report lists the referrers (where people followed links from, or pages which included this site's images). # Referring Site Report This report lists which servers people followed links from. # Redirected Referrer Report This report lists the referrers that caused redirected requests. # Failed Referrer Report This report lists the referrers containing broken links to the site. # Browser Report This report lists the browsers used by visitors. # Virtual Host Report This report lists the activity on each of the virtual domains at the site. # Virtual Host Redirection Report This report lists the redirected requests to each of the virtual domains. # Virtual Host Failure Report This report lists the failed requests to each of the virtual domains. # User Report This report lists the users who requested files, if users have been authenticated or can be identified by cookies. # User Redirection Report This report lists the users who were redirected to another file. # User Failure Report This report lists the users who encountered failed requests. # Organisation Report This report lists the organisations of the computers which requested files. # Search Query Report This report lists which queries people used in search engines to find the site. # Search Word Report This report lists which words people used in search engines to find the site. # Internal Search Query Report This report lists which queries people used on scripts within the site. # Internal Search Word Report This report lists which words people used on scripts within the site. # Browser Summary This report lists the vendors of visitors' browsers. # Operating System Report This report lists the operating systems used by visitors. # File Size Report This report lists the sizes of files. # Status Code Report This report lists the HTTP status codes of all requests. # Processing Time Report This report lists the times taken to process successful requests. analog-ce-6.0.17/lang/ukdom.tab000066400000000000000000000122201406366436600161760ustar00rootroot00000000000000# Generic and Infrastructure domains aero 2 Air Transport Industry arpa 1 Arpanet biz 2 Businesses com 2 Commercial coop 2 Co-operatives edu 2 USA Higher Education gov 2 USA Government info 2 Informational int 2 International Treaty Organisations mil 2 USA Military museum 2 Museums name 3 Individuals net 2 Networks org 2 Non Profit Making Organisations pro 3 Professionals # Country code domains ac 1 Ascension Island ad 2 Andorra ae 3 United Arab Emirates af 1 Afghanistan ag 2 Antigua and Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Netherlands Antilles ao 1 Angola aq 1 Antarctica ar 3 Argentina as 1 American Samoa at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijan ba 3 Bosnia-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgium bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazil bs 1 Bahamas bt 1 Bhutan bv 1 Bouvet Island bw 1 Botswana by 1 Belarus bz 1 Belize ca 3 Canada cc 1 Cocos (Keeling) Islands cd 1 Democratic Republic of the Congo cf 1 Central African Republic cg 1 Congo ch 2 Switzerland ci 1 Ivory Coast ck 1 Cook Islands cl 2 Chile cm 1 Cameroon cn 3 China co 3 Colombia cr 3 Costa Rica cs 3 Serbia and Montenegro cu 2 Cuba cv 1 Cape Verde cx 2 Christmas Island cy 3 Cyprus cz 2 Czech Republic de 2 Germany dj 1 Djibouti dk 2 Denmark dm 2 Dominica do 3 Dominican Republic dz 1 Algeria ec 3 Ecuador ee 2 Estonia eg 3 Egypt eh 1 Western Sahara er 1 Eritrea es 2 Spain et 1 Ethiopia fi 2 Finland fj 3 Fiji fk 1 Falkland Islands fm 1 Micronesia fo 1 Faroe Islands fr 2 France fx 1 France (European Territory) ga 1 Gabon gb 1 United Kingdom gd 1 Grenada ge 1 Georgia gf 1 French Guiana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Greenland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Equatorial Guinea gr 2 Greece gs 1 South Georgia and South Sandwich Islands gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heard and McDonald Islands hn 2 Honduras hr 2 Croatia ht 1 Haiti hu 2 Hungary id 3 Indonesia ie 2 Ireland il 3 Israel im 1 Isle of Man in 3 India io 1 British Indian Ocean Territory iq 1 Iraq ir 1 Iran is 2 Iceland it 2 Italy je 1 Jersey jm 3 Jamaica jo 3 Jordan jp 3 Japan ke 3 Kenya kg 1 Kyrgyzstan kh 1 Cambodia ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts and Nevis kp 1 North Korea kr 3 South Korea kw 3 Kuwait ky 1 Cayman Islands kz 1 Kazakhstan la 1 Laos lb 3 Lebanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lithuania lu 2 Luxembourg lv 2 Latvia ly 1 Libya ma 1 Morocco mc 2 Monaco md 1 Moldova mg 1 Madagascar mh 1 Marshall Islands mk 3 Macedonia (Former Yugoslav Republic) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Northern Mariana Islands mq 1 Martinique mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldives mw 1 Malawi mx 3 Mexico my 3 Malaysia mz 1 Mozambique na 1 Namibia nc 1 New Caledonia ne 1 Niger nf 1 Norfolk Island ng 1 Nigeria ni 3 Nicaragua nl 2 Netherlands no 2 Norway np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 New Zealand om 1 Oman pa 3 Panama pe 3 Peru pf 1 French Polynesia pg 3 Papua New Guinea ph 3 Philippines pk 3 Pakistan pl 3 Poland pm 1 Saint Pierre and Miquelon pn 1 Pitcairn Island pr 1 Puerto Rico ps 3 Occupied Palestinian Territory pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Romania ru 2 Russia rw 1 Rwanda sa 3 Saudi Arabia sb 1 Solomon Islands sc 1 Seychelles sd 1 Sudan se 2 Sweden sg 3 Singapore sh 1 Saint Helena si 2 Slovenia sj 1 Svalbard and Jan Mayen Islands sk 2 Slovakia sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Saint Tome and Principe su 2 Former USSR sv 3 El Salvador sy 1 Syria sz 1 Swaziland tc 1 Turks and Caicos Islands td 1 Chad tf 1 French Southern Territories tg 1 Togo th 3 Thailand tj 1 Tajikistan tk 1 Tokelau tl 1 East Timor tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 East Timor tr 3 Turkey tt 3 Trinidad and Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraine ug 3 Uganda uk 3 United Kingdom um 1 USA Minor Outlying Islands us 4 United States uy 3 Uruguay uz 1 Uzbekistan va 1 Vatican City State vc 1 Saint Vincent and Grenadines ve 3 Venezuela vg 1 Virgin Islands (British) vi 1 Virgin Islands (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis and Futuna Islands ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Former Yugoslavia za 3 South Africa zm 1 Zambia zr 1 Democratic Republic of the Congo zw 3 Zimbabwe analog-ce-6.0.17/lang/us.lng000066400000000000000000000324001406366436600155220ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Sun Mon Tue Wed Thu Fri Sat Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. year ## Quarter of a year quarter month day days hour minute minutes second seconds byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes request requests date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date time time first date first time last date last time file files host hosts virtual host virtual hosts directory directories domain domains organization organizations extension extensions URL URLs browser browsers OS OS's ## (= operating system, operating systems) size search term search terms site sites user users status code status codes Web Server Statistics ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports General Summary ## The time reports, plus "busiest" strings (at the bottom of each report) Yearly Report Busiest year: Quarterly Report Busiest quarter: Monthly Report Busiest month: Weekly Report Busiest week: week beginning Daily Summary Daily Report Busiest day: Hourly Report Hourly Summary Hour of the Week Summary Busiest hour: Quarter-Hour Report Quarter-Hour Summary Busiest quarter of an hour: Five-Minute Report Five-Minute Summary Busiest five minutes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Report host hosts n Host Redirection Report host hosts n Host Failure Report host hosts n Directory Report directory directories n File Type Report extension extensions n Request Report file files n Redirection Report file files n Failure Report file files n Referrer Report referring URL referring URLs n Referring Site Report referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Search Query Report query queries n Search Word Report query word query words n Internal Search Query Report query queries n Internal Search Word Report query word query words n Virtual Host Report virtual host virtual hosts n Virtual Host Redirection Report virtual host virtual hosts n Virtual Host Failure Report virtual host virtual hosts n User Report user users n User Redirection Report user users n User Failure Report user users n Browser Summary browser browsers n Browser Report browser browsers n Operating System Report operating system operating systems n Domain Report domain domains n Organization Report organization organizations n Status Code Report status code status codes n Processing Time Report File Size Report ## Used at the bottom of the report This analysis was produced by Running time Less than 1 ## Used in the time reports Each unit represents or part thereof request for a page requests for pages ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report Program started on Analyzed requests from to ## Used in the General Summary Successful requests Average successful requests per day Successful requests for pages Average successful requests for pages per day Logfile lines without status code Failed requests Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data transferred Average data transferred per day Figures in parentheses refer to the 7-day period ending last 7 days Go To Top ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors request in the last 7 days requests in the last 7 days request for a page in the last 7 days requests for pages in the last 7 days redirected request redirected requests redirected request in the last 7 days redirected requests in the last 7 days failed request failed requests failed request in the last 7 days failed requests in the last 7 days % of the traffic % of the traffic in the last 7 days % of the maximum amount of traffic % of the maximum amount of traffic in the last 7 days byte of traffic bytes of traffic ## ?bytes represents kbytes, Mbytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report This report contains data from ## Used in pie charts The wedges are plotted by ## different ways of sorting the amount of traffic the amount of traffic in the last 7 days % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days the number of requests the number of requests in the last 7 days % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days the number of requests for pages the number of requests for pages in the last 7 days % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests in the last 7 days the number of redirected requests the number of redirected requests in the last 7 days % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days the number of failed requests the number of failed requests in the last 7 days the time of the last request the time of the last redirected request the time of the last failed request the time of the first request the time of the first redirected request the time of the first failed request ## 3 other ways of sorting in m, f, & n * * sorted alphabetically * * sorted numerically * * unsorted ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. AM PM ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y at %j:%n %a ## "Program started at" and "Analysed requests from" %w, %m %D %Y at %j:%n %a ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %j:%n %a%x%k:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n %a%x%k:%o %b ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %m/%d/%y ## The date & time (D) column in non-time reports %m/%d/%y %j:%n %a ## In non-time reports: "listing files with requests since [date]" %m/%d/%y at %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/us24.lng000066400000000000000000000323201406366436600156710ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP ISO-8859-1 ## Abbreviations for the day and month names. Sun Mon Tue Wed Thu Fri Sat Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. year ## Quarter of a year quarter month day days hour minute minutes second seconds byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes request requests date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date time time first date first time last date last time file files host hosts virtual host virtual hosts directory directories domain domains organization organizations extension extensions URL URLs browser browsers OS OS's ## (= operating system, operating systems) size search term search terms site sites user users status code status codes Web Server Statistics ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports General Summary ## The time reports, plus "busiest" strings (at the bottom of each report) Yearly Report Busiest year: Quarterly Report Busiest quarter: Monthly Report Busiest month: Weekly Report Busiest week: week beginning Daily Summary Daily Report Busiest day: Hourly Report Hourly Summary Hour of the Week Summary Busiest hour: Quarter-Hour Report Quarter-Hour Summary Busiest quarter of an hour: Five-Minute Report Five-Minute Summary Busiest five minutes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Report host hosts n Host Redirection Report host hosts n Host Failure Report host hosts n Directory Report directory directories n File Type Report extension extensions n Request Report file files n Redirection Report file files n Failure Report file files n Referrer Report referring URL referring URLs n Referring Site Report referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Search Query Report query queries n Search Word Report query word query words n Internal Search Query Report query queries n Internal Search Word Report query word query words n Virtual Host Report virtual host virtual hosts n Virtual Host Redirection Report virtual host virtual hosts n Virtual Host Failure Report virtual host virtual hosts n User Report user users n User Redirection Report user users n User Failure Report user users n Browser Summary browser browsers n Browser Report browser browsers n Operating System Report operating system operating systems n Domain Report domain domains n Organization Report organization organizations n Status Code Report status code status codes n Processing Time Report File Size Report ## Used at the bottom of the report This analysis was produced by Running time Less than 1 ## Used in the time reports Each unit represents or part thereof request for a page requests for pages ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report Program started at Analyzed requests from to ## Used in the General Summary Successful requests Average successful requests per day Successful requests for pages Average successful requests for pages per day Logfile lines without status code Failed requests Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data transferred Average data transferred per day Figures in parentheses refer to the 7-day period ending last 7 days Go To Top ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors request in the last 7 days requests in the last 7 days request for a page in the last 7 days requests for pages in the last 7 days redirected request redirected requests redirected request in the last 7 days redirected requests in the last 7 days failed request failed requests failed request in the last 7 days failed requests in the last 7 days % of the traffic % of the traffic in the last 7 days % of the maximum amount of traffic % of the maximum amount of traffic in the last 7 days byte of traffic bytes of traffic ## ?bytes represents kbytes, Mbytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report This report contains data from ## Used in pie charts The wedges are plotted by ## different ways of sorting the amount of traffic the amount of traffic in the last 7 days % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days the number of requests the number of requests in the last 7 days % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days the number of requests for pages the number of requests for pages in the last 7 days % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests in the last 7 days the number of redirected requests the number of redirected requests in the last 7 days % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days the number of failed requests the number of failed requests in the last 7 days the time of the last request the time of the last redirected request the time of the last failed request the time of the first request the time of the first redirected request the time of the first failed request ## 3 other ways of sorting in m, f, & n * * sorted alphabetically * * sorted numerically * * unsorted ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. AM PM ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y %H:%n ## "Program started at" and "Analysed requests from" %w, %m %D %Y %H:%n ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %m/%d/%y ## The date & time (D) column in non-time reports %m/%d/%y %H:%n ## In non-time reports: "listing files with requests since [date]" %m/%d/%y at %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/usa.lng000066400000000000000000000323761406366436600156770ustar00rootroot00000000000000## Language file for analog 6.0. May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## If your language doesn't seem to fit into this pattern, explain the problem ## to me, and I can adjust the source code if necessary. ## ## The character set of this language file. Prefix with a * to indicate a ## multibyte character set: e.g. *ISO-2022-JP US-ASCII ## Abbreviations for the day and month names. Sun Mon Tue Wed Thu Fri Sat Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ## Next some standard common words. ## Abbreviation for "week beginning" week beg. year ## Quarter of a year quarter month day days hour minute minutes second seconds byte bytes ## ?bytes represents kbytes, Mbytes etc. ?bytes request requests date ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 date time time first date first time last date last time file files host hosts virtual host virtual hosts directory directories domain domains organization organizations extension extensions URL URLs browser browsers OS OS's ## (= operating system, operating systems) size search term search terms site sites user users status code status codes Web Server Statistics ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports General Summary ## The time reports, plus "busiest" strings (at the bottom of each report) Yearly Report Busiest year: Quarterly Report Busiest quarter: Monthly Report Busiest month: Weekly Report Busiest week: week beginning Daily Summary Daily Report Busiest day: Hourly Report Hourly Summary Hour of the Week Summary Busiest hour: Quarter-Hour Report Quarter-Hour Summary Busiest quarter of an hour: Five-Minute Report Five-Minute Summary Busiest five minutes: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "listing ??? with at ## least 200 requests". (The words higher up are used for column headings and ## for the "not listed" lines at the bottom of the reports.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Host Report host hosts n Host Redirection Report host hosts n Host Failure Report host hosts n Directory Report directory directories n File Type Report extension extensions n Request Report file files n Redirection Report file files n Failure Report file files n Referrer Report referring URL referring URLs n Referring Site Report referring site referring sites n Redirected Referrer Report referring URL referring URLs n Failed Referrer Report referring URL referring URLs n Search Query Report query queries n Search Word Report query word query words n Internal Search Query Report query queries n Internal Search Word Report query word query words n Virtual Host Report virtual host virtual hosts n Virtual Host Redirection Report virtual host virtual hosts n Virtual Host Failure Report virtual host virtual hosts n User Report user users n User Redirection Report user users n User Failure Report user users n Browser Summary browser browsers n Browser Report browser browsers n Operating System Report operating system operating systems n Domain Report domain domains n Organization Report organization organizations n Status Code Report status code status codes n Processing Time Report File Size Report ## Used at the bottom of the report This analysis was produced by Running time Less than 1 ## Used in the time reports Each unit represents or part thereof request for a page requests for pages ## Used at the bottom of each non-time report: need m, f & n genders * * not listed ## Used on the pie charts: again need m, f & n genders * * Other ## Used at the top of the report Program started on Analyzed requests from to ## Used in the General Summary Successful requests Average successful requests per day Successful requests for pages Average successful requests for pages per day Logfile lines without status code Failed requests Redirected requests Requests with informational status code Distinct files requested Distinct hosts served Corrupt logfile lines Unwanted logfile entries Data transferred Average data transferred per day Figures in parentheses refer to the 7-day period ending last 7 days Go To Top ## Some special phrases for particular reports. [unresolved numerical addresses] [domain not given] [unknown domain] [root directory] [no directory] [no extension] [directories] Unknown Windows Other Unix Known robots OS unknown ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) #reqs 7-day reqs %reqs %7-day reqs #pages 7-day pages %pages %7-day pages bytes ?bytes 7-day bytes 7-day ?bytes %bytes %7-day bytes # ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Listing the top %s * * Listing the top %d %s * * Listing %s ## "by" in the phrase "listing the top 3 files BY number of requests" by ## All requests WITH AT LEAST 10 requests with at least ## Different ways of doing floors request in the last 7 days requests in the last 7 days request for a page in the last 7 days requests for pages in the last 7 days redirected request redirected requests redirected request in the last 7 days redirected requests in the last 7 days failed request failed requests failed request in the last 7 days failed requests in the last 7 days % of the traffic % of the traffic in the last 7 days % of the maximum amount of traffic % of the maximum amount of traffic in the last 7 days byte of traffic bytes of traffic ## ?bytes represents kbytes, Mbytes etc. ?bytes of traffic byte of traffic in the last 7 days bytes of traffic in the last 7 days ?bytes of traffic in the last 7 days with a request since with a redirected request since with a failed request since with first request since with first redirected request since with first failed request since ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sorted by ## Used at the top of each report This report contains data from ## Used in pie charts The wedges are plotted by ## different ways of sorting the amount of traffic the amount of traffic in the last 7 days % of the requests % of the requests in the last 7 days % of the maximum number of requests % of the maximum number of requests in the last 7 days the number of requests the number of requests in the last 7 days % of the requests for pages % of the requests for pages in the last 7 days % of the maximum number of requests for pages % of the maximum number of requests for pages in the last 7 days the number of requests for pages the number of requests for pages in the last 7 days % of the redirected requests % of the redirected requests in the last 7 days % of the maximum number of redirected requests % of the maximum number of redirected requests in the last 7 days the number of redirected requests the number of redirected requests in the last 7 days % of the failed requests % of the failed requests in the last 7 days % of the maximum number of failed requests % of the maximum number of failed requests in the last 7 days the number of failed requests the number of failed requests in the last 7 days the time of the last request the time of the last redirected request the time of the last failed request the time of the first request the time of the first redirected request the time of the first failed request ## 3 other ways of sorting in m, f, & n * * sorted alphabetically * * sorted numerically * * unsorted ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. AM PM ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %m %D %Y at %j:%n %a ## "Program started at" and "Analysed requests from" %w, %m %D %Y at %j:%n %a ## In Daily Report %m/%d/%y ## In Daily Summary %w ## In Hourly Report %m/%d/%y %j:%n %a%x%k:%o %b ## In Hourly Summary %h ## In Hour of the Week Summary %w %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Reports %m/%d/%y %j:%n %a%x%k:%o %b ## In Quarter-Hour and Five-Minute Summaries %j:%n %a%x%k:%o %b ## In Weekly Report %m/%d/%y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %m/%d/%y ## The date & time (D) column in non-time reports %m/%d/%y %j:%n %a ## In non-time reports: "listing files with requests since [date]" %m/%d/%y at %j:%n %a ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Continue with request 101 Switching protocols 1xx [Miscellaneous informational] 200 OK 201 Created 202 Accepted for future processing 203 Non-authoritative information 204 OK, but nothing to send 205 Reset document 206 Partial content 2xx [Miscellaneous successes] 300 Multiple documents available 301 Document moved permanently 302 Document found elsewhere 303 See other document 304 Not modified since last retrieval 305 Use proxy 306 Switch proxy 307 Document moved temporarily 3xx [Miscellaneous redirections] 400 Bad request 401 Authentication required 402 Payment required 403 Access forbidden 404 Document not found 405 Method not allowed 406 Document not acceptable to client 407 Proxy authentication required 408 Request timeout 409 Request conflicts with state of resource 410 Document gone permanently 411 Length required 412 Precondition failed 413 Request too long 414 Requested filename too long 415 Unsupported media type 416 Requested range not valid 417 Expectation failed 4xx [Miscellaneous client/user errors] 500 Internal server error 501 Request type not supported 502 Error at upstream server 503 Service temporarily unavailable 504 Gateway timeout 505 HTTP version not supported 506 Redirection failed 5xx [Miscellaneous server errors] xxx [Unknown] analog-ce-6.0.17/lang/usdesc.txt000066400000000000000000000103241406366436600164210ustar00rootroot00000000000000# Report descriptions file for analog 6.0. # # This file contains descriptions of each report. Lines starting with a # hash (#) are comments. Otherwise, each report must take EXACTLY ONE LINE. # Yearly Report This report lists the activity in each year. # Quarterly Report This report lists the activity in each quarter. # Monthly Report This report lists the activity in each month. # Weekly Report This report lists the activity in each week. # Daily Report This report lists the activity in each day. # Hourly Report This report lists the activity in each hour. # Quarter-Hour Report This report lists the activity in each quarter-hour period. # Five-Minute Report This report lists the activity in each five-minute period. # Daily Summary This report lists the total activity for each day of the week, summed over all the weeks in the report. # Hourly Summary This report lists the total activity for each hour of the day, summed over all the days in the report. # Hour of the Week Summary This report lists the total activity for each hour of the week, summed over all the weeks in the report. # Quarter-Hour Summary This report lists the total activity for each quarter-hour period of the day, summed over all the days in the report. # Five-Minute Summary This report lists the total activity for each five-minute period of the day, summed over all the days in the report. # General Summary This report contains overall statistics. # Request Report This report lists the files on the site. # Redirection Report This report lists the files that caused requests to be redirected to another file. (Usually directories with the final slash missing, or CGI scripts that forced redirections.) # Failure Report This report lists the files that caused failures, for example files not found. # File Type Report This report lists the extensions of files. # Directory Report This report lists the directories from which files were requested. (The figures for each directory include all of its subdirectories.) # Host Report This report lists the computers which requested files. # Host Redirection Report This report lists the computers which were redirected to another file. # Host Failure Report This report lists the computers which encountered failed requests. # Domain Report This report lists the countries of the computers which requested files. # Referrer Report This report lists the referrers (where people followed links from, or pages which included this site's images). # Referring Site Report This report lists which servers people followed links from. # Redirected Referrer Report This report lists the referrers that caused redirected requests. # Failed Referrer Report This report lists the referrers containing broken links to the site. # Browser Report This report lists the browsers used by visitors. # Virtual Host Report This report lists the activity on each of the virtual domains at the site. # Virtual Host Redirection Report This report lists the redirected requests to each of the virtual domains. # Virtual Host Failure Report This report lists the failed requests to each of the virtual domains. # User Report This report lists the users who requested files, if users have been authenticated or can be identified by cookies. # User Redirection Report This report lists the users who were redirected to another file. # User Failure Report This report lists the users who encountered failed requests. # Organisation Report This report lists the organizations of the computers which requested files. # Search Query Report This report lists which queries people used in search engines to find the site. # Search Word Report This report lists which words people used in search engines to find the site. # Internal Search Query Report This report lists which queries people used on scripts within the site. # Internal Search Word Report This report lists which words people used on scripts within the site. # Browser Summary This report lists the vendors of visitors' browsers. # Operating System Report This report lists the operating systems used by visitors. # File Size Report This report lists the sizes of files. # Status Code Report This report lists the HTTP status codes of all requests. # Processing Time Report This report lists the times taken to process successful requests. analog-ce-6.0.17/lang/usdom.tab000066400000000000000000000122141406366436600162110ustar00rootroot00000000000000# Generic and Infrastructure domains aero 2 Air Transport Industry arpa 1 Arpanet biz 2 Businesses com 2 Commercial coop 2 Cooperatives edu 2 US Higher Education gov 2 US Government info 2 Informational int 2 International Treaty Organizations mil 2 US Military museum 2 Museums name 3 Individuals net 2 Networks org 2 Non Profit Making Organizations pro 3 Professionals # Country code domains ac 1 Ascension Island ad 2 Andorra ae 3 United Arab Emirates af 1 Afghanistan ag 2 Antigua and Barbuda ai 1 Anguilla al 1 Albania am 2 Armenia an 1 Netherlands Antilles ao 1 Angola aq 1 Antarctica ar 3 Argentina as 1 American Samoa at 3 Austria au 3 Australia aw 1 Aruba az 1 Azerbaijan ba 3 Bosnia-Herzegovina bb 2 Barbados bd 1 Bangladesh be 3 Belgium bf 1 Burkina Faso bg 2 Bulgaria bh 1 Bahrain bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei Darussalam bo 3 Bolivia br 3 Brazil bs 1 Bahamas bt 1 Bhutan bv 1 Bouvet Island bw 1 Botswana by 1 Belarus bz 1 Belize ca 3 Canada cc 1 Cocos (Keeling) Islands cd 1 Democratic Republic of the Congo cf 1 Central African Republic cg 1 Congo ch 2 Switzerland ci 1 Ivory Coast ck 1 Cook Islands cl 2 Chile cm 1 Cameroon cn 3 China co 3 Colombia cr 3 Costa Rica cs 3 Serbia and Montenegro cu 2 Cuba cv 1 Cape Verde cx 2 Christmas Island cy 3 Cyprus cz 2 Czech Republic de 2 Germany dj 1 Djibouti dk 2 Denmark dm 2 Dominica do 3 Dominican Republic dz 1 Algeria ec 3 Ecuador ee 2 Estonia eg 3 Egypt eh 1 Western Sahara er 1 Eritrea es 2 Spain et 1 Ethiopia fi 2 Finland fj 3 Fiji fk 1 Falkland Islands fm 1 Micronesia fo 1 Faroe Islands fr 2 France fx 1 France (European Territory) ga 1 Gabon gb 1 United Kingdom gd 1 Grenada ge 1 Georgia gf 1 French Guiana gg 1 Guernsey gh 3 Ghana gi 1 Gibraltar gl 1 Greenland gm 1 Gambia gn 1 Guinea gp 1 Guadeloupe gq 1 Equatorial Guinea gr 2 Greece gs 1 South Georgia and South Sandwich Islands gt 3 Guatemala gu 1 Guam gw 1 Guinea-Bissau gy 1 Guyana hk 3 Hong Kong hm 1 Heard and McDonald Islands hn 2 Honduras hr 2 Croatia ht 1 Haiti hu 2 Hungary id 3 Indonesia ie 2 Ireland il 3 Israel im 1 Isle of Man in 3 India io 1 British Indian Ocean Territory iq 1 Iraq ir 1 Iran is 2 Iceland it 2 Italy je 1 Jersey jm 3 Jamaica jo 3 Jordan jp 3 Japan ke 3 Kenya kg 1 Kyrgyzstan kh 1 Cambodia ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts and Nevis kp 1 North Korea kr 3 South Korea kw 3 Kuwait ky 1 Cayman Islands kz 1 Kazakhstan la 1 Laos lb 3 Lebanon lc 1 Saint Lucia li 2 Liechtenstein lk 1 Sri Lanka lr 1 Liberia ls 1 Lesotho lt 2 Lithuania lu 2 Luxembourg lv 2 Latvia ly 1 Libya ma 1 Morocco mc 2 Monaco md 1 Moldova mg 1 Madagascar mh 1 Marshall Islands mk 3 Macedonia (Former Yugoslav Republic) ml 1 Mali mm 1 Myanmar mn 1 Mongolia mo 1 Macao mp 1 Northern Mariana Islands mq 1 Martinique mr 1 Mauritania ms 1 Montserrat mt 3 Malta mu 1 Mauritius mv 1 Maldives mw 1 Malawi mx 3 Mexico my 3 Malaysia mz 1 Mozambique na 1 Namibia nc 1 New Caledonia ne 1 Niger nf 1 Norfolk Island ng 1 Nigeria ni 3 Nicaragua nl 2 Netherlands no 2 Norway np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 New Zealand om 1 Oman pa 3 Panama pe 3 Peru pf 1 French Polynesia pg 3 Papua New Guinea ph 3 Philippines pk 3 Pakistan pl 3 Poland pm 1 Saint Pierre and Miquelon pn 1 Pitcairn Island pr 1 Puerto Rico ps 3 Occupied Palestinian Territory pt 2 Portugal pw 1 Palau py 3 Paraguay qa 1 Qatar re 1 Reunion ro 2 Romania ru 2 Russia rw 1 Rwanda sa 3 Saudi Arabia sb 1 Solomon Islands sc 1 Seychelles sd 1 Sudan se 2 Sweden sg 3 Singapore sh 1 Saint Helena si 2 Slovenia sj 1 Svalbard and Jan Mayen Islands sk 2 Slovakia sl 1 Sierra Leone sm 1 San Marino sn 1 Senegal so 1 Somalia sr 1 Suriname st 1 Saint Tome and Principe su 2 Former USSR sv 3 El Salvador sy 1 Syria sz 1 Swaziland tc 1 Turks and Caicos Islands td 1 Chad tf 1 French Southern Territories tg 1 Togo th 3 Thailand tj 1 Tajikistan tk 1 Tokelau tl 1 East Timor tm 1 Turkmenistan tn 1 Tunisia to 1 Tonga tp 1 East Timor tr 3 Turkey tt 3 Trinidad and Tobago tv 1 Tuvalu tw 3 Taiwan tz 1 Tanzania ua 3 Ukraine ug 3 Uganda uk 3 United Kingdom um 1 USA Minor Outlying Islands us 4 United States uy 3 Uruguay uz 1 Uzbekistan va 1 Vatican City State vc 1 Saint Vincent and Grenadines ve 3 Venezuela vg 1 Virgin Islands (British) vi 1 Virgin Islands (USA) vn 1 Vietnam vu 1 Vanuatu wf 1 Wallis and Futuna Islands ws 1 Samoa ye 1 Yemen yt 1 Mayotte yu 3 Former Yugoslavia za 3 South Africa zm 1 Zambia zr 1 Democratic Republic of the Congo zw 3 Zimbabwe analog-ce-6.0.17/lang/usform.html000066400000000000000000000200341406366436600165720ustar00rootroot00000000000000 Analog form interface

Analog form interface


1. Report choices

N.B. This form will not work - e.g. the buttons may not even appear - until you've configured it according to the instructions. When you've configured it, you should remove this paragraph.
See the analog home page for the meanings of the various reports.

Which reports do you want to see?


[On] [Off] General Summary
[On] [Off] Monthly Report
[On] [Off] Weekly Report
[On] [Off] Daily Summary
[On] [Off] Daily Report
[On] [Off] Hourly Summary
[On] [Off] Domain Report
[On] [Off] Organization Report
[On] [Off] Directory Report
[On] [Off] File Type Report
[On] [Off] Request Report
[On] [Off] File Size Report
[On] [Off] Referrer Report
[On] [Off] Search Query Report
[On] [Off] Search Word Report
[On] [Off] Browser Summary
[On] [Off] Operating System Report
[On] [Off] Status Code Report

You can now run the program:
Or you can fill in the options below for individual reports. You can use bytes to mean 10 Megabytes; also to mean the 50 items with the most bytes.


2. Detailed report options

Domain Report options

Sort the Domain Report
Include all domains with at least

Organization Report options

Sort the Organization Report
Include all organizations with at least

Directory Report options

Sort the Directory Report
Include all directories with at least

Request Report options

Sort the Request Report
Include all files with at least
Show

Referrer Report options

Sort the Referrer Report
Include all referrers with at least

3. Analyzing only part of the logfile

Only certain dates
You can analyze only the requests from certain dates. Enter the range of dates below in the from yymmdd; e.g., 980301 for 1st March 1998 (or fill in just one box to limit the range of dates on just one side).
From to

Only certain files
Only look at the following files (list, separated by commas; can contain wild character *)

Ignore the following files


4. Layout

Your organization's name (for the title of the page)

Your organization's home page
URL:


analog-ce-6.0.17/lang/yu.lng000066400000000000000000000326201406366436600155340ustar00rootroot00000000000000## Serbian language file for analog 6.0. ## May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## ## Serbian versions (5.0.01) ISO-8859-2 and ASCII 7bit - by Deli Radivoje ## ## ## Corrections welcome! SUGESTIJE I POMOC SU DOBRO DOSLI! ## deliradivoje@yahoo.com, webmaster@ppc.psc.ac.yu ## ## The character set of this language file (ISO Latin 2) ## ISO-8859-2 ## ## Abbreviations for the day and month names. ned. pon. uto. sre. èet. pet. sub. jan. feb. mar. apr. maj. jun. jul. avg. sep. okt. nov. dec. ## Next some standard common words. ## Abbreviation for "week beginning" poè. nedelje godina ## Quarter of a year tromeseèje mesec dan dana sat min min sek sek bajt Bajta ## ?bytes represents kbytes, Mbytes etc. ?bajtova zahtev zahteva dana ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum vreme vreme poèetni datum poèetno vreme vreme posl.akt. poslednje vreme dokument dokumenat/a host host(ov)a virtuelni host virtuelna hosta direktorijum direktorijum/a domen domena organizacija organizacije tip tip/ova URL URL-a brauzer brauzeri OS OS-i ## (= operating system, operating systems) velièina izraz za pretragu izrazi za pretragu WWW sajt WWW sajtova korisnik korisnik/a oznaka statusa oznake statusa Statistika servera ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Op¹ti pregled ## The time reports, plus "busiest" strings (at the bottom of each report) Godi¹nji izve¹taj Najaktivnija godina Tromeseèni izve¹taj Najaktivnije tromeseèje Statistika po mesecima Najaktivniji mesec: Statistika po nedeljama Najaktivnija nedelja: sedmica poèela Statistika po danima u nedelji Statistika po danima Najaktivniji dan: Statistika po satima Statistika po satima Pregled po satima Najaktivniji sat: 15-to minutna statistika 15-to minutni pregled Najaktivnijih 15 min.: 5-to minutna statistika 5-to minutni pregled Najaktivnijih 5 min.: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Statistika po hostovima host host(ov)a n Statistika po redirektovanim hostovima host host(ov)a n Statistika gre¹aka po hostovima host host(ov)a n Statistika po direktorijumima direktorijum direktorijuma n Statistika po tipovima dokumenata tip dokumenta razlièitih tipova dokumenata n Statistika po zahtevima dokument dokumenata n Statistika po preusmeravanjima dokument dokumenata n Statistika po gre¹kama dokument dokumenata n Statistika po stranama sa kojih se stizalo dolazeæi URL dolazeæih URL-a n Statistika po WWW serverima sa kojih se stizalo dolazeæi WWW server dolazeæih WWW servera n Statistika po preusmerenim dolascima dolazeæi URL dolazeæih URL-a n Statistika pogre¹nih pristizanja dolazeæi URL dolazeæih URL-a n Statistika po upitima za pretragu upit upita n Statistika po reèima za pretragu reè za pretragu reèi za pretrage n Interna statistika po upitima za pretragu reè za pretragu reèi za pretrage n Interna statistika po reèima za pretragu reè za pretragu reèi za pretrage n Statistika po virtuelnim hostovima virtuelni host virtuelnih host(ov)a n Statistika redirekcije po virtuelnim hostovima virtuelni host virtuelnih host(ov)a n Statistika gre¹aka po virtuelnim hostovima virtuelni host virtuelnih host(ov)a n Statistika po korisnicima korisnik korisnika n Statistika po preusmerenim korisnicima korisnik korisnika n Statistika gre¹aka po korisnicima korisnik korisnika n Pregled po brauzerima brauzer brauzera n Statistika po brauzerima brauzer brauzera n Statistika po operativnim sistemima operativni sistem operativnih sistema n Statistika po domenima domen domena n Statistika po organizacijama organizacija organizacija n Statistika po statusnim oznakama statusna oznaka statusnih oznaka n Izve¹taj o utro¹enom vremenu Statistika po velièini dokumenata ## Used at the bottom of the report Ova analiza je napravljena automatski sa programom Vreme rada programa Manje od 1 ## Used in the time reports Svaki simbol predstavlja ili ne¹to manje od toga zahteva za stranicu zahteva za strane ## Used at the bottom of each non-time report: need m, f & n genders nije na listi nije na listi nije na listi ## Used on the pie charts: again need m, f & n genders * * Ostalo ## Used at the top of the report Datum i vreme kada je ova automatska analiza obavljena - Analizirani su zahtevi serveru u periodu od do ## Used in the General Summary Ukupno uspe¹nih zahteva Dnevni prosek uspe¹nih zahteva Ukupno uspe¹nih zahteva za HTML strane Dnevni prosek uspe¹nih zahteva za HTML strane Broj linija u dnevniku bez vraæenih oznaka statusa Neuspe¹nih zahteva Preusmerenih zahteva Broj zahteva sa vraæenim oznakama statusa (100-101) Broj zahteva za razlièitim dokumentima Broj razlièitih opslu¾enih hostova Neispravnih linija u dnevniku Broj zahteva koji su izuzeti iz ove analize Ukupna kolièina prenesenih podataka Dnevni prosek prenesenih podataka Brojevi u zagradama se odnose na 7 dana pre prethodnih 7 dana Idi na Vrh strane ## Some special phrases for particular reports. [nerazre¹en IP] [domen nije zadat] [nepoznati domen] [server/root direktorijum] [nema direktorijuma] [nema tipa dokumenta] [direktorijum/a] Nepoznat Windows Ostali Unix-i Roboti OS nije prepoznat ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) # zahteva Ned. zaht. % zahteva Ned. zaht. stranica Ned. str. % strana Ned. str. Bajta ?bajtova Ned. bajt. Ned. ?bajt. % bajtova %Ned. bajt. br. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ispis prvih %s * * Ispis prvih %d %s * * Spisak %s ## "by" in the phrase "listing the top 3 files BY number of requests" po ## All requests WITH AT LEAST 10 requests sa minimum ## Different ways of doing floors zahtev u zadnjih 7 dana zahteva u zadnjih 7 dana zahteva za stranu u zadnjih 7 dana zahteva za strane u zadnjih 7 dana preusmereni zahtev preusmerenih zahteva redirektovani zahtev u zadnjih 7 dana redirektovanih zahteva u zadnjih 7 dana neuspe¹ni zahtev neuspe¹nih zahteva neuspe¹an zahtev u zadnjih 7 dana neuspe¹nih zahteva u zadnjih 7 dana % saobraæaja % saobraæaja u zadnjih 7 dana % najveæeg obima saobraæaja % najveæeg obima saobraæaja u zadnjih 7 dana bajt saobraæaja bajtova saobraæaja ## ?bytes represents kbytes, Mbytes etc. ?bytes saobraæaja bajt saobraæaja u zadnjih 7 dana bajtova saobraæaja u zadnjih 7 dana ?bytes saobraæaja u zadnjih 7 dana zahtevano od sa preusmerenim zahtevom od sa neuspe¹nim zahtevom od sa prvim zahtevom od sa prvim preusmerenim zahtevom od sa prvim neuspe¹nim zahtevom od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortirano prema ## Used at the top of each report Ova statistika sadr¾i podatke iz ## Used in pie charts Grafikon iscrtan prema ## different ways of sorting obimu saobraæaja obimu saobraæaja u zadnjih 7 dana % zahteva % zahteva u zadnjih 7 dana % najveæeg broja zahteva % maksimalnom broju zahteva u zadnjih 7 dana broju zahteva broju zahteva u zadnjih 7 dana % zahteva za strane % broju zahteva za strane u zadnjih 7 dana % najveæeg broja zahteva za HTML strane % maksimalnom broju zahteva za HTML strane u zadnjih 7 dana broju zahteva za HTML strane broju zahteva za HTML strane u zadnjih 7 dana % preusmerenih zahteva % preusmerenih zahteva u zadnjih 7 dana % maksimalnom broju preusmerenih zahteva % maksimalnom broju preusmerenih zahteva u zadnjih 7 dana broju preusmerenih zahteva broju preusmerenih zahteva u zadnjih 7 dana % neuspe¹nih zahteva % broj neuspe¹nih zahteva u zadnjih 7 dana % maksimalnom broju broja neuspe¹nih zahteva % maksimalni broj neuspe¹nih zahteva u zadnjih 7 dana kolièini gre¹aka broj neuspe¹nih zahteva u zadnjih 7 dana vremenu poslednjeg zahteva vremenu poslednjeg preusmerenog zahteva vremenu poslednjeg neuspe¹nog zahteva vremenu prvog zahteva vremenu prvog preusmerenog zahteva vremenu prvog neuspe¹nog zahteva ## 3 other ways of sorting in m, f, & n * * sortirano po abecedi * * sortirano brojèano * * nesortirano ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. pre podne popodne ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y. u %H:%n ## "Program started at" and "Analysed requests from" %w %d. %m %Y. u %H:%n ## In Daily Report %d.%m %Y ## In Daily Summary %w ## In Hourly Report %d.%m %Y. %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m %Y. %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m %y ## The date & time (D) column in non-time reports %d.%m %y. %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m %Y. u %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Nastavi sa zahtevom 101 Promena protokola 1xx [Raznovrsne informacije] 200 Uspe¹no 201 Kreirano 202 Prihvaæeno za buduæu obradu 203 Nepotvrdjena informacija 204 OK, ali nema nièeg za slanje 205 Poni¹ti dokument 206 Delimièan sadr¾aj 2xx Razni uspesi 300 Postoje vi¹estruki dokumenti 301 Dokument preme¹ten za stalno 302 Dokument nadjen drugde 303 Vidi drugi dokument 304 Nepromenjeno od poslednjeg zahteva 305 Upotrebi proxy 306 Promena proxy-ja 307 Dokument privremeno preme¹ten 3xx Razne redirekcije 400 Neispravan zahtev 401 Zahtevana provera verodostojnosti 402 Tra¾eno plaæanje 403 Zabrana pristupa 404 Nema dokumenta 405 Nedozvoljen metod 406 Dokument neprihvatljiv za klijenta 407 Proxy zahteva potvrdu verodostojnosti 408 Istekao zahtev 409 Sukob zahteva sa stanjem resursa 410 Dokument bespovratno nestao 411 Tra¾ena du¾ina 412 Preduslov neispravan 413 Predugaèak zahtev 414 Tra¾eni dokument ima predugo ime 415 Vrsta medija nije podr¾ana 416 Zahtevani raspon neispravan 417 Neuspe¹no oèekivanje 4xx Razne gre¹ke od klijenata/korisnika 500 Interna gre¹ka na serveru 501 Vrsta zahteva nije ppodr¾ana 502 Gre¹ka na prethodnom serveru 503 Servis privremeno nije dostupan 504 Gateway istekao 505 Nepodr¾ana HTTP verzija 506 Neuspe¹na redirekcija 5xx Razne gre¹ke servera xxx Nepoznato analog-ce-6.0.17/lang/yua.lng000066400000000000000000000326151406366436600157010ustar00rootroot00000000000000## Serbian language file for analog 6.0. ## May not work with any other version. ## ## This is a language file for analog. Lines beginning with ## are comments. ## Each language should have one language file in its own character set, ## and can have an additional one for ASCII (7 bit) output. ## ## ## Serbian versions (5.0.01) ISO-8859-2 and ASCII 7bit - by Deli Radivoje ## ## ## Corrections welcome! SUGESTIJE I POMOC SU DOBRO DOSLI! ## deliradivoje@yahoo.com, webmaster@ppc.psc.ac.yu ## ## The character set of this language file (ASCII 7bit) ## US-ASCII ## ## Abbreviations for the day and month names. ned. pon. uto. sre. cet. pet. sub. jan. feb. mar. apr. maj. jun. jul. avg. sep. okt. nov. dec. ## Next some standard common words. ## Abbreviation for "week beginning" poc. nedelje godina ## Quarter of a year tromesecje mesec dan dana sat min min sek sek bajt Bajta ## ?bytes represents kbytes, Mbytes etc. ?bajtova zahtev zahteva dana ## This has the right spacing for a column like 23/Mar/98 15:00-15:05 datum vreme vreme pocetni datum pocetno vreme vreme posl.akt. poslednje vreme dokument dokumenat/a host host(ov)a virtuelni host virtuelna hosta direktorijum direktorijum/a domen domena organizacija organizacije tip tip/ova URL URL-a brauzer brauzeri OS OS-i ## (= operating system, operating systems) velicina izraz za pretragu izrazi za pretragu WWW sajt WWW sajtova korisnik korisnik/a oznaka statusa oznake statusa Statistika servera ## Prefixes kilo, mega etc. to make kilobytes, megabytes etc. kilo mega giga tera peta exa zeta yotta ## Shorter versions of the same prefixes for column headings k M G T P E Z Y ## Names for the rows in the File Size Report. Note that changing these will ## NOT change the boundaries! These are just labels for predetermined buckets. ## They should line up nicely when right-aligned. 0 1B- 10B 11B- 100B 101B- 1kB 1kB- 10kB 10kB-100kB 100kB- 1MB 1MB- 10MB 10MB-100MB 100MB- 1GB > 1GB ## Now the names of reports Opsti pregled ## The time reports, plus "busiest" strings (at the bottom of each report) Godisnji izvestaj Najaktivnija godina Tromesecni izvestaj Najaktivnije tromesecje Statistika po mesecima Najaktivniji mesec: Statistika po nedeljama Najaktivnija nedelja: sedmica pocela Statistika po danima u nedelji Statistika po danima Najaktivniji dan: Statistika po satima Statistika po satima Pregled po satima Najaktivniji sat: 15-to minutna statistika 15-to minutni pregled Najaktivnijih 15 min.: 5-to minutna statistika 5-to minutni pregled Najaktivnijih 5 min.: ## The non-time reports. In each case, we have the name of the report, ## followed by the type of item in the report, once in the singular and once ## in the plural. These are used in phrases like "including all ??? with at ## least 200 requests". (The words higher up are used for column headings.) ## Finally we have the gender of this type of object, which can be m, f or n. ## ## So for example, in German a directory is Verzeichnis (neuter gender), which ## was given above. But "listing the top directory" is "Ausgabe des ersten ## Verzeichnisses" and "listing the top two directories" is "Ausgabe der ## ersten zwei Verzeichnisse". So here, we would have for the directory report: ## ## Verzeichnis-Bericht ## Verzeichnisses ## Verzeichnisse ## n ## ## I hope that makes sense! Statistika po hostovima host host(ov)a n Statistika po redirektovanim hostovima host host(ov)a n Statistika gresaka po hostovima host host(ov)a n Statistika po direktorijumima direktorijum direktorijuma n Statistika po tipovima dokumenata tip dokumenta razlicitih tipova dokumenata n Statistika po zahtevima dokument dokumenata n Statistika po preusmeravanjima dokument dokumenata n Statistika po greskama dokument dokumenata n Statistika po stranama sa kojih se stizalo dolazeci URL dolazecih URL-a n Statistika po WWW serverima sa kojih se stizalo dolazeci WWW server dolazecih WWW servera n Statistika po preusmerenim dolascima dolazeci URL dolazecih URL-a n Statistika pogresnih pristizanja dolazeci URL dolazecih URL-a n Statistika po upitima za pretragu upit upita n Statistika po recima za pretragu rec za pretragu reci za pretrage n Interna statistika po upitima za pretragu rec za pretragu reci za pretrage n Interna statistika po recima za pretragu rec za pretragu reci za pretrage n Statistika po virtuelnim hostovima virtuelni host virtuelnih host(ov)a n Statistika redirekcije po virtuelnim hostovima virtuelni host virtuelnih host(ov)a n Statistika gresaka po virtuelnim hostovima virtuelni host virtuelnih host(ov)a n Statistika po korisnicima korisnik korisnika n Statistika po preusmerenim korisnicima korisnik korisnika n Statistika gresaka po korisnicima korisnik korisnika n Pregled po brauzerima brauzer brauzera n Statistika po brauzerima brauzer brauzera n Statistika po operativnim sistemima operativni sistem operativnih sistema n Statistika po domenima domen domena n Statistika po organizacijama organizacija organizacija n Statistika po statusnim oznakama statusna oznaka statusnih oznaka n Izvestaj o utrosenom vremenu Statistika po velicini dokumenata ## Used at the bottom of the report Ova analiza je napravljena automatski sa programom Vreme rada programa Manje od 1 ## Used in the time reports Svaki simbol predstavlja ili nesto manje od toga zahteva za stranicu zahteva za strane ## Used at the bottom of each non-time report: need m, f & n genders nije na listi nije na listi nije na listi ## Used on the pie charts: again need m, f & n genders * * Ostalo ## Used at the top of the report Datum i vreme kada je ova automatska analiza obavljena - Analizirani su zahtevi serveru u periodu od do ## Used in the General Summary Ukupno uspesnih zahteva Dnevni prosek uspesnih zahteva Ukupno uspesnih zahteva za HTML strane Dnevni prosek uspesnih zahteva za HTML strane Broj linija u dnevniku bez vracenih oznaka statusa Neuspesnih zahteva Preusmerenih zahteva Broj zahteva sa vracenim oznakama statusa (100-101) Broj zahteva za razlicitim dokumentima Broj razlicitih opsluzenih hostova Neispravnih linija u dnevniku Broj zahteva koji su izuzeti iz ove analize Ukupna kolicina prenesenih podataka Dnevni prosek prenesenih podataka Brojevi u zagradama se odnose na 7 dana pre prethodnih 7 dana Idi na Vrh strane ## Some special phrases for particular reports. [nerazresen IP] [domen nije zadat] [nepoznati domen] [server/root direktorijum] [nema direktorijuma] [nema tipa dokumenta] [direktorijum/a] Nepoznat Windows Ostali Unix-i Roboti OS nije prepoznat ## Column headings for requests, pages, bytes and number (ie position in list) ## and percentages and last-7-day versions of these. ## Should be as short as possible -- abbreviate if necessary. ## (The ?bytes represents kbytes, Mbytes etc.) # zahteva Ned. zaht. % zahteva Ned. zaht. stranica Ned. str. % strana Ned. str. Bajta ?bajtova Ned. bajt. Ned. ?bajt. % bajtova %Ned. bajt. br. ## Now we need to know how to say "listing the top ", "listing ## the top ", and "listing ". The %s and %d ## will be replaced by the appropriate things. There may be three of each of ## these statements, for the genders m, f and n. Any genders that aren't used, ## you can just put a * there instead. So, for example, French starts ## Affichage du premier %s ## Affichage de la première %s ## * ## with entries for m & f, but not n * * Ispis prvih %s * * Ispis prvih %d %s * * Spisak %s ## "by" in the phrase "listing the top 3 files BY number of requests" po ## All requests WITH AT LEAST 10 requests sa minimum ## Different ways of doing floors zahtev u zadnjih 7 dana zahteva u zadnjih 7 dana zahteva za stranu u zadnjih 7 dana zahteva za strane u zadnjih 7 dana preusmereni zahtev preusmerenih zahteva redirektovani zahtev u zadnjih 7 dana redirektovanih zahteva u zadnjih 7 dana neuspesni zahtev neuspesnih zahteva neuspesan zahtev u zadnjih 7 dana neuspesnih zahteva u zadnjih 7 dana % saobracaja % saobracaja u zadnjih 7 dana % najveceg obima saobracaja % najveceg obima saobracaja u zadnjih 7 dana bajt saobracaja bajtova saobracaja ## ?bytes represents kbytes, Mbytes etc. ?bytes saobracaja bajt saobracaja u zadnjih 7 dana bajtova saobracaja u zadnjih 7 dana ?bytes saobracaja u zadnjih 7 dana zahtevano od sa preusmerenim zahtevom od sa neuspesnim zahtevom od sa prvim zahtevom od sa prvim preusmerenim zahtevom od sa prvim neuspesnim zahtevom od ## Now "sorted by": again, in m, f & n (only needed in plural though) * * sortirano prema ## Used at the top of each report Ova statistika sadrzi podatke iz ## Used in pie charts Grafikon iscrtan prema ## different ways of sorting obimu saobracaja obimu saobracaja u zadnjih 7 dana % zahteva % zahteva u zadnjih 7 dana % najveceg broja zahteva % maksimalnom broju zahteva u zadnjih 7 dana broju zahteva broju zahteva u zadnjih 7 dana % zahteva za strane % broju zahteva za strane u zadnjih 7 dana % najveceg broja zahteva za HTML strane % maksimalnom broju zahteva za HTML strane u zadnjih 7 dana broju zahteva za HTML strane broju zahteva za HTML strane u zadnjih 7 dana % preusmerenih zahteva % preusmerenih zahteva u zadnjih 7 dana % maksimalnom broju preusmerenih zahteva % maksimalnom broju preusmerenih zahteva u zadnjih 7 dana broju preusmerenih zahteva broju preusmerenih zahteva u zadnjih 7 dana % neuspesnih zahteva % broj neuspesnih zahteva u zadnjih 7 dana % maksimalnom broju broja neuspesnih zahteva % maksimalni broj neuspesnih zahteva u zadnjih 7 dana kolicini gresaka broj neuspesnih zahteva u zadnjih 7 dana vremenu poslednjeg zahteva vremenu poslednjeg preusmerenog zahteva vremenu poslednjeg neuspesnog zahteva vremenu prvog zahteva vremenu prvog preusmerenog zahteva vremenu prvog neuspesnog zahteva ## 3 other ways of sorting in m, f, & n * * sortirano po abecedi * * sortirano brojhano * * nesortirano ## The separators to use between thousands, and as a decimal point. For ## example, English generally uses "3,000.25" so has , and . here. French uses ## "3 000,25", so has space and , instead. , . ## There's a colon here, because the French like to put a space before a colon, ## so they have space-colon instead here. : ## am and pm in the sense of morning and afternoon. pre podne popodne ## Some date formats. E.g. for 9am on 1st January 1997 use ## %d for date " 1" ## %D for 0-padded date "01" ## %e or %E for date at end of time interval (where this makes sense) ## %m for month "Jan" ## %l for month at end of time interval ## %q for quarter of the year "1" ## %y for short year "97" ## %Y for long year "1997" ## %z or %Z for year at end of time interval ## %X for ISO 8601 extended date format (yyyy-mm-dd) "1997-01-01" ## %h for hour in 24-hour clock " 9" ## %H for 0-padded hour "09" ## %j for hour in 12-hour clock " 9" ## %i, %I or %k for hour at end of time interval ## %n for minute "00" ## %o for minute at end of time interval ## %a for am or pm "am" ## %b for am or pm at end of time interval ## %w for weekday "Wed" ## %x for a dash in a range e.g. in 14:00-14:15. This is necessary because in ## proper typesetting, this should be an en-dash not a regular dash. ## ## So for a date, English might have %d/%m/%y for 1/Jan/97, whereas German ## would have %d.%m %y for 1.Jan 97). Note: the month number is not available ## because it can produce ambiguous dates. ## ## The different date formats are as follows ## "refer to the 7 days to [date]" %D. %m %Y. u %H:%n ## "Program started at" and "Analysed requests from" %w %d. %m %Y. u %H:%n ## In Daily Report %d.%m %Y ## In Daily Summary %w ## In Hourly Report %d.%m %Y. %H:%n%x%I:%o ## In Hourly Summary %h ## In Hour of the Week Summary %w %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Reports %d.%m %Y. %H:%n%x%I:%o ## In Quarter-Hour and Five-Minute Summaries %H:%n%x%I:%o ## In Weekly Report %d.%m %Y ## In Monthly Report %m %Y ## In Quarterly Report %m%x%l %Y ## An alternative for Quarterly Report: %Y Q%q ## In Yearly Report %Y ## The date (d) column in non-time reports %d.%m %y ## The date & time (D) column in non-time reports %d.%m %y. %H:%n ## In non-time reports: "including all files with requests since [date]" %d.%m %Y. u %H:%n ## Finally, definitions of the HTTP status codes (see ## ftp://ftp.isi.edu/in-notes/rfc2616.txt). You're welcome to leave these in ## English if you think they look better that way. 100 Nastavi sa zahtevom 101 Promena protokola 1xx [Raznovrsne informacije] 200 Uspesno 201 Kreirano 202 Prihvaceno za buducu obradu 203 Nepotvrdjena informacija 204 OK, ali nema niceg za slanje 205 Ponisti dokument 206 Delimican sadrzaj 2xx Razni uspesi 300 Postoje visestruki dokumenti 301 Dokument premesten za stalno 302 Dokument nadjen drugde 303 Vidi drugi dokument 304 Nepromenjeno od poslednjeg zahteva 305 Upotrebi proxy 306 Promena proxy-ja 307 Dokument privremeno premesten 3xx Razne redirekcije 400 Neispravan zahtev 401 Zahtevana provera verodostojnosti 402 Trazeno placanje 403 Zabrana pristupa 404 Nema dokumenta 405 Nedozvoljen metod 406 Dokument neprihvatljiv za klijenta 407 Proxy zahteva potvrdu verodostojnosti 408 Istekao zahtev 409 Sukob zahteva sa stanjem resursa 410 Dokument bespovratno nestao 411 Trazena duzina 412 Preduslov neispravan 413 Predugacak zahtev 414 Trazeni dokument ima predugo ime 415 Vrsta medija nije podrzana 416 Zahtevani raspon neispravan 417 Neuspesno ocekivanje 4xx Razne greske od klijenata/korisnika 500 Interna greska na serveru 501 Vrsta zahteva nije ppodrzana 502 Greska na prethodnom serveru 503 Servis privremeno nije dostupan 504 Gateway istekao 505 Nepodrzana HTTP verzija 506 Neuspesna redirekcija 5xx Razne greske servera xxx Nepoznato analog-ce-6.0.17/lang/yudom.tab000066400000000000000000000115771406366436600162320ustar00rootroot00000000000000ad 2 Andora ae 3 Ujedinjeni Arapski Emirati af 1 Avganistan ag 2 Antigva i Barbuda ai 1 Anguilla al 1 Albanija am 2 Jermenija an 1 Holandski Antili ao 1 Angola aq 1 Antarktik ar 3 Argentina arpa 1 Stara Arpanet mreza as 1 Americka Samoa at 3 Austrija au 3 Australija aw 1 Aruba az 1 Azerbejdzan ba 3 Bosna i Hercegovina bb 2 Barbados bd 1 Banglades be 3 Belgija bf 1 Burkina Faso bg 2 Bugarska bh 1 Bahrein bi 1 Burundi bj 1 Benin bm 1 Bermuda bn 1 Brunei bo 3 Bolivija br 3 Brazil bs 1 Bahami bt 1 Butan bv 1 Bouvet Island bw 1 Botsvana by 1 Belorusija bz 1 Belize ca 3 Kanada cc 1 Kakao (Keeling) ostrva cd 1 Demokratska Repulika Kongo cf 1 Centralno Africka Republika cg 1 Kongo ch 2 Svajcarska ci 1 Obala Slonovace ck 1 Kukova ostrva cl 2 Cile cm 1 Kameron cn 3 Kina co 3 Kolombija com 2 Firme cr 3 Kostarika cu 2 Kuba cv 1 Kapa Verde cx 2 Bozicna ostrva cy 3 Kipar cz 2 Ceska republika de 2 Nemacka dj 1 Dzibuti dk 2 Danska dm 2 Dominika do 3 Dominikanska Republika dz 1 Alzir ec 3 Ekvador edu 2 Americke obrazovne ustanove ee 2 Estonija eg 3 Egipat eh 1 Zapadna Sahara er 1 Eritreja es 2 Spanija et 1 Etiopija fi 2 Finska fj 3 Fidzi fk 1 Foklandska ostrva fm 1 Mikronezija fo 1 Farska ostrva fr 2 Francucka fx 1 Francuska (Evropske teritorije) ga 1 Gabon gb 1 Velika Britanija gd 1 Grenada ge 1 Gruzija gf 1 Francuska Gajana gg 1 Guernsey gh 3 Gana gi 1 Gibraltar gl 1 Grenland gm 1 Zambija gn 1 Gineja gov 2 Americka vlada gp 1 Gvadelupe (Franc.) gq 1 Ekvatorijalna Gvineja gr 2 Grcka gs 1 S. Georgia & S. Sandwich ostrva gt 3 Gvatemala gu 1 Guam (SAD) gw 1 Gvineja Bisao gy 1 Gvajana hk 3 Hong Kong hm 1 Heard i Mekdonald ostrva hn 2 Honduras hr 2 Hrvatska ht 1 Haiti hu 2 Madjarska id 3 Indonezija ie 2 Irska il 3 Izrael im 1 Isle of Man in 3 Indija int 1 Medjunarodne ustanove io 1 British Indian Ocean Territory iq 1 Irak ir 1 Iran is 2 Island it 2 Italija je 1 Jersey jm 3 Jamajka jo 3 Jordan jp 3 Japan ke 3 Kenija kg 1 Kirgistan kh 1 Kambodza ki 1 Kiribati km 1 Comoros kn 1 Saint Kitts & Nevis kp 1 Severna Koreja kr 3 Juzna Koreja kw 3 Kuvajt ky 1 Kajmanska ostrva kz 1 Kazahstan la 1 Laos lb 3 Liban lc 1 Santa Lucia li 2 Lihtenstajn lk 1 Sri Lanka lr 1 Liberia ls 1 Lesoto lt 2 Litvania lu 2 Luksemburg lv 2 Latvija ly 1 Libija ma 1 Moroko mc 2 Monako md 1 Moldavija mg 1 Madagaskar mh 1 Marsalska ostrva mil 2 Americka vojska mk 3 Makedonija ml 1 Mali mm 1 Myanmar mn 1 Mongolija mo 1 Makao mp 1 Severno Marijanska ostrva mq 1 Martinik (Franc.) mr 1 Mauritanija ms 1 Montserat mt 3 Malta mu 1 Mauricijus mv 1 Maldivi mw 1 Malavi mx 3 Meksiko my 3 Malezija mz 1 Mozambik na 1 Namibija nc 1 Nova Kaledonija (Franc.) ne 1 Nigerija net 2 Mrezni domen nf 1 Norfolk ostrva ng 1 Nigerija ni 3 Nikaragva nl 2 Holandija no 2 Norveska np 1 Nepal nr 1 Nauru nu 2 Niue nz 3 Novi Zeland om 1 Oman org 2 Neprofitne organizacije pa 3 Panama pe 3 Peru pf 1 Polinezija (Franc.) pg 3 Papua Nova Gvineja ph 3 FIlipini pk 3 Pakistan pl 2 Poljska pm 1 Saint Pierre and Miquelon pn 1 Pitcairn Island pr 1 Portoriko pt 2 Portugalija pw 1 Palau py 3 Paragvaj qa 1 Katar re 1 Reunion (Franc.) ro 2 Rumunija ru 2 Rusija rw 1 Ruanda sa 3 Saudijska Arabija sb 1 Solomonska ostrva sc 1 Sejselska ostrva sd 1 Sudan se 2 Svedska sg 3 Singapur sh 1 Sveta Helena si 2 Slovenija sj 1 Svalbard i Jan Mayen ostrva sk 2 Slovacka Republika sl 1 Sijera Leone sm 1 San Marino sn 1 Senegal so 1 Somalija sr 1 Surinam st 1 Sent Tome i Principe su 2 Bivsi SSSR sv 3 El Salvador sy 1 Sirija sz 1 Svazilend tc 1 Turks i Caicos ostrva td 1 Cad tf 1 Francuske Juzne Teritorije tg 1 Togo th 3 Tajland tj 1 Tadzikistan tk 1 Tokelau tl 1 Istocni Timor tm 1 Turkmenistan tn 1 Tunis to 1 Tonga tp 1 Istocni Timor tr 3 Turska tt 3 Trinidad i Tobago tv 1 Tuvalu tw 3 Tajvan tz 1 Tanzanija ua 3 Ukrajina ug 3 Uganda uk 3 Velika Britanija (Ujedinjeno Kraljevstvo) um 1 USA Minor Outlying Islands us 4 Sjedinjene Americke Drzave uy 3 Urugvaj uz 1 Uzbekistan va 1 Vatikan vc 1 Saint Vincent & Grenadines ve 3 Venecuela vg 1 Devicanska ostrva (Britanska) vi 1 Devicanska ostrva (SAD) vn 1 Vijetnam vu 1 Vanuatu wf 1 Wallis i Futuna ostrva ws 1 Samoa ye 1 Jemen yt 1 Mayotte yu 3 Jugoslavija za 3 Juzna Afrika zm 1 Zambija zr 1 Demokratska republika Kongo zw 3 Zimbabve analog-ce-6.0.17/logfile.log000066400000000000000000000203441406366436600156000ustar00rootroot00000000000000statslab.cam.ac.uk - - [31/Dec/1999:10:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:11:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:12:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:14:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:15:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:17:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:18:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:20:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" statslab.cam.ac.uk - - [31/Dec/1999:21:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [31/Dec/1999:22:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [31/Dec/1999:23:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://referrer.com/" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:02:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:03:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:04:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:05:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:06:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:07:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:08:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:09:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:10:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [01/Jan/2000:12:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" host.analog.cx - - [02/Jan/2000:10:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" host.analog.cx - - [02/Jan/2000:11:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" host.analog.cx - - [02/Jan/2000:12:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" host.analog.cx - - [02/Jan/2000:14:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:15:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:17:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:18:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:20:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:21:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:22:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [02/Jan/2000:23:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:02:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:03:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:04:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:05:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:06:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:07:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:08:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:09:11:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:09:41:12 +0000] "GET /sample2.html HTTP/1.0" 200 1010 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:10:11:12 +0000] "GET /dir/sample3.html HTTP/1.0" 200 987 "http://google.com/search?q=another%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:10:11:12 +0000] "GET /images/sample3.jpg HTTP/1.0" 200 298 "http://www.statslab.cam.ac.uk/dir/sample3.html" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:12:11:12 +0000] "GET /dir/sample3.html HTTP/1.0" 200 987 "http://google.com/search?q=another%20search" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [03/Jan/2000:10:11:12 +0000] "GET /images/sample3.jpg HTTP/1.0" 200 298 "http://www.statslab.cam.ac.uk/dir/sample3.html" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [04/Jan/2000:11:11:12 +0000] "GET /notfound.html HTTP/1.0" 404 0 "http://badreferrer.com/" "Mozilla/4.0 [en] (X11; I; Linux)" host.analog.cx - - [04/Jan/2000:11:21:12 +0000] "GET /failed.html HTTP/1.0" 404 0 "http://failedreferrer.com/" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [04/Jan/2000:12:01:12 +0000] "GET /redirected.html HTTP/1.0" 301 0 "http://redirectedref.com/" "Mozilla/4.0 [en] (X11; I; Linux)" host.analog.cx - - [04/Jan/2000:12:11:12 +0000] "GET /redir.html HTTP/1.0" 301 0 "http://redirref.com/" "Mozilla/4.0 [en] (X11; I; Linux)" statslab.cam.ac.uk - - [04/Jan/2000:13:11:12 +0000] "GET /sample.html HTTP/1.0" 200 1234 "http://google.com/search?q=sample%20search" "Mozilla/4.0 [en] (X11; I; Linux)" analog-ce-6.0.17/src/000077500000000000000000000000001406366436600142405ustar00rootroot00000000000000analog-ce-6.0.17/src/Makefile000066400000000000000000000227761406366436600157160ustar00rootroot00000000000000# Makefile for analog 6.0 # Please read docs/Readme.html, or http://www.analog.cx/ # This is a general Unix-like Makefile: Makefiles for other OS's can be found # in the "build" directory. CC = gcc # which compiler to use: eg cc, acc, gcc. NB Different # compilers need different CFLAGS, e.g., -O instead of -O2. MAKE = make # which "make" to use CFLAGS = -O2 # options, e.g. for optimisation or ANSI compilation. # Some OS's need -D_FILE_OFFSET_BITS=64 to support files > 2MB. # HP/UX cc needs CFLAGS = -Aa (HP/UX 9) or -Ae (HP/UX 10) # BeOS needs CFLAGS = -O2 -Wl,-L/boot/home/config/lib # BS2000/OSD needs CFLAGS = -XLLML -XLLMK # NeXTSTEP needs CFLAGS = -O2 -pipe -no-precomp DEFS = # any combination of -DNOPIPES -DNODNS -DNODIRENT -DNOGLOB ... # ... -DNOOPEN -DNOFOLLOW -DNOALARM -DNOGRAPHICS -DNOGMTIME ... # ... -DEBCDIC -DUSE_PLAIN_SETJMP ... # ... -DHAVE_GD -DHAVE_ZLIB -DHAVE_BZLIB -DHAVE_PCRE ... # ... -DNEED_STRCMP -DNEED_MEMMOVE -DNEED_STRTOUL ... # ... -DNEED_DIFFTIME -DHAVE_ADDR_T -DNEED_FLOATINGPOINT_H # All the options are explained at the bottom of this file. # # Solaris 2 (SunOS 5+) might need DEFS = -DNEED_STRCMP # SunOS 4 usually needs... # DEFS = -DNEED_MEMMOVE -DNEED_STRTOUL -DNEED_DIFFTIME -DNEED_FLOATINGPOINT_H # 64-bit Solaris and Tru64 version 5+ need DEFS = -DHAVE_ADDR_T # SCO OpenServer 5 needs DEFS = -DPATH_MAX=2048 # BeOS 5.0.3 or below needs DEFS = -DNODNS # DYNIX/ptx needs DEFS = -D_SOCKET_VERSION=11 # MPE/iX needs DEFS = -D_POSIX_SOURCE -D_SOCKET_SOURCE # OS = UNIX # Operating system: UNIX, DOS, WIN32, MAC, OS2, OSX, VMS # RISCOS, BEOS, NEXTSTEP, MPEIX, BS2000, AS400, OS390 LIBS = -lm # extra libraries needed; most platforms (but not OS X or BeOS) # need -lm LAST # if you defined HAVE_GD above you also need -lgd -lpng -ljpeg -lz # if you defined HAVE_ZLIB above you also need -lz # if you defined HAVE_BZLIB above you also need -lbz2 # if you defined HAVE_PCRE above you also need -lpcre # Also Solaris 2 (SunOS 5+) needs LIBS = -lnsl -lm # SCO Unix needs LIBS = -lsocket -lm # IRIX needs LIBS = -lc -lm # Windows compilers probably need LIBS = -lwsock32 -lm # BeOS 5.0.3 or below needs LIBS = -lnet -lglob; 5.0.4 or above # needs LIBS = -lbind -lglob; and install libglob from BeBits.com # OS/2 with EMX needs LIBS = -lsocket -lm # BS2000/OSD needs LIBS = -lsocket -lm # MPE/iX needs LIBS = -lsocket -lm # SVR4 needs LIBS = -lsocket -lnsl -lm # DYNIX/ptx needs LIBS = -L/usr/lib/bsd-socket -lsocket -lnsl -lm PROGRAM = analog TARGET = ../analog OBJS = alias.o analog.o cache.o dates.o globals.o hash.o init.o init2.o \ input.o macinput.o macstuff.o output.o output2.o outcro.o outhtml.o \ outlatex.o outplain.o outxhtml.o outxml.o process.o settings.o sort.o \ tree.o utils.o win32.o SUBDIRS = bzip2 libgd libpng pcre unzip zlib SUBDIROBJS = libgd/gd.o libgd/gd_io.o libgd/gd_io_file.o libgd/gd_png.o \ libgd/gdfontf.o libgd/gdfonts.o libgd/gdtables.o \ libpng/png.o libpng/pngerror.o libpng/pngmem.o libpng/pngset.o \ libpng/pngtrans.o libpng/pngwio.o libpng/pngwrite.o \ libpng/pngwtran.o libpng/pngwutil.o pcre/pcre.o \ zlib/adler32.o zlib/compress.o zlib/crc32.o zlib/deflate.o \ zlib/gzio.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o \ zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/trees.o \ zlib/uncompr.o zlib/zutil.o unzip/ioapi.o unzip/unzip.o \ bzip2/bzlib.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o \ bzip2/decompress.o bzip2/huffman.o bzip2/randtable.o HEADERS = anlghead.h anlghea2.h anlghea3.h anlghea4.h macdir.h \ pcre/pcre.h libgd/gd.h libgd/gdfontf.h libgd/gdfonts.h unzip/unzip.h \ zlib/zlib.h bzip2/bzlib.h ALLCFLAGS = $(CFLAGS) $(DEFS) -D$(OS) ALLOBJS = $(OBJS) $(SUBDIROBJS) $(PROGRAM): $(OBJS) $(SUBDIRS) $(HEADERS) Makefile $(CC) $(CFLAGS) -o $(TARGET) $(ALLOBJS) $(LIBS) # There doesn't seem to be a good way to write all these rules in a generic # form that works for all "make" programs bzip2: ALWAYS cd bzip2 && $(MAKE) 'CC=$(CC)' 'ALLCFLAGS=$(ALLCFLAGS)' libgd: ALWAYS cd libgd && $(MAKE) 'CC=$(CC)' 'ALLCFLAGS=$(ALLCFLAGS)' libpng: ALWAYS cd libpng && $(MAKE) 'CC=$(CC)' 'ALLCFLAGS=$(ALLCFLAGS)' pcre: ALWAYS cd pcre && $(MAKE) 'CC=$(CC)' 'ALLCFLAGS=$(ALLCFLAGS)' unzip: ALWAYS cd unzip && $(MAKE) 'CC=$(CC)' 'ALLCFLAGS=$(ALLCFLAGS)' zlib: ALWAYS cd zlib && $(MAKE) 'CC=$(CC)' 'ALLCFLAGS=$(ALLCFLAGS)' alias.o: alias.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c alias.c analog.o: analog.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c analog.c cache.o: cache.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c cache.c dates.o: dates.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c dates.c globals.o: globals.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c globals.c hash.o: hash.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c hash.c init.o: init.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c init.c init2.o: init2.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c init2.c input.o: input.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c input.c macinput.o: macinput.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c macinput.c macstuff.o: macstuff.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c macstuff.c output.o: output.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c output.c output2.o: output2.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c output2.c outcro.o: outcro.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c outcro.c outhtml.o: outhtml.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c outhtml.c outlatex.o: outlatex.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c outlatex.c outplain.o: outplain.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c outplain.c outxhtml.o: outxhtml.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c outxhtml.c outxml.o: outxml.c outxml.h $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c outxml.c process.o: process.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c process.c settings.o: settings.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c settings.c sort.o: sort.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c sort.c tree.o: tree.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c tree.c utils.o: utils.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c utils.c win32.o: win32.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c win32.c force: rm -f $(ALLOBJS) make $(PROGRAM) 'CFLAGS=$(CFLAGS)' 'LIBS=$(LIBS)' \ 'DEFS=$(DEFS)' 'CC=$(CC)' clean: rm -f $(ALLOBJS) $(TARGET) *~ */*~ ALWAYS: # OK, here's the details on all the DEFS options, in case anyone needs to know. # NOPIPES excludes non-ANSI functions popen() and pclose(). You will lose the # UNCOMPRESS command. # NODNS excludes all the DNS lookup code. This is platform-dependent, but # typically involves header files and functions like inet_addr() # and gethostbyaddr(). # NODIRENT stops you using wildcards in logfile names. This code is also # platform-dependent. But under Unix, the header file and function # glob() from POSIX.2 are used; _unless_ NOGLOB is defined, in which case # the header file and functions stat(), opendir(), readdir() and # closedir() are used instead. In this latter case, you can't use wildcards # in directory names. # NOOPEN excludes non-ANSI functions open() and fdopen(). This results in an # alternative, less safe locking mechanism for DNS files and cache files. # NOFOLLOW omits code including the functions realpath(), access() and stat() # and the header file and possibly . Analog won't # then follow symbolic links when guessing path names. # NOALARM omits code including the function alarm() and the header file # . You will lose the ability to set a DNS timeout. # # ** If all of the above are defined only features defined in ANSI C are used. # # NOGRAPHICS omits the code for generating pie charts, including all of libgd # and libpng. # HAVE_GD means you already have libgd (at least version 1.8), libpng, libjpeg # and zlib, and you want to use your version of these libraries not # mine. This is likely to reduce the size of the binary. Also you will gain # the JPEGCHARTS command. You will also need to include # "-lgd -lpng -ljpeg -lz" in the LIBS above. # HAVE_ZLIB means you already have zlib, and you want to use your version not # mine. This is likely to reduce the size of the binary. You will also need # to include "-lz" in the LIBS above. # HAVE_BZLIB means you already have bzlib, and you want to use your version not # mine. This is likely to reduce the size of the binary. You will also need # to include "-lbz2" in the LIBS above. # HAVE_PCRE means you already have libpcre, and you want to use your version # not mine. This is likely to reduce the size of the binary. # You will also need to include "-lpcre" in the LIBS. # EBCDIC is needed if your server uses the EBCDIC character set, not ASCII. # USE_PLAIN_SETJMP uses ANSI setjmp() instead of POSIX sigsetjmp(). # NEED_STRCMP, NEED_MEMMOVE, NEED_STRTOUL and NEED_DIFFTIME provide # replacements for standard functions missing on some systems. # NOGMTIME doesn't use the gmtime() function. # NEED_FLOATINGPOINT_H includes a header file called . # HAVE_ADDR_T is needed if inet_addr() returns in_addr_t which is not the # same as unsigned long. analog-ce-6.0.17/src/alias.c000066400000000000000000000643721406366436600155110ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** alias.c; functions to cope with aliasing. ***/ #include "anlghea3.h" /* Throughout this file, to avoid a buffer overflow, we must be careful when we do any operation which can increase the length of the name. Such operations are thankfully rare, except for user aliases in wildalias(). * To ensure this, most functions assume that char *name can hold an aliased name of length at least BLOCKSIZE - 1. (In practice we always copy the name into workspace and call the aliasing function with argument workspace.) */ choice do_alias(char *name, Memman *mp, Alias *aliashead, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte, choice type) { /* return ERR for corrupt/unwanted, else whether any alias done */ extern char *workspace; logical rc = TRUE; size_t len; strcpy(workspace, name); if (type == ITEM_FILE) rc = do_aliasr(workspace, dirsuffix, dirsufflength); else if (type == ITEM_HOST) rc = do_aliasS(workspace); else if (type == ITEM_REFERRER) rc = do_aliasf(workspace); else if (type == ITEM_BROWSER) rc = do_aliasB(workspace); else if (type == ITEM_VHOST) rc = do_aliasv(workspace); else if (type == ITEM_USER) rc = do_aliasu(workspace, usercase_insensitive); else if (type == REP_SEARCHREP || type == REP_INTSEARCHREP) /* nasty mix of ITEM_ & REP_, but it works because they are all distinct */ rc = do_aliasN(workspace, convfloor, multibyte); else if (type == REP_SEARCHSUM || type == REP_INTSEARCHSUM) rc = do_aliasn(workspace, convfloor, multibyte); else if (type == REP_BROWSUM) rc = do_aliasb(workspace); if (rc == FALSE) return(ERR); (void)do_aliasx(workspace, aliashead); if (!STREQ(workspace, name)) { len = strlen(workspace); memcpy((void *)submalloc(mp, len + 1), (void *)workspace, len); *((char *)(mp->curr_pos) + len) = '\0'; return(TRUE); } else return(FALSE); } /* User-specified aliases. * * Name is changed if necessary. Name MUST be at least BLOCKSIZE long. * * The function returns whether any alias matched. */ logical do_aliasx(char *name, Alias *aliashead) { int pmatch[PMATCH_SIZE]; Alias *ap; logical done; for (ap = aliashead, done = FALSE; ap != NULL && !done; TO_NEXT(ap)) { if (matchq(name, (ap->isregex)?((void *)(ap->pattern)):((void *)(ap->from)), ap->isregex, pmatch)) { done = TRUE; wildalias(name, ap->to, pmatch); } } return(done); } logical do_aliasr(char *name, char *dirsuffix, unsigned int dirsufflength) { #ifdef EBCDIC extern unsigned char os_toebcdic[]; #endif extern logical convertchar[256]; char *c, *d, *e1, *e2; unsigned int tempint = 0; /* NB Case insensitivity has been done (if necessary) in prealias() */ /* Zerothly, strip off #'s. These shouldn't get in the request, but do for some broken agents (particularly spiders). */ if ((c = strchr(name, '#')) != NULL) *c = '\0'; /* Halfthly, strip from semicolon to the end of the URL stem. (e.g. jsessionid). */ if ((c = strchr(name, ';')) != NULL) { d = strchr(name, '?'); if (d == NULL) d = strchr(c + 1, '\0'); if (c < d) memmove(c, d, strlen(d) + 1); } /* First, change %7E to ~, etc. */ c = name; while((c = strchr(c, '%')) != NULL) { sscanf(c + 1, "%2x", &tempint); if (tempint <= 0xFF && convertchar[tempint]) { /* could have been %-1 */ #ifdef EBCDIC tempint = os_toebcdic[tempint]; #endif *c = (char)tempint; memmove((void *)(c + 1), (void *)(c + 3), strlen(c + 3) + 1); } c++; } /* Secondly, if it begins with a colon, assume it's a Mac file and convert colons to slashes. */ c = name; if (*c == ':') { for ( ; *c != '\0'; c++) { if (*c == ':') *c = '/'; } } /* Otherwise, change backslashes to forward slashes. This is not strictly correct, but it's usually the right thing to do (to make the Directory Report correct). */ for ( ; *c != '\0' && *c != '?'; c++) { if (*c == '\\') *c = '/'; } /* Thirdly, if it ends with DIRSUFFIX (typically index.html), strip it */ e1 = strchr(name, '\0'); if ((e2 = strchr(name, '?')) != NULL) *e2 = '\0'; else e2 = e1; if (dirsufflength > 0 && dirsufflength < (unsigned int)(e2 - name) && *(e2 - dirsufflength - 1) == '/' && STREQ(e2 - dirsufflength, dirsuffix)) { memcpy((void *)(e2 - dirsufflength), (void *)e2, (size_t)(e1 - e2) + 1); if (e2 != e1) e2 -= dirsufflength; } if (e2 != e1) *e2 = '?'; /* Fourthly, // -> / ; /./ -> / ; /spam/../ -> / */ /* Used to use 3 strstr()s. More intuitive but MUCH slower. */ c = name; while ((c = strchr(c, '/')) != NULL && c < e2) { if (*(c + 1) == '/') { if (c != name && *(c - 1) == ':') c++; /* Don't translate http:// ; just skip to next / */ else memmove((void *)(c + 1), (void *)(c + 2), strlen(c + 2) + 1); } else if (*(c + 1) == '.') { if (*(c + 2) == '/') memmove((void *)(c + 1), (void *)(c + 3), strlen(c + 3) + 1); else if (*(c + 2) == '.' && *(c + 3) == '/') { d = c + 4; /* go back to prev slash (but not past // or start of name) */ if (c != name && *(c - 1) != '/') { while (*(--c) != '/' && c != name) ; } memmove((void *)(c + 1), (void *)d, strlen(d) + 1); if (c == name) *c = '/'; } else c++; } else c++; } return(TRUE); } logical do_aliasS(char *name) { #ifndef NODNS extern choice dnslevel; #endif char *c; int len; len = (int)strlen(name) - 1; /* NB offset by 1 */ /* DNS lookup */ #ifndef NODNS if (dnslevel != DNS_NONE && ISDIGIT(name[len])) { do_dns(name, NULL, dnslevel); len = (int)strlen(name) - 1; } #endif /* remove trailing dot */ if (name[len] == '.') name[len] = '\0'; /* convert to lower case */ for (c = name + len; c >= name; c--) *c = TOLOWER(*c); return(TRUE); } logical do_aliasf(char *name) { /* name must be at least BLOCKSIZE long */ #ifdef EBCDIC extern unsigned char os_toebcdic[]; #endif extern logical convertchar[256]; int defaultport = UNSET; char *c, *d; unsigned int tempint = 0; /* First, strip off #'s */ if ((c = strchr(name, '#')) != NULL) *c = '\0'; /* Strip from semicolon to the end of the URL stem. (e.g. jsessionid). */ if ((c = strchr(name, ';')) != NULL) { d = strchr(name, '?'); if (d == NULL) d = strchr(c + 1, '\0'); if (c < d) memmove(c, d, strlen(d) + 1); } /* Next, change %7E to ~, etc. */ c = name; while((c = strchr(c, '%')) != NULL) { sscanf(c + 1, "%2x", &tempint); if (tempint <= 0xFF && convertchar[tempint]) { #ifdef EBCDIC tempint = os_toebcdic[tempint]; #endif *c = (char)tempint; memmove((void *)(c + 1), (void *)(c + 3), strlen(c + 3) + 1); } c++; } /* Coerce method to lower case */ for (c = name; *c != ':' && *c != '\0'; c++) *c = TOLOWER(*c); if (*c != ':') return(FALSE); /* find out what sort of URL it is */ *c = '\0'; /* *c was already set to the first colon */ if (STREQ(name, "http")) defaultport = 80; else if (STREQ(name, "ftp")) defaultport = 21; else if (STREQ(name, "file")) return(FALSE); /* don't count file: URL's */ else if (STREQ(name, "https")) defaultport = 443; else if (STREQ(name, "news")) defaultport = 0; /* The rest probably never happen but they don't slow it down either because execution almost never gets to them. */ else if (STREQ(name, "gopher")) defaultport = 70; else if (STREQ(name, "telnet")) defaultport = 23; else if (STREQ(name, "wais")) defaultport = 210; else if (STREQ(name, "nntp")) defaultport = 119; else if (STREQ(name, "prospero")) defaultport = 1525; else if (STREQ(name, "mailto")) defaultport = 0; *c = ':'; /* Change backslash -> slash for the reason given in do_aliasr() */ c++; for (d = c; *d != '\0' && *d != '?'; d++) { if (*d == '\\') *d = '/'; } /* If "news:" or "mailto:" or unknown, that's all we do. Otherwise, check it has the // next and coerce hostname to lower case */ if (defaultport > 0) { if (*c != '/' || *(c + 1) != '/') return(FALSE); else for (c += 2; *c != '/' && *c != ':' && *c != '\0' && *c != '?'; c++) *c = TOLOWER(*c); /* strip trailing .'s from hostname */ for (d = c - 1; *d == '.'; d--) ; /* run back to before any dots */ if (d != c - 1) { memmove((void *)(d + 1), (void *)c, strlen(c) + 1); c = d + 1; } /* strip leading 0s from port numbers and cross out default port numbers */ if (*c == ':') { for (d = c + 1; *d == '0'; d++) ; /* run forward to after any 0's */ if (d != c + 1) memmove((void *)(c + 1), (void *)d, strlen(d) + 1); if (defaultport == atoi(c + 1)) { /* run forward to after all digits */ for (d = c + 2; ISDIGIT(*d); d++) ; memmove((void *)c, (void *)d, strlen(d) + 1); } } /* We don't want to change /./ -> / etc. even in http protocol, because we don't want to make assumptions about other people's file systems. */ /* So finally, trailing slash if no directory name given */ for ( ; *c != '/' && *c != '\0' && *c != '?'; c++) ; /* run to next slash or end of string */ if (*c != '/' && strlen(name) <= BLOCKSIZE - 2) { memmove((void *)(c + 1), (void *)c, strlen(c) + 1); *c = '/'; } } return(TRUE); } logical do_aliasB(char *name) { /* NB aliasB is at parse time, aliasb for compiling browsum */ char *c; /* cut (illegal) "via"s (e.g., via certain proxy or cache) */ if ((c = strstr(name, " via ")) != NULL) *c = '\0'; /* cut trailing spaces */ for (c = name + strlen(name) - 1; *c == ' ' && c > name; c--) *c = '\0'; if (c == name) return(FALSE); return(TRUE); } logical do_aliasu(char *name, logical case_insensitive) { if (case_insensitive) { for ( ; *name != '\0'; name++) { /* Some usernames have backslashes in which need to change to slashes */ if (*name == '\\') *name = '/'; else /* convert to lower case */ *name = TOLOWER(*name); } } else for ( ; *name != '\0'; name++) { /* separate loop for speed */ if (*name == '\\') *name = '/'; } return(TRUE); } logical do_aliasv(char *name) { /* just convert to lower case */ for ( ; *name != '\0'; name++) *name = TOLOWER(*name); return(TRUE); } logical do_aliasN(char *name, unsigned char convfloor, logical multibyte) { char *c, *d; /* lower case and convert %nm's by calling do_aliasn() */ do_aliasn(name, convfloor, multibyte); /* change unwanted characters to spaces */ /* 'unwanted' should be coordinated with nnextname() */ for (c = name; *c != '\0'; c++) { if (*c == '-') { /* remove except at beginning of word */ if ((c != name && *(c - 1) != ' ') || *(c + 1) == '+' || *(c + 1) == '-' || *(c + 1) == '"' || *(c + 1) == ',' || *(c + 1) == '(' || *(c + 1) == ')' || *(c + 1) == '.' || *(c + 1) == '\0' || ISSPACE(*(c + 1))) *c = ' '; } else if (*c == '.') { /* remove except between letters/numbers */ if (c == name || !ISALNUM(*(c - 1)) || !ISALNUM(*(c + 1))) *c = ' '; } else if (*c == '+' || *c == '"' || *c == ',' || *c == '(' || *c == ')' || ISSPACE(*c)) *c = ' '; } /* remove initial spaces */ if (ISSPACE(*name)) { for (c = name + 1; ISSPACE(*c); c++) ; memmove(name, c, strlen(c) + 1); } /* remove trailing spaces */ if (*name == '\0') return(FALSE); for (c = strchr(name, '\0') - 1; ISSPACE(*c); c--) ; *(c + 1) = '\0'; /* concatenate spaces */ c = name; for (c = strstr(c, " "); c != NULL; c = strstr(c + 1, " ")) { for (d = c + 2; *d == ' '; d++) ; /* run past contiguous spaces */ memmove(c + 1, d, strlen(d) + 1); } return(TRUE); } logical do_aliasn(char *name, unsigned char convfloor, logical multibyte) { /* NB Most of the filtering has already been done by nnextname() */ /* NB2 do_aliasN() calls this function, so if it's extended, we need to think about whether we want do_aliasN() to include the new stuff too. */ #ifdef EBCDIC extern unsigned char os_toebcdic[]; #endif unsigned int tempint = 0; char *c; /* lower case */ if (!multibyte) { for (c = name; *c != '\0'; c++) *c = TOLOWER(*c); } /* If required, change %nm's from the top half of character set */ /* NB convfloor is ASCII value, applied before conversion to EBCDIC */ /* Also change %25, %26, %3D and %3F here: see convertchar[] in globals.c */ c = name; while((c = strchr(c, '%')) != NULL) { sscanf(c + 1, "%2x", &tempint); if (tempint <= 0xFF && ((convfloor > 0 && tempint >= convfloor) || tempint == 0x25 || tempint == 0x26 || tempint == 0x3D || tempint == 0x3F)) { #ifdef EBCDIC tempint = os_toebcdic[tempint]; #endif *c = (char)tempint; memmove((void *)(c + 1), (void *)(c + 3), strlen(c + 3) + 1); } c++; } return(TRUE); } logical do_aliasb(char *name) { /* NB aliasB is at parse time, aliasb for compiling Browser Summary. */ /* See Bnextname() for the role of this function. */ char *s, *t; logical done = FALSE; if (headmatch(name, "Mozilla")) { if (*(name + 7) == '/' && *(name + 8) == '5') { /* Mozilla/5 is messy. The real version number should be written at the end of the brackets. Furthermore, there are (so far) three different version number formats, "m18", "0.8" and "rv:0.9.1+". To add to the confusion, we should spot those which are Netscape 6+ branded, which have the normal Mozilla version number but also the brand name on the end. We've filtered out Mozilla/5.0 (compatible) in Bnextname() so these should all be genuine Mozilla. But if we can't find a version number we'll just leave it as Mozilla, not Mozilla/5.0, to avoid confusing the two different numbering schemes. */ if ((t = strstr(name, ") Gecko/")) != NULL) { /* There should only be one ')', but let's be cautious. */ /* First try pulling off Netscape version number. There are two cases: Netscape/7.x, or Netscape6/6.x which should be translated to just Netscape/6.x. */ if (headmatch(t + 17 /* after "Gecko/YYYYMMDD" */, "Netscape")) { memmove(name, t + 17, 8); if (*(t + 25) == '6' && *(t + 26) == '/') memmove(name + 8, t + 26, strlen(t + 26) + 1); else memmove(name + 8, t + 25, strlen(t + 25) + 1); done = TRUE; } /* Otherwise look for normal Mozilla version number */ else { for (s = t - 1; *s != ' ' && s != name; s--) ; /* run back to space before last element inside brackets */ if (s != name && *(s - 1) == ';') { s++; if (headmatch(s, "rv:")) s += 3; if (ISDIGIT(*s) || (*s == 'm' && ISDIGIT(*(s + 1)))) {/* Found it*/ if (*s == 'm') *s = 'M'; memcpy(name + 8, s, t - s); *(name + 8 + (t - s)) = '\0'; done = TRUE; } } } } if (!done) *(name + 7) = '\0'; return(TRUE); } /* All other Mozilla's are reckoned to be Netscape */ memmove(name + 8, name + 7, strlen(name + 7) + 1); strncpy(name, "Netscape", 8); } /* Convert "Galeon; n.m" to "Galeon/n.m"; n a digit tested in Bnextname() */ else if (headmatch(name, "Galeon; ")) { *(name + 6) = '/'; memmove(name + 7, name + 8, strlen(name + 8) + 1); return(TRUE); } /* In general, convert "Name n.m" to "Name/n.m" if n a digit */ for (s = name; ISALNUM(*s); s++) ; if (*s == ' ' && ISDIGIT(*(s + 1))) *s = '/'; return(TRUE); } #ifndef NODNS logical dnsresolve(char *name, choice level) { /* name must be at least BLOCKSIZE long */ #ifndef NOALARM extern unsigned int dnstimeout; extern JMP_BUF jumpbuf; #endif volatile logical done = FALSE; #ifndef MAC IN_ADDR_T addr; #ifdef VMS char *addrp; #else #ifdef AS400 unsigned char *addrp; #else const char *addrp; #endif #endif struct hostent *tempp; #endif if (level < DNS_LOOKUP) return(FALSE); debug('D', "Looking up %s:", name); #ifdef MAC done = IpAddr2Name(name); /* Doesn't currently include code to use SIGALRM */ #else addr = inet_addr(name); if (addr != INET_ADDR_ERR) { addrp = (char *) &addr; #ifndef NOALARM if (SETJMP(jumpbuf)) signal(SIGALRM, SIG_DFL); /* reset to default handling in case SIGALRM is raised exogenously */ else { signal(SIGALRM, sighandler); alarm(dnstimeout); #endif tempp = gethostbyaddr(addrp, sizeof(IN_ADDR_T), AF_INET); #ifndef NOALARM alarm(0); signal(SIGALRM, SIG_DFL); #endif if (tempp != NULL && tempp->h_name != NULL && tempp->h_name[0] != '\0') { /* hostnames shouldn't be 32,000 characters long, but... */ strncpy(name, tempp->h_name, BLOCKSIZE - 1); name[BLOCKSIZE - 1] = '\0'; done = TRUE; } #ifndef NOALARM } #endif } #endif /* not MAC */ if (done) debug('D', " resolved to %s", name); else debug('D', " can't resolve"); return(done); } void do_dns(char *name, char *alias, choice level) { /* This is simplified from hashfind(). It is called in two situations: @ During reading of DNS file. In this case alias != NULL. @ During do_aliasS(). Then alias == NULL, and name can be changed. In this case, dnsresolve() assumes that name is BLOCKSIZE long. */ extern Hashtable *dnstable; extern timecode_t starttimeuxc; extern FILE *dnsfilep; extern Memman *xmemman; Hashindex *lp, *lastlp; unsigned long magic; logical done = FALSE; if (TOO_FULL(dnstable->n, dnstable->size)) dnstable = rehash(dnstable, NEW_SIZE(dnstable->size), NULL); MAGICNO(magic, name, dnstable->size); lp = dnstable->head[magic]; lastlp = NULL; while (!done) { if (lp == NULL) { /* need a new index entry */ lp = (Hashindex *)submalloc(xmemman, sizeof(Hashindex)); if (lastlp == NULL) dnstable->head[magic] = lp; else lastlp->next = lp; lp->name = (char *)submalloc(xmemman, strlen(name) + 1); strcpy(lp->name, name); /* NB don't use lp->own */ if (alias != NULL) { /* initial build */ if (STREQ(alias, "*")) lp->other = NULL; else { lp->other = submalloc(xmemman, strlen(alias) + 1); strcpy((char *)(lp->other), alias); } } else if (dnsresolve(name, level)) { /* potentially changes name */ lp->other = submalloc(xmemman, strlen(name) + 1); strcpy((char *)(lp->other), name); if (dnsfilep != NULL) { if (strchr(lp->name, ' ') == NULL && strchr(name, ' ') == NULL && strlen(lp->name) + strlen(name) < 240) { /* otherwise will be corrupt at read time */ fprintf(dnsfilep, "%ld %s %s\n", starttimeuxc, lp->name, name); fflush(dnsfilep); } } } else { lp->other = NULL; if (dnsfilep != NULL) { if (strchr(lp->name, ' ') == NULL && strlen(lp->name) < 240) { /* otherwise will be corrupt at read time */ fprintf(dnsfilep, "%ld %s *\n", starttimeuxc, lp->name); fflush(dnsfilep); } } } lp->next = NULL; (dnstable->n)++; done = TRUE; } else if (STREQ(lp->name, name)) { if (alias != NULL) { /* initial build: overwrite */ if (STREQ(alias, "*")) lp->other = NULL; else { lp->other = submalloc(xmemman, strlen(alias) + 1); strcpy((char *)(lp->other), alias); } } else if (lp->other != NULL) strcpy(name, (char *)(lp->other)); done = TRUE; } else { lastlp = lp; TO_NEXT(lp); } } } #endif /* Change name to its alias. Matching has already been checked. name MUST have length >= BLOCKSIZE. */ void wildalias(char *name, AliasTo *to, int pmatch[]) { char *s, *ans; int *pm; size_t len, tolen; len = strlen(name); ans = name + len; /* The aliased name is built AFTER the orig name. */ for (s = ans; to != NULL; TO_NEXT(to)) { pm = &(pmatch[to->after]); tolen = strlen(to->string); len += tolen; if (to->after >= 0 && pm[0] >= 0) len += (size_t)(pm[1] - pm[0]); if (len >= BLOCKSIZE - 1) { ans[0] = '\0'; /* so we just return unaliased name */ return; } strcpy(s, to->string); s += tolen; if (to->after >= 0 && pm[0] >= 0) { memcpy((void *)s, (void *)(name + pm[0]), (size_t)(pm[1] - pm[0])); s += pm[1] - pm[0]; } } *s = '\0'; memmove((void *)name, (void *)ans, strlen(ans) + 1); } /* Now preliminary file/referrer aliasing, to add prefix & query string */ choice prealias(Memman *mm, Memman *mmv, Hashentry *vhost, Memman *mmq, logical case_insensitive, char *prefix, size_t prefixlen, int pvpos, Include *argshead) { extern Hashentry *blank_entry; size_t len, len2 = 0; char *curr, *next, *mmqstart, *c; /* First, fold to lower case */ if (case_insensitive) { for (c = mm->curr_pos; *c != '\0' && *c != '?'; c++) *c = TOLOWER(*c); } /* Then add prefix */ if (prefix != NULL) { len = prefixlen; if (pvpos >= 0) { if (ENTRY_BLANK(vhost)) return(-1); /* %v in prefix but no vhost => corrupt */ else { len2 = strlen((char *)(mmv->curr_pos)); len += len2 - 2; /* NB vhost may be marked for deletion (next_pos == curr_pos), but has not yet overwritten. */ } } curr = (char *)(mm->curr_pos); next = (char *)(mm->next_pos); if ((char *)(mm->block_end) - (char *)(mm->next_pos) < (ptrdiff_t)len) { c = (char *)submalloc(mm, len); mm->next_pos = (void *)((char *)(mm->curr_pos) + (next - curr)); if ((char *)(mm->block_end) - (char *)(mm->next_pos) < (ptrdiff_t)len) return(-2); /* filename + prefix too long => corrupt */ } memmove((void *)((char *)(mm->curr_pos) + len), (void *)curr, (size_t)(next - curr)); if (pvpos < 0) memmove(mm->curr_pos, (void *)prefix, prefixlen); else { memmove(mm->curr_pos, (void *)prefix, (size_t)pvpos); memmove((void *)((char *)(mm->curr_pos) + pvpos), mmv->curr_pos, len2); memmove((void *)((char *)(mm->curr_pos) + pvpos + len2), (void *)(prefix + pvpos + 2), prefixlen - (size_t)pvpos - 2); } mm->next_pos = (void *)((char *)(mm->next_pos) + len); } /* end prefix != NULL */ /* Finally, add or delete query string */ if ((char *)(mmq->next_pos) - (char *)(mmq->curr_pos) > 1 && (((char *)(mmq->curr_pos))[0] != '-' || ((char *)(mmq->curr_pos))[1] != '\0')) { /* length >= 1 and not just "-" (no need to call STREQ/strcmp) */ if (included(mm->curr_pos, FALSE, argshead) && strchr(mm->curr_pos, '?') == NULL) { mmqstart = (char *)(mmq->curr_pos); if (*mmqstart == '?') /* assume initial ? included in %q, Apache-style */ mmqstart++; len = (size_t)((char *)(mmq->next_pos) - mmqstart); if ((char *)(mm->block_end) - (char *)(mm->next_pos) < (ptrdiff_t)len) { curr = (char *)(mm->curr_pos); next = (char *)(mm->next_pos); memmove(submalloc(mm, len), (void *)curr, (size_t)(next - curr)); mm->next_pos = (void *)((char *)(mm->curr_pos) + (next - curr)); if ((char *)(mm->block_end) - (char *)(mm->next_pos) < (ptrdiff_t)len) return(-2); /* filename + query string too long => corrupt */ } *((char *)(mm->next_pos) - 1) = '?'; memmove(mm->next_pos, (void *)mmqstart, len); mm->next_pos = (void *)((char *)(mm->next_pos) + len); } } else if ((c = strchr((char *)(mm->curr_pos) + 1, '?')) != NULL) { *c = '\0'; if (included(mm->curr_pos, FALSE, argshead)) *c = '?'; else mm->next_pos = c + 1; } mmq->next_pos = mmq->curr_pos; /* always reset mmq */ return(OK); } void prealiasS(Memman *mm, Memman *mms) { /* Choose between %S and %s tokens */ size_t len; if ((char *)(mms->next_pos) - (char *)(mms->curr_pos) > 1 && (((char *)(mms->curr_pos))[0] != '-' || ((char *)(mms->curr_pos))[1] != '\0')) { /* length >= 1 and not just "-", i.e. mms exists */ if ((char *)(mm->next_pos) - (char *)(mm->curr_pos) <= 1 || (((char *)(mm->curr_pos))[0] == '-' && ((char *)(mm->curr_pos))[1] == '\0')) { /* mm has the opposite property: so copy mms into mm */ len = strlen((char *)(mms->curr_pos)); mm->next_pos = mm->curr_pos; memcpy(submalloc(mm, len + 1), mms->curr_pos, len + 1); } } mms->next_pos = mms->curr_pos; /* in any case, reset mms */ return; } void reverseonename(Hashindex *p) { extern Memman *xmemman; static char *s = NULL; static size_t len = 0; char *t1, *t2, *t3; size_t l, m = 0; logical done; /* reversing done in own space, so pull off const char * cases first */ if (STREQ(p->name, LNGSTR_NODOMAIN) || STREQ(p->name, LNGSTR_UNKDOMAIN)) return; l = strlen(p->name); /* numerical host */ if (ISDIGIT(*(p->name + l - 1)) && ISDIGIT(*(p->name))) { t1 = p->name; t2 = t1; t3 = t1; while (*t3 == '0') t3++; for (done = FALSE; !done; t2++) { if (*t2 == '.') { ENSURE_LEN(s, len, m + (t2 - t1) + 3); for (l = t2 - t1; l < 3; l++) *(s + (m++)) = '0'; memcpy((void *)(s + m), (void *)t3, (size_t)(t2 - t3 + 1)); m += t2 - t3 + 1; t2++; t1 = t2; t3 = t2; while (*t3 == '0') t3++; } else if (*t2 == '\0') { ENSURE_LEN(s, len, m + (t2 - t1) + 3); for (l = t2 - t1; l < 3; l++) *(s + (m++)) = '0'; memcpy((void *)(s + m), (void *)t3, (size_t)(t2 - t3 + 1)); m += t2 - t3 + 1; if (strlen(p->name) < (l = strlen(s))) p->name = (char *)submalloc(xmemman, l + 1); memcpy((void *)(p->name), (void *)s, m); done = TRUE; } } } else { ENSURE_LEN(s, len, l + 1); for (t1 = p->name + l, t2 = t1, done = FALSE; !done; t1--) { if (*t1 == '.') { memcpy((void *)(s + m), (void *)(t1 + 1), (size_t)(t2 - t1 - 1)); m += t2 - t1; /* including the dot below */ t2 = t1; *(s + m - 1) = '.'; } if (t1 == p->name) { memcpy((void *)(s + m), (void *)t1, (size_t)(t2 - t1)); m += t2 - t1 + 1; *(s + m - 1) = '\0'; memcpy((void *)(p->name), (void *)s, m); done = TRUE; } } } } void reversenames(Hashindex *ans) { Hashindex *p; for (p = ans; p != NULL; TO_NEXT(p)) reverseonename(p); } analog-ce-6.0.17/src/analog.c000066400000000000000000000122311406366436600156440ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** analog.c; the main function ***/ #include "anlghea3.h" int main(int argc, char *argv[]) { extern char *pos, *record_start, *commandname; extern unsigned long progressfreq; extern Inputformatlist *logformat; extern logical vblesonly; extern FILE *errfile; #ifndef NODNS extern char *dnsfile, *dnslockfile; extern FILE *dnsfilep, *dnslock; #endif Logfile *logfilep; Options *op; Inputformatlist *fmt; unsigned long linesread = 0, nextreport; ptrdiff_t corrupt_pos; time_t progfreqtime; struct tm *pflt; choice rc; op = (Options *)xmalloc(sizeof(Options)); initialise(argc, argv, op); if (vblesonly) { report_vbles(op); my_exit(EXIT_SUCCESS); } nextreport = progressfreq; for (logfilep = op->miscopts.logfile[1]; logfilep != NULL; TO_NEXT(logfilep)) { if (my_lfopen(logfilep, "cache file")) { readcache(logfilep, op->hash, op->no_cols, op->datacols, op->data2cols, op->arraydata, op->wanthead, op->ispagehead, &(op->dman), op->outopts.tree, op->outopts.derv, op->outopts.alltrees, op->outopts.alldervs, op->miscopts.lowmem, op->miscopts.dirsuffix, op->miscopts.dirsufflength, op->miscopts.usercase_insensitive, op->outopts.convfloor, op->outopts.multibyte, op->miscopts.granularity); } my_lfclose(logfilep, op->miscopts.logfile[1], NULL, "cache file", &(op->dman), op->miscopts.data, &(op->miscopts.bytes), &(op->miscopts.bytes7)); } for (logfilep = op->miscopts.logfile[0]; logfilep != NULL; TO_NEXT(logfilep)) { if (logfile_init(logfilep)) { rc = FALSE; while (rc != EOF) { corrupt_pos = -1; record_start = pos; for (fmt = logfilep->format, rc = FALSE; rc == FALSE && fmt != NULL; TO_NEXT(fmt)) { rc = parsenextrecord(logfilep, fmt->form); if (rc == TRUE) { process_data(logfilep, op->hash, op->arraydata, fmt->count, op->code2type, op->datacols, op->data2cols, op->no_cols, op->wanthead, op->ispagehead, op->aliashead, op->argshead, op->refargshead, &(op->dman), op->outopts.tree, op->outopts.derv, op->outopts.alltrees, op->outopts.alldervs, op->miscopts.lowmem, op->miscopts.case_insensitive, op->miscopts.usercase_insensitive, op->outopts.convfloor, op->outopts.multibyte, op->miscopts.dirsuffix, op->miscopts.dirsufflength, op->miscopts.granularity); } else if (rc == FALSE) corrupt_pos = MAX(pos - record_start, corrupt_pos); else if (rc == NEWLOGFMT) { logfilep->format = logformat; if (correctlogfmt(logfilep, op->wanthead, op->code2type, &(op->dman)) == NULL) { debug('F', "Ignoring logfile %s, which contains no items " "being analysed", logfilep->name); rc = EOF; } } else if (rc == BADLOGFMT) { warn('F', TRUE, "Can't auto-detect format of logfile %s: ignoring it", logfilep->name); rc = EOF; } } /* end for(fmt) */ if (rc == FALSE) corrupt_line(logfilep, "", corrupt_pos); if ((++linesread) == nextreport) { time(&progfreqtime); pflt = localtime(&progfreqtime); fprintf(errfile, "%s: [%02d:%02d:%02d] %lu lines read\n", commandname, pflt->tm_hour, pflt->tm_min, pflt->tm_sec, linesread); if (errfile != stderr) fprintf(stderr, "%s: [%02d:%02d:%02d] %lu lines read\n", commandname, pflt->tm_hour, pflt->tm_min, pflt->tm_sec, linesread); nextreport += progressfreq; } #ifdef MAC_EVENTS if ((linesread % MAC_IDLE_FREQ) == 0) MacIdle(); #endif } /* end while (rc != EOF) */ } /* if (logfile_init(logfilep)) */ my_lfclose(logfilep, op->miscopts.logfile[1], op->miscopts.logfile[0], "logfile", &(op->dman), op->miscopts.data, &(op->miscopts.bytes), &(op->miscopts.bytes7)); } /* for (logfilep) */ #ifndef NODNS if (dnsfilep != NULL) { fclose(dnsfilep); debug('F', "Closing DNS output file %s", dnsfile); } if (dnslock != NULL) { fclose(dnslock); dnslock = NULL; if (remove(dnslockfile) != 0) warn('F', TRUE, "Trouble deleting DNS lock file %s", dnslockfile); else debug('F', "Deleting DNS lock file %s", dnslockfile); } #endif unhashall(op->hash, &(op->gooditems), &(op->baditems)); if (!STREQ(op->outopts.cacheoutfile, "none")) outputcache(op->outopts.cacheoutfile, op->gooditems, &(op->dman), op->arraydata, op->miscopts.data, op->miscopts.bytes, op->data2cols); if (op->outopts.outstyle != OUT_NONE) output(&(op->outopts), op->gooditems, op->baditems, &(op->dman), op->arraydata, op->miscopts.data, op->miscopts.bytes, op->miscopts.bytes7, op->datacols, op->data2cols, op->no_cols, op->miscopts.granularity); my_exit(EXIT_SUCCESS); return(EXIT_SUCCESS); /* just to stop compiler complaining */ } analog-ce-6.0.17/src/anlghea2.h000066400000000000000000000372051406366436600161010ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** anlghea2.h: second header file ***/ /*** This file is a convenient place to store defaults for various options. *** You can redefine them if you want, but you probably don't want to because *** they have sensible defaults and it's easier to change them at run-time. *** See anlghead.h for the options you are likely to want to change. ***/ #ifndef ANLGHEA2_H #define ANLGHEA2_H #ifndef ANLGHEAD #include "anlghead.h" #endif /*** The first few options are compiled into the program. They can't be changed without re-compiling the program. ***/ #define BLOCKSIZE (32768) /* Analog allocates memory in blocks of this many bytes. Also any logfile lines this long or longer will be rejected. */ #define MAX_CONFIGS (50) /* The maximum number of configuration files that are allowed. */ #define MAXPAGEWIDTH (240) /* the maximum allowed value of the PAGEWIDTH variable */ #ifndef ALIGNSIZE #define ALIGNSIZE (8) /* All objects can align on boundaries that are multiples of this. This is system-dependent, but I expect 8 to be big enough for almost everyone. */ #endif /*** The rest of the options can be overridden when the program is run. ***/ #ifndef CACHEOUTFILE #define CACHEOUTFILE "none" /* The default file for cache output. Use "none" for no cache file. */ #endif #ifndef CACHEFILE #define CACHEFILE "none" /* The file for cache input. Again, can be "none". */ #endif #ifndef NODNS #define DNSFILE "dnscache" /* where to store resolved addresses so we don't have to look them up next time */ #define DNSLOCKFILE "dnslock" /* A lock file to stop two processes trying to write the DNSFILE at once */ #define DNS (DNS_NONE) /* level of DNS activity. Can be DNS_NONE, DNS_READ, DNS_LOOKUP or DNS_WRITE. */ #define DNSGOODHOURS (100000) /* How many hours lookups stay fresh for before we have to look them up again. 100000 = 11.4 years! */ #define DNSBADHOURS (336) /* After how many hours to retry failed lookups. 336 = two weeks. */ #define DNSTIMEOUT (0) /* How many seconds to wait for the DNS server to reply before giving up. This is only used on some platforms. It is set to 0 by default, which means off, because it breaks DNS lookups on many platforms. */ #endif #define DIRSUFFIX "index.html" /* the default filename tried if a directory is requested. The program combines statistics from /dir/ and /dir/DIRSUFFIX. If you don't wish this combining to occur, define DIRSUFFIX to be "". The usual value is "index.html". */ #define CASE_INSENSITIVE (TRUE) #ifdef UNIX #undef CASE_INSENSITIVE #define CASE_INSENSITIVE (FALSE) #endif #ifdef OSX #undef CASE_INSENSITIVE #define CASE_INSENSITIVE (FALSE) #endif #ifdef BEOS #undef CASE_INSENSITIVE #define CASE_INSENSITIVE (FALSE) #endif #ifdef NEXTSTEP #undef CASE_INSENSITIVE #define CASE_INSENSITIVE (FALSE) #endif /* Do you have a case sensitive or case insensitive file system? */ #define USERCASE_INSENSITIVE (TRUE) /* The same for user names */ #define SEARCHCHARCONVERT (UNSET) /* Whether to convert %nm's from the top half of the character set in the search reports. UNSET means yes for single-byte character sets, no for multibyte character sets. */ #define REPORTORDER "x1QmWDdHwh4657oZSlLujJkKfsNnBbpvRMcPztiEIYyr" /* A string like "x1QmWDdHwh4657oZSlLujJkKfsNnBbpvRMcPztiEIYyr" giving the order in which the reports will be output. You should include each of the above letters exactly once. See docs/output.html for which report has which code letter.*/ /* Whether we want each of the reports by default */ #define GENERAL (TRUE) /* General Summary */ #define YEARLY (FALSE) /* Yearly Report */ #define QUARTERLY (FALSE) /* Quarterly Report */ #define MONTHLY (TRUE) /* Monthly Report */ #define DAILYSUM (TRUE) /* Daily Summary */ #define DAILYREP (FALSE) /* Daily Report */ #define WEEKLY (FALSE) /* Weekly Report */ #define HOURLYSUM (TRUE) /* Hourly Summary */ #define WEEKHOUR (FALSE) /* Hour of the Week Summary */ #define HOURLYREP (FALSE) /* Hourly Report */ #define QUARTERREP (FALSE) /* Quarter-Hour Report */ #define QUARTERSUM (FALSE) /* Quarter-Hour Summary */ #define FIVEREP (FALSE) /* Five-Minute Report */ #define FIVESUM (FALSE) /* Five-Minute Summary */ #define DOMAINREP (TRUE) /* Domain Report */ /* Not called DOMAIN because would clash with on some systems */ #define ORGANISATION (TRUE) /* Organisation Report */ #define DIRECTORY (TRUE) /* Directory Report */ #define FILETYPE (TRUE) /* File Type Report */ #define REQUEST (TRUE) /* Request Report */ #define REDIRREP (FALSE) /* Redirection Report */ #define FAILREP (FALSE) /* Failure Report */ #define SIZEREP (TRUE) /* File Size Report */ #define PROCTIME (FALSE) /* Processing Time Report */ #define HOST (FALSE) /* Host Report */ #define REDIRHOST (FALSE) /* Host Report */ #define FAILHOST (FALSE) /* Host Report */ #define REFERRER (FALSE) /* Referrer Report */ #define REFSITE (FALSE) /* Referring Site Report */ #define REDIRREF (FALSE) /* Redirected Referrer Report */ #define FAILREF (FALSE) /* Failed Referrer Report */ #define VHOST (FALSE) /* Virtual Host Report */ #define REDIRVHOST (FALSE) /* Virtual Host Redirection Report */ #define FAILVHOST (FALSE) /* Virtual Host Failure Report */ #define USER (FALSE) /* User Report */ #define REDIRUSER (FALSE) /* User Report */ #define FAILUSER (FALSE) /* Failed User Report */ #define SEARCHQUERY (FALSE) /* Search Query Report */ #define SEARCHWORD (TRUE) /* Search Word Report */ #define INTSEARCHQUERY (FALSE) /* Internal Search Query Report */ #define INTSEARCHWORD (FALSE) /* Internal Search Word Report */ #define BROWSERSUM (FALSE) /* Browser Summary */ #define BROWSERREP (FALSE) /* Browser Report */ #define OSREP (TRUE) /* Operating System Report */ #define STATUS (TRUE) /* Status Code Report */ #define GOTOS (TRUE) /* "Go To" lines: TRUE, FALSE or FEW */ #define RUNTIME (TRUE) /* "Running time" line: TRUE or FALSE */ #define DESCRIPTIONS (TRUE) /* Report descriptions: TRUE or FALSE */ #define REPORTSPAN (FALSE) /* Announce time period which each report spans. This is FALSE by default because it uses a lot of memory to calculate. */ #define REPORTSPANTHRESHOLD (60) /* Only announce an individual report span if it differs from the overall span of the whole report by at least this many minutes at one end. So set to 0 to list each individual one regardless. */ #define DOMCOLS "Rb" /* Which columns we want to appear in the domain report, and in which order. The string can contain any of the following letters: R Number of requests from each domain r Percentage of the requests from each domain P Number of requests for pages from each domain p Percentage of the requests for pages from each domain B Total number of bytes transferred to each domain b The percentage of traffic to each domain d Date of last access from each domain D Date and time of last access c Date of first access C Date and time of first access N Number in list */ /* And the same for the other reports */ #define ORGCOLS "Rb" #define HOSTCOLS "Rb" #define REDIRHOSTCOLS "R" #define FAILHOSTCOLS "R" #define DIRCOLS "Rb" #define TYPECOLS "Rb" #define REQCOLS "RbD" #define REDIRCOLS "R" #define FAILCOLS "R" #define YEARCOLS "RP" #define QUARTERLYCOLS "RP" #define MONTHCOLS "RP" #define DAYSUMCOLS "RP" #define DAYREPCOLS "RP" #define WEEKCOLS "RP" #define HOURSUMCOLS "RP" #define WEEKHOURCOLS "RP" #define HOURREPCOLS "RP" #define QUARTERSUMCOLS "RP" #define QUARTERREPCOLS "RP" #define FIVESUMCOLS "RP" #define FIVEREPCOLS "RP" #define REFCOLS "R" #define REFSITECOLS "R" #define REDIRREFCOLS "R" #define FAILREFCOLS "R" #define BROWSUMCOLS "NRP" #define BROWREPCOLS "RP" #define OSCOLS "NRP" #define SIZECOLS "Rb" #define PROCTIMECOLS "R" #define VHOSTCOLS "Rb" #define REDIRVHOSTCOLS "R" #define FAILVHOSTCOLS "R" #define USERCOLS "Rb" #define REDIRUSERCOLS "R" #define FAILUSERCOLS "R" #define SEARCHQUERYCOLS "R" #define SEARCHWORDCOLS "R" #define INTSEARCHQUERYCOLS "R" #define INTSEARCHWORDCOLS "R" #define STATUSCOLS "R" /* Should the time graphs be calculated by requests 'R', bytes 'B' or pages 'P': or use 'r', 'b', 'p' for graphic-free barcharts. */ #define YEARGRAPH 'P' #define QUARTERLYGRAPH 'P' #define MONTHGRAPH 'P' #define DAYSUMGRAPH 'P' #define DAYREPGRAPH 'P' #define HOURSUMGRAPH 'P' #define WEEKHOURGRAPH 'P' #define HOURREPGRAPH 'P' #define WEEKGRAPH 'P' #define QUARTERSUMGRAPH 'P' #define QUARTERREPGRAPH 'P' #define FIVESUMGRAPH 'P' #define FIVEREPGRAPH 'P' /* Should they go forwards (oldest entries at top) or backwards? */ #define YEARBACK (FALSE) #define QUARTERLYBACK (FALSE) #define MONTHBACK (FALSE) #define DAYBACK (FALSE) #define HOURBACK (FALSE) #define WEEKBACK (FALSE) #define QUARTERBACK (FALSE) #define FIVEBACK (FALSE) /* The maximum number of rows in each (0 for "show all time") */ #define YEARROWS (0) #define QUARTERLYROWS (0) #define MONTHROWS (0) #define WEEKROWS (0) #define DAYROWS (42) #define HOURROWS (72) #define QUARTERROWS (96) #define FIVEROWS (288) /* The "floor" for each report. See docs/othreps.html for the possible formats for these strings. */ #define REQFLOOR "20r" #define REQARGSFLOOR "10r" #define REDIRFLOOR "-30r" #define REDIRARGSFLOOR "10r" #define FAILFLOOR "-30r" #define FAILARGSFLOOR "10r" #define DOMFLOOR "0b" #define SUBDOMFLOOR "0.5%b" #define ORGFLOOR "-20r" #define SUBORGFLOOR "0.5%r" #define DIRFLOOR "0.01%b" #define SUBDIRFLOOR "0.01%b" #define TYPEFLOOR "0.1%b" #define SUBTYPEFLOOR "0.1%b" #define HOSTFLOOR "-50r" #define REDIRHOSTFLOOR "-20r" #define FAILHOSTFLOOR "-20r" #define REFFLOOR "20r" #define REFARGSFLOOR "10r" #define REFSITEFLOOR "-30r" #define REFDIRFLOOR "50r" #define REDIRREFFLOOR "-30r" #define REDIRREFARGSFLOOR "10r" #define FAILREFFLOOR "-30r" #define FAILREFARGSFLOOR "10r" #define BROWSUMFLOOR "-20p" #define SUBBROWFLOOR "-10p" #define BROWREPFLOOR "-40p" #define OSFLOOR "0p" #define SUBOSFLOOR "0p" #define VHOSTFLOOR "-20b" #define REDIRVHOSTFLOOR "-20r" #define FAILVHOSTFLOOR "-20r" #define USERFLOOR "-50r" #define REDIRUSERFLOOR "-20r" #define FAILUSERFLOOR "-20r" #define SEARCHQUERYFLOOR "-30r" #define SEARCHWORDFLOOR "-30r" #define INTSEARCHQUERYFLOOR "-30r" #define INTSEARCHWORDFLOOR "-30r" #define STATUSFLOOR "0r" /* How to sort each report: REQUESTS, REQUESTS7, PAGES, PAGES7, BYTES, BYTES7, ALPHABETICAL, DATESORT, FIRSTDATE or RANDOM */ #define REQSORTBY (REQUESTS) #define REDIRSORTBY (REQUESTS) #define FAILSORTBY (REQUESTS) #define DOMSORTBY (BYTES) #define ORGSORTBY (REQUESTS) #define DIRSORTBY (BYTES) #define TYPESORTBY (BYTES) #define HOSTSORTBY (ALPHABETICAL) #define REDIRHOSTSORTBY (REQUESTS) #define FAILHOSTSORTBY (REQUESTS) #define REFSORTBY (REQUESTS) #define REFSITESORTBY (REQUESTS) #define REDIRREFSORTBY (REQUESTS) #define FAILREFSORTBY (REQUESTS) #define BROWSUMSORTBY (PAGES) #define BROWREPSORTBY (PAGES) #define OSSORTBY (PAGES) #define VHOSTSORTBY (BYTES) #define REDIRVHOSTSORTBY (REQUESTS) #define FAILVHOSTSORTBY (REQUESTS) #define USERSORTBY (REQUESTS) #define REDIRUSERSORTBY (REQUESTS) #define FAILUSERSORTBY (REQUESTS) #define SEARCHQUERYSORTBY (REQUESTS) #define SEARCHWORDSORTBY (REQUESTS) #define INTSEARCHQUERYSORTBY (REQUESTS) #define INTSEARCHWORDSORTBY (REQUESTS) #define STATUSSORTBY (ALPHABETICAL) /* The variable to use to plot pie charts for each report. REQUESTS, REQUESTS7, PAGES, PAGES7, BYTES, BYTES7, CHART_SORTBY (meaning, the same as the SORTBY above) or CHART_NONE (no pie chart). */ #define REQCHART (CHART_SORTBY) #define REDIRCHART (CHART_SORTBY) #define FAILCHART (CHART_SORTBY) #define TYPECHART (CHART_SORTBY) #define SIZECHART (CHART_SORTBY) #define PROCTIMECHART (CHART_SORTBY) #define DIRCHART (CHART_SORTBY) #define HOSTCHART (CHART_SORTBY) #define REDIRHOSTCHART (CHART_SORTBY) #define FAILHOSTCHART (CHART_SORTBY) #define DOMCHART (CHART_SORTBY) #define ORGCHART (CHART_SORTBY) #define REFCHART (CHART_SORTBY) #define REFSITECHART (CHART_SORTBY) #define REDIRREFCHART (CHART_SORTBY) #define FAILREFCHART (CHART_SORTBY) #define BROWREPCHART (CHART_SORTBY) #define BROWSUMCHART (CHART_SORTBY) #define OSCHART (CHART_SORTBY) #define VHOSTCHART (CHART_SORTBY) #define REDIRVHOSTCHART (CHART_SORTBY) #define FAILVHOSTCHART (CHART_SORTBY) #define USERCHART (CHART_SORTBY) #define REDIRUSERCHART (CHART_SORTBY) #define FAILUSERCHART (CHART_SORTBY) #define SEARCHQUERYCHART (CHART_SORTBY) #define SEARCHWORDCHART (CHART_SORTBY) #define INTSEARCHQUERYCHART (CHART_SORTBY) #define INTSEARCHWORDCHART (CHART_SORTBY) #define STATUSCHART (CHART_SORTBY) #define WEEKBEGINSON (SUNDAY) /* The 1st day of the week. I think it's SUNDAY, but you can choose any day. */ #define LASTSEVEN (TRUE) /* Whether to include statistics for the last seven days */ #define COMPSEP "\t" /* A separator string between fields in "computer" output style */ #define RAWBYTES (FALSE) /* Whether bytes should be quoted in full (e.g., 1,021,453 bytes) as opposed to in kilobytes, megabytes etc. (e.g., 997.5 kilobytes). */ #define BYTESDP (2) /* If RAWBYTES is off, how many decimal places to display in the number of bytes. */ #define NOROBOTS (TRUE) /* Exclude SOME robots from indexing the output page or following its links. */ #define LINKNOFOLLOW (TRUE) /* Appends rel="nofollow" to outbound URLs to reduce SEO SPAM targeting */ #define HEADERFILE "none" /* an extra file (with HTML markup if desired) placed between the page title and the start of the statistics. Use "none" for none. */ #define FOOTERFILE "none" /* And one placed at the bottom of the page. */ #define OUTPUT (XHTML) /* Default output type: HTML, XHTML, PLAIN, ASCII, LATEX, COMPUTER or OUT_NONE. */ #ifndef LANGUAGE #define LANGUAGE (ENGLISH) /* Default language for the output page: ARMENIAN, BASQUE, BULGARIAN, BULGARIAN_MIK, CATALAN, SIMP_CHINESE (GB2312), TRAD_CHINESE (Big5), CZECH, CZECH_1250, DANISH, DUTCH, ENGLISH, US_ENGLISH, FINNISH, FRENCH, GERMAN, HUNGARIAN, INDONESIAN, ITALIAN, JAPANESE_EUC, JAPANESE_JIS, JAPANESE_SJIS, JAPANESE_UTF, KOREAN, LATVIAN, NORWEGIAN (Bokmal), NYNORSK, POLISH, PORTUGUESE, BR_PORTUGUESE, RUSSIAN, RUSSIAN_1251, SERBIAN, SLOVAK, SLOVAK_1250, SLOVENE, SLOVENE_1250, SPANISH, SWEDISH, SWEDISH_ALT, TURKISH or UKRAINIAN. * The following languages were available for previous versions of analog, but have not yet been translated for version 5. As they are translated, they will be added to the analog home page: BOSNIAN, CROATIAN, GREEK, ICELANDIC, LITHUANIAN, ROMANIAN and SLOVAK. */ #endif #define MARKCHAR '+' /* a character for the graphical displays */ #define BARSTYLE 'b' /* The default bar style for the displays -- 'a' to 'h' */ #define PNGIMAGES (TRUE) /* Whether the graphics should be png's (TRUE) or gif's (FALSE). */ #define HTMLPAGEWIDTH (65) #define PLAINPAGEWIDTH (76) #define LATEXPAGEWIDTH (65) /* The width of the output for HTML, ASCII/PLAIN, and LaTeX */ #define MINGRAPHWIDTH (15) /* bar charts must be at least this many characters wide */ #define CSSPREFIX "" /* A prefix to put in front of all CSS class names in XHTML mode. Use "" for no prefix. */ #define ERRLINELENGTH (78) #define STDERRWIDTH (ERRLINELENGTH) /* the maximum width for error and warning messages */ #endif /* ANLGHEA2_H */ analog-ce-6.0.17/src/anlghea3.h000066400000000000000000001172321406366436600161010ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** anlghea3.h: third header file ***/ /*** The things in this file are not user-definable; user-definable options *** can be found in anlghead.h ***/ #ifndef ANLGHEA3_H #define ANLGHEA3_H /*** OS specific things ***/ #define VNUMBER "6.0.17" /* the version number of this program */ #undef VERSION /* If no OS set, compilation will fail by not knowing VERSION */ #ifdef __MWERKS__ #undef MAC #define MAC /* So MWERKS compiler automatically switches to Mac */ #endif #ifdef __BEOS__ #undef MAC #undef BEOS #define BEOS #endif #ifdef _WIN32 #ifndef UNIX /* So as to signal CYGWIN */ #undef WIN32 #define WIN32 #endif #endif #ifdef MAC #define MAC_EVENTS #define NOPIPES /* #define MACDIRENT */ /* No longer needed and POSIX dirent is better */ #define NOGLOB #define NOFOLLOW #define NOOPEN #define NOALARM #define LINE_PARSER #define USE_ZLIB #if !TARGET_API_MAC_CARBON #include #endif #include #include #define PATHSEPS ":" #define DIRSEP ':' #define EXTSEP '.' #define VERSION VNUMBER"/Mac" #endif #ifdef DOS #define NODNS #define NOALARM #define NODIRENT #define NOFOLLOW #define PATHSEPS ":\\/" #define DIRSEP '\\' #define EXTSEP '.' #define VERSION VNUMBER"/DOS" #endif #ifdef VMS #define NOPIPES #define NOALARM #define VMSDIRENT #define NOFOLLOW #ifdef __VMS_VER #if (__VMS_VER < 70000000) #define NOGMTIME #endif #endif #define PATHSEPS ":>#]/" /* first four are real VMS, last for Unix emulation */ #define DIRSEP '/' #define EXTSEP '.' #include /* old DEC C (v4.x?) was missing these two defines */ #ifndef S_IWUSR #define S_IWUSR 0000200 /* write permission, owner */ #endif #ifndef S_IRUSR #define S_IRUSR 0000400 /* read permission, owner */ #endif #define cma$tis_errno_get_addr CMA$TIS_ERRNO_GET_ADDR #define FOPENR(s) fopen(s, "r", "shr=upd") #define VERSION VNUMBER"/OpenVMS" #endif #ifdef BEOS #define NOALARM #define NOFOLLOW #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define VERSION VNUMBER"/BeOS" #endif #ifdef OSX #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define VERSION VNUMBER"/OS X" #endif #ifdef UNIX #ifndef OSX #ifndef BEOS #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define VERSION VNUMBER"/Unix" #endif #endif #endif #ifdef WIN32 #define popen _popen #define pclose _pclose extern void Win32Init(void); extern void Win32Cleanup(void); #define WIN32DIRENT /* can comment out if POSIX dirent present, eg Borland */ #define NOFOLLOW #define NOALARM #define FOPENR_BINARY #define POPENR_BINARY #define PATHSEPS ":\\/" #define DIRSEP '\\' #define EXTSEP '.' #define VERSION VNUMBER"/Win32" #endif #ifdef OS2 #define NOFOLLOW #define NOALARM #define PATHSEPS "\\/" #define DIRSEP '\\' #define EXTSEP '.' #define VERSION VNUMBER"/OS2" #endif #ifdef RISCOS #define NOOPEN #define NOPIPES #define RISCOSDIRENT #define NOFOLLOW #define NOALARM #define PATHSEPS "." #define DIRSEP '.' #define EXTSEP '/' #define VERSION VNUMBER MINORVERSION"/RISCOS" #include #endif #ifdef NEXTSTEP #define NOFOLLOW #define NOALARM #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #ifndef S_IWUSR #define S_IWUSR 0000200 /* write permission, owner */ #endif #ifndef S_IRUSR #define S_IRUSR 0000400 /* read permission, owner */ #endif #define VERSION VNUMBER"/NeXTSTEP" #endif #ifdef MPEIX #define NOFOLLOW #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define VERSION VNUMBER"/iX" #endif #ifdef BS2000 #define EBCDIC #define NOALARM #define NOFOLLOW #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define VERSION VNUMBER"/BS2000/OSD" #endif #ifdef OS390 #define EBCDIC #define NOALARM #define NOFOLLOW #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define VERSION VNUMBER"/OS390" #endif #ifdef AS400 #define EBCDIC #define PATHSEPS "/" #define DIRSEP '/' #define EXTSEP '.' #define ALIGNSIZE (16) #define NOPIPES #define NOALARM #define NOFOLLOW #define FOPENR(s) fopen(s, "r,ccsid=37") #define FOPENW(s) fopen(s, "w,ccsid=37") #define FOPENWB(s) fopen(s, "wb,ccsid=37") #define FOPENA(s) fopen(s, "a,ccsid=37") #define VERSION VNUMBER"/AS400" #endif #if defined(EBCDIC) && !defined(OS390) && !defined(AS400) && !defined(BS2000) /* Seems to be a not-yet-supported platform. */ #error Unsupported EBCDIC platform. Please port Analog and contribute your changes back to ! /* You might also want to have a look at: * - globals.c (system dependent EBCDIC translation tables) * - settings.c (identification string for your OS) * - Makefile (extra Define) */ #endif /*** ANSI header files ***/ #include #include #include #include #include #include #include #include #include #include #include #ifndef NOGRAPHICS #include #endif #ifndef NOALARM #include #endif /*** system dependent header files ***/ #ifndef LINE_PARSER #include "zlib/zlib.h" #include "unzip/unzip.h" #include "bzip2/bzlib.h" #endif #include "pcre/pcre.h" #include "libgd/gd.h" #include "libgd/gdfontf.h" #include "libgd/gdfonts.h" #ifndef NOFOLLOW #include #ifndef PATH_MAX #include #define PATH_MAX MAXPATHLEN #endif #endif #ifdef WIN32 #include #endif #ifdef MAC #ifdef LINE_PARSER #ifndef REAL_STDIO #define fopen(name,mode) mac_fopen((name),(mode)) #define fread(ptr,siz,num,file) mac_fread(ptr,siz,num,file) #undef getc #define getc(file) mac_getc(file) #define fclose(file) mac_fclose((file)) #undef feof #define feof(file) mac_feof(file) #endif extern FILE *mac_fopen(const char *name,const char *mode); extern size_t mac_fread(void *ptr, size_t size, size_t num, FILE *file); extern int mac_getc(FILE *file); extern int mac_fclose(FILE *file); extern int mac_feof(FILE *file); #endif #ifndef REAL_ALLOC #define malloc(size) mac_malloc((size)) #define calloc(num,size) mac_calloc((num),(size)) #define realloc(ptr,size) mac_realloc((ptr),(size)) #define free(ptr) mac_free((ptr)) #endif extern void *mac_malloc(size_t size); extern void *mac_calloc(size_t num, size_t size); extern void *mac_realloc(void *ptr, size_t size); extern void mac_free(void *ptr); #endif #ifdef NEED_FLOATINGPOINT_H #include #endif #ifndef NOOPEN #include #include #include #ifdef WIN32 #include #define OPEN_MODE (S_IREAD | S_IWRITE) #else #define OPEN_MODE (S_IRUSR | S_IWUSR) /* Most systems will accept the above too, but this is POSIXly correct. */ #endif #endif /* I assume the header files are well enough behaved that we can include them twice without harm, so that we can just do !NOSTAT and !NODIRENT indep. */ /* See init2.c for an explanation of the DIRENT #define logic */ #ifndef NODIRENT #ifndef VMSDIRENT #ifndef MACDIRENT #ifndef WIN32DIRENT #ifndef RISCOSDIRENT #ifndef NOGLOB #include /* POSIX.2 glob */ #else #ifdef MAC #include /* Mac POSIX dirent */ #include #else #include /* Normal POSIX dirent */ #include #include #endif /* MAC */ #endif /* NOGLOB */ #endif /* RISCOSDIRENT */ #else #include /* Win32 dirent */ #include #include #endif /* WIN3DIRENT */ #else #include "macdir.h" /* Old Mac dirent (no longer used) */ #define NOGLOB #endif /* MACDIRENT */ #else #define VMS_FSPEC_MAX 256 /* VMS dirent */ #include #endif /* VMSDIRENT */ #endif /* NODIRENT */ #ifndef NODNS #ifdef MAC #if !TARGET_API_MAC_CARBON #include /* Mac DNS */ #include #include #include #include #endif #else /* Win32 and normal DNS */ #ifdef HAVE_ADDR_T /* define in Makefile if in_addr_t != unsigned long */ #define IN_ADDR_T in_addr_t #else typedef unsigned long IN_ADDR_T; #endif #ifdef WIN32 /* Win32 DNS: NB windows.h above includes winsock.h */ #define INET_ADDR_ERR ((IN_ADDR_T)(INADDR_NONE)) #else #ifdef RISCOS #include #endif #include /* Normal DNS */ #include #include #ifndef BEOS #include #else #ifdef BONE_VERSION #include #endif #endif /* BEOS */ #define INET_ADDR_ERR ((IN_ADDR_T)(-1)) #endif /* !WIN32 */ #endif /* !MAC */ #ifndef NOALARM /* All DNS */ #include #endif #ifndef SIGALRM #define NOALARM #endif #endif /* !NODNS */ #ifdef NODNS #define NOALARM #endif #ifndef SIGALRM #define NOALARM #endif #ifndef NOALARM #ifdef USE_PLAIN_SETJMP #define SETJMP setjmp #define LONGJMP longjmp #define JMP_BUF jmp_buf #else #define SETJMP(b) sigsetjmp((b), 1) #define LONGJMP siglongjmp #define JMP_BUF sigjmp_buf #endif #endif /*** User-definable header file ***/ #include "anlghead.h" /*** definitions ***/ #undef TRUE #define TRUE (1) #undef FALSE #define FALSE (0) #undef OK #define OK (0) #undef ERR #define ERR (-1) #undef UNSET #define UNSET (-1) #ifndef EXIT_SUCCESS #define EXIT_SUCCESS (0) /* ANSI, but some broken implementations lack it. */ #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE (1) #endif #define EXIT_SIGNAL ((EXIT_FAILURE) + 1) #ifdef WIN32 #define ERRBUFMODE (_IONBF) /* on Windows, _IOLBF causes full buffering */ #else #define ERRBUFMODE (_IOLBF) #endif #define FEW (2) /* used for GOTOS and REPORTSPAN */ #define EXCLUDED (2) /* in my_sort() */ #define NEWLOGFMT (2) #define BADLOGFMT (3) #define CONTINUATION (-1) /* used in warn() in utils.c */ #define IPADDR_INC (3) /* next six used in (struct include).type */ #define REGEX_INC (2) /* see also IS_REGEXT(), IS_IPADDRT(), IS_INC() below */ #define NORMAL_INC (1) #define NORMAL_EXC (-1) #define REGEX_EXC (-2) #define IPADDR_EXC (-3) #define BLOCK_EPSILON (30) #define MIN_SC (100) /* see parsescode() in input.c */ #define SC_NUMBER (600) #define IGNORE_CODE (1000) #define EPSILON (1e-8) #define MINS_IN_WEEK (10080) #define HASHSIZE (8) /* initial size of hash table; a power of 2 */ #define TREEHASHSIZE (3) /* a power of 2 plus 1 */ #define SIZEBINS (11) /* in sizescore() */ #define ENGMONTHLEN (3) /* length of longest of engmonths in globals.c */ #define ENGSHORTDAYLEN (3)/* length of longest of engshortdays in globals.c */ #define ITEMFNS_NUMBER ((ITEM_NUMBER) + 2) /* in inpfns[] in globals.c */ #define ANALOGURL "https://www.c-amie.co.uk/" #define CAMIERSSURL "https://www.c-amie.co.uk/qlink/?id=103" #define FIRST_TIME (0) #define LAST_TIME (ULONG_MAX) #define LAST_DATE ((ULONG_MAX) / 1440) #define WHITESPACE ((char)(-1)) #define DOMLEVEL_NUMBER (677) /* 26^2 + 1 */ #define PMATCH_SIZE (30) /* This allows PCRE to capture 9 subexpressions */ /* Amount of stuff recorded by cache files: see cache_records in globals.c */ #define V34_DATA_NUMBER (7) #define V5_DATA_NUMBER (10) #ifdef MAC_EVENTS #define MAC_IDLE_FREQ (200) #endif /* Special codes for certain reports. We collect them here just to avoid changing several instances if they change (although see Pnenxtname() too). * It would be nice to let the user use localised versions of these in e.g. *EXCLUDE commands, but that doesn't scale to the case of reports in two languages in one pass, because not all trees are built as late as output time. */ #define LNGSTR_UNRESOLVED "[unresolved numerical addresses]" #define LNGSTR_NODOMAIN "[domain not given]" #define LNGSTR_UNKDOMAIN "[unknown domain]" #define LNGSTR_ROOTDIR "[root directory]" #define LNGSTR_NODIR "[no directory]" #define LNGSTR_NOEXT "[no extension]" #define LNGSTR_BRKDIRS "[directories]" #define LNGSTR_UNKWIN "Unknown Windows" #define LNGSTR_UNKUX "Other Unix" #define LNGSTR_ROBOTS "Robots" #define LNGSTR_UNKOS "OS unknown" /*** logfile line types ***/ #define LOG_COMMON1 "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%j%w%r%wHTTP%j\" %c %b" #define LOG_COMMON2 "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%j%w%r\" %c %b" #define LOG_COMMON3 "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%r\" %c %b" #define LOG_MS_COMMON1 "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%j%w%r%w\"HTTP%j\" %c %b" #define LOG_COMBINED1 \ "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%j%w%r%wHTTP%j\" %c %b \"%f\" \"%B\"" #define LOG_COMBINED2 \ "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%j%w%r\" %c %b \"%f\" \"%B\"" #define LOG_COMBINED3 \ "%S %j %u [%d/%M/%Y:%h:%n:%j] \"%r\" %c %b \"%f\" \"%B\"" #define LOG_MS_INT1 "%S, %u, %d/%m/%Z, %h:%n:%j, W3SVC%j, %j, %v, %T, %j, %b, %c, %j, %j, %r, %q," #define LOG_MS_INT2 "%*S, %*u, %d/%m/%Z, %h:%n:%j, %j" #define LOG_MS_NA1 "%S, %u, %m/%d/%Z, %h:%n:%j, W3SVC%j, %j, %v, %T, %j, %b, %c, %j, %j, %r, %q," #define LOG_MS_NA2 "%*S, %*u, %m/%d/%Z, %h:%n:%j, %j" #define LOG_WEBSTAR1 "!!LOG_FORMAT%x2" #define LOG_WEBSTAR2 "!!%j" #define LOG_EXTENDED1 "#Fields:%x3" #define LOG_EXTENDED2 "#%j" #define LOG_MS_EXTENDED1 "#Fields:%x5" #define LOG_WEBSTAR_EXTENDED1 "#Fields:%x6" #define LOG_WEBSITE_NA \ "%m/%d/%y %h:%n:%j\t%S\t%v\t%j\t%u\t%j\t%r\t%f\t%j\t%B\t%c\t%b\t%T" #define LOG_WEBSITE_INT \ "%d/%m/%y %h:%n:%j\t%S\t%v\t%j\t%u\t%j\t%r\t%f\t%j\t%B\t%c\t%b\t%T" #define LOG_MACHTTP "%m/%d/%y\t%h:%n:%j \t%C%w%S\t%r\t%b" #define LOG_NETSCAPE "format=%x4" #define LOG_REFERRER1 "[%d/%M/%Y:%h:%n:%j] %F -> %*r" #define LOG_REFERRER2 "%F -> %*r" #define LOG_BROWSER "[%d/%M/%Y:%h:%n:%j] %B" /*** enums ***/ /* Types of item and other inputs: must have ITEMs in process_data() order: code, bytes, proctime, unixtime, am, date in some order (these are INPUT_NUMBER, not to be confused with INP_NUMBER): then rest in some order. NB I don't know if changing process_data() order would have side-effects. */ /* See also item_type in globals.c */ enum {ITEM_VHOST, ITEM_FILE, ITEM_USER, ITEM_REFERRER, ITEM_BROWSER, ITEM_HOST, INP_CODE, INP_BYTES, INP_PROCTIME, INP_UNIXTIME, INP_AM, INP_DATE, INP_YEAR, INP_MONTH, INP_HOUR, INP_MIN, INP_QUERY, INP_IP, INP_NUMBER}; #define ITEM_NUMBER (INP_CODE) #define INPUT_NUMBER (INP_YEAR) /* NB There is INP_NUMBER and INPUT_NUMBER */ /* Types of report. They must be in the following order: date Reports; date Summaries; GENSUM; general reports; dervreps; arrayreps. (The order is insignificant within each section.) */ /* See also repcodes, anchorname and repname in globals.c */ /* Also report descriptions files have these entries in this order */ enum {REP_YEAR, REP_QUARTERLY, REP_MONTH, REP_WEEK, REP_DAYREP, REP_HOURREP, REP_QUARTERREP, REP_FIVEREP, REP_DAYSUM, REP_HOURSUM, REP_WEEKHOUR, REP_QUARTERSUM, REP_FIVESUM, REP_GENSUM, REP_REQ, REP_REDIR, REP_FAIL, REP_TYPE, REP_DIR, REP_HOST, REP_REDIRHOST, REP_FAILHOST, REP_DOM, REP_REF, REP_REFSITE, REP_REDIRREF, REP_FAILREF, REP_BROWREP, REP_VHOST, REP_REDIRVHOST, REP_FAILVHOST, REP_USER, REP_REDIRUSER, REP_FAILUSER, REP_ORG, REP_SEARCHREP, REP_SEARCHSUM, REP_INTSEARCHREP, REP_INTSEARCHSUM, REP_BROWSUM, REP_OS, REP_SIZE, REP_CODE, REP_PROCTIME, REP_NUMBER}; #define DATEREPORTS_NUMBER (REP_DAYSUM) /* just the eight "Reports" */ #define DATEREP_NUMBER (REP_GENSUM) /* including the five "Summaries" too */ #define FIRST_GENREP (REP_GENSUM + 1) #define GENREP_NUMBER (REP_NUMBER - FIRST_GENREP) #define FIRST_DERVREP (REP_SEARCHREP) #define DERVREP_NUMBER (6) #define FIRST_ARRAYREP (REP_SIZE) #define ARRAYREP_NUMBER (3) #define LAST_NORMALREP (REP_OS) /* Types of logfile line. Order insignificant. */ enum {SUCCESS, FAILURE, REDIRECT, INFO, UNWANTED}; #define OUTCOME_NUMBER (INFO) /* only first 3 needed for datacols[] */ /* Counts then dates collected about each item, and then other floor/sort criteria: order otherwise insignificant. See also methodname in globals.c and cache_records in cache.c. */ enum {REQUESTS, REQUESTS7, PAGES, PAGES7, REDIR, REDIR7, FAIL, FAIL7, SUCCDATE, REDIRDATE, FAILDATE, SUCCFIRSTD, REDIRFIRSTD, FAILFIRSTD, BYTES, BYTES7, ALPHABETICAL, RANDOM, METHOD_NUMBER}; #define COUNT_NUMBER (SUCCDATE) #define DATESORT (SUCCDATE) #define FIRSTDATE (SUCCFIRSTD) #define DATA_NUMBER (BYTES) #define CHART_NONE (SUCCDATE) #define CHART_SORTBY (CHART_NONE + 1) /* abbreviated version ignoring HTTP status code */ enum {REQUESTS2, REQUESTS72, PAGES2, PAGES72, DATE2, FIRSTD2, DATA2_NUMBER, DATACOLS_NUMBER}; /* Type of logfile by compression */ enum {LF_NOTOPENED, LF_NORMAL, LF_PIPE, LF_GZIP, LF_ZIP, LF_ZIPMEMBER, LF_BZ2}; /* Data collected about total requests etc. in each logfile */ enum {LOGDATA_UNWANTED, LOGDATA_UNKNOWN, LOGDATA_UNKNOWN7, LOGDATA_INFO, LOGDATA_INFO7, LOGDATA_SUCC, LOGDATA_SUCC7, LOGDATA_PAGES, LOGDATA_PAGES7, LOGDATA_REDIR, LOGDATA_REDIR7, LOGDATA_FAIL, LOGDATA_FAIL7, LOGDATA_CORRUPT, LOGDATA_NUMBER}; /* Poss. columns: COL_TITLE must be first; see also colcodes[] in globals.c */ enum {COL_TITLE, COL_REQS, COL_REQS7, COL_PAGES, COL_PAGES7, COL_BYTES, COL_BYTES7, COL_PREQS, COL_PREQS7, COL_PPAGES, COL_PPAGES7, COL_PBYTES, COL_PBYTES7, COL_DATE, COL_TIME, COL_FIRSTD, COL_FIRSTT, COL_INDEX, COL_NUMBER}; /* Levels of DNS lookup. Keep in order. */ enum {DNS_NONE, DNS_READ, DNS_LOOKUP, DNS_WRITE}; /* Output types: start with XHTML then PLAIN */ enum {XHTML, PLAIN, ASCII, HTML, LATEX, COMPUTER, XML, OUT_NONE}; /* days of the week */ enum {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}; /* languages; see also country in globals.c */ enum {ARMENIAN, BASQUE, /*BOSNIAN,*/ BULGARIAN, BULGARIAN_MIK, CATALAN, SIMP_CHINESE, TRAD_CHINESE, /*CROATIAN,*/ CZECH, CZECH_1250, DANISH, DUTCH, ENGLISH, US_ENGLISH, FINNISH, FRENCH, GERMAN, /*GREEK,*/ HUNGARIAN, /*ICELANDIC,*/ INDONESIAN, ITALIAN, JAPANESE_EUC, JAPANESE_JIS, JAPANESE_SJIS, JAPANESE_UTF, KOREAN, LATVIAN, /*LITHUANIAN,*/ NORWEGIAN, NYNORSK, POLISH, PORTUGUESE, BR_PORTUGUESE, /*ROMANIAN,*/ RUSSIAN, RUSSIAN_1251, SERBIAN, SLOVAK, SLOVAK_1250, SLOVENE, SLOVENE_1250, SPANISH, SWEDISH, SWEDISH_ALT, TURKISH, UKRAINIAN}; #define OLDLANG (-2) /* source of data passed to htmlputs(): see comments there. These represent roughly increasing levels of security. */ enum {AS_IS, TRUSTED, FROM_CFG, UNTRUSTED, IN_HREF}; /* lngstrs; charset_ must be first */ enum {charset_, weekbeg_, year_, quarteryr_, month_, day_, days_, hr_, minute_, minutes_, second_, seconds_, byte_, bytes_, xbytes_, request_, requests_, date_, datetime_, time_, firstdate_, firsttime_, lastdate_, lasttime_, file_, files_, host_, hosts_, vhost_, vhosts_, dir_, dirs_, dom_, doms_, org_, orgs_, ext_, exts_, url_, urls_, browser_, browsers_, os_, oss_, size_, search_, searches_, site_, sites_, user_, users_, code_, codes_, webstatsfor_, kilo_, mega_, giga_, tera_, peta_, exa_, zeta_, yotta_, kiloabbr_, megaabbr_, gigaabbr_, teraabbr_, petaabbr_, exaabbr_, zetaabbr_, yottaabbr_, filesize0_, filesize1_, filesize2_, filesize3_, filesize4_, filesize5_, filesize6_, filesize7_, filesize8_, filesize9_, filesize10_, gensum_, yearrep_, busyyear_, quarterlyrep_, busyquarteryr_, monthrep_, busymonth_, weekrep_, busyweek_, daysum_, dayrep_, busyday_, hourrep_, hoursum_, weekhoursum_, busyhour_, quarterrep_, quartersum_, busyquarterhr_, fiverep_, fivesum_, busyfive_, hostrep_, hostgs_, hostgp_, hostgen_, redirhostrep_, redirhostgs_, redirhostgp_, redirhostgen_, failhostrep_, failhostgs_, failhostgp_, failhostgen_, dirrep_, dirgs_, dirgp_, dirgen_, typerep_, extgs_, extgp_, extgen_, reqrep_, filegs_, filegp_, filegen_, redirrep_, redirgs_, redirgp_, redirgen_, failrep_, failgs_, failgp_, failgen_, refrep_, refgs_, refgp_, refgen_, refsiterep_, refsitegs_, refsitegp_, refsitegen_, redirrefrep_, redirrefgs_, redirrefgp_, redirrefgen_, failrefrep_, failrefgs_, failrefgp_, failrefgen_, searchrep_, searchrepgs_, searchrepgp_, searchrepgen_, searchsum_, searchsumgs_, searchsumgp_, searchsumgen_, intsearchrep_, intsearchrepgs_, intsearchrepgp_, intsearchrepgen_, intsearchsum_, intsearchsumgs_, intsearchsumgp_, intsearchsumgen_, vhostrep_, vhostgs_, vhostgp_, vhostgen_, redirvhostrep_, redirvhostgs_, redirvhostgp_, redirvhostgen_, failvhostrep_, failvhostgs_, failvhostgp_, failvhostgen_, userrep_, usergs_, usergp_, usergen_, rediruserrep_, redirusergs_, redirusergp_, redirusergen_, failuserrep_, failusergs_, failusergp_, failusergen_, browsum_, browgs_, browgp_, browgen_, browrep_, browrepgs_, browrepgp_, browrepgen_, osrep_, osgs_, osgp_, osgen_, domrep_, domgs_, domgp_, domgen_, orgrep_, orggs_, orggp_, orggen_, statrep_, codegs_, codegp_, codegen_, proctimerep_, sizerep_, credit_, runtime_, lessone_, eachunit_, represents_, partof_, pagereq_, pagereqs_, notlistedm_, notlistedf_, notlistedn_, otherm_, otherf_, othern_, progstart_, reqstart_, to_, succreqs_, avereqs_, totpages_, avepages_, totunknown_, totfails_, totredirs_, inforeqs_, distfiles_, disthosts_, corrupt_, unwanted_, totdata_, avedata_, brackets_, sevendaysto_, lastsevendays_, goto_, top_, unresolved_, nodomain_, unkdomain_, rootdir_, nodir_, noext_, brkdirs_, unkwin_, unkux_, robots_, unkos_, nreqs_, nreqs7_, preqs_, preqs7_, npgs_, npgs7_, ppgs_, ppgs7_, nbytes_, nxbytes_, nbytes7_, nxbytes7_, pbytes_, pbytes7_, index_, firstsm_, firstsf_, firstsn_, firstdsm_, firstdsf_, firstdsn_, allsm_, allsf_, allsn_, floorby_, atleast_, request7_, requests7_, pagereq7_, pagereqs7_, redirreq_, redirreqs_, redirreq7_, redirreqs7_, failreq_, failreqs_, failreq7_, failreqs7_, ptraffic_, ptraffic7_, pmtraffic_, pmtraffic7_, bytetraffic_, bytestraffic_, xbytestraffic_, bytetraffic7_, bytestraffic7_, xbytestraffic7_, sincedate_, sinceredirdate_, sincefaildate_, sincefirstd_, sinceredirfirstd_, sincefailfirstd_, sortedm_, sortedf_, sortedn_, repspan_, chartby_, traffic_, traffic7_, prequests_, prequests7_, pmrequests_, pmrequests7_, nrequests_, nrequests7_, ppages_, ppages7_, pmpages_, pmpages7_, npages_, npages7_, predirs_, predirs7_, pmredirs_, pmredirs7_, nredirs_, nredirs7_, pfails_, pfails7_, pmfails_, pmfails7_, nfails_, nfails7_, succdate_, redirdate_, faildate_, succfirstd_, redirfirstd_, failfirstd_, alphasortm_, alphasortf_, alphasortn_, numsortm_, numsortf_, numsortn_, unsortedm_, unsortedf_, unsortedn_, sepchar_, decpoint_, colon_, am_, pm_, datefmt1_, datefmt2_, dayrepfmt_, daysumfmt_, hourrepfmt_, hoursumfmt_, weekhoursumfmt_, quarterrepfmt_, quartersumfmt_, weekfmt_, monthfmt_, quarterlyfmt_, yearfmt_, genrepdate_, genreptime_, whatincfmt_, code100_, code101_, code199_, code200_, code201_, code202_, code203_, code204_, code205_, code206_, code299_, code300_, code301_, code302_, code303_, code304_, code_305, code306_, code307_, code399_, code400_, code401_, code402_, code403_, code404_, code405_, code406_, code407_, code408_, code409_, code410_, code411_, code412_, code413_, code414_, code415_, code416_, code417_, code499_, code500_, code501_, code502_, code503_, code504_, code505_, code506_, code599_, code999_, LNGSTR_NUMBER}; #define byteprefix_ (kilo_ - 1) #define byteprefixabbr_ (kiloabbr_ - 1) /* return codes from strtoinfmt() */ /* see also configlogfmt() in init2.c */ enum {FMT_OK, FMT_NOPC, FMT_DUP, FMT_BADCHAR, FMT_NOTERM, FMT_BADBUILTIN, FMT_BADPC, FMT_PARTTIME, FMT_QBUTNOR}; /*** typedefs ***/ typedef unsigned char logical; typedef signed char choice; typedef unsigned int datecode_t; typedef unsigned long timecode_t; /*** typedef function pointers ***/ struct hashindex; struct logfile; typedef void (*cutfnp)(char **, char **, char *, logical); typedef void (*dcutfnp)(char **, char **, char *, void *); typedef struct hashindex *(*mergefnp)(struct hashindex *, struct hashindex *, unsigned long, unsigned long, choice); typedef void (*conffnp)(void *, char *, char *, char *, int); typedef choice (*inputfnp)(struct logfile *lf, void *, char); /*** structs */ typedef struct { double bytes, bytes7; unsigned long *data; /* some are really timecode_t */ logical reused; /* for reused, see newtreedata() in tree.c */ choice ispage; } Hashentry; typedef struct hashindex { char *name; Hashentry *own; void *other; struct hashindex *next; } Hashindex; typedef struct aliasto { char *string; choice after; struct aliasto *next; } AliasTo; /* The target of an alias alternates a "string" and possibly a part of the original name indexed by "after" (else after == -1) (see printalias()). */ typedef struct alias { char *from; pcre *pattern; AliasTo *to; logical isregex; struct alias *next; } Alias; /* For a normal pattern, nmatch is no. of *'s. For a regular expression, it's -3 * (no. of capturing subexpressions): this is what pcre_exec needs. */ typedef struct strpairlist { char *name, *data; struct strpairlist *next; } Strpairlist; typedef struct { char *name; conffnp fn; void *opt; } Configfns; typedef struct { char *name; choice arg; } Choices; typedef struct { char code; choice type; inputfnp fn; void *opt; } Inputfns; typedef struct inputformat { Inputfns *inpfns; char sep; struct inputformat *next; } Inputformat; typedef struct inputformatlist { Inputformat *form; choice count[INPUT_NUMBER]; /* 0 = not present, 1 = starred, 2 = unstarred */ logical used; struct inputformatlist *next; } Inputformatlist; typedef struct logfile { char *name; void *file; void *file2; /* bzip2 needs the (FILE *) and the (BZFILE *) */ choice type; Inputformatlist *format; timecode_t from, to; unsigned long data[LOGDATA_NUMBER]; double bytes, bytes7; char *prefix; size_t prefixlen; int pvpos, tz; struct logfile *next; } Logfile; typedef struct mmlist { void *pos; struct mmlist *next; } Mmlist; typedef struct { void *block_end, *curr_pos, *next_pos; Mmlist *first, *last; unsigned short alignment; } Memman; typedef struct daysdata { unsigned long *reqs, *pages; double *bytes; struct daysdata *prev, *next; } Daysdata; typedef struct { char *fromstr, *tostr; timecode_t from, to, last7from, last7to, firsttime, lasttime; datecode_t firstdate, lastdate, currdate; /* perhaps bad name: currdate is date of current logfile entry */ Daysdata *firstdp, *lastdp, *currdp; } Dateman; typedef struct timerep { unsigned long reqs, pages; double bytes; datecode_t date; unsigned int time; struct timerep *prev, *next; } Timerep; typedef struct { double threshold; unsigned long reqs, reqs7, pages, pages7; double bytes, bytes7; timecode_t firstdate, lastdate; } Arraydata; typedef struct { Hashindex **head; unsigned long size; unsigned long n; } Hashtable; typedef struct { Hashtable *tree; cutfnp cutfn; Memman *space; } Tree; typedef struct { Hashtable *table; dcutfnp cutfn; Memman *space; void *arg; } Derv; typedef struct strlist { char *name; struct strlist *next; } Strlist; typedef struct { char *name; double angle; } Wedge; typedef struct include { char *name; pcre *pattern; unsigned long minaddr, maxaddr; choice type; struct include *next; } Include; typedef struct { double min; char qual; choice floorby; } Floor; typedef struct { choice code; char *file; } Lang; struct outchoices; /* The actual outputters are defined in globals.c */ typedef struct { unsigned int (*pagewidth)(struct outchoices *); void (*cgihead)(FILE *, struct outchoices *); void (*stylehead)(FILE *, struct outchoices *); void (*pagetitle)(FILE *, struct outchoices *); void (*timings)(FILE *, struct outchoices *, Dateman *); void (*closehead)(FILE *, struct outchoices *); void (*pagebotstart)(FILE *, struct outchoices *); void (*credit)(FILE *, struct outchoices *); void (*runtime)(FILE *, struct outchoices *, long); void (*pagefoot)(FILE *, struct outchoices *); void (*stylefoot)(FILE *, struct outchoices *); void (*reporttitle)(FILE *, struct outchoices *, choice); void (*reportfooter)(FILE *, struct outchoices *, choice); void (*reportdesc)(FILE *, struct outchoices *, choice); void (*reportspan)(FILE *, struct outchoices *, choice, timecode_t, timecode_t); void (*gensumhead)(FILE *, struct outchoices *); void (*gensumfoot)(FILE *, struct outchoices *); void (*gensumline)(FILE *, struct outchoices *, int, unsigned long, unsigned long, logical); void (*gensumlineb)(FILE *, struct outchoices *, int, double, double, logical); void (*lastseven)(FILE *, struct outchoices *, timecode_t); void (*prestart)(FILE *, struct outchoices *); void (*preend)(FILE *, struct outchoices *); void (*hrule)(FILE *, struct outchoices *); char *(*endash)(void); void (*putch)(FILE *, char); size_t (*strlength)(const char *); logical (*allowmonth)(void); void (*calcwidths)(struct outchoices *, choice, unsigned int [], unsigned int *, unsigned int *, double *, unsigned long, unsigned long, unsigned long, unsigned long, double, double, unsigned long); void (*declareunit)(FILE *, struct outchoices *, char, double, unsigned int); void (*colheadstart)(FILE *, struct outchoices *, choice); void (*colheadcol)(FILE *, struct outchoices *, choice, choice, unsigned int, char *, logical); void (*colheadend)(FILE *, struct outchoices *, choice); void (*colheadustart)(FILE *, struct outchoices *, choice); void (*colheadunderline)(FILE *, struct outchoices *, choice, choice, unsigned int, char *); void (*colheaduend)(FILE *, struct outchoices *, choice); void (*rowstart)(FILE *, struct outchoices *, choice, choice *, int, char *, char *, char *); void (*levelcell)(FILE *, struct outchoices *, choice, int); void (*namecell)(FILE *, struct outchoices *, choice, char *, choice, unsigned int, logical, logical, logical, Alias *, Include *, logical, unsigned int, char *); void (*ulcell)(FILE *, struct outchoices *, choice, choice, unsigned long, unsigned int); void (*strcell)(FILE *, struct outchoices *, choice, choice, char *, unsigned int); void (*bytescell)(FILE *, struct outchoices *, choice, choice, double, double, unsigned int); void (*pccell)(FILE *, struct outchoices *, choice, choice, double, double, unsigned int); void (*indexcell)(FILE *, struct outchoices *, choice, choice, long, unsigned int); void (*rowend)(FILE *, struct outchoices *, choice); void (*blankline)(FILE *, struct outchoices *, choice *); void (*barchart)(FILE *, struct outchoices *, int, char); void (*busyprintf)(FILE *, struct outchoices *, choice, char *, unsigned long, unsigned long, double, datecode_t, unsigned int, unsigned int, datecode_t, unsigned int, unsigned int, char); void (*notlistedstr)(FILE *, struct outchoices *, choice, unsigned long); void (*whatincluded)(FILE *, struct outchoices *, choice, unsigned long, Dateman *); void (*whatinchead)(FILE *, struct outchoices *); void (*whatincfoot)(FILE *, struct outchoices *); void (*whatincprintstr)(FILE *, struct outchoices *, char *); void (*printdouble)(FILE *, struct outchoices *, double); void (*includefile)(FILE *, struct outchoices *, char *, char); unsigned int (*riscosfiletype)(void); } Outputter; typedef struct outchoices { Outputter *outputter; char *outfile, *cacheoutfile; char *domainsfile, *descfile, *headerfile, *footerfile; choice outstyle, gotos; logical descriptions, multibyte, html, repspan, pdflatex; unsigned int rsthresh; choice reporder[REP_NUMBER + 1]; logical repq[REP_NUMBER], last7, runtime; choice cols[REP_NUMBER][COL_NUMBER]; unsigned int rows[DATEREPORTS_NUMBER]; char graph[DATEREP_NUMBER]; logical back[DATEREPORTS_NUMBER]; choice chartby[GENREP_NUMBER]; logical jpegcharts, pngimages; choice sortby[GENREP_NUMBER], subsortby[GENREP_NUMBER]; Floor floor[GENREP_NUMBER], subfloor[GENREP_NUMBER]; Lang lang; char *dayname[7], *monthname[12], **lngstr, *descstr[REP_NUMBER]; size_t daylen, plaindaylen, monthlen, plainmonthlen, ampmlen, plainampmlen; char *hostname, *hosturl, *logo, *logourl, *imagedir; char *stylesheet,*cssprefix, *chartdir, *localchartdir; char *xmldtd; char markchar; logical norobots; logical linknofollow; logical rawbytes; unsigned int bytesdp; choice weekbeginson; unsigned int plainpagewidth, htmlpagewidth, latexpagewidth; unsigned int mingraphwidth; char sepchar, repsepchar, decpt, barstyle; char *compsep, *gensumlines; Tree *tree[GENREP_NUMBER]; Strlist *suborgs; Derv *derv[DERVREP_NUMBER]; choice *alltrees, *alldervs; Include *wanthead[GENREP_NUMBER]; Alias *aliashead[GENREP_NUMBER]; Include *link[GENREP_NUMBER]; Strlist *expandhead[GENREP_NUMBER]; char *baseurl; char *anonymizerurl; choice searchconv; unsigned char convfloor; } Outchoices; typedef struct { Logfile *logfile[2]; /* [0] are logfiles, [1] are cache files */ unsigned long data[LOGDATA_NUMBER]; double bytes, bytes7; char *dirsuffix; unsigned int dirsufflength; choice lowmem[ITEM_NUMBER]; logical case_insensitive, usercase_insensitive; unsigned int granularity; } Miscoptions; typedef struct { Hashtable *hash[ITEM_NUMBER]; Arraydata *arraydata[ARRAYREP_NUMBER]; choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2]; /* given item type i, outcome j, the kth thing to do is to store data of data2-type dc[i][j][k][1] in structure's column index dc[i][j][k][0]. */ choice data2cols[ITEM_NUMBER][DATA_NUMBER]; /* item type i, data type j, is stored in this column (or -1 if unwanted) */ unsigned int no_cols[ITEM_NUMBER]; Hashindex **gooditems, **baditems; Include *wanthead[ITEM_NUMBER], *ispagehead, *argshead, *refargshead; choice code2type[SC_NUMBER]; logical succ304; Alias *aliashead[ITEM_NUMBER]; Strpairlist *searchengines, *intsearchengines; Include *robots; Dateman dman; Outchoices outopts; Miscoptions miscopts; Strlist *conffilelist; } Options; /*** macros ***/ #undef MAX #define MAX(a, b) (((a) > (b))?(a):(b)) #undef MIN #define MIN(a, b) (((a) < (b))?(a):(b)) /* a whole set of macros to cope with to...() and is...() commands if char is unsigned. */ #define ISALNUM(c) isalnum((unsigned char)(c)) #define ISALPHA(c) isalpha((unsigned char)(c)) #define ISDIGIT(c) isdigit((unsigned char)(c)) #define ISLOWER(c) islower((unsigned char)(c)) #define ISSPACE(c) isspace((unsigned char)(c)) #define ISUPPER(c) isupper((unsigned char)(c)) #define TOLOWER(c) ((char)tolower((unsigned char)(c))) #define TOUPPER(c) ((char)toupper((unsigned char)(c))) #ifdef NEED_STRCMP #define strcmp my_strcmp #endif #ifdef NEED_DIFFTIME #define difftime(t, s) ((double)((t) - (s))) #endif #ifdef NEED_STRTOUL #define strtoul(a, b, c) ((unsigned long)(strtol(a, b, c))) /* This is not quite right because of the different ranges of long and unsigned long, but it's probably OK for our purposes */ #endif #define STREQ(s, t) (strcmp(s, t) == 0) #define MATCHES(s, p) (matchq(s, (void *)p, FALSE, NULL)) /* Date conversion functions. See dates.c on the representation of dates. */ #define FEB (1) #define DEC (11) #define IS_LEAPYEAR(y) ((y) % 4 == 0) /* This is not Year 2100 compatible but is Year 2000 compatible! */ #define DATE2CODE(y, m, d) (((y) - 1970) * 365 + ((y) - 1968) / 4 + \ daysbefore[m] + (d) - (IS_LEAPYEAR(y) && (m) <= FEB)) #define TIMECODE(datecode, hr, min) ((timecode_t)((datecode) * 1440 + (datecode_t)((hr) * 60 + (min)))) #define UXTIME2CODE(t) ((timecode_t)(((t) / 60) + 1440)) #define DAYOFWEEK(d) ((choice)(((d) + 10) % 7)) #define IS_EMPTY_STRING(s) ((s)[0] == '\0') #define IS_STDIN(s) (STREQ((s), "-") || strcaseeq((s), "stdin")) #define IS_STDOUT(s) (STREQ((s), "-") || strcaseeq((s), "stdout")) #define TO_NEXT(x) (x) = (x)->next #ifndef FOPENR #ifdef FOPENR_BINARY #define FOPENR(s) fopen(s, "rb") #else #define FOPENR(s) fopen(s, "r") #endif #endif #ifndef FOPENW #define FOPENW(s) fopen(s, "w") #endif #ifndef FOPENWB #define FOPENWB(s) fopen(s, "wb") #endif #ifndef FOPENA #define FOPENA(s) fopen(s, "a") #endif #ifndef POPENR #ifdef POPENR_BINARY #define POPENR(s) popen(s, "rb") #else #define POPENR(s) popen(s, "r") #endif #endif #define ENTRY_WANTED(e) ((e) != unwanted_entry) #define ENTRY_BLANK(e) ((e) == blank_entry) #define LEN3(n, c) ((unsigned int)((c == '\0')?(n):((n) + (((n) - 1) / 3)))) /* The length of an n digit number with seps; e.g. 56789 [5] -> 56,789 [6] */ #define COPYSTR(s, n) {char *z = n; s = (char *)xmalloc(strlen(z) + 1); \ strcpy(s, z);} /* z needed so n only evaluated once */ /* Note memory leak in COPYSTR, so only used in initialisation */ #define TOO_FULL(n, z) ((n) > (z)) /* defn for hash table too full */ #define TOO_FULL_TREE TOO_FULL #define NEW_SIZE(z) (2 * (z)) /* new size of the hash table */ #define NEW_SIZE_TREE(z) (2 * (z) - 1) /* Next three: see IPADDR_INC etc. above */ #define IS_IPADDRT(type) ((type) == 3 || (type) == -3) /* for includes */ #define IS_REGEXT(type) ((type) == 2 || (type) == -2) /* for includes */ #define IS_INC(type) ((type) > 0) /* for includes */ /* static char *s = NULL; static size_t len = 0; ENSURE_LEN(s, len, req_len) */ #define ENSURE_LEN(s, l, n) if ((n) > (l)) { \ s = (char *)xrealloc((void *)s, n); \ l = n;} /* These PUT's are used in datesprintf() etc.: quicker than using sprintf() */ #define PUT02d(s, d) {*((s)++) = ((d) / 10) + '0'; \ *((s)++) = ((d) % 10) + '0'; } #define PUT04d(s, d) {*((s)++) = ((d) / 1000) + '0'; \ *((s)++) = ((d) / 100) % 10 + '0'; \ *((s)++) = ((d) / 10) % 10 + '0'; \ *((s)++) = ((d) % 10) + '0'; } #define PUT2d(s, d) {*((s)++) = ((d) < 10)?' ':(((d) / 10) + '0'); \ *((s)++) = ((d) % 10) + '0'; } #define PUT1d(s, d) {*((s)++) = (d) + '0'; } #define PUTc(s, c) {*((s)++) = (c); } #define PUTs(s, t, n) {int z; size_t l = strlen(t); \ memcpy((void *)s, (void *)t, l); s += l; \ for (z = n; z > 0; z--) *((s)++) = ' '; } /* Some simple command line processing parts implemented as macros */ #define CLSHORTWARN(arg) warn('C', TRUE, "No argument specified after %s command line option (or space wrongly left before argument)", arg) #define CLLONGWARN(arg) warn('C', TRUE, "Command line argument %s too long: ignoring end of it", arg) #define CLSHORTCHECK(command) if (argv[i][2] == '\0') CLSHORTWARN(argv[i]); \ else command #define CLLONGCHECK(command) if (argv[i][2] != '\0') CLLONGWARN(argv[i]); \ command #define CLTOGGLE(f) CLLONGCHECK(f = (argv[i][0] == '+')?TRUE:FALSE) #define CLREPTOGGLE(n) CLTOGGLE(op->outopts.repq[n]) #define CLOUTSTYLE CLTOGGLE #define CLGOTOS CLTOGGLE /* these work because PLAIN == TRUE == ON and XHTML == FALSE == OFF */ /* an abbreviation for arrays with size GENREP_NUMBER */ #define G(r) ((r) - FIRST_GENREP) /* magicno as macro not fn. for speed: x is unsigned long to contain answer, s is (char *) to be magicked, b is unsigned long base (no. of hash bins); power of 2 in practice. Formula is (\sum_i 9^i c_i) [mod (ULONG_MAX + 1)] mod b */ #define MAGICNO(x, s, b) {register unsigned char *r; \ for(x = 0, r = (unsigned char *)(s); *r != '\0'; r++) { \ x = (x << 3) + x + (long)(*r); } \ x %= b; } /* for tree magic number, t is end of string, bins are power of 2 plus 1, and formula has 33 in place of 9 */ #define MAGICNOTREE(x, s, t, b) {register unsigned char *r; \ for(x = 0, r = (unsigned char *)(s); \ r < (unsigned char *)(t); r++) { \ x = (x << 5) + x + (long)(*r); } \ x %= (b - 1); x++; } #include "anlghea4.h" /* import function declarations */ #endif /* ANLGHEA3_H */ analog-ce-6.0.17/src/anlghea4.h000066400000000000000000001635361406366436600161120ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** anlghea4.h: fourth header file ***/ /*** Just function declarations: these are not user-definable; user-definable *** options can be found in anlghead.h ***/ #ifndef ANLGHEA4_H #define ANLGHEA4_H /* in alias.c */ extern choice do_alias(char *name, Memman *mp, Alias *aliashead, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte, choice type); extern logical do_aliasx(char *name, Alias *aliashead); extern logical do_aliasr(char *name, char *dirsuffix, unsigned int dirsufflength); extern logical do_aliasS(char *name); extern logical do_aliasf(char *name); extern logical do_aliasB(char *name); extern logical do_aliasu(char *name, logical case_insensitive); extern logical do_aliasv(char *name); extern logical do_aliasN(char *name, unsigned char convfloor, logical multibyte); extern logical do_aliasn(char *name, unsigned char convfloor, logical multibyte); extern logical do_aliasb(char *name); #ifndef NODNS extern logical dnsresolve(char *name, choice level); extern void do_dns(char *name, char *alias, choice level); #endif extern void printalias(char *name, AliasTo *to, int pmatch[]); extern void wildalias(char *name, AliasTo *to, int pmatch[]); extern choice prealias(Memman *mm, Memman *mmv, Hashentry *vhost, Memman *mmq, logical case_insensitive, char *prefix, size_t prefixlen, int pvpos, Include *argshead); extern void prealiasS(Memman *mm, Memman *mms); extern void reverseonename(Hashindex *p); extern void reversenames(Hashindex *ans); /* in analog.c -- only main() */ /* in cache.c */ extern void outputcache(char *outfile, Hashindex **gooditems, Dateman *dman, Arraydata **arraydata, unsigned long *data, double bys, choice data2cols[ITEM_NUMBER][DATA_NUMBER]); extern void hashbuild(choice code, unsigned long *data, double bys, Memman *mm, Hashtable **hash, unsigned int data_number, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice data2cols[], Include *wanthead, Include *ispagehead, Tree **tree, Derv **derv, choice *alltrees, choice *alldervs, choice lowmem, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte); extern void corruptcacheline(char *line, choice *rc, choice type); extern logical parsecacheline(char *linestart, char *parsestart, unsigned int *code, unsigned int maxcode, int no_items, unsigned long *data, double *bys, Memman *mm); extern void readoldcache(Logfile *cachefilep, Dateman *dman, choice type, unsigned int granularity); extern void readcache(Logfile *cachefilep, Hashtable **hash, unsigned int *no_cols, choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice data2cols[ITEM_NUMBER][DATA_NUMBER], Arraydata **arraydata, Include **wanthead, Include *ispagehead, Dateman *dman, Tree **tree, Derv **derv, choice *alltrees, choice *alldervs, choice *lowmem, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte, unsigned int granularity); /* in dates.c */ extern void code2date(datecode_t code, unsigned int *date, unsigned int *month, unsigned int *year); extern time_t shifttime(time_t timer, int diff); extern choice parsedate(time_t starttime, char *s, timecode_t *date, logical from, logical unixtime); extern choice wantdate(timecode_t *timecode, Dateman *dman, unsigned int hr, unsigned int min, unsigned int date, unsigned int month, unsigned int year, int tz); extern choice wantunixtime(timecode_t *timecode, Dateman *dman, unsigned long unixtime, int tz); extern Daysdata *newday(unsigned int granularity); extern void dmaninit(Dateman *dman, datecode_t datecode, unsigned int granularity); extern void datehash(timecode_t timecode, Dateman *dman, unsigned long reqs, unsigned long pages, double bytes, unsigned int granularity); /* in globals.c */ extern void globals(char *comnane); extern void defaults(Options *op); /* in hash.c */ extern Hashtable *rehash(Hashtable *old, unsigned long size, Memman *treespace); extern Hashindex *hashfind(Memman *mp, Hashtable **table, unsigned int data_number, Include *wanthead, choice ispage, Include *ispagehead, Alias *aliashead, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte, choice type, logical aliased); extern Hashentry *newhashentry(unsigned int data_number, logical ispage); extern void hashscore(Hashentry *ep, unsigned long data[DATA2_NUMBER], choice datacols[DATACOLS_NUMBER][2], choice outcome, double bytes); extern void unhash(Hashtable *hash, Hashindex **gooditems, Hashindex **baditems); extern void unhashall(Hashtable **hash, Hashindex ***gooditems, Hashindex ***baditems); /* in init.c */ extern void initialise(int argc, char *argv[], Options *op); extern void confline(Options *op, char *cmd, char *arg1, char *arg2, int rc); extern choice config(char *filename, Options *op, logical fromcommandline); extern void settings(Options *op, int argc, char *argv[]); extern Inputformatlist *correctlogfmt(Logfile *lp, Include **wanthead, choice *code2type, Dateman *dman); extern void correct(Options *op); extern void finalinit(Options *op); extern choice strtoinfmt(Inputformat **ans, char *s, choice *count); extern char *apachelogfmt(char *fmt); extern void clconfline(Options *op, char *s); extern void clgenrep(Options *op, choice rep, char *arg); extern void cldebug(char **s, char *arg); extern void clargs(Options *op, int argc, char *argv[]); /* in init2.c */ extern void shortwarn(char *cmd, char *arg1, int rc); extern void longwarn(char *cmd, char *arg1, char *arg2, int rc); extern void badwarn(char *cmd, choice domess, char *arg1, char *arg2, int rc); extern void unknownwarn(char *cmd, char *arg1, char *arg2); extern void configcall(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configcols(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configallcols(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configchoice(void *opt, char *cmd, char *arg1, char *arg2, int rc); #ifndef NOGRAPHICS extern void configallchart(void *opt, char *cmd, char *arg1, char *arg2, int rc); #endif extern void configdebug(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configall(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configallback(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configlang(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void selectlang(char *country, Outchoices *op); extern void configlogfmt(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configapachelogfmt(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configrepord(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configstr(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configstrlist(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configerrfile(void *opt, char *cmd, char *arg1, char *arg2, int rc); #ifndef NODIRENT extern Logfile *clonelogs(Logfile *from, char *name); extern Logfile *expandwildlogs(Logfile *lp, Logfile **pter); #endif extern void configlogfile(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configcachefile(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configoutfile(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configchar(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configbarstyle(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configgraph(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configallgraph(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configfloor(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configtree(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configulong(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configuint(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configoffset(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configlowmem(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern int aliastocount(char *s); extern AliasTo *configaliasto(char *s, logical is_regex); extern void configalias(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configstrpair(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configstrpairlist(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configstrpair2list(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configdomlevel(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configinex(void *opt, char *cmd, char *arg1, char *arg2, int rc, logical in, logical omitinitdot, logical omittrailslash); extern void configinc(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configexc(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configincd(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configexcd(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configincs(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configexcs(void *opt, char *cmd, char *arg1, char *arg2, int rc); logical parseiprange(char *arg1, unsigned long *minaddr, unsigned long *maxaddr); extern void confighostinex(void *opt, char *cmd, char *arg1, char *arg2, int rc, logical in); extern void confighostinc(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void confighostexc(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configscinex(void *opt, char *cmd, char *arg1, char *arg2, int rc, logical in); extern void configscinc(void *opt, char *cmd, char *arg1, char *arg2, int rc); extern void configscexc(void *opt, char *cmd, char *arg1, char *arg2, int rc); /* in input.c */ extern logical my_lfopen(Logfile *lf, char *logtype); extern FILE *my_fopen(char *name, char *logtype); extern void my_lfclose(Logfile *p, Logfile *allc, Logfile *allp, char *filetype, Dateman *dman, unsigned long *totdata, double *bys, double *bys7); extern int my_fclose(FILE *f, char *name, char *filetype); extern logical logfile_init(Logfile *lf); extern void duplogfile(Logfile *lf); extern choice getmoredata(Logfile *lf, char *start, size_t length); extern choice getnextline(FILE *f, char *start, size_t used); extern void shunt_data(Logfile *lf); extern int strtomonth(char *month); extern choice parsemonth(Logfile *lf, void *arg, char c); extern choice parseuint2(Logfile *lf, void *arg, char c); extern choice parsenmonth(Logfile *lf, void *arg, char c); extern choice parseulong(Logfile *lf, void *arg, char c); extern choice parseunixtime(Logfile *lf, void *arg, char c); extern choice parseproctime(Logfile *lf, void *arg, char c); extern choice parseproctimeu(Logfile *lf, void *arg, char c); extern choice parseuint2strict(Logfile *lf, void *arg, char c); extern choice parsescode(Logfile *lf, void *arg, char c); extern choice parseuint4strict(Logfile *lf, void *arg, char c); extern choice parseudint(Logfile *lf, void *arg, char c); extern choice parseyear2(Logfile *lf, void *arg, char c); extern choice parseyear2or4(Logfile *lf, void *arg, char c); extern choice parseam(Logfile *lf, void *arg, char c); extern choice parsecode(Logfile *lf, void *arg, char c); extern choice parsejunk(Logfile *lf, void *arg, char c); extern choice parsespace(Logfile *lf, void *arg, char c); extern choice parseoptspace(Logfile *lf, void *arg, char c); extern choice parsenewline(Logfile *lf, void *arg, char c); extern void parsenonnewline(Logfile *lf); extern choice parsestring(Logfile *lf, void *arg, char c); extern choice parsemsbrow(Logfile *lf, void *arg, char c); extern choice parseref(Logfile *lf, void *arg, char c); extern choice checkchar(Logfile *lf, void *arg, char c); extern void resolveconflicts(unsigned int n, char *delims, ...); extern choice parselogfmt(Logfile *lf, void *arg, char c); extern choice parsenextrecord(Logfile *lf, Inputformat *format); extern int parseconfline(char *s, char **cmd, char **arg1, char **arg2); extern int nextconfline(FILE *f, char **cmd, char **arg1, char **arg2); extern char *nextlngstr(FILE *f, char *name, logical want); extern choice nextdnsline(FILE *f, timecode_t *timec, char **name, char **alias); extern void process_domainsfile(FILE *f, Options *op); extern void process_descfile(FILE *f, char *name, Options *op); /* in macstuff.c (See also macdir.h) */ #ifdef MAC_EVENTS extern void MacInit(int *argc, char **argv[]); extern void MacFini(void); extern void MacIdle(void); #endif #ifdef MACDIRENT extern void CToPCpy(unsigned char *pstr, const char *cstr); #endif #ifdef MAC #ifndef NODNS extern long OpenNetwork(void); extern int IpAddr2Name(char *hostname); extern void ResolverCleanup(void); extern pascal void SvcNotifyProc(void *dataPtr, OTEventCode code, OTResult result, void *cookie); extern pascal void MacTCPDNRResultProc(struct hostInfo *hInfoPtr, char *userDataPtr); #endif #endif /* in output.c */ extern void pagetop(FILE *outf, Outchoices *od, Dateman *dman); extern void pagebot(FILE *outf, Outchoices *od); extern void gensum(FILE *outf, Outchoices *od, unsigned long *data, double bys, double bys7, Hashindex **gooditems, Hashindex **baditems, Dateman *dman, choice data2cols[ITEM_NUMBER][DATA_NUMBER]); extern void timerep(FILE *outf, Outchoices *od, choice rep, Dateman *dman, unsigned int granularity); extern void timesum(FILE *outf, Outchoices *od, choice rep, Dateman *dman, unsigned int granularity); extern void printtree(FILE *outf, Outchoices *od, choice rep, Hashtable *tree, choice requests, choice requests7, choice pages, choice pages7, choice date, choice firstd, unsigned int level, Strlist *partname, unsigned long totr, unsigned long totr7, unsigned long totp, unsigned long totp7, double totb, double totb7, unsigned int width[], logical possrightalign, unsigned int bmult, unsigned int bmult7, double unit); extern void genrep(FILE *outf, Outchoices *od, choice rep, Hashindex **gooditems, Hashindex **baditems, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice *data2cols, unsigned int data_number, Dateman *dman); extern void dervrep(FILE *outf, Outchoices *od, choice rep, Hashindex *gooditems, Hashindex *baditems, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice *data2cols, unsigned int data_number, Dateman *dman); extern void arrayrep(FILE *outf, Outchoices *od, choice rep, Arraydata *array, Dateman *dman); extern void output(Outchoices *od, Hashindex **gooditems, Hashindex **baditems, Dateman *dman, Arraydata **arraydata, unsigned long *sumdata, double totbytes, double totbytes7, choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice data2cols[ITEM_NUMBER][DATA_NUMBER], unsigned int *no_cols, unsigned int granularity); /* in output2.c */ extern void report_title(FILE *outf, Outchoices *od, choice rep); extern void report_footer(FILE *outf, Outchoices *od, choice rep); extern void reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind, Dateman *dman); extern void matchlength(FILE *outf, Outchoices *od, char *s, char c); extern void matchlengthn(FILE *outf, Outchoices *od, int width, char c); extern size_t datefmtlen(Outchoices *od, char *fmt); extern char *datesprintf(Outchoices *od, char *fmt, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, logical running, choice allowmonth); extern char *timesprintf(Outchoices *od, char *fmt, timecode_t t, choice allowmonth); extern int f3printf(FILE *outf, Outchoices *od, double x, unsigned int width, char sepchar); extern void printbytes(FILE *outf, Outchoices *od, double bytes, unsigned int bmult, unsigned int width, char sepchar); extern void doublemprintf(FILE *outf, choice outstyle, unsigned int pagewidth, double x, char decpt); extern double findunit(Outchoices *od, double n, unsigned int width[], choice *cols); extern void calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern unsigned int alphatreewidth(Outchoices *od, choice rep, Hashtable *tree, unsigned int level, Strlist *partname); extern void declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void barchart(FILE *outf, Outchoices *od, char graphby, unsigned long reqs, unsigned long pages, double bys, double unit); extern void colheads(FILE *outf, Outchoices *od, choice rep, unsigned int width[], unsigned int bmult, unsigned int bmult7, logical name1st); extern void printcols(FILE *outf, Outchoices *od, choice rep, unsigned long reqs, unsigned long reqs7, unsigned long pages, unsigned long pages7, double bys, double bys7, long index, int level, unsigned long totr, unsigned long totr7, unsigned long totp, unsigned long totp7, double totb, double totb7, unsigned int width[], unsigned int bmult, unsigned int bmult7, double unit, logical name1st, logical rightalign, char *name, logical ispage, unsigned int spaces, Include *linkhead, char *baseurl, char *datefmt, char *timefmt, datecode_t date, unsigned int hr, unsigned int min, datecode_t date2, unsigned int hr2, unsigned int min2); extern void distcount(Hashindex *gooditems, Hashindex *baditems, choice requests, choice requests7, unsigned long *tot, unsigned long *tot7); extern void gensumline(FILE *outf, Outchoices *od, char codeletter, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void gensumlineb(FILE *outf, Outchoices *od, char codeletter, int namecode, double x, double x7, logical isaverage); extern logical checkonerep(Outchoices *od, Hashindex *gp, choice rep, choice requests, cutfnp cutfn, dcutfnp dcutfn, void *darg); extern logical checktreerep(Outchoices *od, Hashtable *tp, choice rep, choice requests, cutfnp cutfn); extern logical checkarrayrep(Arraydata *array); extern void checkreps(Outchoices *od, Dateman *dman, Hashindex **gooditems, Arraydata **arraydata, choice data2cols[ITEM_NUMBER][DATA_NUMBER]); /* in outcro.c */ extern unsigned int cro_pagewidth(Outchoices *od); extern void cro_cgihead(FILE *outf, Outchoices *od); extern void cro_stylehead(FILE *outf, Outchoices *od); extern void cro_pagetitle(FILE *outf, Outchoices *od); extern void cro_timings(FILE *outf, Outchoices *od, Dateman *dman); extern void cro_closehead(FILE *outf, Outchoices *od); extern void cro_pagebotstart(FILE *outf, Outchoices *od); extern void cro_credit(FILE *outf, Outchoices *od); extern void cro_runtime(FILE *outf, Outchoices *od, long secs); extern void cro_pagefoot(FILE *outf, Outchoices *od); extern void cro_stylefoot(FILE *outf, Outchoices *od); extern void cro_reporttitle(FILE *outf, Outchoices *od, choice rep); extern void cro_reportfooter(FILE *outf, Outchoices *od, choice rep); extern void cro_reportdesc(FILE *outf, Outchoices *od, choice rep); extern void cro_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind); extern void cro_gensumhead(FILE *outf, Outchoices *od); extern void cro_gensumfoot(FILE *outf, Outchoices *od); extern void cro_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void cro_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage); extern void cro_lastseven(FILE *outf, Outchoices *od, timecode_t last7to); extern void cro_prestart(FILE *outf, Outchoices *od); extern void cro_preend(FILE *outf, Outchoices *od); extern void cro_hrule(FILE *outf, Outchoices *od); extern char *cro_endash(void); extern void cro_putch(FILE *outf, char c); extern size_t cro_strlength(const char *s); extern logical cro_allowmonth(void); extern void cro_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern void cro_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void cro_colheadstart(FILE *outf, Outchoices *od, choice rep); extern void cro_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated); extern void cro_colheadend(FILE *outf, Outchoices *od, choice rep); extern void cro_colheadustart(FILE *outf, Outchoices *od, choice rep); extern void cro_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name); extern void cro_colheaduend(FILE *outf, Outchoices *od, choice rep); extern void cro_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt); extern void cro_levelcell(FILE *outf, Outchoices *od, choice rep, int level); extern void cro_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl); extern void cro_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width); extern void cro_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width); extern void cro_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width); extern void cro_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width); extern void cro_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width); extern void cro_rowend(FILE *outf, Outchoices *od, choice rep); extern void cro_blankline(FILE *outf, Outchoices *od, choice *cols); extern void cro_barchart(FILE *outf, Outchoices *od, int y, char graphby); extern void cro_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby); extern void cro_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn); extern void cro_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void cro_includefile(FILE *outf, Outchoices *od, char *name, char type); extern unsigned int cro_riscosfiletype(void); /* in outhtml.c */ extern unsigned int html_pagewidth(Outchoices *od); extern void html_cgihead(FILE *outf, Outchoices *od); extern void html_stylehead(FILE *outf, Outchoices *od); extern void html_pagetitle(FILE *outf, Outchoices *od); extern void html_timings(FILE *outf, Outchoices *od, Dateman *dman); extern void html_closehead(FILE *outf, Outchoices *od); extern void html_pagebotstart(FILE *outf, Outchoices *od); extern void html_credit(FILE *outf, Outchoices *od); extern void html_runtime(FILE *outf, Outchoices *od, long secs); extern void html_pagefoot(FILE *outf, Outchoices *od); extern void html_stylefoot(FILE *outf, Outchoices *od); extern void html_reporttitle(FILE *outf, Outchoices *od, choice rep); extern void html_reportfooter(FILE *outf, Outchoices *od, choice rep); extern void html_reportdesc(FILE *outf, Outchoices *od, choice rep); extern void html_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind); extern void html_gensumhead(FILE *outf, Outchoices *od); extern void html_gensumfoot(FILE *outf, Outchoices *od); extern void html_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void html_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage); extern void html_lastseven(FILE *outf, Outchoices *od, timecode_t last7to); extern void html_prestart(FILE *outf, Outchoices *od); extern void html_preend(FILE *outf, Outchoices *od); extern void html_hrule(FILE *outf, Outchoices *od); extern char *html_endash(void); extern void html_putch(FILE *outf, char c); extern size_t html_strlength(const char *s); extern size_t html_strlength_utf8(const char *s); extern size_t html_strlength_jis(const char *s); extern logical html_allowmonth(void); extern void html_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern void html_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void html_colheadstart(FILE *outf, Outchoices *od, choice rep); extern void html_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated); extern void html_colheadend(FILE *outf, Outchoices *od, choice rep); extern void html_colheadustart(FILE *outf, Outchoices *od, choice rep); extern void html_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name); extern void html_colheaduend(FILE *outf, Outchoices *od, choice rep); extern void html_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt); extern void html_levelcell(FILE *outf, Outchoices *od, choice rep, int level); extern void html_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl); extern void html_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width); extern void html_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width); extern void html_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width); extern void html_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width); extern void html_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width); extern void html_rowend(FILE *outf, Outchoices *od, choice rep); extern void html_blankline(FILE *outf, Outchoices *od, choice *cols); extern void html_barchart(FILE *outf, Outchoices *od, int y, char graphby); extern void html_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby); extern void html_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn); extern void html_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void html_whatinchead(FILE *outf, Outchoices *od); extern void html_whatincfoot(FILE *outf, Outchoices *od); extern void html_whatincprintstr(FILE *outf, Outchoices *od, char *s); extern void html_printdouble(FILE *outf, Outchoices *od, double x); extern void html_includefile(FILE *outf, Outchoices *od, char *name, char type); extern unsigned int html_riscosfiletype(void); extern void html_gotos(FILE *outf, Outchoices *od, choice rep); extern void html_escfprintf(FILE *outf, char *name); extern void htmlputs(FILE *outf, Outchoices *od, char *s, choice source); #ifndef NOGRAPHICS extern FILE *piechart_init(char *filename); extern void findwedges(Wedge wedge[], choice rep, Hashindex *items, choice chartby, Strlist *expandlist, unsigned int level, Strlist *partname, unsigned long tot, double totb, double totb7); extern void piechart_caption(FILE *outf, choice rep, choice chartby, char **lngstr); extern int piechart_wedge(FILE *outf, Outchoices *od, double angle, char *s); extern void piechart_key(FILE *outf, Outchoices *od, int col, char *name, char *extension, Alias *aliashead); extern void piechart_write(FILE *pieoutf, char *filename, logical jpegcharts); extern void piechart_cleanup(Wedge wedge[]); extern void piechart(FILE *outf, Outchoices *od, choice rep, Hashindex *items, choice requests, choice requests7, choice pages, choice pages7, unsigned long totr, unsigned long totr7, unsigned long totp, unsigned long totp7, double totb, double totb7); #endif /* in outlatex.c */ extern unsigned int latex_pagewidth(Outchoices *od); extern void latex_cgihead(FILE *outf, Outchoices *od); extern void latex_stylehead(FILE *outf, Outchoices *od); extern void latex_pagetitle(FILE *outf, Outchoices *od); extern void latex_timings(FILE *outf, Outchoices *od, Dateman *dman); extern void latex_closehead(FILE *outf, Outchoices *od); extern void latex_pagebotstart(FILE *outf, Outchoices *od); extern void latex_credit(FILE *outf, Outchoices *od); extern void latex_runtime(FILE *outf, Outchoices *od, long secs); extern void latex_pagefoot(FILE *outf, Outchoices *od); extern void latex_stylefoot(FILE *outf, Outchoices *od); extern void latex_reporttitle(FILE *outf, Outchoices *od, choice rep); extern void latex_reportfooter(FILE *outf, Outchoices *od, choice rep); extern void latex_reportdesc(FILE *outf, Outchoices *od, choice rep); extern void latex_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind); extern void latex_gensumhead(FILE *outf, Outchoices *od); extern void latex_gensumfoot(FILE *outf, Outchoices *od); extern void latex_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void latex_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage); extern void latex_lastseven(FILE *outf, Outchoices *od, timecode_t last7to); extern void latex_prestart(FILE *outf, Outchoices *od); extern void latex_preend(FILE *outf, Outchoices *od); extern void latex_hrule(FILE *outf, Outchoices *od); extern char *latex_endash(void); extern void latex_putch(FILE *outf, char c); extern size_t latex_strlength(const char *s); extern logical latex_allowmonth(void); extern void latex_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern void latex_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void latex_colheadstart(FILE *outf, Outchoices *od, choice rep); extern void latex_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated); extern void latex_colheadend(FILE *outf, Outchoices *od, choice rep); extern void latex_colheadustart(FILE *outf, Outchoices *od, choice rep); extern void latex_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name); extern void latex_colheaduend(FILE *outf, Outchoices *od, choice rep); extern void latex_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt); extern void latex_levelcell(FILE *outf, Outchoices *od, choice rep, int level); extern void latex_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl); extern void latex_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width); extern void latex_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width); extern void latex_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width); extern void latex_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width); extern void latex_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width); extern void latex_rowend(FILE *outf, Outchoices *od, choice rep); extern void latex_blankline(FILE *outf, Outchoices *od, choice *cols); extern void latex_barchart(FILE *outf, Outchoices *od, int y, char graphby); extern void latex_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby); extern void latex_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn); extern void latex_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void latex_whatinchead(FILE *outf, Outchoices *od); extern void latex_whatincfoot(FILE *outf, Outchoices *od); extern void latex_whatincprintstr(FILE *outf, Outchoices *od, char *s); extern void latex_printdouble(FILE *outf, Outchoices *od, double x); extern void latex_includefile(FILE *outf, Outchoices *od, char *name, char type); extern unsigned int latex_riscosfiletype(void); extern void latexputs(FILE *outf, char *s); /* in outplain.c */ extern unsigned int plain_pagewidth(Outchoices *od); extern void plain_cgihead(FILE *outf, Outchoices *od); extern void plain_stylehead(FILE *outf, Outchoices *od); extern void plain_pagetitle(FILE *outf, Outchoices *od); extern void plain_timings(FILE *outf, Outchoices *od, Dateman *dman); extern void plain_closehead(FILE *outf, Outchoices *od); extern void plain_pagebotstart(FILE *outf, Outchoices *od); extern void plain_credit(FILE *outf, Outchoices *od); extern void plain_runtime(FILE *outf, Outchoices *od, long secs); extern void plain_pagefoot(FILE *outf, Outchoices *od); extern void plain_stylefoot(FILE *outf, Outchoices *od); extern void plain_reporttitle(FILE *outf, Outchoices *od, choice rep); extern void plain_reportfooter(FILE *outf, Outchoices *od, choice rep); extern void plain_reportdesc(FILE *outf, Outchoices *od, choice rep); extern void plain_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind); extern void plain_gensumhead(FILE *outf, Outchoices *od); extern void plain_gensumfoot(FILE *outf, Outchoices *od); extern void plain_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void plain_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage); extern void plain_lastseven(FILE *outf, Outchoices *od, timecode_t last7to); extern void plain_prestart(FILE *outf, Outchoices *od); extern void plain_preend(FILE *outf, Outchoices *od); extern void plain_hrule(FILE *outf, Outchoices *od); extern char *plain_endash(void); extern void plain_putch(FILE *outf, char c); extern size_t plain_strlength(const char *s); extern logical plain_allowmonth(void); extern void plain_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern void plain_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void plain_colheadstart(FILE *outf, Outchoices *od, choice rep); extern void plain_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated); extern void plain_colheadend(FILE *outf, Outchoices *od, choice rep); extern void plain_colheadustart(FILE *outf, Outchoices *od, choice rep); extern void plain_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name); extern void plain_colheaduend(FILE *outf, Outchoices *od, choice rep); extern void plain_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt); extern void plain_levelcell(FILE *outf, Outchoices *od, choice rep, int level); extern void plain_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl); extern void plain_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width); extern void plain_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width); extern void plain_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width); extern void plain_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width); extern void plain_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width); extern void plain_rowend(FILE *outf, Outchoices *od, choice rep); extern void plain_blankline(FILE *outf, Outchoices *od, choice *cols); extern void plain_barchart(FILE *outf, Outchoices *od, int y, char graphby); extern void plain_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby); extern void plain_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn); extern void plain_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void plain_whatinchead(FILE *outf, Outchoices *od); extern void plain_whatincfoot(FILE *outf, Outchoices *od); extern void plain_whatincprintstr(FILE *outf, Outchoices *od, char *s); extern void plain_printdouble(FILE *outf, Outchoices *od, double x); extern void plain_includefile(FILE *outf, Outchoices *od, char *name, char type); extern unsigned int plain_riscosfiletype(void); /* in outxhtml.c */ extern unsigned int xhtml_pagewidth(Outchoices *od); extern void xhtml_cgihead(FILE *outf, Outchoices *od); extern void xhtml_stylehead(FILE *outf, Outchoices *od); extern void xhtml_pagetitle(FILE *outf, Outchoices *od); extern void xhtml_timings(FILE *outf, Outchoices *od, Dateman *dman); extern void xhtml_closehead(FILE *outf, Outchoices *od); extern void xhtml_pagebotstart(FILE *outf, Outchoices *od); extern void xhtml_credit(FILE *outf, Outchoices *od); extern void xhtml_runtime(FILE *outf, Outchoices *od, long secs); extern void xhtml_pagefoot(FILE *outf, Outchoices *od); extern void xhtml_stylefoot(FILE *outf, Outchoices *od); extern void xhtml_reporttitle(FILE *outf, Outchoices *od, choice rep); extern void xhtml_reportfooter(FILE *outf, Outchoices *od, choice rep); extern void xhtml_reportdesc(FILE *outf, Outchoices *od, choice rep); extern void xhtml_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind); extern void xhtml_gensumhead(FILE *outf, Outchoices *od); extern void xhtml_gensumfoot(FILE *outf, Outchoices *od); extern void xhtml_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void xhtml_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage); extern void xhtml_lastseven(FILE *outf, Outchoices *od, timecode_t last7to); extern void xhtml_prestart(FILE *outf, Outchoices *od); extern void xhtml_preend(FILE *outf, Outchoices *od); extern void xhtml_hrule(FILE *outf, Outchoices *od); extern char *xhtml_endash(void); extern void xhtml_putch(FILE *outf, char c); extern size_t xhtml_strlength(const char *s); extern logical xhtml_allowmonth(void); extern void xhtml_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern void xhtml_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void xhtml_colheadstart(FILE *outf, Outchoices *od, choice rep); extern void xhtml_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated); extern void xhtml_colheadend(FILE *outf, Outchoices *od, choice rep); extern void xhtml_colheadustart(FILE *outf, Outchoices *od, choice rep); extern void xhtml_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name); extern void xhtml_colheaduend(FILE *outf, Outchoices *od, choice rep); extern void xhtml_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt); extern void xhtml_levelcell(FILE *outf, Outchoices *od, choice rep, int level); extern void xhtml_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl); extern void xhtml_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width); extern void xhtml_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width); extern void xhtml_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width); extern void xhtml_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width); extern void xhtml_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width); extern void xhtml_rowend(FILE *outf, Outchoices *od, choice rep); extern void xhtml_blankline(FILE *outf, Outchoices *od, choice *cols); extern void xhtml_barchart(FILE *outf, Outchoices *od, int y, char graphby); extern void xhtml_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby); extern void xhtml_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn); extern void xhtml_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void xhtml_whatinchead(FILE *outf, Outchoices *od); extern void xhtml_whatincfoot(FILE *outf, Outchoices *od); extern void xhtml_whatincprintstr(FILE *outf, Outchoices *od, char *s); extern void xhtml_printdouble(FILE *outf, Outchoices *od, double x); extern void xhtml_includefile(FILE *outf, Outchoices *od, char *name, char type); extern unsigned int xhtml_riscosfiletype(void); extern void xhtml_gotos(FILE *outf, Outchoices *od, choice rep); extern void xhtml_escfprintf(FILE *outf, char *name); extern void xhtmlputs(FILE *outf, Outchoices *od, char *s, choice source); /* in outxml.c */ extern unsigned int xml_pagewidth(Outchoices *od); extern void xml_cgihead(FILE *outf, Outchoices *od); extern void xml_stylehead(FILE *outf, Outchoices *od); extern void xml_pagetitle(FILE *outf, Outchoices *od); extern void xml_timings(FILE *outf, Outchoices *od, Dateman *dman); extern void xml_closehead(FILE *outf, Outchoices *od); extern void xml_pagebotstart(FILE *outf, Outchoices *od); extern void xml_credit(FILE *outf, Outchoices *od); extern void xml_runtime(FILE *outf, Outchoices *od, long secs); extern void xml_pagefoot(FILE *outf, Outchoices *od); extern void xml_stylefoot(FILE *outf, Outchoices *od); extern void xml_reporttitle(FILE *outf, Outchoices *od, choice rep); extern void xml_reportfooter(FILE *outf, Outchoices *od, choice rep); extern void xml_reportdesc(FILE *outf, Outchoices *od, choice rep); extern void xml_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind); extern void xml_gensumhead(FILE *outf, Outchoices *od); extern void xml_gensumfoot(FILE *outf, Outchoices *od); extern void xml_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage); extern void xml_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage); extern void xml_lastseven(FILE *outf, Outchoices *od, timecode_t last7to); extern void xml_prestart(FILE *outf, Outchoices *od); extern void xml_preend(FILE *outf, Outchoices *od); extern void xml_hrule(FILE *outf, Outchoices *od); extern char *xml_endash(void); extern void xml_putch(FILE *outf, char c); extern size_t xml_strlength(const char *s); extern logical xml_allowmonth(void); extern void xml_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany); extern void xml_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult); extern void xml_colheadstart(FILE *outf, Outchoices *od, choice rep); extern void xml_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated); extern void xml_colheadend(FILE *outf, Outchoices *od, choice rep); extern void xml_colheadustart(FILE *outf, Outchoices *od, choice rep); extern void xml_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name); extern void xml_colheaduend(FILE *outf, Outchoices *od, choice rep); extern void xml_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt); extern void xml_levelcell(FILE *outf, Outchoices *od, choice rep, int level); extern void xml_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl); extern void xml_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width); extern void xml_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width); extern void xml_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width); extern void xml_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width); extern void xml_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width); extern void xml_rowend(FILE *outf, Outchoices *od, choice rep); extern void xml_blankline(FILE *outf, Outchoices *od, choice *cols); extern void xml_barchart(FILE *outf, Outchoices *od, int y, char graphby); extern void xml_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby); extern void xml_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn); extern void xml_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman); extern void xml_whatinchead(FILE *outf, Outchoices *od); extern void xml_whatincfoot(FILE *outf, Outchoices *od); extern void xml_whatincprintstr(FILE *outf, Outchoices *od, char *s); extern void xml_printdouble(FILE *outf, Outchoices *od, double x); extern void xml_includefile(FILE *outf, Outchoices *od, char *name, char type); extern unsigned int xml_riscosfiletype(void); /* in process.c */ extern void process_data(Logfile *logfilep, Hashtable **hash, Arraydata **arraydata, choice *count, choice *code2type, choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice data2cols[ITEM_NUMBER][DATA_NUMBER], unsigned int *no_cols, Include **wanthead, Include *ispagehead, Alias **aliashead, Include *argshead, Include *refargshead, Dateman *dman, Tree **tree, Derv **derv, choice *alltrees, choice *alldervs, choice *lowmem, logical case_insensitive, logical usercase_insensitive, unsigned char convfloor, logical multibyte, char *dirsuffix, unsigned int dirsufflength, unsigned int granularity); extern void corrupt_line(Logfile *logfilep, char *message, ptrdiff_t n); extern void arrayscore(Arraydata *array, double amount, unsigned long reqs, unsigned long reqs7, unsigned long pages, unsigned long pages7, double bytes, double bytes7, timecode_t timecode); /* in settings.c */ extern void report_vbles(Options *op); extern void report_compile(void); extern void report_debug(char *type, char *arg, char *fullset); extern void report_conffiles(Strlist *list); extern void report_logfiles(Logfile *logfile, logical cache); extern void report_logformat(FILE *outf, Inputformatlist *format, logical inwarn); extern void report_fromto(Dateman *dman); extern void report_want(Include *wanthead, char *type, char *indent); extern void report_scwant(choice *code2type); extern void report_alias(Alias *aliashead, char *type, char *indent); extern void report_strpairlist(Strpairlist *head, char *type, char *connector); extern void report_lowmem(choice lowmem[]); #ifndef NODNS extern void report_dns(void); #endif extern void report_outopts(Outchoices *od); extern void report_sep(char c, char *type); extern void report_daterep(Outchoices *od, choice j); extern void report_genrep(Outchoices *od, choice j); extern void report_cols(choice *cols); extern void report_sortby(choice sortby, logical sub); extern void report_floor(Floor *floor, logical sub); #ifndef NOGRAPHICS extern void report_chart(choice chartby); #endif extern void check_file(char *name); /* in sort.c */ extern void calctotmax(Hashindex **gooditems, Hashindex **baditems, Strlist *partname, Strlist **newpn, Strlist *space, size_t need, choice rep, Include *wanthead, choice requests, choice requests7, choice pages, choice pages7, choice date, choice firstd, unsigned long *totr, unsigned long *totr7, unsigned long *totp, unsigned long *totp7, double *totb, double *totb7, unsigned long *maxr, unsigned long *maxr7, unsigned long *maxp, unsigned long *maxp7, double *maxb, double *maxb7, timecode_t *maxd, timecode_t *mind, logical donetots, logical nosort, Hashindex **ans3); extern void calcfloor(unsigned long *min, double *dmin, choice *filterby, Floor *floor, choice requests, choice requests7, choice pages, choice pages7, choice date, choice firstd, unsigned long totr, unsigned long totr7, unsigned long totp, unsigned long totp7, double totb, double totb7, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7); extern void makebadpn(Hashentry **badp, unsigned long *badn, Hashindex *ans2, choice requests, choice requests7, choice pages, choice pages7, choice date, choice firstd, unsigned long *maxr, unsigned long *maxr7, unsigned long *maxp, unsigned long *maxp7, double *maxb, double *maxb7, logical donetots); extern void my_sort(Hashindex **gooditems, Hashindex **baditems, Strlist *partname, Strlist **newpn, Strlist *space, size_t need, choice rep, Floor *floor, choice sortby, logical alphaback, Include *wanthead, choice requests, choice requests7, choice pages, choice pages7, choice date, choice firstd, unsigned long *totr, unsigned long *totr7, unsigned long *totp, unsigned long *totp7, double *totb, double *totb7, unsigned long *maxr, unsigned long *maxr7, unsigned long *maxp, unsigned long *maxp7, double *maxb, double *maxb7, timecode_t *maxd, timecode_t *mind, logical donetots, Hashentry **badp, unsigned long *badn, logical nosort); extern Hashindex *my_mergesort(Hashindex *list, unsigned long length, choice sortby, mergefnp mergefn); extern Hashindex *merge(Hashindex *list1, Hashindex *list2, unsigned long length1, unsigned long length2, choice sortby); extern Hashindex *mergea(Hashindex *list1, Hashindex *list2, unsigned long length1, unsigned long length2, choice sortby); extern Hashindex *mergeb(Hashindex *list1, Hashindex *list2, unsigned long length1, unsigned long length2, choice sortby); extern Hashindex *mergeb7(Hashindex *list1, Hashindex *list2, unsigned long length1, unsigned long length2, choice sortby); /* in tree.c */ extern Hashindex *treefind(char *name, char *nameend, Hashtable **tree, Hashindex *item, cutfnp cutfn, logical build, logical transient, logical reuse, Memman *space, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], unsigned int data_number); extern void graft(Hashtable **new, Hashtable *old, Memman *space, unsigned int data_number); extern void allgraft(Hashtable *t, Memman *space, unsigned int data_number); extern Hashindex *newtreeentry(char *name, char *nameend, Hashindex *item, logical transient, logical reuse, Memman *space, unsigned int data_number); extern Hashentry *newtreedata(Hashentry *from, Memman *space, unsigned int data_number); extern void treescore(Hashentry *to, Hashentry *from, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2]); extern Hashindex *sorttree(Outchoices *od, Hashtable *tree, choice rep, Floor *floor, choice sortby, Floor *subfloor, choice subsortby, logical alphaback, unsigned int level, Strlist *partname, Alias *notcorrupt, choice requests, choice requests7, choice pages, choice pages7, choice date, choice firstd, unsigned long *totr, unsigned long *totr7, unsigned long *totp, unsigned long *totp7, double *totb, double *totb7, unsigned long *maxr, unsigned long *maxr7, unsigned long *maxp, unsigned long *maxp7, double *maxb, double *maxb7, timecode_t *maxd, timecode_t *mind, Hashentry **badp, unsigned long *badn, Memman *space, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2]); extern void maketree(Tree *treex, Hashindex *gooditems, Hashindex *baditems, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], unsigned int data_number); extern void makederived(Derv *derv, Hashindex *gooditems, Hashindex *baditems, unsigned char convfloor, logical multibyte, choice rep, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], unsigned int data_number); extern char *maketreename(Strlist *pn, Hashindex *p, Strlist **newpn, Strlist *space, size_t need, choice rep, logical delims); extern logical genstreq(char *a, char *b, char *t); extern void rnextname(char **name, char **nameend, char *whole, logical build); extern void inextname(char **name, char **nameend, char *whole, logical build); extern void onextname(char **name, char **nameend, char *whole, logical build); extern void tnextname(char **name, char **nameend, char *whole, logical build); extern void snextname(char **name, char **nameend, char *whole, logical build); extern void Znextname(char **name, char **nameend, char *whole, logical build); extern void bnextname(char **name, char **nameend, char *whole, logical build); extern void pnextname(char **name, char **nameend, char *whole, logical build); extern void Bnextname(char **name, char **nameend, char *whole, void *arg); extern void Pnextname(char **name, char **nameend, char *whole, void *arg); extern void Nnextname(char **name, char **nameend, char *whole, void *arg); extern void nnextname(char **name, char **nameend, char *whole, void *arg); /* in utils.c */ extern void my_exit(int status); extern void sighandler(int sig); extern logical substrcaseeq(char *s, char *t); extern char *strtoupper(char *n); extern void strtolowerx(char *n); extern void toloweralias(Alias *ap, logical both); extern void tolowerinc(Include *ip); extern void tolowerse(Strpairlist *sp); extern void reversealias(Alias **head); extern void reversestrpairlist(Strpairlist **head); extern logical strcaseeq(char *s, char *t); extern char *strrpbrk(char *s, char *t); #ifdef EBCDIC extern char *strtoascii(char *s); #endif extern char *buildfilename(char *old, char *sub, char *name); #ifdef NEED_STRCMP extern int my_strcmp(char *s, char *t); #endif extern unsigned int chrn(char *s, char c); extern unsigned int chrdistn(char *s, char c); extern unsigned int log10i(unsigned long i); extern unsigned int log10x(double d); extern unsigned int findbmult(double d, unsigned int dp); extern int atoi255(const char *s); extern unsigned long arraymaxl(unsigned long *x, unsigned int size); extern double arraymaxd(double *x, unsigned int size); extern size_t arraymaxlen(char **s, unsigned int size, Outchoices *od); extern void prettyprintf(FILE *outf, unsigned int pagewidth, char *fmt, va_list ap); extern void mprintf(FILE *outf, unsigned int pagewidth, char *fmt, ...); extern void print_progversion(FILE *f); extern void warn(char c, choice domess, char *s, ...); extern void error(char *s, ...); extern void debug(char c, char *s, ...); extern char *delimit(char *s); extern void *xmalloc(size_t size); extern void *xrealloc(void *ptr, size_t size); extern void *submalloc(Memman *m, size_t size); extern void freemm(Memman *m); #ifdef NEED_MEMMOVE extern void *memmove(void *dst0, const void *src0, size_t length); #endif extern logical wildmatch(char *s, char *p, char *whole, int nmatch, int *pmatch); extern logical matchq(char *s, void *p, logical is_regex, int *pmatch); extern logical genwildmatch(char *s, char *s2, char *p); extern logical headmatch(char *s, char *p); extern logical headcasematch(char *s, char *p); extern logical matchiprange(char *s, unsigned long minaddr, unsigned long maxaddr); extern logical included(char *name, logical ispage, Include *listhead); extern logical incstrlist(char *name, Strlist *listhead); extern logical pageq(char *name, Include *ispagehead, choice type); /* in win32.c */ #ifdef WIN32 extern void Win32Init(void); extern void Win32Cleanup(void); #endif /* WIN32 */ #endif /* ANLGHEA4_H */ analog-ce-6.0.17/src/anlghead.h000066400000000000000000000114261406366436600161600ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** anlghead.h: first header file ***/ /*** This file contains the user-definable options which you are most likely to *** want to change. Edit any of the #define lines according to your desires. *** However, all of them except MANDATORYCONFIGFILE can be changed at run *** time as well. ***/ /*** These settings are overridden by any in your configuration file. ***/ /*** DON'T REMOVE THE #'S -- THEY'RE NOT COMMENTS! ***/ #ifndef ANLGHEAD_H #define ANLGHEAD_H #ifndef HOSTNAME #define HOSTNAME "[my organisation]" /* The name of your organisation or web server. This is used for printing at the top of the output. */ #endif #ifndef HOSTURL #define HOSTURL "none" /* The URL of your host's home page, for linking to at the top of the output; use "none" for no linking. */ #endif #ifndef XMLDTD #define XMLDTD "http://timian.jessen.ch/dtd/analog-data.dtd" /* The URL of your host's home page, for linking to at the top of the output; use "none" for no linking. */ #endif #ifndef ANONYMIZERURL #define ANONYMIZERURL "none" /* Optional URL to prefix on the site and URL reports for link anonymity ; use "none" to disable anonymization. */ #endif #ifndef LOGFILE #define LOGFILE "logfile.log" /* The name of the default logfile. Can be a list, separated by commas (but no spaces), and can include wild cards. */ #endif #ifndef OUTFILE #define OUTFILE "stdout" /* The default file for output. Use "stdout" for stdout. */ #endif #ifndef IMAGEDIR #define IMAGEDIR "images/" /* URL of the directory where the images for the graphical reports live. The URL can be absolute, or relative to the output page: e.g., just the empty string "" for the same directory as the output page. */ #endif #ifndef LOGO #define LOGO "analogo" /* the file where the analog logo lives: within the IMAGEDIR unless it starts with / or contains :// . You can put another logo in here (your organisation's logo, for example -- but if you do, change the LOGOURL below too). Use "none" for no logo. */ #endif #ifndef LOGOURL #define LOGOURL "https://www.c-amie.co.uk/software/analog/" /* Where the logo links to, in XHTML output. */ #endif #ifndef STYLESHEET #define STYLESHEET "none" /* The URL of your style sheet. Use "none" for no style sheet. */ #endif #ifndef DEFAULTCONFIGFILE #define DEFAULTCONFIGFILE "analog.cfg" /* The name of the default configuration file. */ #endif #ifndef MANDATORYCONFIGFILE #define MANDATORYCONFIGFILE "none" /* A mandatory configuration file; read after all other arguments so overrides everything. Program exits if it is not found. Use "none" for none. */ #endif /* Finally, some directories where particularly files are looked for (you MUST include the trailing slash in the directory name!). You can also use "" to mean "the current working directory at the time you run the program". * If any of these directories is defined to be NULL, analog will attempt to deduce the directory of the analog binary from the command name you used, and use that directory; or the current directory if it couldn't deduce a directory. This may or may not work, so it's better to specify a location explicitly here if you know where the files will be kept. */ #ifndef LANGDIR #define LANGDIR NULL #endif /* Directory where the language files live. Actually, if this one is defined to be NULL, they will be looked for inside the "lang" subdirectory of the directory containing the analog binary. */ #ifndef CONFIGDIR #define CONFIGDIR NULL #endif /* Directory containing configuration files. */ #ifndef LOGSDIR #define LOGSDIR NULL #endif /* Directory containing logfiles. */ #ifndef CACHEDIR #define CACHEDIR NULL #endif /* Directory containing cache files. */ #ifndef OUTDIR #define OUTDIR NULL #endif /* Directory for writing output files: must already exist. */ #ifndef HEADERDIR #define HEADERDIR NULL #endif /* Directory containing header and footer files. */ #ifndef DNSDIR #define DNSDIR NULL #endif /* Directory containing DNS files. */ #ifndef LOCKDIR #define LOCKDIR NULL #endif /* Directory containing the DNS lock file. */ #ifndef ERRDIR #define ERRDIR NULL #endif /* Directory containing the ERRFILE. */ #include "anlghea2.h" /* You can edit anlghea2.h as well. But the options in there are ones which you're unlikely to want to change now. */ #endif /* ANLGHEAD_H */ analog-ce-6.0.17/src/build/000077500000000000000000000000001406366436600153375ustar00rootroot00000000000000analog-ce-6.0.17/src/build/openvms/000077500000000000000000000000001406366436600170265ustar00rootroot00000000000000analog-ce-6.0.17/src/build/openvms/Instructions000066400000000000000000000004321406366436600214540ustar00rootroot00000000000000make-vms.zip contains OpenVMS build scripts, which have to be unzipped within the analog source directory. Full instructions can be found in the file startux.html in the analog docs. Note: these files worked with version 5.90beta2, but haven't been updated for version 5.91beta1. analog-ce-6.0.17/src/build/openvms/make-vms.zip000066400000000000000000000206061406366436600212760ustar00rootroot00000000000000PK×Xg+°ë¹ë batch.comUT Æé;wÏ}>Uxèè%ÑŠÂ@ Eßû×2àŠ¥ì®k}EŸDb›±³ŽS]ÿÞ©BÂ!ç^bÀŒ´nËZ®™¤ö-<¥Ãƒ‚BÖE†X‹år @8Q}9GéBS¤=ùø“(4¸Ñ¡-¿“¼œ“ìV"<)Dz,3“¬I[L°0•ç+§š¯ïù!/zî.Jøà|½YýVóݦÊG#Œû›¤oY1gKW û¬á;uŠYç|sü ”ª??%\ý;Í^PKjyw.Cè¢{¬build_analog.comUT ˜Î}>wÏ}>Uxèè­XksÚFþÞ_q^û‚!#œLÇöx&6— cHœIÇãY¤ÔèVí*˜þúž³+ ì´U»ç¾çòlŽàO¼Å.áýQöÚlÿtô?¸N=ß…«ùÑ¢Æ1?¦¸¥ÿ ‡ Ñâ$šû<°öä 䊃 É|6Q ·\Ip¢P2GBÀIâÿ ixòÎåN*,—C3Nø‚' w!Jòm±.ÿfñ'gÅÂ%GÂL}Wý†•'d” Õû¹4•@ƒýÍñyNÊ„<‡»aàÎs¾Bo#Сf‚ï-—Þߥ^´fwSåº~F“_`Äé…ðE³Ý›Þõg0•<^ñfiòšLŪÅR¹Š’w>&,Ox’[!—JpI®ܯ"õ©Cq™=ÛÏü@ûììÌî´mÐ^ÃÇØEÕ.,0DÙ‘~{cµ·¤v;sº~ÊÁ±¯ÜÀ“d< +&`Îñ¸}…|óÌ);µÇ$¥ÓÆç´ÓÎ^¹.RbäB¾†$J1ˆx*¤õÚÇ›öi®w*Îé´pXèÂ’ch)jZ•Å0ÀQÀ¤GælrQvÛÞQ~Òã ’ögÊ|oáá åê;“Ý)üÎÉEódáGi–ÍHzAe"£(}ŽULfF¿Œ²¦”³ (}ÊYâ¬Pút#ŽðŸäÁ9R[ýÏ}T„U),¤†qÎŒûÿlc[BHÌÿ$âéìnp{Scù-·lÊe¶¾Ðe‰ Ý(ˆ=ŸÃÿaè…_“sHhk ’ þ“[FGr Wâq H»”¢ìñ0Š´ÃÔ[-5T¨ÌÓæ6U4§ýýõþq4îõ‡ä%öL°Û7Ø€0Šd¸z¡§dÂ{¯÷D6`Ó¦³1 ½Ý0}ß¼`Ôêö…ó°{”¹`׿¥@ü°k Ô-"Ið¼]ôôCw°À_Ùw)GœçI(‹"ÐU\Ĭä ý劳SkUN RQ14£?«²A»:¹°†«[ɧۣëþQ‰ÛÑT2‰Í%˨Ÿ?·õc¿$>4„áäŽ3ê­q¡¼FWPP?­íªº¢‰ßÇ¡Máib[2 *B¢?®1týHÐLk!/ü*…²‘›U+²÷9öò|ÿâÕÞCó°æ°fh˜Œô0†¼ót ^À–|›ó;c¯ý ÓŠ &êê¡ÔÏ^^SFc,ÐÀû‹Ó0@mÛƒË RñAÑõ.ÁÞ:UtHmG)šŒ±Nc‚Nʰ:A§JPõ]ÄæRö‘¢L^·~R–4«ÄÕx­bÏí=ÖsMÓ9tÇ£É`دéÜNgWÃaMZ¾^’-Ö„t‡ý«Ûš½Zµ‚–ö°¯©–êôú޵¨€ÄXa$­Ê°Ú“÷ B5 ^–·ÑO’¨2ëc–`«–ØE Ñ˜Ø úì4,「ÛõtÐC3:xmª¡-†€Lœ"¦Gïµ2Ø®Çõ!žAÐ[8NâM¯°a“…ëõúQ¨†®[àwdt}ÎB¥5N1´Ø 04w=†€|@²›Êœ°T+o uö‹L°ˆÒÄÑÒ¶•…›ÝXÔÉãèÍ~Õ“'‰(ËèsÅ»pÅV‹Ó». ÓaΊ›K´ùÂôBOªŽ‰xe"ŽÅU‚EÂD¼ÊM„–L˜4˜²òS­2•¦ÆVÙW‡¾$¢¯• |úöQГÚ÷™Ò˓ڪɣ\Ï2ǘ¦àQõR˜s´>|2],̵žvrì 3BcVÝ>—xx²Vç‚»‹ÄVÛzH´)tãÉìýãp<žä "7õ ü,ޏž!M$7 ü#G¶ñŒ,+U“.xRË(o늮dŽÍÒ°¢ùFÉ ú|˜â'úG?Šb “®?†=eÞÐ~EèµöJ(…—ön@; Ë¢²cËïVì$ü>¶ÖT †Þü¦÷ >­ÈŸŸ •‚ÍwHs?è¯çˆ¿à‘~©jè5äáï&Mšä„ñ°»ý’uÀíp’ ]¸›û1ÕúqM×ÀųÃÛ‘Ã(—†‘#¥Fƒ†¡Õ: Oa…‚¿Å\) ½†[¨0ß .!$œµý§ϨBYd\i­Þ7T>S7V×3Ã]ŸTi¸)ž•EK¿[ÉØüyIææÏá ÆlϘJö6zBB[a›ãŽQá/SÄížH•‹"”iŽ£Jƒ\®§»1 ÁÛ.K} ¿[“î]ÿáGð¬)âDªã[¢~§.BßWÐÊÊäe*t1ý¸U2/SA¤ÿÌ ªà»AuþÃZvŽª®@Ý$1OF ñCÒF~¿9«†VÕYaØK¿EõåKÞ~õÕê£Ûô® r±'#†Ó³´iÐ…Uåóåöò†×Ï×´Q¸ÔEàØï]Úº ·£ž.42MBú‘áËóº® ôï´¦g ^wÝßß?fWÚ­wˆêwäÿ" ù£VpÏ6 )ÿ«@L¼ÂäèFáÂKl–õðŠæ™½¢£ù+Úg¾²Ôÿø=ëíÖ‡Pâw=P@ý_ù !®å°_+3sŠ· ÛÕ((dd¨top.Šøó‹R¤.J¡ºÐ±ºøÁ`)P¼/\PK¢yw. ãæmˆÒ descrip.mmsUT ÿÎ}>wÏ}>UxèèVÛrâ8}Ž¿¢g’˜sK •ª T2@ØË»Ô”°ÖÄX.KNÂßo·d“L3©øAnÉÝGÝGG’÷ Ë•—ˆØ]­,d툅réì;ûÐ X´ä¥e²nÙ1¦t ®]€ká=@w­d…í²Oöi*äs¹ŸÑÝ>Ãñå†,Ñ"‚©ˆO6Ÿ&×½˜h<‚›4‰xfr(³T29 q~å %4w#® ¶Ë4·ñ÷4-Ó8|’=/í§Ä«5›Íj³Ö[0æ™p¶ EÄ}`‘*šÍCn‰ ã€U®bÝ 'Yp­^=̃oc³öïã¡ûì̽BçRp×þÇਠE/OªD´„n¯x<2# "ZH‚ èâ3Å!— óù—"Æm²©U³Å€>×°ÙRU4K–\+x æ©ý–þc\±BÓ@˜g‚-Yʼnˆ<Ó‚'W1Ó‚yY=Jt ëU|õjÎHÛ÷±xø$2Eyp•óSË«Ê%\2§´oêò°}M(|K¾†±z€#·Y5laŠŽs×»ž\\àÝéœÚý ö «áØôŠÔ±–3¸}qÙôÈeYèsÖ§rOà_w æýîÌ´® ç•ágM>”îƒö̾ÞzM!Cšâ ùLñw®{¹Gì%|F+ç?)vb¿Pž˜Q±d-œ$7§Eǹ:»¤böX(˜¢È’åɘóW"íç%Š”…Ö˜ ŒñŸ“«@DB›!2ê™…ëc¬ó~é(.¦cñ –¬ç^"s3Ы0·CLíy2½‡y~ðœ™q"=®l%ŠkܷˬC€ <(ù0ÜÞYñO"j˜ÜÇ Ÿ/ Ó z]‡áViíe4ògîìÂ}‚ç>LÖêàÊ_Ï‘  6ÍiE'b¦óÂãA!“e±øå«ãòPqÇ­MÛÇöÈĽ? ‡“ÊpøÝœˆ§pfÎD;aF¾X8ÎK’˜ñAÄ@Z&Y­FPô{VéÅ7ŠÿËqòª6\œùnPÊÌú‹Ùx1Ý€Âì-g¯ <»|ÁÒP£ˆéÃŒ† ˜Ѿþ¾m.Î/“⻈òŒð¬Â·ÚøD:³v£ÒnÙK›öÓ¸Ó­¨f“ÿFô{Ùud¼†WK|ÿ£ùªå8öÚ1IŒS¼o 2’-D²¢» þ‚Jæžú ¯f‚÷Ù~„º]¡RÇÎÀ?»#pF<ÙK¹µ·ñÙÂWPÂÆ£ÿ@-Wô¢ŸPŒèòë÷[Ž-Éô¢?–Ï‘m²ü,Ý»‚?@ø®ÐP¾#tæüPK Ìxw.libgd/UT oÍ}>¤Ï}>UxèèPKØXg+pÀ NÛlibgd/descrip.mmsUT Çé;wÏ}>Uxèèm“mOÛ0Ç_ÇŸâT*­am {³©h¬…ª£- M*CÈI.‰Á±ƒíPõÛïì±*¥¾³ïÿ»»ørMÐfF4I][(´«ÕÅ ,èé‘¿X\Æì€DßZ!s(„Ä7@ïå8ù’Ç Õ«lx&›ŠCk…*a¬ë†?°;Öä|lÑ+"µ«ˆbaÁó©æÎ§Lj…IHöÓçPAºÁµÈž`²µ”¥gÈäÞ>m…Þðó6ø<8[]>õm%,l¸…Ì´9Ê-4­§K¤´”[ÃF›'ØW…B >·Â`ßWçÓ>¬û„à*‡Õr R¤†„ž?ò •©3î„V6˜°Õ-Tü=­”7”û@ ¦à”6«¸*CJ‘q Š×Ê¡±¢Ô›„±Ùr|_a8S™¤ÈìÝÝ÷a.RªiŒõ(fl|1?›úÈno|µX/&Çëýº;Ù|¶¼| ïwYRc°èÔwÑ»èÞ5W5ô:»L|¦&;dÁmE2ÁB(ÜWp³µÝ‰°O£»A²Û»Ÿ¶þ›õmí÷þ¤­ióž1zÿ0Šè¿Ì-S÷³!öªuþf=ŸÆ1 šÑÐIt˜$I'ÈwB‚x#}„2úÍzðýê6ªÜ›…V®ö/ÿüv§véx*qçøêæa`¶0äTg÷ºË$r# `Õ‚áRÏué—±Vt5úo°O ¡ÂBí’N§) í( ¯Ÿ ïï])OúAyÂ~PKX ‹-¾Ù’¥"&libgd/make.comUT è™÷=wÏ}>Uxè赓Kkƒ@…÷ùqa`:î…,_L ( AL2¡Rµ©hþ}ïTÓÒ­›™sï\Î7¯«CœaxzÒÔA]ÁЂⰠ}m .¿Z’wYÑ碖ÖøÚêNÑ~X»>äö ý³ôÑêÉ,U¹©YJIeeÛ0WÛ†ª¿±Âº,a†y%[´™haŠúXö'I c·gãö¬_‘ZK*'f´yuídå;œh²çCd")JÍ Ê<¸wÚΉ¤åNÉQ^&ÞÈô̰x‹ç„%ëMàÞhc pTßäͦÝȼ£ößÁðgþ>ÃãÓ3Üß…arq “ƒ1LÁD{k b¨Ö‹úîÒwPíJ¼C_”'?«K);É9×?PK Ìxw.libpng/UT oÍ}>¤Ï}>UxèèPKØXg+\’G°Ûvlibpng/descrip.mmsUT Èé;wÏ}>Uxèè…RMsÚ0=£_±8àLìÐ\š!Ó™˜fhÍÇÀ¤‡´=ØÖjlÉ#Éaòï»ØÉ]öãí{+­¶ 4™eTŠä7"GØ( ϱHAIX”(Í֬˺T>S\lò!ù_ÃÑrÞ X‰ì&o†êûšü;ÿ¾jŸDÈ«À“?œ›Ûp6òä/°Š'ðTòÄ"÷G2ÉÕŒ¥{•”ãj/áµ$Ïžãé|ƒßaänø—±é|¼¦ÄõTfyÅ‘Ü^ߌ¿Ç£ÇµÏŒ³¥ ÅÙ°x:ÿù^³lñðÃe ”ÛH¥ÿœ5hkw_Y‘×AE“×¢þ°Ž‹­Nd :ß4•BÕ.j­´ ËiîCèñ}ó”uîÁ‹‚y3=UÙ²²pA_Î!­DÎ!SE™#µ¢ ¯p¤ÂðƒN¿×w/ '8VÒ Y!cYމ„!ë„°¬ôáz®bš?*Ú]À¥[«ËÃý²\¥)j’öLÇ› k~’H}ïÌ;FK°°;¢r¤¥â(3&bõx‡~л+g2ˆv*5&ü ^ÿÈit{ýDZ7?ׂ7po>µ¯—¦Eý¸§ÑýYÔ¢9÷î÷-loV¸ÿd0ûsƒùPKŠ ‹-+éÐ_0žlibpng/make.comUT Dš÷=wÏ}>Uxè轑ÝN„0…ï÷)& zay‚½¬¦†,5f5ưl7K†Ÿ¨oo ´úMoàf2‡/ǃ8†àž¨gÞ‹Sý [›‚´¼ˆA™á“жj¦£Þïð[R>äJ–ЂYôDb¾ÍÓG,%¨w¼ñ€žùþƒWˆ²¯Î7(¡Ñ¼’DèÖG€És!àgÑ‚²íƒ¸å(àoWÒ3Fò$ŒÉ¿!¬™rÉ&FA¸&QÒ!Ìšl™çõ…ÓD-Æ!“I·Lµ#;ͤ¤C¢5ÙvKŒrbZšË–tºm*ÎÂÔPÍÆ%•N·L¥Îšj1©Lºí®hfš’ÒeOK²eÂXÆ4Ñb2™tEÕµcÝNBʯ¾–w†ŸÁë¦ñ:€äßËu8Lus„ª»\1 Œ1ÚüPK Ìxw.pcre/UT oÍ}>¤Ï}>UxèèPK×Xg+¤)N(½pcre/descrip.mmsUT Åé;wÏ}>UxèèmPßOÂ0~ÞýàA t!ñÅq€Æ[ Ñç®+¬¦k—¶ òß{h|ðé¾»~?z7ÄÍf é…SMPÖàÁ:ÌiÞi^´J—h87\Û#Þ±ûY!ŸÁót·DßÓR9)‚ugÒC®%÷ä%–VøxG¨–¬ µž ¹W!4IŸN'Æ{_&¾b€×å|±ÜíñáˆÞQqw…ÊÍ*Èžß~9¶ø„tµž¿t“ÑMšmò¾wÍp­1¡A'Cô„N‰û³emhÚ€ƒ•2ÊW²¼,¬Ì±ß16ø " ²º~uŒQPú'îÊtƒ DSÌ[w”oíšNH%µæ \·¬®ý„J· lQH‡IÔK;áBjþW’ä¾PK×Xg+nQD|ˆ pcre/make.comUT Åé;wÏ}>UxèèSQpvVÐwq‘E©i™ ¶ Ž99@1 '/Èóp swwQÐ÷KÌM-IÇ{¹þ>žÁ!úþN^®Î!¶ÎA®z@¶BArQª^2—ŠBxQfIªBpe±ŠiIAi‰‚’[f^fqFjŠBRifNJf^ºX—žžPK Ìxw.zlib/UT oÍ}>¤Ï}>UxèèPKJœ‹-ˆ”Zfzlib/descrip.mmsUT ;“÷=wÏ}>Uxèè•TßoÚ0~ÆÅ©ð¨I)Õ´)Õ¤2ئnIA mÒ´—$vˆ×`#'Y ýÎ&?Em’;û¾ïÎçïÒ…KCÅ·öf“:ž·zXɸñ„A$9O(kpyð pg¾e⇷"]ÒOR1ŠxxoMKk<`ÉÃG˜íR î+´-ªí»œË'ßf4 ²~Æ,ob×°tgNΨɞfXÐ*ŸL„ŸÈ5P®—ƒ\Ú¢º¾¶fŸ§šj|LU€ÿ¾³oF„L¿¸“¯+ø½þtî-Œ7ÐÎÁ"îýÃ÷:Ä-VÉüÓ7½>M˜ºÛ2ø¡ÜlKÓƒ£Âb™²(ñ3fìõžKcp‰ ó›tÐ%ö½ÜŒü4+í v¦X„OJ‚z#¦cïËB€ÓÁ÷Þ–I@:wðSñŒÁj—öæy¶Í3¸0Wk.Ú&a˜Ø¶/ ØÀ ý^_7a0ÐTS)2.rF{ö5ÐfÏ ƒKO×R§Æ>bWu—«î ½Ô5è°+4”¯v„l¸àظmÁY¹¯ -c_` æ p€t,XäjÍàêAº( üàq"®60ÔCq9Ô™ôÓ LSX‡!ÐèÓzŽÀÛa•üvH:¨Óy#e8?”‰ã½‘¦ŽœâÚbØãñô'DB;&-9G»•âN4¥èTÂŒO…7oï(]%å“ÙZ?UOB\ëÛ˜‡yˆ+¡ÂzHþGØ`)bÚ|fº _5go¦«9-={FÒšáW$%Í9S‘¤5(G÷׬⬚ÿ”#¦ýÙúÈ?PK‹š‹-äð9(_ò zlib/make.comUT ö÷=wÏ}>Uxèè½ÕMkƒ0ð{?ÅCº]"lç4Ã-k:“Ræe´]Jû‚/°}ûeé’zÕanÿ‡Dÿ?BÄpY©}ñ3ˆÊÂÅæ¨êß¡þHk=r– òø™9‹æŒfX`3™îM§I Ô¦ÚîKãs£û)Lß„@Ô ôReï!©Ô¦Q`wê—Ø•Œ.YD¨[‚N«ÞÖ“Løë2£B³ÆGw{¨3òwÌ×äÁkûcç4a‘¤†kóøàNkòSžrã5a|¬íë/MIÌ8y1Z7Œ/îöR>§Âª¯ƒµë¤N"!-Úd/fÛ:ˆì¾=›½‡{úa™ÑÛݸ^Юwz%SfÑ&{1ÛÖþäÛ)û:âœïjaþ˜†kóøàNkrî.Dîé:äÝËp>5Å©U:®«B¿@|×o›KÛbÅ6‡m[”Ÿ°;/¥jÆM~PK×Xg+°ë¹ë €batch.comUTÆé;UxPKjyw.Cè¢{¬ èõbuild_analog.comUT˜Î}>UxPK¢yw. ãæmˆÒ è³ descrip.mmsUTÿÎ}>UxPK Ìxw. ÉEylibgd/UToÍ}>UxPKØXg+pÀ NÛ €²libgd/descrip.mmsUTÇé;UxPKX ‹-¾Ù’¥"& èDlibgd/make.comUTè™÷=UxPK Ìxw. ÉE§libpng/UToÍ}>UxPKØXg+\’G°Ûv €álibpng/descrip.mmsUTÈé;UxPKŠ ‹-+éÐ_0ž èlibpng/make.comUTDš÷=UxPK Ìxw. ÉEspcre/UToÍ}>UxPK×Xg+¤)N(½ €«pcre/descrip.mmsUTÅé;UxPK×Xg+nQD|ˆ €pcre/make.comUTÅé;UxPK Ìxw. ÉEÒzlib/UToÍ}>UxPKJœ‹-ˆ”Zf € zlib/descrip.mmsUT;“÷=UxPK‹š‹-äð9(_ò €§zlib/make.comUTö÷=UxPK*Fanalog-ce-6.0.17/src/build/riscos/000077500000000000000000000000001406366436600166415ustar00rootroot00000000000000analog-ce-6.0.17/src/build/riscos/Makefile000066400000000000000000000113121406366436600202770ustar00rootroot00000000000000# Makefile for analog 6.0, RISC OS # Please read docs/Readme.html, or http://www.analog.cx/ # CC = cc # which compiler to use: eg cc, acc, gcc. NB Different # compilers need different CFLAGS, e.g., -O instead of -O2. CFLAGS = -throwback -Wp -ansi -IC:,TCPIPLibs: -UCOMPAT_INET4 -DMINORVERSION="\"-sb1\"" # options, e.g. for optimisation or ANSI compilation. DEFS = -DNOUNCRYPT -DBZ_STRICT_ANSI # -DDEBUGSAFE=1024 # ... -DNOOPEN -DNOPIPES -DNODNS -DNODIRENT # ... -DEBCDIC -DNOGMTIME -DNEED_STRCMP -DNEED_MEMMOVE ... # ... -DNEED_STRTOUL -DNEED_DIFFTIME -DHAVE_ADDR_T ... # ... -DNEED_FLOATINGPOINT_H # All the options are explained at the bottom of this file. OS = RISCOS # Operating system: UNIX, DOS, WIN32, MAC, OS2, OSX, VMS # RISCOS, BEOS, NEXTSTEP, MPEIX, BS2000, AS400 LIBS = C:o.stubs TCPIPLibs:o.Socklib5 TCPIPLibs:o.Inetlib TCPIPLibs:o.Unixlib DEPEND=-depend !Depend OBJS = alias.o analog.o cache.o dates.o globals.o hash.o init.o init2.o \ input.o output.o output2.o process.o settings.o sort.o tree.o \ utils.o outcro.o outhtml.o outlatex.o outplain.o outxhtml.o \ outxml.o GD_OBJS = libgd.o.gd libgd.o.gd_io libgd.o.gd_io_file libgd.o.gd_png \ libgd.o.gdfontf libgd.o.gdfonts libgd.o.gdtables PNG_OBJS = libpng.o.png libpng.o.pngerror libpng.o.pngmem libpng.o.pngset \ libpng.o.pngtrans libpng.o.pngwio libpng.o.pngwrite \ libpng.o.pngwtran libpng.o.pngwutil ZLIB_OBJS = zlib.o.adler32 zlib.o.compress zlib.o.crc32 zlib.o.deflate \ zlib.o.gzio zlib.o.infblock zlib.o.infcodes zlib.o.inffast \ zlib.o.inflate zlib.o.inftrees zlib.o.infutil zlib.o.trees \ zlib.o.uncompr zlib.o.zutil PCRE_OBJS = pcre.o.pcre BZIP2_OBJS = bzip2.o.blocksort bzip2.o.bzlib bzip2.o.compress \ bzip2.o.crctable bzip2.o.decompress bzip2.o.huffman \ bzip2.o.randtable UNZIP_OBJS = unzip.o.ioapi unzip.o.unzip .INIT: @cdir ^.!Analog @cdir o @cdir bzip2.o @cdir libgd.o @cdir libpng.o @cdir pcre.o @cdir unzip.o @cdir zlib.o all: ^.!Analog.analog ^.!Analog.analog: $(OBJS) $(GD_OBJS) $(PNG_OBJS) $(ZLIB_OBJS) $(PCRE_OBJS) $(BZIP2_OBJS) $(UNZIP_OBJS) link -aif -o ^.!Analog.analog $(OBJS) $(GD_OBJS) $(PNG_OBJS) $(ZLIB_OBJS) $(PCRE_OBJS) $(BZIP2_OBJS) $(UNZIP_OBJS) $(LIBS) @echo '***' @echo '***IMPORTANT: You must read the licence before using analog' @echo '***' .SUFFIXES: .o .c .c.o:; $(CC) $(CFLAGS) $(DEPEND) -c $(DEFS) -D$(OS) -o $@ $< clean: -remove ^.!Analog.analog -wipe o.* ~v~c cleanall: -remove ^.!Analog.analog -wipe o.* ~v~c -wipe libgd.o.* ~v~c -wipe libpng.o.* ~v~c -wipe pcre.o.* ~v~c -wipe zlib.o.* ~v~c -wipe bzip2.o.* ~v~c -wipe unzip.o.* ~v~c # OK, here's the details on all the DEFS options, in case anyone needs to know. # NOPIPES excludes non-ANSI functions popen() and pclose(). You will lose the # UNCOMPRESS command. # NODNS excludes all the DNS lookup code. This is platform-dependent, but # typically involves header files and functions like inet_addr() # and gethostbyaddr(). # NODIRENT stops you using wildcards in logfile names. Again, the code is # platform-dependent, but usually the header file and functions # stat(), opendir(), readdir() and closedir() are involved. # NOOPEN excludes non-ANSI functions open() and fdopen(). This results in an # alternative, less safe locking mechanism for DNS files and cache files. # NOFOLLOW omits code including the functions realpath(), access() and stat() # and the header file and possibly . Analog won't # then follow symbolic links when guessing path names. # NOALARM omits code including the function alarm() and the header file # . You will lose the ability to set a DNS timeout. # # ** If all of the above are defined only features defined in ANSI C are used. # # NOGRAPHICS omits the code for generating pie charts, including all of libgd, # libpng and zlib. # HAVE_GD means you already have libgd, libpng and zlib, and you want to use # your version not mine. This is likely to reduce the size of the binary. # You will also need to include "-lgd -lpng -lz" in the LIBS. # HAVE_PCRE means you already have libpcre, and you want to use your version # not mine. This is likely to reduce the size of the binary. # You will also need to include "-lpcre" in the LIBS. # EBCDIC is needed if your server uses the EBCDIC character set, not ASCII. # USE_PLAIN_SETJMP uses ANSI setjmp() instead of POSIX sigsetjmp(). # NEED_STRCMP, NEED_MEMMOVE, NEED_STRTOUL and NEED_DIFFTIME provide # replacements for standard functions missing on some systems. # NOGMTIME doesn't use the gmtime() function. # NEED_FLOATINGPOINT_H includes a header file called . # HAVE_ADDR_T is needed if inet_addr() returns in_addr_t which is not the # same as unsigned long. # Dynamic dependencies: analog-ce-6.0.17/src/build/riscos/README000066400000000000000000000002541406366436600175220ustar00rootroot00000000000000This directory contains an anlghead.h and Makefile for analog on RISC OS. Note: these files worked with version 5.90beta2, but haven't been updated for version 5.91beta1. analog-ce-6.0.17/src/build/riscos/anlghead.h000066400000000000000000000107771406366436600205710ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. Distribution, usage and modification of this program is *** subject to the conditions of the Licence which you should have received *** with it. This program comes with no warranty, expressed or implied. ***/ /*** anlghead.h: first header file ***/ /*** This file contains the user-definable options which you are most likely to *** want to change. Edit any of the #define lines according to your desires. *** However, all of them except MANDATORYCONFIGFILE can be changed at run *** time as well. ***/ /*** These settings are overridden by any in your configuration file. ***/ /*** DON'T REMOVE THE #'S -- THEY'RE NOT COMMENTS! ***/ #ifndef ANLGHEAD_H #define ANLGHEAD_H #ifndef HOSTNAME #define HOSTNAME "[my organisation]" /* The name of your organisation or web server. This is used for printing at the top of the output. */ #endif #ifndef HOSTURL #define HOSTURL "none" /* The URL of your host's home page, for linking to at the top of the output; use "none" for no linking. */ #endif #ifndef LOGFILE #define LOGFILE "logfile/log" /* The name of the default logfile. Can be a list, separated by commas (but no spaces), and can include wild cards. */ #endif #ifndef OUTFILE #define OUTFILE "Report" /* The default file for output. Use "stdout" for stdout. */ #endif #ifndef IMAGEDIR #define IMAGEDIR "file://images/" /* URL of the directory where the images for the graphical reports live. The URL can be absolute, or relative to the output page: e.g., just the empty string "" for the same directory as the output page. */ #endif #ifndef LOGO #define LOGO "analogo" /* the file where the analog logo lives: within the IMAGEDIR unless it starts with / or contains :// . You can put another logo in here (your organisation's logo, for example -- but if you do, change the LOGOURL below too). Use "none" for no logo. */ #endif #ifndef LOGOURL #define LOGOURL "http://www.analog.cx/" /* Where the logo links to, in XHTML output. */ #endif #ifndef STYLESHEET #define STYLESHEET "none" /* The URL of your style sheet. Use "none" for no style sheet. */ #endif #ifndef DEFAULTCONFIGFILE #define DEFAULTCONFIGFILE ".analog/cfg" /* The name of the default configuration file. */ #endif #ifndef MANDATORYCONFIGFILE #define MANDATORYCONFIGFILE "none" /* A mandatory configuration file; read after all other arguments so overrides everything. Program exits if it is not found. Use "none" for none. */ #endif /* Finally, some directories where particularly files are looked for (you MUST include the trailing slash in the directory name!). You can also use "" to mean "the current working directory at the time you run the program". * If any of these directories is defined to be NULL, analog will attempt to deduce the directory of the analog binary from the command name you used, and use that directory; or the current directory if it couldn't deduce a directory. This may or may not work, so it's better to specify a location explicitly here if you know where the files will be kept. */ #ifndef LANGDIR #define LANGDIR ".lang." #endif /* Directory where the language files live. Actually, if this one is defined to be NULL, they will be looked for inside the "lang" subdirectory of the directory containing the analog binary. */ #ifndef CONFIGDIR #define CONFIGDIR NULL #endif /* Directory containing configuration files. */ #ifndef LOGSDIR #define LOGSDIR NULL #endif /* Directory containing logfiles. */ #ifndef CACHEDIR #define CACHEDIR NULL #endif /* Directory containing cache files. */ #ifndef OUTDIR #define OUTDIR NULL #endif /* Directory for writing output files: must already exist. */ #ifndef HEADERDIR #define HEADERDIR NULL #endif /* Directory containing header and footer files. */ #ifndef DNSDIR #define DNSDIR ".dns." #endif /* Directory containing DNS files. */ #ifndef LOCKDIR #define LOCKDIR ".lock." #endif /* Directory containing the DNS lock file. */ #ifndef ERRDIR #define ERRDIR NULL #endif /* Directory containing the ERRFILE. */ /* strncasecmp() is not defined in the clib headers, but it's present in the latest release */ extern int strncasecmp(const char *a, const char *b, size_t n); #include "anlghea2.h" /* You can edit anlghea2.h as well. But the options in there are ones which you're unlikely to want to change now. */ #endif /* ANLGHEAD_H */ analog-ce-6.0.17/src/build/windows/000077500000000000000000000000001406366436600170315ustar00rootroot00000000000000analog-ce-6.0.17/src/build/windows/Instructions000066400000000000000000000003701406366436600214600ustar00rootroot00000000000000These Makefiles for Microsoft Visual C++ contributed by Takayuki Matsuki unzip make-msvc++.zip within the analog folder Then within the src folder, run the command NMAKE /f "analog.mak" CFG="analog - Win32 Release" analog-ce-6.0.17/src/build/windows/make-msvc++.zip000066400000000000000000000232141406366436600215700ustar00rootroot00000000000000PK D0 resource/UT ü7 @˜8@UxèèPKޏo+Ûe7Iû§resource/analog.rcUT üIô;–—8@Uxèè½TÝo›0Gâ¸Ñ—VšÂš<í‘Ä.sG! ak¥HÈ“X"6²M»Iýãkò¶ÛúÌHßùŽßýîÃ÷ïx¡¤–•ÄY-¦ 5mÉ%Ì™`ŠV‚bZ¶ª`  ÅÓsßw .Šº-x[}oṎU”¬â‚A0N§"I>ÁJâè!Oî†I”vö'\k8¾áq¥äÌ‚ÁßOI<Š2„¡¿ äM´úeuü'wÑ KÈߨ8€ã0"é·]Èz•^Á§uvÊËàæÞbI“l2Â9Š¢+x~†Cå4˜„ùí8¾Zv1ä?I<è»NÄa„ºü61NñgH³áJ‚ðMESk×(:_R(dÉò†ÎÙå×A¿óÇDi±øþÖã¹J‚R¬»#1m€ x¤uË ©iÑWVj$0¡[Å€6MÍ j¸µã_–Ó%åBÛ¨„æÚ0aÀªi]ƒþmKmë‹ ’“Q_ÃñêdÝŽH: &(Fx%÷z½Y) =«èc÷£ž}y›œ•‰$ß1:a ³åíú¨‹»Î‡$vUû10ûb¡ãuÖýZï›qßÞLÍ„·¹pètðA§²ßÔŸ]6ä·Ô¾ºðN/˜üõcS-þg®ÿ1/¯çå9†ã!ÏBšw“ñPKĶo+âFªÒüÇresource/resource.hUT Gô;–—8@UxèèmÐQkƒ0ð÷‚ßá ïUǾ€3yÓ¤-ëS°z– I†Æn£ô»/•´˜—ÀÝïþ\†×+ŠÐ=å„ò”Qy»›0„\7ƒmç€à{û…H7µÚ µÃ´iú©Eèt»y¬}ùô µ©{{Þ Í½l¶-vÚ 0ÂKaýÄQlæ Ž?üT=õ.u?áÀà7ØÓ'6nœÏÖwìeY&ãñNÉÜ0‚&Dðì¨ä1™\öRÞ(N?Jo¤¨Š”ªC’UtÙëe §"ÏN-¼FÑýkœ—…ÈžxìùšöKÒçèÿÚ¢iu·ÜPK °¥D0src/UT ìY!@˜8@UxèèPK¨D0ã7Îøð src/analog.makUT 9 @ª—8@UxèèµYmoÛ6þ¼ýWµb´•\§:£šø%pëØÕ, %:f-‹‚$'N†ý÷I½›’ L+ EâïyîHÞä·pE퀅lÁ€<—ù$3Ú:”Á%ñH`EÄéÕù!Œ¨K>À…âóÀò,—=èNè¿~õÿÕµ&KÔ% àÊü£ÿþý™Þ†“ }XEðÄ‚µ°h…Ä \ŠIR浸>Ûø|~Ÿyp4„.¿µz þua‰Â)—Ìüˆnè‹Å•Qâì!°6ÒÂÅ7œê„.+xFñšqO;ºK° Iß>…Ì^Ë{>ë'[2ùѳO¸³È™n,Ï—z¨ ;bÁ3Ÿ¬y Ë$>ø¨éq„:íög£Ý1ÚŸ»°±¢p»¦ß"¶~f×Uª[¶þKFóÍxÚ»“þè²¥A¯šöú>ô¤Qø·Ô;íÀœ¸g¢þÕÐ4Ï/‡ŸÍaì‘åÐGRˆ{¶ T+<3ㆸ{ ï§?ÑÇéÍdÒãê“£ˆGoë ô¯¯{¶«“nùÙï¶¼ŸÝüŒç=ý.ݤãiy$…Ÿû7ssshkÂòùd‚§VÓïâEA³š˜ÓI5^ø)Þ‹£¶õ^¨¯÷í€(†Ñˆï)Öƒ ÅøÍwã ÂåpýýÄýíO†çS読 a•œPá@"UyÈ”‘J„ªèƲl-bö9_ûø ËG(ξ\ùÖåR+ÔÙâ—V!—q;¨°BÁ¶ì©1à`A«cðಅåÖi¬¬pU#¦ˆ;µr[7Ÿm#Ìqõ «hãÖk¸…]½ŠïZÔ; rˆ)*ÔùŠ»Ã\wµ XòmÖ­WH¢KJ­ ê<‰R·¥¶­Ý0öY[§Î¢BüÄÏÕÞô½Âs´È¨˜3ð˜ñVˆ.E-%;FÉw'ÕÀÀÆ`…m@w|úå ÜTÝb€!Âìâ»Ùƒ;\ eÚÚ“d «,Ê2QY’å ²$Ÿ}ʲ4ï”iÆQ :’äì–%¹ü¢¥§U!ËrŠB˜e•°šKšA²]›]…(Ÿ/ʲB¦Ø&9¢,H³CYå…²$;òû‰×7)Ú;kéxéìäÇ‹ç,•Nd:Z:¹éxá$ÊT<3Ý|fw'ƒáè~4ž [xŸ;M-™¬’±|ûú•¥J"ñìOâZ¢»¼¿žÏ¾÷ÒTp5ãöŒË?Á˜}c€=ëxzÚÑÄít0¼¸¹”÷÷ýÙÔœM†ñÓÕEßÄÛ‘¿oß^¡ä/´8b9éWwÊ0lÑËéöߩ辜]™˜ñ]çú:õS> 'Ðɯx†½rì™ íÝ—öïøþÁ*¶‚A±"ÈLÄÊã““9½÷ÆÖ«{c3g7óþÛq™Þì¸Ê(’^}Ú­\åâõ*vµàb¢ÊíåQ¤?{0¹ ÚŽÌ»e˜\6nEæð2J.³7‚’Ôƒ2N¡N4‚$ªK&+9`ˆBUÆÈªWc%H§Q^³öQÒJÖJ\‹Ë0ùÝŽ(¥  ¬Ä6…$ÛT®h Kv ¬\;Ò–bCä{›qö÷w¡Sj iWµ)vÍïŠ]R£8IïW*ô„ ¥dªØb6ƒÅÓ=œ´[mCô¸eŒ¬ñmC¶Ëe\ÝŠl½Ë(¹†¼ ý»6¶ l’vqmèîê ±KlÁìåSB©Ø2–<àÝã‘í#ºSñ´ ¢ïµH^_´¸æŸÙÑy÷ýÆ(UË}v¯0Ök(Ä_'ÿGñ÷ÛÞ'>÷xU|3.P’ës’|ÅË(U˜>Ž‚*4Íò8&4ÊïìeN¨t)þš[`¥´~$Šø4Ëå`ˆÔ¿PH‰“~’xÛÏ©í¯ Lƒ†¤âÇœ¡s˜üÖ‘1ª0}U\šåq04ꟿ Œ^ä7œ„ÄמŒÚîQðª¨4ÈáPHr?¸þPK ·¥D0 src/bzip2/UT úY!@˜8@UxèèPK½¨D0ä|˜ÛLS src/bzip2/bzip2.makUT ¶^!@¶^!@Uxèè­UÛnÚ@}.RþaâæK‰]U(–ØF¤æ"”VBBÆ^‡-Æ‹l“’Tý÷ŽoØ^©TxZï\ÎÌ™3ËgP;`!s#PÉ ñ؆`F[‡2èŸVDÚß4ЩG®¡c…xÃ|X¼ÑMCrÂÍEí²¯ƒpUïê=QEA¸¨á‡’¸À õŸSr®‘¶ågõ¿bXÑ[9V%.E×µ…¼Ç4FKŒcëµå;ؤO$ÐvÖzã‘V)¨tLg!»Y{ÒÚZ “ýq»åÎÑjGÖÂ#¥Ö I u— ¤—õÝ×[…cEÔƒ.+xÄj>m2M ï×ElúB*Åt³o°#3SB:ìW8>bwéa(±»aÆ(ɧ¿õ* ºã±b{Ù¡ø&fW ìô<š>ªý‰"ÍöÒìù›‹ZÛ0 ‚4K G% ñ5¦5´öµO7÷¸)a¢4ƒ8[xÌ^…,ˆ$¶ø)ñyÃd'쨋M@Âð”KŽñ„‹Cþ!Ïr뺨Á*ô#¨ûö‹DEÅÌ2!ljäþ¨›¬ÙÑ0‚Â._Õãy¢ßzåРdIýN³¡àÒ¬âq d—sÝh÷LEö™ÇžÈlµ*u@î8ê<˜ ̰ޣ³;°î§Æ[*<Ë“âÜŒxsy:¼Ÿ \é´U¦ ®êª¦Ïõ¾¡‰x.8ÓAdW"ÜßÝÅ7¹K§˜Gç•ð8 Yµùx2z(¸ ?5Aî}yÔYÅî› !9U­3í¥çù Ó5³#¦Æ“¾©ð÷´±—høÉtV2Îbo‡¿PA¶“@²ïMb¢Z©òð­÷ݦŸIýØÞäM½ówì±5GÓIWäЉþˆºZˆšF‰¥UŠ7(+®RTîš–U %š<@*”z”½Fy ªxσ•¯ËVe΂UÚ>_̳àåë̃UÖü,HÅãÀcUŸÿB«ü×þPK =D0 src/libgd/UT V8 @˜8@UxèèPK#¦D0K|òMB src/libgd/libgd.makUT ÂZ!@ª—8@Uxèè­UÛnÚ@}.ÿ0qó€¥Ä®)ªP,°A¤æ"”VBBÆ^“mÌ.²MJZõß;ë ¶Á‡ÂÚÛ™93³þ ê<ä^:y#>_“¬hãR=ÂH`GÄ…á õÍ€.õÉ´í%œOKWqÃu½vÑï‚tÙèt{²š’T¯áE3ûíž×ðÜÞÞÀ„øÑ|`XV«g@‡³0 6ND1 ñÂ5q¨G‰«€E"p‰goü(A¡(ËC)Ëêˆ^¯íeqYTúH|+Âņú.¬¸KòiBâDJÁïù…06ŒQ¶LȹBF86KóG·¼¶¢¯N<Ц+y4F/èÇW+›¹X$# [{µöI³àT8&½P½´hw¬ôˆ¡ñÔ]êLjZ;/¨øÁº¼ œ kw_ ƒê€ÚÇÁSf¿c6Ò ž± 1[ŠógçõWpØL&üñxGDrKÃÊï!«·â3wìc¦“ޝVá¤Ó¿?fMÄIìäÂ2‰JÓ)¥‘™&‰â‹á<„ØìùP’A¯„*ìÀ¹ðÄæT`íêL8ÉÖóŒHá¤ð¬HéqUx;þ «ôiýPK =D0 src/libpng/UT V8 @˜8@UxèèPK©D0XÃÏcŒ src/libpng/libpng.makUT N_!@ª—8@Uxèè­V[kÛH~Þ@þé64Ò’@)&‚ú"·ò«![0Y5³‘fÌhœ¦”þ÷žÑ]éÄY¨ýâ™9ß9ß¹Û܆‚g<–0&$á{"À—‡ˆr˜FD I‹ùà“ š·0 2|á ºÛ³¯V”íÏÏÞÌ&`\ôF“©i€ã€aœŸáÅ)0p w”]_Áš$Õ?w}0uaÄY&Å!”-Ò —íIHcJ" |"!"qpH$èmYhÌ]Œ‘ÿüì™oн’ÑòÀ¯Ø`w I)Hc£t)äBPZ-½»{Â@£h?OÐ[Ì 0`eßQ­‰®­;&1Eh`îU*å=êñ4 X„a2bû¤û„ô[J­cQ;®â³ÒàÁ•ðÿp;v”†2Ø%¤ü œ/Y†^ÌÅcïéý;û'4îD ¾f× »^/×0c$Ž‘œ>’NšTÆ›Ðwé—=†”ÿ–mŸ1¼Å­ç9 îùŠ%¿²CÒ10Z­œ0±ÈvàÚ9",ÎËÛÏãÙÚ±6uÎÏ_ÎÏž}0¬M™sü2Ô;ÚõÜÁ0o]~À‰Éòþ)L˜å»ÿŒ¥D.ŽCR’dDH°ì8ä寕äˆâyr49y ßýcÑh×ÿ–tÕyÕ°0ñ€ç£Jžh&¡‘Û=Õ ˆK"*Z’Ü7^_ážbªà ÊÇíÄL}Çf<á_9Øü û]G B.‡}6豦ðš÷¦äaUl¨*³FÔX#¬J«ÕEÕ ërê„­BbAº™é·ó ½±;ÙNfžkâ¹É™YT®|2áÃÍz© yÌJ»ºtÔ•B>ØÛÕzù±)ÖÜûîìé¿`/¯À㺘-®¯Œü¸»ÃÛiqÞ·#¿<¢iRH³5rjÒJ:žTЗ6CÑ¿šVcŸŠKƒ†©ž’Sñ¨ÙÒðÔ#w*žbP5L­ >—š{ S½NÆ“/S³]NÆ•ï$W³¬NÆ•¯8W½ûþˆ«óïäPK =D0 src/pcre/UT V8 @˜8@UxèèPKĬD0×TäÄ,src/pcre/pcre.makUT @f!@ª—8@UxèèuTmošPþ<ÿÃ)óƒ$-,š4‹)IUÀØ!¨é–˜¸\Ú»"—ðÒÙ,ûï;°‚c~:÷¼>ÏsŽ|†#)Ïx˜ƒNßhÄš‚›ã° 1M½œ`¯¦ß 0YD¯aæeèá1$$¥J%ýÞÕÒi0œ› YMIê÷𡉠¸'GàЈb)f¯ ×. ˜ó8ËÓ‚ä »± bžC–PÂBF\šC@C¯ˆrèê¤`+ÃÖqv¿wá 1t•Héîiø‹8ð€ž;ÔpOSJr¥Q÷ôBcH‹8fñs%Ì5ªAxqþËÎÌšµ: ¦<Ô\H˜¿`?¼8€# GïDtÒ(j˜ÕÔ°b§¼W „Ðm²:õ‹g©»ƒ‹BÜó#Ú ýŸiÝÂ0ä)H•sxüz+ã½x9#`1?õÒwIn·3gíÀ2¦aˆ£ÙmÉ#”>/½k¥k·¾*ð_ÙÞ~DröÖ²4‘n¹bJùŒ‹¨Õ`¾Ùh$Rè¯ÎqçZJ*{½}Ô—Ž¦ì>nri_zú½©eÁ$eWj1_^ìjSP³O7÷øÿÈÊ«©ÈU.÷JÝá7rûEaß _L”K€H§þXX^#=²,‡s\ oÌ;¼,mDÊFÖr6ixW¯‚6Üà€Ú¹7­éÂÕÔ˜Gü™ƒÊ‹|Ò„§¼õìÁÕ`‡h»9"ÚfÙ¤ CÝ0÷æÒ2d´Ï åŠTí’áþîNxN)%6ùT}z´ÊEA¹ÞýÆY?œy¬,PŸÆ .¾ƒºªãÑ,íñH*M[7fÛEeïW³¹[›Ø-3¹¤˜ôÿÀ^&oÄv"9¸tè ’òèòû#ôGÈ4©–ˆ_–Íæƒlõ,á#»;8qêø˜þçCæ®·ÎÜÐjùI}9ÿìw2V¹rãÅÖˆZHN©–Ö¿é/PK »¥D0 src/unzip/UT Z!@˜8@UxèèPK¬¬D0ðôÐ{åîsrc/unzip/unzip.makUT f!@f!@Uxèè¥TÛnÚ@}.RþaâæK‰]U(–ØF¤ÆFvP ™õºÙÆìZ¾¤¤Uÿ½ã `SPÊÓî\ÎÌ9{ðG˜1’ˆT„èôF"¦ xY0Êiâg4{6üb€É"z #?ňàóŸ,V‚4¾è\NM®ºcs"K i I¼he ÜÀãý¸4¢ØŒå3Ã󆯂§Y’“Œ!K‹ Ò˜2(àÑ úy”ÁI(± [Çé£-.q‹“=Rc¾·›ëœElD@õBD$ %™Òè{z¡’œsÆ¿Uâ\£"ˆÏëýß±íÀ­Ù«ÓaéÆGÝ ³ì›Ïˆ0£€±õ7qD¦Æ±z 5¬é)ÿU‚BìÓm2Ç,ÉüuDÔÏL< ÝP$ UÁîöó­ŒÆñ3FÀbëÄOÞ%¹g¸®ã”Ó0ÄÙì¶4*ä>¼ý©‡u¼Ú]82?Ò•ýˆìì…eiE¹åSÊ+Ï£Àx>×H¤Ð-šÏõÆZBª³³xÔ§®¦,÷ÖœÚÇ‘‹Îв`’²¬ØZ*ÂkCPµ7÷øOIKïTò’ ?fŠX—Nç+°óù7rûIaÁº•>Þ¡P¥ä€Êà€?–®¥[–fpÈ«WÝB¬Û¼,idJ k:ê÷4ôßk¡ Üà€:¸2­áÄÓT."ñM€*òlÐÚv…ÎèÁÓ`‰ûž”á8Ó™´ ÍýફæÊœZ†ŒçÃ0¹b\‡d¸¿»+"»’rqy×½»´Ú‹†Ò«¹ë<HÎ,PŸú N¾‚êô@ÕÑtS»ß“Ê£­£Å¤:¯f£±Wº.pöØ}ž?âÕŒÿâ“L<#¶)ÉeQtPIib…üÚ§~º ªÇÏÕ|¾'_]K:ÈövO|¤Ï}/PK =D0 src/zlib/UT V8 @˜8@UxèèPK¬D0Ì~,¾®src/zlib/zlib.makUT Þe!@ª—8@Uxèè­VmkãFþÜ@þÜš\¤bÃQLçÙø*¿`]H #¯VÉ6²Öè%͹ô¿w$YÒJ·V¾(XÍÛ33û̬…%#!¸Ô¾QŸŸhvœ¸ŒÃœ4tbêÂj9úÄóég;JxgŸ47:ÝÞ|ZÌ@¹ëMfsUÃE¹½Á#µ€{xbÁ [êStEë¥iÛ£¹ Dq˜˜a4AÀcˆN”0QW›ÆàRÏIüd‘4 e®¦ˆ}{ÓÈáæ sQt»@‚CÂ|ŽÜ¥U„K:„‡!%±&ø=½ÐÂ$Xðœ7æ3vƒq‚Kö?ЭªLôR¡éÑÁž§-Œ_ÐNà‚ ÌwçxòéPpŽù=è^^vt^Hýa±bݨ%±sð©Pø]l mW²r±jJnoF–CP´]ÖmüWR)FµÌÑ °g¿ÜÅ ‰2ÞäÔãú4ô5~ø[‘[àŸBEm&!i sáãd¶X<ŸoQ³À;øœ¼¶›¤F[šhâ9QÜnñA¢h‡ô#˜$f~‹ÅG’ kz‹Åùò›ÆÜÃõYš@ƒ)U3b!]‘€ÌËö}gQ •^¿ë¥|E»ã«ËBA“²ãAßÀðšÒîà"ÜϬÑÜ6ô€ûü™ƒÎ“x(¦…ÝzüÍ6`‡Ù^áfSWcåOÊ’MÈĦ®ä`SQcŸDYñN¢,'Ñ]M¥Æ2‰²¼Þ¦îº—È©¦N¤ òB¼ ¡xÙp×›š³ýla™*ž««Ssú\D*|}xH%…IƵð.>jî©C¶÷›íú[Ř¥úÓôùŸ ¯û Oq­.Vƒ¾’WSsü8ÏÏûåxb_ŽO³“XcZÒ‰¼ ü/Œ5ã‚n—»MÁt’­eü[ªþKÛ4ÌÇ_ßͦ,6ÿÌÒÇê ¨IòƒãÊûg¯·—zA|rSé@ 0÷P…ÑOþ’W-ŸÂ4ϨD*Ǩ UŸ¯n°²©ü ¨šÕNPŠ oâÔ&¿¤l_4aª%Ò F¹zš8õÔV¾É$XŠë +[Œ¨jav…$åCmýv…”¯_ ”°—»ÂÊv¶ªz:A’—Ôu=ÅëÔÄ©½Z ¥};wÓµÚ¯ùÿPK D0 ÿAresource/UTü7 @UxPKޏo+Ûe7Iû§ ¶<resource/analog.rcUTüIô;UxPKĶo+âFªÒüÇ ¶|resource/resource.hUTGô;UxPK °¥D0 ÿA¾src/UTìY!@UxPK¨D0ã7Îøð  ¶õsrc/analog.makUT9 @UxPK ·¥D0 ÿA. src/bzip2/UTúY!@UxPK½¨D0ä|˜ÛLS  ¶k src/bzip2/bzip2.makUT¶^!@UxPK =D0 ÿAýsrc/libgd/UTV8 @UxPK#¦D0K|òMB  ¶:src/libgd/libgd.makUTÂZ!@UxPK =D0 ÿAÍsrc/libpng/UTV8 @UxPK©D0XÃÏcŒ  ¶ src/libpng/libpng.makUTN_!@UxPK =D0 ÿA¶src/pcre/UTV8 @UxPKĬD0×TäÄ, ¶òsrc/pcre/pcre.makUT@f!@UxPK »¥D0 ÿAúsrc/unzip/UTZ!@UxPK¬¬D0ðôÐ{åî ¶7src/unzip/unzip.makUTf!@UxPK =D0 ÿAbsrc/zlib/UTV8 @UxPK¬D0Ì~,¾® ¶žsrc/zlib/zlib.makUTÞe!@UxPKÖ !analog-ce-6.0.17/src/bzip2/000077500000000000000000000000001406366436600152665ustar00rootroot00000000000000analog-ce-6.0.17/src/bzip2/LICENSE000066400000000000000000000041711406366436600162760ustar00rootroot00000000000000The files in this directory are from version 1.0.2 of Julian Seward's bzip2 library. The source files are unchanged except for being wrapped in my own #ifdef's, but the documentation, programs etc. have been removed. You can get the full distribution of bzip2 from http://sources.redhat.com/bzip2/ . Many thanks to Julian Seward for his excellent routines and generous licence. === AUTHOR'S COPYRIGHT AND LICENCE START HERE === This program, "bzip2" and associated library "libbzip2", are copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0.2 of 30 December 2001 analog-ce-6.0.17/src/bzip2/Makefile000066400000000000000000000014461406366436600167330ustar00rootroot00000000000000# Makefile for analog 6.0, zlib subdirectory # Please read docs/Readme.html, or http://www.analog.cx/ HEADERS = bzlib.h bzlib_private.h OBJS = bzlib.o blocksort.o compress.o crctable.o decompress.o huffman.o \ randtable.o all: $(OBJS) bzlib.o: bzlib.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c bzlib.c blocksort.o: blocksort.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c blocksort.c compress.o: compress.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c compress.c crctable.o: crctable.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c crctable.c decompress.o: decompress.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c decompress.c huffman.o: huffman.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c huffman.c randtable.o: randtable.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c randtable.c clean: rm -f *.o *~ analog-ce-6.0.17/src/bzip2/blocksort.c000066400000000000000000000775731406366436600174570ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Block sorting machinery ---*/ /*--- blocksort.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. To get some idea how the block sorting algorithms in this file work, read my paper On the Performance of BWT Sorting Algorithms in Proceedings of the IEEE Data Compression Conference 2000, Snowbird, Utah, USA, 27-30 March 2000. The main sort in this file implements the algorithm called cache in the paper. --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*---------------------------------------------*/ /*--- Fallback O(N log(N)^2) sorting ---*/ /*--- algorithm, for repetitive blocks ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ void fallbackSimpleSort ( UInt32* fmap, UInt32* eclass, Int32 lo, Int32 hi ) { Int32 i, j, tmp; UInt32 ec_tmp; if (lo == hi) return; if (hi - lo > 3) { for ( i = hi-4; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) fmap[j-4] = fmap[j]; fmap[j-4] = tmp; } } for ( i = hi-1; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) fmap[j-1] = fmap[j]; fmap[j-1] = tmp; } } /*---------------------------------------------*/ #define fswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define fvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ fswap(fmap[yyp1], fmap[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } #define fmin(a,b) ((a) < (b)) ? (a) : (b) #define fpush(lz,hz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ sp++; } #define fpop(lz,hz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; } #define FALLBACK_QSORT_SMALL_THRESH 10 #define FALLBACK_QSORT_STACK_SIZE 100 static void fallbackQSort3 ( UInt32* fmap, UInt32* eclass, Int32 loSt, Int32 hiSt ) { Int32 unLo, unHi, ltLo, gtHi, n, m; Int32 sp, lo, hi; UInt32 med, r, r3; Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; r = 0; sp = 0; fpush ( loSt, hiSt ); while (sp > 0) { AssertH ( sp < FALLBACK_QSORT_STACK_SIZE, 1004 ); fpop ( lo, hi ); if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { fallbackSimpleSort ( fmap, eclass, lo, hi ); continue; } /* Random partitioning. Median of 3 sometimes fails to avoid bad cases. Median of 9 seems to help but looks rather expensive. This too seems to work but is cheaper. Guidance for the magic constants 7621 and 32768 is taken from Sedgewick's algorithms book, chapter 35. */ r = ((r * 7621) + 1) % 32768; r3 = r % 3; if (r3 == 0) med = eclass[fmap[lo]]; else if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else med = eclass[fmap[hi]]; unLo = ltLo = lo; unHi = gtHi = hi; while (1) { while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unLo]] - (Int32)med; if (n == 0) { fswap(fmap[unLo], fmap[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unHi]] - (Int32)med; if (n == 0) { fswap(fmap[unHi], fmap[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); if (gtHi < ltLo) continue; n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; if (n - lo > hi - m) { fpush ( lo, n ); fpush ( m, hi ); } else { fpush ( m, hi ); fpush ( lo, n ); } } } #undef fmin #undef fpush #undef fpop #undef fswap #undef fvswap #undef FALLBACK_QSORT_SMALL_THRESH #undef FALLBACK_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > 0 eclass exists for [0 .. nblock-1] ((UChar*)eclass) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)eclass) [0 .. nblock-1] holds block All other areas of eclass destroyed fmap [0 .. nblock-1] holds sorted order bhtab [ 0 .. 2+(nblock/32) ] destroyed */ #define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) #define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) #define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) #define WORD_BH(zz) bhtab[(zz) >> 5] #define UNALIGNED_BH(zz) ((zz) & 0x01f) static void fallbackSort ( UInt32* fmap, UInt32* eclass, UInt32* bhtab, Int32 nblock, Int32 verb ) { Int32 ftab[257]; Int32 ftabCopy[256]; Int32 H, i, j, k, l, r, cc, cc1; Int32 nNotDone; Int32 nBhtab; UChar* eclass8 = (UChar*)eclass; /*-- Initial 1-char radix sort to generate initial fmap and initial BH bits. --*/ if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); for (i = 0; i < 257; i++) ftab[i] = 0; for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; for (i = 0; i < nblock; i++) { j = eclass8[i]; k = ftab[j] - 1; ftab[j] = k; fmap[k] = i; } nBhtab = 2 + (nblock / 32); for (i = 0; i < nBhtab; i++) bhtab[i] = 0; for (i = 0; i < 256; i++) SET_BH(ftab[i]); /*-- Inductively refine the buckets. Kind-of an "exponential radix sort" (!), inspired by the Manber-Myers suffix array construction algorithm. --*/ /*-- set sentinel bits for block-end detection --*/ for (i = 0; i < 32; i++) { SET_BH(nblock + 2*i); CLEAR_BH(nblock + 2*i + 1); } /*-- the log(N) loop --*/ H = 1; while (1) { if (verb >= 4) VPrintf1 ( " depth %6d has ", H ); j = 0; for (i = 0; i < nblock; i++) { if (ISSET_BH(i)) j = i; k = fmap[i] - H; if (k < 0) k += nblock; eclass[k] = j; } nNotDone = 0; r = -1; while (1) { /*-- find the next non-singleton bucket --*/ k = r + 1; while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (ISSET_BH(k)) { while (WORD_BH(k) == 0xffffffff) k += 32; while (ISSET_BH(k)) k++; } l = k - 1; if (l >= nblock) break; while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (!ISSET_BH(k)) { while (WORD_BH(k) == 0x00000000) k += 32; while (!ISSET_BH(k)) k++; } r = k - 1; if (r >= nblock) break; /*-- now [l, r] bracket current bucket --*/ if (r > l) { nNotDone += (r - l + 1); fallbackQSort3 ( fmap, eclass, l, r ); /*-- scan bucket and generate header bits-- */ cc = -1; for (i = l; i <= r; i++) { cc1 = eclass[fmap[i]]; if (cc != cc1) { SET_BH(i); cc = cc1; }; } } } if (verb >= 4) VPrintf1 ( "%6d unresolved strings\n", nNotDone ); H *= 2; if (H > nblock || nNotDone == 0) break; } /*-- Reconstruct the original block in eclass8 [0 .. nblock-1], since the previous phase destroyed it. --*/ if (verb >= 4) VPrintf0 ( " reconstructing block ...\n" ); j = 0; for (i = 0; i < nblock; i++) { while (ftabCopy[j] == 0) j++; ftabCopy[j]--; eclass8[fmap[i]] = (UChar)j; } AssertH ( j < 256, 1005 ); } #undef SET_BH #undef CLEAR_BH #undef ISSET_BH #undef WORD_BH #undef UNALIGNED_BH /*---------------------------------------------*/ /*--- The main, O(N^2 log(N)) sorting ---*/ /*--- algorithm. Faster for "normal" ---*/ /*--- non-repetitive blocks. ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ Bool mainGtU ( UInt32 i1, UInt32 i2, UChar* block, UInt16* quadrant, UInt32 nblock, Int32* budget ) { Int32 k; UChar c1, c2; UInt16 s1, s2; AssertD ( i1 != i2, "mainGtU" ); /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 9 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 10 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 11 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 12 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; k = nblock + 8; do { /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; if (i1 >= nblock) i1 -= nblock; if (i2 >= nblock) i2 -= nblock; k -= 8; (*budget)--; } while (k >= 0); return False; } /*---------------------------------------------*/ /*-- Knuth's increments seem to work better than Incerpi-Sedgewick here. Possibly because the number of elems to sort is usually small, typically <= 20. --*/ static Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, 9841, 29524, 88573, 265720, 797161, 2391484 }; static void mainSimpleSort ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 lo, Int32 hi, Int32 d, Int32* budget ) { Int32 i, j, h, bigN, hp; UInt32 v; bigN = hi - lo + 1; if (bigN < 2) return; hp = 0; while (incs[hp] < bigN) hp++; hp--; for (; hp >= 0; hp--) { h = incs[hp]; i = lo + h; while (True) { /*-- copy 1 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 2 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 3 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; if (*budget < 0) return; } } } /*---------------------------------------------*/ /*-- The following is an implementation of an elegant 3-way quicksort for strings, described in a paper "Fast Algorithms for Sorting and Searching Strings", by Robert Sedgewick and Jon L. Bentley. --*/ #define mswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define mvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ mswap(ptr[yyp1], ptr[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } static __inline__ UChar mmed3 ( UChar a, UChar b, UChar c ) { UChar t; if (a > b) { t = a; a = b; b = t; }; if (b > c) { b = c; if (a > b) b = a; } return b; } #define mmin(a,b) ((a) < (b)) ? (a) : (b) #define mpush(lz,hz,dz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ stackD [sp] = dz; \ sp++; } #define mpop(lz,hz,dz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; \ dz = stackD [sp]; } #define mnextsize(az) (nextHi[az]-nextLo[az]) #define mnextswap(az,bz) \ { Int32 tz; \ tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } #define MAIN_QSORT_SMALL_THRESH 20 #define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) #define MAIN_QSORT_STACK_SIZE 100 static void mainQSort3 ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 loSt, Int32 hiSt, Int32 dSt, Int32* budget ) { Int32 unLo, unHi, ltLo, gtHi, n, m, med; Int32 sp, lo, hi, d; Int32 stackLo[MAIN_QSORT_STACK_SIZE]; Int32 stackHi[MAIN_QSORT_STACK_SIZE]; Int32 stackD [MAIN_QSORT_STACK_SIZE]; Int32 nextLo[3]; Int32 nextHi[3]; Int32 nextD [3]; sp = 0; mpush ( loSt, hiSt, dSt ); while (sp > 0) { AssertH ( sp < MAIN_QSORT_STACK_SIZE, 1001 ); mpop ( lo, hi, d ); if (hi - lo < MAIN_QSORT_SMALL_THRESH || d > MAIN_QSORT_DEPTH_THRESH) { mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); if (*budget < 0) return; continue; } med = (Int32) mmed3 ( block[ptr[ lo ]+d], block[ptr[ hi ]+d], block[ptr[ (lo+hi)>>1 ]+d] ); unLo = ltLo = lo; unHi = gtHi = hi; while (True) { while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unLo]+d]) - med; if (n == 0) { mswap(ptr[unLo], ptr[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unHi]+d]) - med; if (n == 0) { mswap(ptr[unHi], ptr[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "mainQSort3(2)" ); if (gtHi < ltLo) { mpush(lo, hi, d+1 ); continue; } n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); mpush (nextLo[0], nextHi[0], nextD[0]); mpush (nextLo[1], nextHi[1], nextD[1]); mpush (nextLo[2], nextHi[2], nextD[2]); } } #undef mswap #undef mvswap #undef mpush #undef mpop #undef mmin #undef mnextsize #undef mnextswap #undef MAIN_QSORT_SMALL_THRESH #undef MAIN_QSORT_DEPTH_THRESH #undef MAIN_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > N_OVERSHOOT block32 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)block32) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)block32) [0 .. nblock-1] holds block All other areas of block32 destroyed ftab [0 .. 65536 ] destroyed ptr [0 .. nblock-1] holds sorted order if (*budget < 0), sorting was abandoned */ #define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) #define SETMASK (1 << 21) #define CLEARMASK (~(SETMASK)) static void mainSort ( UInt32* ptr, UChar* block, UInt16* quadrant, UInt32* ftab, Int32 nblock, Int32 verb, Int32* budget ) { Int32 i, j, k, ss, sb; Int32 runningOrder[256]; Bool bigDone[256]; Int32 copyStart[256]; Int32 copyEnd [256]; UChar c1; Int32 numQSorted; UInt16 s; if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); /*-- set up the 2-byte frequency table --*/ for (i = 65536; i >= 0; i--) ftab[i] = 0; j = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; quadrant[i-1] = 0; j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); ftab[j]++; quadrant[i-2] = 0; j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); ftab[j]++; quadrant[i-3] = 0; j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); ftab[j]++; } for (; i >= 0; i--) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; } /*-- (emphasises close relationship of block & quadrant) --*/ for (i = 0; i < BZ_N_OVERSHOOT; i++) { block [nblock+i] = block[i]; quadrant[nblock+i] = 0; } if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); /*-- Complete the initial radix sort --*/ for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; s = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; s = (s >> 8) | (block[i-1] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-1; s = (s >> 8) | (block[i-2] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-2; s = (s >> 8) | (block[i-3] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-3; } for (; i >= 0; i--) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; } /*-- Now ftab contains the first loc of every small bucket. Calculate the running order, from smallest to largest big bucket. --*/ for (i = 0; i <= 255; i++) { bigDone [i] = False; runningOrder[i] = i; } { Int32 vv; Int32 h = 1; do h = 3 * h + 1; while (h <= 256); do { h = h / 3; for (i = h; i <= 255; i++) { vv = runningOrder[i]; j = i; while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { runningOrder[j] = runningOrder[j-h]; j = j - h; if (j <= (h - 1)) goto zero; } zero: runningOrder[j] = vv; } } while (h != 1); } /*-- The main sorting loop. --*/ numQSorted = 0; for (i = 0; i <= 255; i++) { /*-- Process big buckets, starting with the least full. Basically this is a 3-step process in which we call mainQSort3 to sort the small buckets [ss, j], but also make a big effort to avoid the calls if we can. --*/ ss = runningOrder[i]; /*-- Step 1: Complete the big bucket [ss] by quicksorting any unsorted small buckets [ss, j], for j != ss. Hopefully previous pointer-scanning phases have already completed many of the small buckets [ss, j], so we don't have to sort them at all. --*/ for (j = 0; j <= 255; j++) { if (j != ss) { sb = (ss << 8) + j; if ( ! (ftab[sb] & SETMASK) ) { Int32 lo = ftab[sb] & CLEARMASK; Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; if (hi > lo) { if (verb >= 4) VPrintf4 ( " qsort [0x%x, 0x%x] " "done %d this %d\n", ss, j, numQSorted, hi - lo + 1 ); mainQSort3 ( ptr, block, quadrant, nblock, lo, hi, BZ_N_RADIX, budget ); numQSorted += (hi - lo + 1); if (*budget < 0) return; } } ftab[sb] |= SETMASK; } } AssertH ( !bigDone[ss], 1006 ); /*-- Step 2: Now scan this big bucket [ss] so as to synthesise the sorted order for small buckets [t, ss] for all t, including, magically, the bucket [ss,ss] too. This will avoid doing Real Work in subsequent Step 1's. --*/ { for (j = 0; j <= 255; j++) { copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; } for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyStart[c1]++ ] = k; } for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyEnd[c1]-- ] = k; } } AssertH ( (copyStart[ss]-1 == copyEnd[ss]) || /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. Necessity for this case is demonstrated by compressing a sequence of approximately 48.5 million of character 251; 1.0.0/1.0.1 will then die here. */ (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), 1007 ) for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; /*-- Step 3: The [ss] big bucket is now done. Record this fact, and update the quadrant descriptors. Remember to update quadrants in the overshoot area too, if necessary. The "if (i < 255)" test merely skips this updating for the last bucket processed, since updating for the last bucket is pointless. The quadrant array provides a way to incrementally cache sort orderings, as they appear, so as to make subsequent comparisons in fullGtU() complete faster. For repetitive blocks this makes a big difference (but not big enough to be able to avoid the fallback sorting mechanism, exponential radix sort). The precise meaning is: at all times: for 0 <= i < nblock and 0 <= j <= nblock if block[i] != block[j], then the relative values of quadrant[i] and quadrant[j] are meaningless. else { if quadrant[i] < quadrant[j] then the string starting at i lexicographically precedes the string starting at j else if quadrant[i] > quadrant[j] then the string starting at j lexicographically precedes the string starting at i else the relative ordering of the strings starting at i and j has not yet been determined. } --*/ bigDone[ss] = True; if (i < 255) { Int32 bbStart = ftab[ss << 8] & CLEARMASK; Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; Int32 shifts = 0; while ((bbSize >> shifts) > 65534) shifts++; for (j = bbSize-1; j >= 0; j--) { Int32 a2update = ptr[bbStart + j]; UInt16 qVal = (UInt16)(j >> shifts); quadrant[a2update] = qVal; if (a2update < BZ_N_OVERSHOOT) quadrant[a2update + nblock] = qVal; } AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); } } if (verb >= 4) VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", nblock, numQSorted, nblock - numQSorted ); } #undef BIGFREQ #undef SETMASK #undef CLEARMASK /*---------------------------------------------*/ /* Pre: nblock > 0 arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)arr2) [0 .. nblock-1] holds block arr1 exists for [0 .. nblock-1] Post: ((UChar*)arr2) [0 .. nblock-1] holds block All other areas of block destroyed ftab [ 0 .. 65536 ] destroyed arr1 [0 .. nblock-1] holds sorted order */ void BZ2_blockSort ( EState* s ) { UInt32* ptr = s->ptr; UChar* block = s->block; UInt32* ftab = s->ftab; Int32 nblock = s->nblock; Int32 verb = s->verbosity; Int32 wfact = s->workFactor; UInt16* quadrant; Int32 budget; Int32 budgetInit; Int32 i; if (nblock < 10000) { fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } else { /* Calculate the location for quadrant, remembering to get the alignment right. Assumes that &(block[0]) is at least 2-byte aligned -- this should be ok since block is really the first section of arr2. */ i = nblock+BZ_N_OVERSHOOT; if (i & 1) i++; quadrant = (UInt16*)(&(block[i])); /* (wfact-1) / 3 puts the default-factor-30 transition point at very roughly the same place as with v0.1 and v0.9.0. Not that it particularly matters any more, since the resulting compressed stream is now the same regardless of whether or not we use the main sort or fallback sort. */ if (wfact < 1 ) wfact = 1; if (wfact > 100) wfact = 100; budgetInit = nblock * ((wfact-1) / 3); budget = budgetInit; mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); if (verb >= 3) VPrintf3 ( " %d work, %d block, ratio %5.2f\n", budgetInit - budget, nblock, (float)(budgetInit - budget) / (float)(nblock==0 ? 1 : nblock) ); if (budget < 0) { if (verb >= 2) VPrintf0 ( " too repetitive; using fallback" " sorting algorithm\n" ); fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } } s->origPtr = -1; for (i = 0; i < s->nblock; i++) if (ptr[i] == 0) { s->origPtr = i; break; }; AssertH( s->origPtr != -1, 1003 ); } #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end blocksort.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/bzlib.c000066400000000000000000001333001406366436600165340ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Library top-level functions. ---*/ /*--- bzlib.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ /*-- CHANGES ~~~~~~~ 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c * made zero-length BZ_FLUSH work correctly in bzCompress(). * fixed bzWrite/bzRead to ignore zero-length requests. * fixed bzread to correctly handle read requests after EOF. * wrong parameter order in call to bzDecompressInit in bzBuffToBuffDecompress. Fixed. --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Compression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ #ifndef BZ_NO_STDIO void BZ2_bz__AssertH__fail ( int errcode ) { fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" "Please report it to me at: jseward@acm.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" "quality software. Thanks. Julian Seward, 30 December 2001.\n\n", errcode, BZ2_bzlibVersion() ); if (errcode == 1007) { fprintf(stderr, "\n*** A special note about internal error number 1007 ***\n" "\n" "Experience suggests that a common cause of i.e. 1007\n" "is unreliable memory or other hardware. The 1007 assertion\n" "just happens to cross-check the results of huge numbers of\n" "memory reads/writes, and so acts (unintendedly) as a stress\n" "test of your memory system.\n" "\n" "I suggest the following: try compressing the file again,\n" "possibly monitoring progress in detail with the -vv flag.\n" "\n" "* If the error cannot be reproduced, and/or happens at different\n" " points in compression, you may have a flaky memory system.\n" " Try a memory-test program. I have used Memtest86\n" " (www.memtest86.com). At the time of writing it is free (GPLd).\n" " Memtest86 tests memory much more thorougly than your BIOSs\n" " power-on test, and may find failures that the BIOS doesn't.\n" "\n" "* If the error can be repeatably reproduced, this is a bug in\n" " bzip2, and I would very much like to hear about it. Please\n" " let me know, and, ideally, save a copy of the file causing the\n" " problem -- without which I will be unable to investigate it.\n" "\n" ); } exit(3); } #endif /*---------------------------------------------------*/ static int bz_config_ok ( void ) { if (sizeof(int) != 4) return 0; if (sizeof(short) != 2) return 0; if (sizeof(char) != 1) return 0; return 1; } /*---------------------------------------------------*/ static void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) { void* v = malloc ( items * size ); return v; } static void default_bzfree ( void* opaque, void* addr ) { if (addr != NULL) free ( addr ); } /*---------------------------------------------------*/ static void prepare_new_block ( EState* s ) { Int32 i; s->nblock = 0; s->numZ = 0; s->state_out_pos = 0; BZ_INITIALISE_CRC ( s->blockCRC ); for (i = 0; i < 256; i++) s->inUse[i] = False; s->blockNo++; } /*---------------------------------------------------*/ static void init_RL ( EState* s ) { s->state_in_ch = 256; s->state_in_len = 0; } static Bool isempty_RL ( EState* s ) { if (s->state_in_ch < 256 && s->state_in_len > 0) return False; else return True; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ) { Int32 n; EState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL || blockSize100k < 1 || blockSize100k > 9 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(EState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; s->arr1 = NULL; s->arr2 = NULL; s->ftab = NULL; n = 100000 * blockSize100k; s->arr1 = BZALLOC( n * sizeof(UInt32) ); s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); if (s != NULL) BZFREE(s); return BZ_MEM_ERROR; } s->blockNo = 0; s->state = BZ_S_INPUT; s->mode = BZ_M_RUNNING; s->combinedCRC = 0; s->blockSize100k = blockSize100k; s->nblockMAX = 100000 * blockSize100k - 19; s->verbosity = verbosity; s->workFactor = workFactor; s->block = (UChar*)s->arr2; s->mtfv = (UInt16*)s->arr1; s->zbits = NULL; s->ptr = (UInt32*)s->arr1; strm->state = s; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; init_RL ( s ); prepare_new_block ( s ); return BZ_OK; } /*---------------------------------------------------*/ static void add_pair_to_block ( EState* s ) { Int32 i; UChar ch = (UChar)(s->state_in_ch); for (i = 0; i < s->state_in_len; i++) { BZ_UPDATE_CRC( s->blockCRC, ch ); } s->inUse[s->state_in_ch] = True; switch (s->state_in_len) { case 1: s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 2: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 3: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; default: s->inUse[s->state_in_len-4] = True; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = ((UChar)(s->state_in_len-4)); s->nblock++; break; } } /*---------------------------------------------------*/ static void flush_RL ( EState* s ) { if (s->state_in_ch < 256) add_pair_to_block ( s ); init_RL ( s ); } /*---------------------------------------------------*/ #define ADD_CHAR_TO_BLOCK(zs,zchh0) \ { \ UInt32 zchh = (UInt32)(zchh0); \ /*-- fast track the common case --*/ \ if (zchh != zs->state_in_ch && \ zs->state_in_len == 1) { \ UChar ch = (UChar)(zs->state_in_ch); \ BZ_UPDATE_CRC( zs->blockCRC, ch ); \ zs->inUse[zs->state_in_ch] = True; \ zs->block[zs->nblock] = (UChar)ch; \ zs->nblock++; \ zs->state_in_ch = zchh; \ } \ else \ /*-- general, uncommon cases --*/ \ if (zchh != zs->state_in_ch || \ zs->state_in_len == 255) { \ if (zs->state_in_ch < 256) \ add_pair_to_block ( zs ); \ zs->state_in_ch = zchh; \ zs->state_in_len = 1; \ } else { \ zs->state_in_len++; \ } \ } /*---------------------------------------------------*/ static Bool copy_input_until_stop ( EState* s ) { Bool progress_in = False; if (s->mode == BZ_M_RUNNING) { /*-- fast track the common case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; } } else { /*-- general, uncommon case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; /*-- flush/finish end? --*/ if (s->avail_in_expect == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; s->avail_in_expect--; } } return progress_in; } /*---------------------------------------------------*/ static Bool copy_output_until_stop ( EState* s ) { Bool progress_out = False; while (True) { /*-- no output space? --*/ if (s->strm->avail_out == 0) break; /*-- block done? --*/ if (s->state_out_pos >= s->numZ) break; progress_out = True; *(s->strm->next_out) = s->zbits[s->state_out_pos]; s->state_out_pos++; s->strm->avail_out--; s->strm->next_out++; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } return progress_out; } /*---------------------------------------------------*/ static Bool handle_compress ( bz_stream* strm ) { Bool progress_in = False; Bool progress_out = False; EState* s = strm->state; while (True) { if (s->state == BZ_S_OUTPUT) { progress_out |= copy_output_until_stop ( s ); if (s->state_out_pos < s->numZ) break; if (s->mode == BZ_M_FINISHING && s->avail_in_expect == 0 && isempty_RL(s)) break; prepare_new_block ( s ); s->state = BZ_S_INPUT; if (s->mode == BZ_M_FLUSHING && s->avail_in_expect == 0 && isempty_RL(s)) break; } if (s->state == BZ_S_INPUT) { progress_in |= copy_input_until_stop ( s ); if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { flush_RL ( s ); BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); s->state = BZ_S_OUTPUT; } else if (s->nblock >= s->nblockMAX) { BZ2_compressBlock ( s, False ); s->state = BZ_S_OUTPUT; } else if (s->strm->avail_in == 0) { break; } } } return progress_in || progress_out; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) { Bool progress; EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; preswitch: switch (s->mode) { case BZ_M_IDLE: return BZ_SEQUENCE_ERROR; case BZ_M_RUNNING: if (action == BZ_RUN) { progress = handle_compress ( strm ); return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; } else if (action == BZ_FLUSH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FLUSHING; goto preswitch; } else if (action == BZ_FINISH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FINISHING; goto preswitch; } else return BZ_PARAM_ERROR; case BZ_M_FLUSHING: if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FLUSH_OK; s->mode = BZ_M_RUNNING; return BZ_RUN_OK; case BZ_M_FINISHING: if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (!progress) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FINISH_OK; s->mode = BZ_M_IDLE; return BZ_STREAM_END; } return BZ_OK; /*--not reached--*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) { EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } /*---------------------------------------------------*/ /*--- Decompression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressInit) ( bz_stream* strm, int verbosity, int small ) { DState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL) return BZ_PARAM_ERROR; if (small != 0 && small != 1) return BZ_PARAM_ERROR; if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(DState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; strm->state = s; s->state = BZ_X_MAGIC_1; s->bsLive = 0; s->bsBuff = 0; s->calculatedCombinedCRC = 0; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; s->smallDecompress = (Bool)small; s->ll4 = NULL; s->ll16 = NULL; s->tt = NULL; s->currBlockNo = 0; s->verbosity = verbosity; return BZ_OK; } /*---------------------------------------------------*/ static void unRLE_obuf_to_output_FAST ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { /* restore */ UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; UChar c_state_out_ch = s->state_out_ch; Int32 c_state_out_len = s->state_out_len; Int32 c_nblock_used = s->nblock_used; Int32 c_k0 = s->k0; UInt32* c_tt = s->tt; UInt32 c_tPos = s->tPos; char* cs_next_out = s->strm->next_out; unsigned int cs_avail_out = s->strm->avail_out; /* end restore */ UInt32 avail_out_INIT = cs_avail_out; Int32 s_save_nblockPP = s->save_nblock+1; unsigned int total_out_lo32_old; while (True) { /* try to finish existing run */ if (c_state_out_len > 0) { while (True) { if (cs_avail_out == 0) goto return_notr; if (c_state_out_len == 1) break; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); c_state_out_len--; cs_next_out++; cs_avail_out--; } s_state_out_len_eq_one: { if (cs_avail_out == 0) { c_state_out_len = 1; goto return_notr; }; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); cs_next_out++; cs_avail_out--; } } /* can a new run be started? */ if (c_nblock_used == s_save_nblockPP) { c_state_out_len = 0; goto return_notr; }; c_state_out_ch = c_k0; BZ_GET_FAST_C(k1); c_nblock_used++; if (k1 != c_k0) { c_k0 = k1; goto s_state_out_len_eq_one; }; if (c_nblock_used == s_save_nblockPP) goto s_state_out_len_eq_one; c_state_out_len = 2; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; c_state_out_len = 3; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; BZ_GET_FAST_C(k1); c_nblock_used++; c_state_out_len = ((Int32)k1) + 4; BZ_GET_FAST_C(c_k0); c_nblock_used++; } return_notr: total_out_lo32_old = s->strm->total_out_lo32; s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); if (s->strm->total_out_lo32 < total_out_lo32_old) s->strm->total_out_hi32++; /* save */ s->calculatedBlockCRC = c_calculatedBlockCRC; s->state_out_ch = c_state_out_ch; s->state_out_len = c_state_out_len; s->nblock_used = c_nblock_used; s->k0 = c_k0; s->tt = c_tt; s->tPos = c_tPos; s->strm->next_out = cs_next_out; s->strm->avail_out = cs_avail_out; /* end save */ } } /*---------------------------------------------------*/ __inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) { Int32 nb, na, mid; nb = 0; na = 256; do { mid = (nb + na) >> 1; if (indx >= cftab[mid]) nb = mid; else na = mid; } while (na - nb != 1); return nb; } /*---------------------------------------------------*/ static void unRLE_obuf_to_output_SMALL ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); s->nblock_used++; } } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) { DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; while (True) { if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; if (s->state == BZ_X_OUTPUT) { if (s->smallDecompress) unRLE_obuf_to_output_SMALL ( s ); else unRLE_obuf_to_output_FAST ( s ); if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { BZ_FINALISE_CRC ( s->calculatedBlockCRC ); if (s->verbosity >= 3) VPrintf2 ( " {0x%x, 0x%x}", s->storedBlockCRC, s->calculatedBlockCRC ); if (s->verbosity >= 2) VPrintf0 ( "]" ); if (s->calculatedBlockCRC != s->storedBlockCRC) return BZ_DATA_ERROR; s->calculatedCombinedCRC = (s->calculatedCombinedCRC << 1) | (s->calculatedCombinedCRC >> 31); s->calculatedCombinedCRC ^= s->calculatedBlockCRC; s->state = BZ_X_BLKHDR_1; } else { return BZ_OK; } } if (s->state >= BZ_X_MAGIC_1) { Int32 r = BZ2_decompress ( s ); if (r == BZ_STREAM_END) { if (s->verbosity >= 3) VPrintf2 ( "\n combined CRCs: stored = 0x%x, computed = 0x%x", s->storedCombinedCRC, s->calculatedCombinedCRC ); if (s->calculatedCombinedCRC != s->storedCombinedCRC) return BZ_DATA_ERROR; return r; } if (s->state != BZ_X_OUTPUT) return r; } } AssertH ( 0, 6001 ); return 0; /*NOTREACHED*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) { DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->tt != NULL) BZFREE(s->tt); if (s->ll16 != NULL) BZFREE(s->ll16); if (s->ll4 != NULL) BZFREE(s->ll4); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ /*--- File I/O stuff ---*/ /*---------------------------------------------------*/ #define BZ_SETERR(eee) \ { \ if (bzerror != NULL) *bzerror = eee; \ if (bzf != NULL) bzf->lastErr = eee; \ } typedef struct { FILE* handle; Char buf[BZ_MAX_UNUSED]; Int32 bufN; Bool writing; bz_stream strm; Int32 lastErr; Bool initialisedOk; } bzFile; /*---------------------------------------------*/ static Bool myfeof ( FILE* f ) { Int32 c = fgetc ( f ); if (c == EOF) return True; ungetc ( c, f ); return False; } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ) { Int32 ret; bzFile* bzf = NULL; BZ_SETERR(BZ_OK); if (f == NULL || (blockSize100k < 1 || blockSize100k > 9) || (workFactor < 0 || workFactor > 250) || (verbosity < 0 || verbosity > 4)) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->bufN = 0; bzf->handle = f; bzf->writing = True; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; if (workFactor == 0) workFactor = 30; ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = 0; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (len == 0) { BZ_SETERR(BZ_OK); return; }; bzf->strm.avail_in = len; bzf->strm.next_in = buf; while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); if (ret != BZ_RUN_OK) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (bzf->strm.avail_in == 0) { BZ_SETERR(BZ_OK); return; }; } } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ) { BZ2_bzWriteClose64 ( bzerror, b, abandon, nbytes_in, NULL, nbytes_out, NULL ); } void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; if ((!abandon) && bzf->lastErr == BZ_OK) { while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (ret == BZ_STREAM_END) break; } } if ( !abandon && !ferror ( bzf->handle ) ) { fflush ( bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = bzf->strm.total_in_lo32; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = bzf->strm.total_in_hi32; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = bzf->strm.total_out_lo32; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = bzf->strm.total_out_hi32; BZ_SETERR(BZ_OK); BZ2_bzCompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ) { bzFile* bzf = NULL; int ret; BZ_SETERR(BZ_OK); if (f == NULL || (small != 0 && small != 1) || (verbosity < 0 || verbosity > 4) || (unused == NULL && nUnused != 0) || (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->handle = f; bzf->bufN = 0; bzf->writing = False; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; while (nUnused > 0) { bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; unused = ((void*)( 1 + ((UChar*)(unused)) )); nUnused--; } ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) { bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (bzf->initialisedOk) (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; if (len == 0) { BZ_SETERR(BZ_OK); return 0; }; bzf->strm.avail_out = len; bzf->strm.next_out = buf; while (True) { if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { n = fread ( bzf->buf, sizeof(UChar), BZ_MAX_UNUSED, bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; bzf->bufN = n; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; } ret = BZ2_bzDecompress ( &(bzf->strm) ); if (ret != BZ_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return 0; }; if (ret == BZ_OK && myfeof(bzf->handle) && bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; if (ret == BZ_STREAM_END) { BZ_SETERR(BZ_STREAM_END); return len - bzf->strm.avail_out; }; if (bzf->strm.avail_out == 0) { BZ_SETERR(BZ_OK); return len; }; } return 0; /*not reached*/ } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ) { bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (bzf->lastErr != BZ_STREAM_END) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (unused == NULL || nUnused == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; BZ_SETERR(BZ_OK); *nUnused = bzf->strm.avail_in; *unused = bzf->strm.next_in; } #endif /*---------------------------------------------------*/ /*--- Misc convenience stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || blockSize100k < 1 || blockSize100k > 9 || verbosity < 0 || verbosity > 4 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzCompressInit ( &strm, blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzCompress ( &strm, BZ_FINISH ); if (ret == BZ_FINISH_OK) goto output_overflow; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzCompressEnd ( &strm ); return BZ_OK; output_overflow: BZ2_bzCompressEnd ( &strm ); return BZ_OUTBUFF_FULL; errhandler: BZ2_bzCompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || (small != 0 && small != 1) || verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzDecompress ( &strm ); if (ret == BZ_OK) goto output_overflow_or_eof; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzDecompressEnd ( &strm ); return BZ_OK; output_overflow_or_eof: if (strm.avail_out > 0) { BZ2_bzDecompressEnd ( &strm ); return BZ_UNEXPECTED_EOF; } else { BZ2_bzDecompressEnd ( &strm ); return BZ_OUTBUFF_FULL; }; errhandler: BZ2_bzDecompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ /*-- Code contributed by Yoshioka Tsuneo (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp), to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ /*-- return version like "0.9.0c". --*/ const char * BZ_API(BZ2_bzlibVersion)(void) { return BZ_VERSION; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ #if defined(_WIN32) || defined(OS2) || defined(MSDOS) # include # include # define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) #else # define SET_BINARY_MODE(file) #endif static BZFILE * bzopen_or_bzdopen ( const char *path, /* no use when bzdopen */ int fd, /* no use when bzdopen */ const char *mode, int open_mode) /* bzopen: 0, bzdopen:1 */ { int bzerr; char unused[BZ_MAX_UNUSED]; int blockSize100k = 9; int writing = 0; char mode2[10] = ""; FILE *fp = NULL; BZFILE *bzfp = NULL; int verbosity = 0; int workFactor = 30; int smallMode = 0; int nUnused = 0; if (mode == NULL) return NULL; while (*mode) { switch (*mode) { case 'r': writing = 0; break; case 'w': writing = 1; break; case 's': smallMode = 1; break; default: if (isdigit((int)(*mode))) { blockSize100k = *mode-BZ_HDR_0; } } mode++; } strcat(mode2, writing ? "w" : "r" ); strcat(mode2,"b"); /* binary mode */ if (open_mode==0) { if (path==NULL || strcmp(path,"")==0) { fp = (writing ? stdout : stdin); SET_BINARY_MODE(fp); } else { fp = fopen(path,mode2); } } else { #ifdef BZ_STRICT_ANSI fp = NULL; #else fp = fdopen(fd,mode2); #endif } if (fp == NULL) return NULL; if (writing) { /* Guard against total chaos and anarchy -- JRS */ if (blockSize100k < 1) blockSize100k = 1; if (blockSize100k > 9) blockSize100k = 9; bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, verbosity,workFactor); } else { bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, unused,nUnused); } if (bzfp == NULL) { if (fp != stdin && fp != stdout) fclose(fp); return NULL; } return bzfp; } /*---------------------------------------------------*/ /*-- open file for read or write. ex) bzopen("file","w9") case path="" or NULL => use stdin or stdout. --*/ BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ) { return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); } /*---------------------------------------------------*/ BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ) { return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) { int bzerr, nread; if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; nread = BZ2_bzRead(&bzerr,b,buf,len); if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { return nread; } else { return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) { int bzerr; BZ2_bzWrite(&bzerr,b,buf,len); if(bzerr == BZ_OK){ return len; }else{ return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzflush) (BZFILE *b) { /* do nothing now... */ return 0; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzclose) (BZFILE* b) { int bzerr; FILE *fp = ((bzFile *)b)->handle; if (b==NULL) {return;} if(((bzFile*)b)->writing){ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); if(bzerr != BZ_OK){ BZ2_bzWriteClose(NULL,b,1,NULL,NULL); } }else{ BZ2_bzReadClose(&bzerr,b); } if(fp!=stdin && fp!=stdout){ fclose(fp); } } /*---------------------------------------------------*/ /*-- return last error code --*/ static char *bzerrorstrings[] = { "OK" ,"SEQUENCE_ERROR" ,"PARAM_ERROR" ,"MEM_ERROR" ,"DATA_ERROR" ,"DATA_ERROR_MAGIC" ,"IO_ERROR" ,"UNEXPECTED_EOF" ,"OUTBUFF_FULL" ,"CONFIG_ERROR" ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ }; const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) { int err = ((bzFile *)b)->lastErr; if(err>0) err = 0; *errnum = err; return bzerrorstrings[err*-1]; } #endif #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end bzlib.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/bzlib.h000066400000000000000000000173351406366436600165520ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Public header file for the library. ---*/ /*--- bzlib.h ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ #ifdef HAVE_BZLIB #include #else #ifndef _BZLIB_H #define _BZLIB_H #ifdef __cplusplus extern "C" { #endif #define BZ_RUN 0 #define BZ_FLUSH 1 #define BZ_FINISH 2 #define BZ_OK 0 #define BZ_RUN_OK 1 #define BZ_FLUSH_OK 2 #define BZ_FINISH_OK 3 #define BZ_STREAM_END 4 #define BZ_SEQUENCE_ERROR (-1) #define BZ_PARAM_ERROR (-2) #define BZ_MEM_ERROR (-3) #define BZ_DATA_ERROR (-4) #define BZ_DATA_ERROR_MAGIC (-5) #define BZ_IO_ERROR (-6) #define BZ_UNEXPECTED_EOF (-7) #define BZ_OUTBUFF_FULL (-8) #define BZ_CONFIG_ERROR (-9) typedef struct { char *next_in; unsigned int avail_in; unsigned int total_in_lo32; unsigned int total_in_hi32; char *next_out; unsigned int avail_out; unsigned int total_out_lo32; unsigned int total_out_hi32; void *state; void *(*bzalloc)(void *,int,int); void (*bzfree)(void *,void *); void *opaque; } bz_stream; #ifndef BZ_IMPORT #define BZ_EXPORT #endif /* Need a definitition for FILE */ #include #ifdef _WIN32 # include # ifdef small /* windows.h define small to char */ # undef small # endif # ifdef BZ_EXPORT # define BZ_API(func) WINAPI func # define BZ_EXTERN extern # else /* import windows dll dynamically */ # define BZ_API(func) (WINAPI * func) # define BZ_EXTERN # endif #else # define BZ_API(func) func # define BZ_EXTERN extern #endif /*-- Core (low-level) library functions --*/ BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzCompress) ( bz_stream* strm, int action ); BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( bz_stream *strm, int verbosity, int small ); BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ); /*-- High(er) level library functions --*/ #ifndef BZ_NO_STDIO #define BZ_MAX_UNUSED 5000 typedef void BZFILE; BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ); BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( int* bzerror, BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ); BZ_EXTERN int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ); #endif /*-- Utility functions --*/ BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ); /*-- Code contributed by Yoshioka Tsuneo (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp), to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( void ); #ifndef BZ_NO_STDIO BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ); BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ); BZ_EXTERN int BZ_API(BZ2_bzread) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzwrite) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzflush) ( BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzclose) ( BZFILE* b ); BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( BZFILE *b, int *errnum ); #endif #ifdef __cplusplus } #endif #endif #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end bzlib.h ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/bzlib_private.h000066400000000000000000000336601406366436600203030ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Private header file for the library. ---*/ /*--- bzlib_private.h ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ #ifndef _BZLIB_PRIVATE_H #define _BZLIB_PRIVATE_H #include #ifndef BZ_NO_STDIO #include #include #include #endif #include "bzlib.h" /*-- General stuff. --*/ #define BZ_VERSION "1.0.2, 30-Dec-2001" typedef char Char; typedef unsigned char Bool; typedef unsigned char UChar; typedef int Int32; typedef unsigned int UInt32; typedef short Int16; typedef unsigned short UInt16; #define True ((Bool)1) #define False ((Bool)0) #ifndef __GNUC__ #define __inline__ /* */ #endif #ifndef BZ_NO_STDIO extern void BZ2_bz__AssertH__fail ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } #if BZ_DEBUG #define AssertD(cond,msg) \ { if (!(cond)) { \ fprintf ( stderr, \ "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ exit(1); \ }} #else #define AssertD(cond,msg) /* */ #endif #define VPrintf0(zf) \ fprintf(stderr,zf) #define VPrintf1(zf,za1) \ fprintf(stderr,zf,za1) #define VPrintf2(zf,za1,za2) \ fprintf(stderr,zf,za1,za2) #define VPrintf3(zf,za1,za2,za3) \ fprintf(stderr,zf,za1,za2,za3) #define VPrintf4(zf,za1,za2,za3,za4) \ fprintf(stderr,zf,za1,za2,za3,za4) #define VPrintf5(zf,za1,za2,za3,za4,za5) \ fprintf(stderr,zf,za1,za2,za3,za4,za5) #else extern void bz_internal_error ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) bz_internal_error ( errcode ); } #define AssertD(cond,msg) /* */ #define VPrintf0(zf) /* */ #define VPrintf1(zf,za1) /* */ #define VPrintf2(zf,za1,za2) /* */ #define VPrintf3(zf,za1,za2,za3) /* */ #define VPrintf4(zf,za1,za2,za3,za4) /* */ #define VPrintf5(zf,za1,za2,za3,za4,za5) /* */ #endif #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) /*-- Header bytes. --*/ #define BZ_HDR_B 0x42 /* 'B' */ #define BZ_HDR_Z 0x5a /* 'Z' */ #define BZ_HDR_h 0x68 /* 'h' */ #define BZ_HDR_0 0x30 /* '0' */ /*-- Constants for the back end. --*/ #define BZ_MAX_ALPHA_SIZE 258 #define BZ_MAX_CODE_LEN 23 #define BZ_RUNA 0 #define BZ_RUNB 1 #define BZ_N_GROUPS 6 #define BZ_G_SIZE 50 #define BZ_N_ITERS 4 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) /*-- Stuff for randomising repetitive blocks. --*/ extern Int32 BZ2_rNums[512]; #define BZ_RAND_DECLS \ Int32 rNToGo; \ Int32 rTPos \ #define BZ_RAND_INIT_MASK \ s->rNToGo = 0; \ s->rTPos = 0 \ #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) #define BZ_RAND_UPD_MASK \ if (s->rNToGo == 0) { \ s->rNToGo = BZ2_rNums[s->rTPos]; \ s->rTPos++; \ if (s->rTPos == 512) s->rTPos = 0; \ } \ s->rNToGo--; /*-- Stuff for doing CRCs. --*/ extern UInt32 BZ2_crc32Table[256]; #define BZ_INITIALISE_CRC(crcVar) \ { \ crcVar = 0xffffffffL; \ } #define BZ_FINALISE_CRC(crcVar) \ { \ crcVar = ~(crcVar); \ } #define BZ_UPDATE_CRC(crcVar,cha) \ { \ crcVar = (crcVar << 8) ^ \ BZ2_crc32Table[(crcVar >> 24) ^ \ ((UChar)cha)]; \ } /*-- States and modes for compression. --*/ #define BZ_M_IDLE 1 #define BZ_M_RUNNING 2 #define BZ_M_FLUSHING 3 #define BZ_M_FINISHING 4 #define BZ_S_OUTPUT 1 #define BZ_S_INPUT 2 #define BZ_N_RADIX 2 #define BZ_N_QSORT 12 #define BZ_N_SHELL 18 #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) /*-- Structure holding all the compression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* mode this stream is in, and whether inputting */ /* or outputting data */ Int32 mode; Int32 state; /* remembers avail_in when flush/finish requested */ UInt32 avail_in_expect; /* for doing the block sorting */ UInt32* arr1; UInt32* arr2; UInt32* ftab; Int32 origPtr; /* aliases for arr1 and arr2 */ UInt32* ptr; UChar* block; UInt16* mtfv; UChar* zbits; /* for deciding when to use the fallback sorting algorithm */ Int32 workFactor; /* run-length-encoding of the input */ UInt32 state_in_ch; Int32 state_in_len; BZ_RAND_DECLS; /* input and output limits and current posns */ Int32 nblock; Int32 nblockMAX; Int32 numZ; Int32 state_out_pos; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; UChar unseqToSeq[256]; /* the buffer for bit stream creation */ UInt32 bsBuff; Int32 bsLive; /* block and combined CRCs */ UInt32 blockCRC; UInt32 combinedCRC; /* misc administratium */ Int32 verbosity; Int32 blockNo; Int32 blockSize100k; /* stuff for coding the MTF values */ Int32 nMTF; Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; /* second dimension: only 3 needed; 4 makes index calculations faster */ UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; } EState; /*-- externs for compression. --*/ extern void BZ2_blockSort ( EState* ); extern void BZ2_compressBlock ( EState*, Bool ); extern void BZ2_bsInitWrite ( EState* ); extern void BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); extern void BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); /*-- states for decompression. --*/ #define BZ_X_IDLE 1 #define BZ_X_OUTPUT 2 #define BZ_X_MAGIC_1 10 #define BZ_X_MAGIC_2 11 #define BZ_X_MAGIC_3 12 #define BZ_X_MAGIC_4 13 #define BZ_X_BLKHDR_1 14 #define BZ_X_BLKHDR_2 15 #define BZ_X_BLKHDR_3 16 #define BZ_X_BLKHDR_4 17 #define BZ_X_BLKHDR_5 18 #define BZ_X_BLKHDR_6 19 #define BZ_X_BCRC_1 20 #define BZ_X_BCRC_2 21 #define BZ_X_BCRC_3 22 #define BZ_X_BCRC_4 23 #define BZ_X_RANDBIT 24 #define BZ_X_ORIGPTR_1 25 #define BZ_X_ORIGPTR_2 26 #define BZ_X_ORIGPTR_3 27 #define BZ_X_MAPPING_1 28 #define BZ_X_MAPPING_2 29 #define BZ_X_SELECTOR_1 30 #define BZ_X_SELECTOR_2 31 #define BZ_X_SELECTOR_3 32 #define BZ_X_CODING_1 33 #define BZ_X_CODING_2 34 #define BZ_X_CODING_3 35 #define BZ_X_MTF_1 36 #define BZ_X_MTF_2 37 #define BZ_X_MTF_3 38 #define BZ_X_MTF_4 39 #define BZ_X_MTF_5 40 #define BZ_X_MTF_6 41 #define BZ_X_ENDHDR_2 42 #define BZ_X_ENDHDR_3 43 #define BZ_X_ENDHDR_4 44 #define BZ_X_ENDHDR_5 45 #define BZ_X_ENDHDR_6 46 #define BZ_X_CCRC_1 47 #define BZ_X_CCRC_2 48 #define BZ_X_CCRC_3 49 #define BZ_X_CCRC_4 50 /*-- Constants for the fast MTF decoder. --*/ #define MTFA_SIZE 4096 #define MTFL_SIZE 16 /*-- Structure holding all the decompression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* state indicator for this stream */ Int32 state; /* for doing the final run-length decoding */ UChar state_out_ch; Int32 state_out_len; Bool blockRandomised; BZ_RAND_DECLS; /* the buffer for bit stream reading */ UInt32 bsBuff; Int32 bsLive; /* misc administratium */ Int32 blockSize100k; Bool smallDecompress; Int32 currBlockNo; Int32 verbosity; /* for undoing the Burrows-Wheeler transform */ Int32 origPtr; UInt32 tPos; Int32 k0; Int32 unzftab[256]; Int32 nblock_used; Int32 cftab[257]; Int32 cftabCopy[257]; /* for undoing the Burrows-Wheeler transform (FAST) */ UInt32 *tt; /* for undoing the Burrows-Wheeler transform (SMALL) */ UInt16 *ll16; UChar *ll4; /* stored and calculated CRCs */ UInt32 storedBlockCRC; UInt32 storedCombinedCRC; UInt32 calculatedBlockCRC; UInt32 calculatedCombinedCRC; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; Bool inUse16[16]; UChar seqToUnseq[256]; /* for decoding the MTF values */ UChar mtfa [MTFA_SIZE]; Int32 mtfbase[256 / MTFL_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 minLens[BZ_N_GROUPS]; /* save area for scalars in the main decompress code */ Int32 save_i; Int32 save_j; Int32 save_t; Int32 save_alphaSize; Int32 save_nGroups; Int32 save_nSelectors; Int32 save_EOB; Int32 save_groupNo; Int32 save_groupPos; Int32 save_nextSym; Int32 save_nblockMAX; Int32 save_nblock; Int32 save_es; Int32 save_N; Int32 save_curr; Int32 save_zt; Int32 save_zn; Int32 save_zvec; Int32 save_zj; Int32 save_gSel; Int32 save_gMinlen; Int32* save_gLimit; Int32* save_gBase; Int32* save_gPerm; } DState; /*-- Macros for decompression. --*/ #define BZ_GET_FAST(cccc) \ s->tPos = s->tt[s->tPos]; \ cccc = (UChar)(s->tPos & 0xff); \ s->tPos >>= 8; #define BZ_GET_FAST_C(cccc) \ c_tPos = c_tt[c_tPos]; \ cccc = (UChar)(c_tPos & 0xff); \ c_tPos >>= 8; #define SET_LL4(i,n) \ { if (((i) & 0x1) == 0) \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ } #define GET_LL4(i) \ ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) #define SET_LL(i,n) \ { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ SET_LL4(i, n >> 16); \ } #define GET_LL(i) \ (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) #define BZ_GET_SMALL(cccc) \ cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ s->tPos = GET_LL(s->tPos); /*-- externs for decompression. --*/ extern Int32 BZ2_indexIntoF ( Int32, Int32* ); extern Int32 BZ2_decompress ( DState* ); extern void BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, Int32, Int32, Int32 ); #endif /*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ #ifdef BZ_NO_STDIO #ifndef NULL #define NULL 0 #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib_private.h ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/compress.c000066400000000000000000000530561406366436600172760ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Compression machinery (not incl block sorting) ---*/ /*--- compress.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ /*-- CHANGES ~~~~~~~ 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c * changed setting of nGroups in sendMTFValues() so as to do a bit better on small files --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Bit stream I/O ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ void BZ2_bsInitWrite ( EState* s ) { s->bsLive = 0; s->bsBuff = 0; } /*---------------------------------------------------*/ static void bsFinishWrite ( EState* s ) { while (s->bsLive > 0) { s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); s->numZ++; s->bsBuff <<= 8; s->bsLive -= 8; } } /*---------------------------------------------------*/ #define bsNEEDW(nz) \ { \ while (s->bsLive >= 8) { \ s->zbits[s->numZ] \ = (UChar)(s->bsBuff >> 24); \ s->numZ++; \ s->bsBuff <<= 8; \ s->bsLive -= 8; \ } \ } /*---------------------------------------------------*/ static __inline__ void bsW ( EState* s, Int32 n, UInt32 v ) { bsNEEDW ( n ); s->bsBuff |= (v << (32 - s->bsLive - n)); s->bsLive += n; } /*---------------------------------------------------*/ static void bsPutUInt32 ( EState* s, UInt32 u ) { bsW ( s, 8, (u >> 24) & 0xffL ); bsW ( s, 8, (u >> 16) & 0xffL ); bsW ( s, 8, (u >> 8) & 0xffL ); bsW ( s, 8, u & 0xffL ); } /*---------------------------------------------------*/ static void bsPutUChar ( EState* s, UChar c ) { bsW( s, 8, (UInt32)c ); } /*---------------------------------------------------*/ /*--- The back end proper ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ static void makeMaps_e ( EState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->unseqToSeq[i] = s->nInUse; s->nInUse++; } } /*---------------------------------------------------*/ static void generateMTFValues ( EState* s ) { UChar yy[256]; Int32 i, j; Int32 zPend; Int32 wr; Int32 EOB; /* After sorting (eg, here), s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, and ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] holds the original block data. The first thing to do is generate the MTF values, and put them in ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. Because there are strictly fewer or equal MTF values than block values, ptr values in this area are overwritten with MTF values only when they are no longer needed. The final compressed bitstream is generated into the area starting at (UChar*) (&((UChar*)s->arr2)[s->nblock]) These storage aliases are set up in bzCompressInit(), except for the last one, which is arranged in compressBlock(). */ UInt32* ptr = s->ptr; UChar* block = s->block; UInt16* mtfv = s->mtfv; makeMaps_e ( s ); EOB = s->nInUse+1; for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; wr = 0; zPend = 0; for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; for (i = 0; i < s->nblock; i++) { UChar ll_i; AssertD ( wr <= i, "generateMTFValues(1)" ); j = ptr[i]-1; if (j < 0) j += s->nblock; ll_i = s->unseqToSeq[block[j]]; AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); if (yy[0] == ll_i) { zPend++; } else { if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } { register UChar rtmp; register UChar* ryy_j; register UChar rll_i; rtmp = yy[1]; yy[1] = yy[0]; ryy_j = &(yy[1]); rll_i = ll_i; while ( rll_i != rtmp ) { register UChar rtmp2; ryy_j++; rtmp2 = rtmp; rtmp = *ryy_j; *ryy_j = rtmp2; }; yy[0] = rtmp; j = ryy_j - &(yy[0]); mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; } } } if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; s->nMTF = wr; } /*---------------------------------------------------*/ #define BZ_LESSER_ICOST 0 #define BZ_GREATER_ICOST 15 static void sendMTFValues ( EState* s ) { Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; Int32 nGroups, nBytes; /*-- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; is a global since the decoder also needs it. Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; are also globals only used in this proc. Made global to keep stack frame size small. --*/ UInt16 cost[BZ_N_GROUPS]; Int32 fave[BZ_N_GROUPS]; UInt16* mtfv = s->mtfv; if (s->verbosity >= 3) VPrintf3( " %d in block, %d after MTF & 1-2 coding, " "%d+2 syms in use\n", s->nblock, s->nMTF, s->nInUse ); alphaSize = s->nInUse+2; for (t = 0; t < BZ_N_GROUPS; t++) for (v = 0; v < alphaSize; v++) s->len[t][v] = BZ_GREATER_ICOST; /*--- Decide how many coding tables to use ---*/ AssertH ( s->nMTF > 0, 3001 ); if (s->nMTF < 200) nGroups = 2; else if (s->nMTF < 600) nGroups = 3; else if (s->nMTF < 1200) nGroups = 4; else if (s->nMTF < 2400) nGroups = 5; else nGroups = 6; /*--- Generate an initial set of coding tables ---*/ { Int32 nPart, remF, tFreq, aFreq; nPart = nGroups; remF = s->nMTF; gs = 0; while (nPart > 0) { tFreq = remF / nPart; ge = gs-1; aFreq = 0; while (aFreq < tFreq && ge < alphaSize-1) { ge++; aFreq += s->mtfFreq[ge]; } if (ge > gs && nPart != nGroups && nPart != 1 && ((nGroups-nPart) % 2 == 1)) { aFreq -= s->mtfFreq[ge]; ge--; } if (s->verbosity >= 3) VPrintf5( " initial group %d, [%d .. %d], " "has %d syms (%4.1f%%)\n", nPart, gs, ge, aFreq, (100.0 * (float)aFreq) / (float)(s->nMTF) ); for (v = 0; v < alphaSize; v++) if (v >= gs && v <= ge) s->len[nPart-1][v] = BZ_LESSER_ICOST; else s->len[nPart-1][v] = BZ_GREATER_ICOST; nPart--; gs = ge+1; remF -= aFreq; } } /*--- Iterate up to BZ_N_ITERS times to improve the tables. ---*/ for (iter = 0; iter < BZ_N_ITERS; iter++) { for (t = 0; t < nGroups; t++) fave[t] = 0; for (t = 0; t < nGroups; t++) for (v = 0; v < alphaSize; v++) s->rfreq[t][v] = 0; /*--- Set up an auxiliary length table which is used to fast-track the common case (nGroups == 6). ---*/ if (nGroups == 6) { for (v = 0; v < alphaSize; v++) { s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; } } nSelectors = 0; totc = 0; gs = 0; while (True) { /*--- Set group start & end marks. --*/ if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; /*-- Calculate the cost of this group as coded by each of the coding tables. --*/ for (t = 0; t < nGroups; t++) cost[t] = 0; if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ register UInt32 cost01, cost23, cost45; register UInt16 icv; cost01 = cost23 = cost45 = 0; # define BZ_ITER(nn) \ icv = mtfv[gs+(nn)]; \ cost01 += s->len_pack[icv][0]; \ cost23 += s->len_pack[icv][1]; \ cost45 += s->len_pack[icv][2]; \ BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); # undef BZ_ITER cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { UInt16 icv = mtfv[i]; for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; } } /*-- Find the coding table which is best for this group, and record its identity in the selector table. --*/ bc = 999999999; bt = -1; for (t = 0; t < nGroups; t++) if (cost[t] < bc) { bc = cost[t]; bt = t; }; totc += bc; fave[bt]++; s->selector[nSelectors] = bt; nSelectors++; /*-- Increment the symbol frequencies for the selected table. --*/ if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ # define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); # undef BZ_ITUR } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) s->rfreq[bt][ mtfv[i] ]++; } gs = ge+1; } if (s->verbosity >= 3) { VPrintf2 ( " pass %d: size is %d, grp uses are ", iter+1, totc/8 ); for (t = 0; t < nGroups; t++) VPrintf1 ( "%d ", fave[t] ); VPrintf0 ( "\n" ); } /*-- Recompute the tables based on the accumulated frequencies. --*/ for (t = 0; t < nGroups; t++) BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), alphaSize, 20 ); } AssertH( nGroups < 8, 3002 ); AssertH( nSelectors < 32768 && nSelectors <= (2 + (900000 / BZ_G_SIZE)), 3003 ); /*--- Compute MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; for (i = 0; i < nGroups; i++) pos[i] = i; for (i = 0; i < nSelectors; i++) { ll_i = s->selector[i]; j = 0; tmp = pos[j]; while ( ll_i != tmp ) { j++; tmp2 = tmp; tmp = pos[j]; pos[j] = tmp2; }; pos[0] = tmp; s->selectorMtf[i] = j; } }; /*--- Assign actual codes for the tables. --*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } AssertH ( !(maxLen > 20), 3004 ); AssertH ( !(minLen < 1), 3005 ); BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); } /*--- Transmit the mapping table. ---*/ { Bool inUse16[16]; for (i = 0; i < 16; i++) { inUse16[i] = False; for (j = 0; j < 16; j++) if (s->inUse[i * 16 + j]) inUse16[i] = True; } nBytes = s->numZ; for (i = 0; i < 16; i++) if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); for (i = 0; i < 16; i++) if (inUse16[i]) for (j = 0; j < 16; j++) { if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); } /*--- Now the selectors. ---*/ nBytes = s->numZ; bsW ( s, 3, nGroups ); bsW ( s, 15, nSelectors ); for (i = 0; i < nSelectors; i++) { for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( "selectors %d, ", s->numZ-nBytes ); /*--- Now the coding tables. ---*/ nBytes = s->numZ; for (t = 0; t < nGroups; t++) { Int32 curr = s->len[t][0]; bsW ( s, 5, curr ); for (i = 0; i < alphaSize; i++) { while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; bsW ( s, 1, 0 ); } } if (s->verbosity >= 3) VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); /*--- And finally, the block data proper ---*/ nBytes = s->numZ; selCtr = 0; gs = 0; while (True) { if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; AssertH ( s->selector[selCtr] < nGroups, 3006 ); if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ UInt16 mtfv_i; UChar* s_len_sel_selCtr = &(s->len[s->selector[selCtr]][0]); Int32* s_code_sel_selCtr = &(s->code[s->selector[selCtr]][0]); # define BZ_ITAH(nn) \ mtfv_i = mtfv[gs+(nn)]; \ bsW ( s, \ s_len_sel_selCtr[mtfv_i], \ s_code_sel_selCtr[mtfv_i] ) BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); # undef BZ_ITAH } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { bsW ( s, s->len [s->selector[selCtr]] [mtfv[i]], s->code [s->selector[selCtr]] [mtfv[i]] ); } } gs = ge+1; selCtr++; } AssertH( selCtr == nSelectors, 3007 ); if (s->verbosity >= 3) VPrintf1( "codes %d\n", s->numZ-nBytes ); } /*---------------------------------------------------*/ void BZ2_compressBlock ( EState* s, Bool is_last_block ) { if (s->nblock > 0) { BZ_FINALISE_CRC ( s->blockCRC ); s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); s->combinedCRC ^= s->blockCRC; if (s->blockNo > 1) s->numZ = 0; if (s->verbosity >= 2) VPrintf4( " block %d: crc = 0x%8x, " "combined CRC = 0x%8x, size = %d\n", s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); BZ2_blockSort ( s ); } s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); /*-- If this is the first block, create the stream header. --*/ if (s->blockNo == 1) { BZ2_bsInitWrite ( s ); bsPutUChar ( s, BZ_HDR_B ); bsPutUChar ( s, BZ_HDR_Z ); bsPutUChar ( s, BZ_HDR_h ); bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); } if (s->nblock > 0) { bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); /*-- Now the block's CRC, so it is in a known place. --*/ bsPutUInt32 ( s, s->blockCRC ); /*-- Now a single bit indicating (non-)randomisation. As of version 0.9.5, we use a better sorting algorithm which makes randomisation unnecessary. So always set the randomised bit to 'no'. Of course, the decoder still needs to be able to handle randomised blocks so as to maintain backwards compatibility with older versions of bzip2. --*/ bsW(s,1,0); bsW ( s, 24, s->origPtr ); generateMTFValues ( s ); sendMTFValues ( s ); } /*-- If this is the last block, add the stream trailer. --*/ if (is_last_block) { bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); bsPutUInt32 ( s, s->combinedCRC ); if (s->verbosity >= 2) VPrintf1( " final combined CRC = 0x%x\n ", s->combinedCRC ); bsFinishWrite ( s ); } } #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end compress.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/crctable.c000066400000000000000000000144471406366436600172230ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Table for doing CRCs ---*/ /*--- crctable.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*-- I think this is an implementation of the AUTODIN-II, Ethernet & FDDI 32-bit CRC standard. Vaguely derived from code by Rob Warnock, in Section 51 of the comp.compression FAQ. --*/ UInt32 BZ2_crc32Table[256] = { /*-- Ugly, innit? --*/ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L }; #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end crctable.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/decompress.c000066400000000000000000000517061406366436600176070ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Decompression machinery ---*/ /*--- decompress.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*---------------------------------------------------*/ static void makeMaps_d ( DState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->seqToUnseq[s->nInUse] = i; s->nInUse++; } } /*---------------------------------------------------*/ #define RETURN(rrr) \ { retVal = rrr; goto save_state_and_return; }; #define GET_BITS(lll,vvv,nnn) \ case lll: s->state = lll; \ while (True) { \ if (s->bsLive >= nnn) { \ UInt32 v; \ v = (s->bsBuff >> \ (s->bsLive-nnn)) & ((1 << nnn)-1); \ s->bsLive -= nnn; \ vvv = v; \ break; \ } \ if (s->strm->avail_in == 0) RETURN(BZ_OK); \ s->bsBuff \ = (s->bsBuff << 8) | \ ((UInt32) \ (*((UChar*)(s->strm->next_in)))); \ s->bsLive += 8; \ s->strm->next_in++; \ s->strm->avail_in--; \ s->strm->total_in_lo32++; \ if (s->strm->total_in_lo32 == 0) \ s->strm->total_in_hi32++; \ } #define GET_UCHAR(lll,uuu) \ GET_BITS(lll,uuu,8) #define GET_BIT(lll,uuu) \ GET_BITS(lll,uuu,1) /*---------------------------------------------------*/ #define GET_MTF_VAL(label1,label2,lval) \ { \ if (groupPos == 0) { \ groupNo++; \ if (groupNo >= nSelectors) \ RETURN(BZ_DATA_ERROR); \ groupPos = BZ_G_SIZE; \ gSel = s->selector[groupNo]; \ gMinlen = s->minLens[gSel]; \ gLimit = &(s->limit[gSel][0]); \ gPerm = &(s->perm[gSel][0]); \ gBase = &(s->base[gSel][0]); \ } \ groupPos--; \ zn = gMinlen; \ GET_BITS(label1, zvec, zn); \ while (1) { \ if (zn > 20 /* the longest code */) \ RETURN(BZ_DATA_ERROR); \ if (zvec <= gLimit[zn]) break; \ zn++; \ GET_BIT(label2, zj); \ zvec = (zvec << 1) | zj; \ }; \ if (zvec - gBase[zn] < 0 \ || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ RETURN(BZ_DATA_ERROR); \ lval = gPerm[zvec - gBase[zn]]; \ } /*---------------------------------------------------*/ Int32 BZ2_decompress ( DState* s ) { UChar uc; Int32 retVal; Int32 minLen, maxLen; bz_stream* strm = s->strm; /* stuff that needs to be saved/restored */ Int32 i; Int32 j; Int32 t; Int32 alphaSize; Int32 nGroups; Int32 nSelectors; Int32 EOB; Int32 groupNo; Int32 groupPos; Int32 nextSym; Int32 nblockMAX; Int32 nblock; Int32 es; Int32 N; Int32 curr; Int32 zt; Int32 zn; Int32 zvec; Int32 zj; Int32 gSel; Int32 gMinlen; Int32* gLimit; Int32* gBase; Int32* gPerm; if (s->state == BZ_X_MAGIC_1) { /*initialise the save area*/ s->save_i = 0; s->save_j = 0; s->save_t = 0; s->save_alphaSize = 0; s->save_nGroups = 0; s->save_nSelectors = 0; s->save_EOB = 0; s->save_groupNo = 0; s->save_groupPos = 0; s->save_nextSym = 0; s->save_nblockMAX = 0; s->save_nblock = 0; s->save_es = 0; s->save_N = 0; s->save_curr = 0; s->save_zt = 0; s->save_zn = 0; s->save_zvec = 0; s->save_zj = 0; s->save_gSel = 0; s->save_gMinlen = 0; s->save_gLimit = NULL; s->save_gBase = NULL; s->save_gPerm = NULL; } /*restore from the save area*/ i = s->save_i; j = s->save_j; t = s->save_t; alphaSize = s->save_alphaSize; nGroups = s->save_nGroups; nSelectors = s->save_nSelectors; EOB = s->save_EOB; groupNo = s->save_groupNo; groupPos = s->save_groupPos; nextSym = s->save_nextSym; nblockMAX = s->save_nblockMAX; nblock = s->save_nblock; es = s->save_es; N = s->save_N; curr = s->save_curr; zt = s->save_zt; zn = s->save_zn; zvec = s->save_zvec; zj = s->save_zj; gSel = s->save_gSel; gMinlen = s->save_gMinlen; gLimit = s->save_gLimit; gBase = s->save_gBase; gPerm = s->save_gPerm; retVal = BZ_OK; switch (s->state) { GET_UCHAR(BZ_X_MAGIC_1, uc); if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_2, uc); if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_3, uc) if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) if (s->blockSize100k < (BZ_HDR_0 + 1) || s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); s->blockSize100k -= BZ_HDR_0; if (s->smallDecompress) { s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); s->ll4 = BZALLOC( ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) ); if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); } else { s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); if (s->tt == NULL) RETURN(BZ_MEM_ERROR); } GET_UCHAR(BZ_X_BLKHDR_1, uc); if (uc == 0x17) goto endhdr_2; if (uc != 0x31) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_2, uc); if (uc != 0x41) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_3, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_4, uc); if (uc != 0x26) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_5, uc); if (uc != 0x53) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_6, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); s->currBlockNo++; if (s->verbosity >= 2) VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); s->storedBlockCRC = 0; GET_UCHAR(BZ_X_BCRC_1, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_2, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_3, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_4, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); s->origPtr = 0; GET_UCHAR(BZ_X_ORIGPTR_1, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_2, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_3, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); if (s->origPtr < 0) RETURN(BZ_DATA_ERROR); if (s->origPtr > 10 + 100000*s->blockSize100k) RETURN(BZ_DATA_ERROR); /*--- Receive the mapping table ---*/ for (i = 0; i < 16; i++) { GET_BIT(BZ_X_MAPPING_1, uc); if (uc == 1) s->inUse16[i] = True; else s->inUse16[i] = False; } for (i = 0; i < 256; i++) s->inUse[i] = False; for (i = 0; i < 16; i++) if (s->inUse16[i]) for (j = 0; j < 16; j++) { GET_BIT(BZ_X_MAPPING_2, uc); if (uc == 1) s->inUse[i * 16 + j] = True; } makeMaps_d ( s ); if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); alphaSize = s->nInUse+2; /*--- Now the selectors ---*/ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); if (nSelectors < 1) RETURN(BZ_DATA_ERROR); for (i = 0; i < nSelectors; i++) { j = 0; while (True) { GET_BIT(BZ_X_SELECTOR_3, uc); if (uc == 0) break; j++; if (j >= nGroups) RETURN(BZ_DATA_ERROR); } s->selectorMtf[i] = j; } /*--- Undo the MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], tmp, v; for (v = 0; v < nGroups; v++) pos[v] = v; for (i = 0; i < nSelectors; i++) { v = s->selectorMtf[i]; tmp = pos[v]; while (v > 0) { pos[v] = pos[v-1]; v--; } pos[0] = tmp; s->selector[i] = tmp; } } /*--- Now the coding tables ---*/ for (t = 0; t < nGroups; t++) { GET_BITS(BZ_X_CODING_1, curr, 5); for (i = 0; i < alphaSize; i++) { while (True) { if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); GET_BIT(BZ_X_CODING_2, uc); if (uc == 0) break; GET_BIT(BZ_X_CODING_3, uc); if (uc == 0) curr++; else curr--; } s->len[t][i] = curr; } } /*--- Create the Huffman decoding tables ---*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } BZ2_hbCreateDecodeTables ( &(s->limit[t][0]), &(s->base[t][0]), &(s->perm[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); s->minLens[t] = minLen; } /*--- Now the MTF values ---*/ EOB = s->nInUse+1; nblockMAX = 100000 * s->blockSize100k; groupNo = -1; groupPos = 0; for (i = 0; i <= 255; i++) s->unzftab[i] = 0; /*-- MTF init --*/ { Int32 ii, jj, kk; kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); kk--; } s->mtfbase[ii] = kk + 1; } } /*-- end MTF init --*/ nblock = 0; GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); while (True) { if (nextSym == EOB) break; if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { es = -1; N = 1; do { if (nextSym == BZ_RUNA) es = es + (0+1) * N; else if (nextSym == BZ_RUNB) es = es + (1+1) * N; N = N * 2; GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); } while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); es++; uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; s->unzftab[uc] += es; if (s->smallDecompress) while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->ll16[nblock] = (UInt16)uc; nblock++; es--; } else while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->tt[nblock] = (UInt32)uc; nblock++; es--; }; continue; } else { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); /*-- uc = MTF ( nextSym-1 ) --*/ { Int32 ii, jj, kk, pp, lno, off; UInt32 nn; nn = (UInt32)(nextSym - 1); if (nn < MTFL_SIZE) { /* avoid general-case expense */ pp = s->mtfbase[0]; uc = s->mtfa[pp+nn]; while (nn > 3) { Int32 z = pp+nn; s->mtfa[(z) ] = s->mtfa[(z)-1]; s->mtfa[(z)-1] = s->mtfa[(z)-2]; s->mtfa[(z)-2] = s->mtfa[(z)-3]; s->mtfa[(z)-3] = s->mtfa[(z)-4]; nn -= 4; } while (nn > 0) { s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; }; s->mtfa[pp] = uc; } else { /* general case */ lno = nn / MTFL_SIZE; off = nn % MTFL_SIZE; pp = s->mtfbase[lno] + off; uc = s->mtfa[pp]; while (pp > s->mtfbase[lno]) { s->mtfa[pp] = s->mtfa[pp-1]; pp--; }; s->mtfbase[lno]++; while (lno > 0) { s->mtfbase[lno]--; s->mtfa[s->mtfbase[lno]] = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; lno--; } s->mtfbase[0]--; s->mtfa[s->mtfbase[0]] = uc; if (s->mtfbase[0] == 0) { kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; kk--; } s->mtfbase[ii] = kk + 1; } } } } /*-- end uc = MTF ( nextSym-1 ) --*/ s->unzftab[s->seqToUnseq[uc]]++; if (s->smallDecompress) s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); nblock++; GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); continue; } } /* Now we know what nblock is, we can do a better sanity check on s->origPtr. */ if (s->origPtr < 0 || s->origPtr >= nblock) RETURN(BZ_DATA_ERROR); s->state_out_len = 0; s->state_out_ch = 0; BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); s->state = BZ_X_OUTPUT; if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); /*-- Set up cftab to facilitate generation of T^(-1) --*/ s->cftab[0] = 0; for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; if (s->smallDecompress) { /*-- Make a copy of cftab, used in generation of T --*/ for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; /*-- compute the T vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->ll16[i]); SET_LL(i, s->cftabCopy[uc]); s->cftabCopy[uc]++; } /*-- Compute T^(-1) by pointer reversal on T --*/ i = s->origPtr; j = GET_LL(i); do { Int32 tmp = GET_LL(j); SET_LL(j, i); i = j; j = tmp; } while (i != s->origPtr); s->tPos = s->origPtr; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_SMALL(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_SMALL(s->k0); s->nblock_used++; } } else { /*-- compute the T^(-1) vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->tt[i] & 0xff); s->tt[s->cftab[uc]] |= (i << 8); s->cftab[uc]++; } s->tPos = s->tt[s->origPtr] >> 8; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_FAST(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_FAST(s->k0); s->nblock_used++; } } RETURN(BZ_OK); endhdr_2: GET_UCHAR(BZ_X_ENDHDR_2, uc); if (uc != 0x72) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_3, uc); if (uc != 0x45) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_4, uc); if (uc != 0x38) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_5, uc); if (uc != 0x50) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_6, uc); if (uc != 0x90) RETURN(BZ_DATA_ERROR); s->storedCombinedCRC = 0; GET_UCHAR(BZ_X_CCRC_1, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_2, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_3, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_4, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); s->state = BZ_X_IDLE; RETURN(BZ_STREAM_END); default: AssertH ( False, 4001 ); } AssertH ( False, 4002 ); save_state_and_return: s->save_i = i; s->save_j = j; s->save_t = t; s->save_alphaSize = alphaSize; s->save_nGroups = nGroups; s->save_nSelectors = nSelectors; s->save_EOB = EOB; s->save_groupNo = groupNo; s->save_groupPos = groupPos; s->save_nextSym = nextSym; s->save_nblockMAX = nblockMAX; s->save_nblock = nblock; s->save_es = es; s->save_N = N; s->save_curr = curr; s->save_zt = zt; s->save_zn = zn; s->save_zvec = zvec; s->save_zj = zj; s->save_gSel = gSel; s->save_gMinlen = gMinlen; s->save_gLimit = gLimit; s->save_gBase = gBase; s->save_gPerm = gPerm; return retVal; } #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end decompress.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/huffman.c000066400000000000000000000167321406366436600170670ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Huffman coding low-level stuff ---*/ /*--- huffman.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*---------------------------------------------------*/ #define WEIGHTOF(zz0) ((zz0) & 0xffffff00) #define DEPTHOF(zz1) ((zz1) & 0x000000ff) #define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) #define ADDWEIGHTS(zw1,zw2) \ (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) #define UPHEAP(z) \ { \ Int32 zz, tmp; \ zz = z; tmp = heap[zz]; \ while (weight[tmp] < weight[heap[zz >> 1]]) { \ heap[zz] = heap[zz >> 1]; \ zz >>= 1; \ } \ heap[zz] = tmp; \ } #define DOWNHEAP(z) \ { \ Int32 zz, yy, tmp; \ zz = z; tmp = heap[zz]; \ while (True) { \ yy = zz << 1; \ if (yy > nHeap) break; \ if (yy < nHeap && \ weight[heap[yy+1]] < weight[heap[yy]]) \ yy++; \ if (weight[tmp] < weight[heap[yy]]) break; \ heap[zz] = heap[yy]; \ zz = yy; \ } \ heap[zz] = tmp; \ } /*---------------------------------------------------*/ void BZ2_hbMakeCodeLengths ( UChar *len, Int32 *freq, Int32 alphaSize, Int32 maxLen ) { /*-- Nodes and heap entries run from 1. Entry 0 for both the heap and nodes is a sentinel. --*/ Int32 nNodes, nHeap, n1, n2, i, j, k; Bool tooLong; Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; for (i = 0; i < alphaSize; i++) weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; while (True) { nNodes = alphaSize; nHeap = 0; heap[0] = 0; weight[0] = 0; parent[0] = -2; for (i = 1; i <= alphaSize; i++) { parent[i] = -1; nHeap++; heap[nHeap] = i; UPHEAP(nHeap); } AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); while (nHeap > 1) { n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); nNodes++; parent[n1] = parent[n2] = nNodes; weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); parent[nNodes] = -1; nHeap++; heap[nHeap] = nNodes; UPHEAP(nHeap); } AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); tooLong = False; for (i = 1; i <= alphaSize; i++) { j = 0; k = i; while (parent[k] >= 0) { k = parent[k]; j++; } len[i-1] = j; if (j > maxLen) tooLong = True; } if (! tooLong) break; for (i = 1; i < alphaSize; i++) { j = weight[i] >> 8; j = 1 + (j / 2); weight[i] = j << 8; } } } /*---------------------------------------------------*/ void BZ2_hbAssignCodes ( Int32 *code, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 n, vec, i; vec = 0; for (n = minLen; n <= maxLen; n++) { for (i = 0; i < alphaSize; i++) if (length[i] == n) { code[i] = vec; vec++; }; vec <<= 1; } } /*---------------------------------------------------*/ void BZ2_hbCreateDecodeTables ( Int32 *limit, Int32 *base, Int32 *perm, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 pp, i, j, vec; pp = 0; for (i = minLen; i <= maxLen; i++) for (j = 0; j < alphaSize; j++) if (length[j] == i) { perm[pp] = j; pp++; }; for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; for (i = 0; i < alphaSize; i++) base[length[i]+1]++; for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; vec = 0; for (i = minLen; i <= maxLen; i++) { vec += (base[i+1] - base[i]); limit[i] = vec-1; vec <<= 1; } for (i = minLen + 1; i <= maxLen; i++) base[i] = ((limit[i-1] + 1) << 1) - base[i]; } #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end huffman.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/bzip2/randtable.c000066400000000000000000000125511406366436600173720ustar00rootroot00000000000000 /*-------------------------------------------------------------*/ /*--- Table for randomising repetitive blocks ---*/ /*--- randtable.c ---*/ /*-------------------------------------------------------------*/ /*-- This file is a part of bzip2 and/or libbzip2, a program and library for lossless, block-sorting data compression. Copyright (C) 1996-2002 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, Cambridge, UK. jseward@acm.org bzip2/libbzip2 version 1.0 of 21 March 2000 This program is based on (at least) the work of: Mike Burrows David Wheeler Peter Fenwick Alistair Moffat Radford Neal Ian H. Witten Robert Sedgewick Jon L. Bentley For more information on these sources, see the manual. --*/ #ifndef HAVE_BZLIB #include "bzlib_private.h" /*---------------------------------------------*/ Int32 BZ2_rNums[512] = { 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 }; #endif /* HAVE_BZLIB */ /*-------------------------------------------------------------*/ /*--- end randtable.c ---*/ /*-------------------------------------------------------------*/ analog-ce-6.0.17/src/cache.c000066400000000000000000000511641406366436600154560ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** cache.c; reading and writing cache files ***/ #include "anlghea3.h" void outputcache(char *outfile, Hashindex **gooditems, Dateman *dman, Arraydata **arraydata, unsigned long *data, double bys, choice data2cols[ITEM_NUMBER][DATA_NUMBER]) { extern choice cache_records[]; FILE *outf = NULL; Daysdata *dp; Hashindex *p; int i, j; datecode_t k; logical done; /* first open output file as in output.c */ if (IS_STDOUT(outfile)) { outf = stdout; debug('F', "Opening stdout as cache output file"); } else { #ifdef NOOPEN /* The ANSI, but less preferred, option. There is a race problem. Also if we somehow have got overwrite access but not read, it will go wrong. */ if ((outf = FOPENR(outfile)) != NULL) { fclose(outf); error("cache output file %s already exists: won't overwrite", outfile); } else if ((outf = FOPENW(outfile)) == NULL) error("failed to open cache output file %s for writing", outfile); else debug('F', "Opening %s as cache output file", outfile); #else /* NFS is broken, so actually even this version can contain a race if the file is mounted over NFS. */ if ((i = open(outfile, O_WRONLY | O_CREAT | O_EXCL, OPEN_MODE)) < 0) { if (errno == EEXIST) error("cache output file %s already exists: won't overwrite", outfile); else error("failed to open cache output file %s for writing", outfile); } else if ((outf = fdopen(i, "w")) == NULL) /* can this happen? */ error("failed to open cache output file %s for writing", outfile); else debug('F', "Opening %s as cache output file", outfile); #endif } fprintf(outf, "CACHE type 5 produced by analog %s. Do not modify or delete!\n", VERSION); /* output the summary data */ fprintf(outf, "T\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%.0f\n", data[LOGDATA_UNKNOWN], data[LOGDATA_INFO], data[LOGDATA_SUCC], data[LOGDATA_PAGES], data[LOGDATA_REDIR], data[LOGDATA_FAIL], bys); /* output the date info */ if (dman->firsttime == LAST_TIME && dman->lasttime == FIRST_TIME) fprintf(outf, "D\t%lu\t%lu\n", dman->lasttime, dman->firsttime); else fprintf(outf, "D\t%lu\t%lu\n", dman->firsttime, dman->lasttime); for (k = dman->firstdate, dp = dman->firstdp; dp != NULL; k++, TO_NEXT(dp)) { /* dp != NULL iff k <= dman->lastdate */ for (i = 0; i < 288; i++) { if (dp->reqs[i] != 0) fprintf(outf, "%u\t%d\t%lu\t%lu\t%.0f\n", k, i, dp->reqs[i], dp->pages[i], dp->bytes[i]); } } /* output the items */ for (i = 0; i < ITEM_NUMBER; i++) { for (p = gooditems[i]; p != NULL; TO_NEXT(p)) { if (p->own != NULL && (p->own->data[data2cols[i][REQUESTS]] != 0 || p->own->data[data2cols[i][FAIL]] != 0 || p->own->data[data2cols[i][REDIR]] != 0)) { fprintf(outf, "%d\t", i); for (j = 0; j < V5_DATA_NUMBER; j++) fprintf(outf, "%lu\t", p->own->data[data2cols[i][cache_records[j]]]); fprintf(outf, "%.0f\t%s\n", p->own->bytes, p->name); } } } /* output the arraydata. For historical reasons, these all differ slightly */ /* the sizes */ for (i = 0, done = FALSE; !done; i++) { if (arraydata[REP_SIZE - FIRST_ARRAYREP][i].reqs > 0) fprintf(outf, "z\t%d\t%lu\t%lu\t%lu\t%.0f\n", i, arraydata[REP_SIZE - FIRST_ARRAYREP][i].reqs, arraydata[REP_SIZE - FIRST_ARRAYREP][i].pages, arraydata[REP_SIZE - FIRST_ARRAYREP][i].lastdate, arraydata[REP_SIZE - FIRST_ARRAYREP][i].bytes); if (arraydata[REP_SIZE - FIRST_ARRAYREP][i].threshold < -0.5) done = TRUE; } /* the status codes */ for (i = 0, done = FALSE; !done; i++) { if (arraydata[REP_CODE - FIRST_ARRAYREP][i].reqs > 0) fprintf(outf, "c\t%u\t%lu\t%lu\n", (unsigned int)(arraydata[REP_CODE - FIRST_ARRAYREP][i].threshold), arraydata[REP_CODE - FIRST_ARRAYREP][i].reqs, arraydata[REP_CODE - FIRST_ARRAYREP][i].lastdate); if (arraydata[REP_CODE - FIRST_ARRAYREP][i].threshold < -0.5) done = TRUE; } /* the processing times */ for (i = 0, done = FALSE; !done; i++) { if (arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].reqs > 0) fprintf(outf, "P\t%lu\t%lu\t%lu\t%lu\t%.0f\n", (arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].threshold < -0.5)? ((unsigned long)(arraydata[REP_PROCTIME - FIRST_ARRAYREP][i - 1].threshold) + 1): ((unsigned long)(arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].threshold)), arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].reqs, arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].pages, arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].lastdate, arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].bytes); if (arraydata[REP_PROCTIME - FIRST_ARRAYREP][i].threshold < -0.5) done = TRUE; } if (!IS_STDOUT(outfile)) { debug('F', "Closing %s", outfile); fclose(outf); } } void hashbuild(choice code, unsigned long *data, double bys, Memman *mm, Hashtable **hash, unsigned int data_number, choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice data2cols[], Include *wanthead, Include *ispagehead, Tree **tree, Derv **derv, choice *alltrees, choice *alldervs, choice lowmem, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte) { /* very simplified version of process_data(): don't do any more aliases */ extern Hashentry *unwanted_entry; extern Hashindex *dummy_item; extern choice *rep2type; unsigned long data2[DATA2_NUMBER]; Hashentry *item; char *namestart, *nameend; logical ispage, buildtree = FALSE; int i, k; if (lowmem <= 1) item = hashfind(mm, hash, data_number, wanthead, UNSET, ispagehead, NULL, dirsuffix, dirsufflength, usercase_insensitive, 0, FALSE, code, TRUE)->own; else { ispage = pageq(mm->curr_pos, ispagehead, code); if (included(mm->curr_pos, ispage, wanthead)) { if (lowmem == 2) item = hashfind(mm, hash, data_number, wanthead, ispage, ispagehead, NULL, dirsuffix, dirsufflength, usercase_insensitive, 0, FALSE, code, TRUE)->own; else { item = unwanted_entry; buildtree = TRUE; } } else { item = unwanted_entry; mm->next_pos = mm->curr_pos; } } if (ENTRY_WANTED(item)) { data2[REQUESTS2] = data[REQUESTS]; data2[PAGES2] = data[PAGES]; data2[DATE2] = data[SUCCDATE]; data2[FIRSTD2] = data[SUCCFIRSTD]; hashscore(item, data2, datacols[SUCCESS], SUCCESS, bys); data2[REQUESTS2] = data[REDIR]; data2[DATE2] = data[REDIRDATE]; data2[FIRSTD2] = data[REDIRFIRSTD]; hashscore(item, data2, datacols[REDIRECT], REDIRECT, 0.0); data2[REQUESTS2] = data[FAIL]; data2[DATE2] = data[FAILDATE]; data2[FIRSTD2] = data[FAILFIRSTD]; hashscore(item, data2, datacols[FAILURE], FAILURE, 0.0); } else if (buildtree) { /* as in process.c, run through trees then dervs */ for (k = 0; k <= 1; k++) { for (i = 0; (k?(alldervs[i]):(alltrees[i])) != REP_NUMBER; i++) { if (rep2type[k?(alldervs[i]):(alltrees[i])] == code) { dummy_item->name = mm->curr_pos; dummy_item->own->data[data2cols[REQUESTS]] = data[REQUESTS]; if (data2cols[PAGES] >= 0) dummy_item->own->data[data2cols[PAGES]] = data[PAGES]; if (data2cols[SUCCDATE] >= 0) dummy_item->own->data[data2cols[SUCCDATE]] = data[SUCCDATE]; if (data2cols[SUCCFIRSTD] >= 0) dummy_item->own->data[data2cols[SUCCFIRSTD]] = data[SUCCFIRSTD]; dummy_item->own->bytes = bys; if (k) makederived(derv[alldervs[i] - FIRST_DERVREP], dummy_item, NULL, convfloor, multibyte, alldervs[i], datacols, data_number); else { namestart = NULL; tree[G(alltrees[i])]->cutfn(&namestart, &nameend, dummy_item->name, FALSE); (void)treefind(namestart, nameend, &(tree[G(alltrees[i])]->tree), dummy_item, tree[G(alltrees[i])]->cutfn, FALSE, TRUE, FALSE, tree[G(alltrees[i])]->space, datacols, data_number); } } } } } } void corruptcacheline(char *line, choice *rc, choice type) { extern char *pos; char *p; for (p = line; p < pos - 2 && p - line < 76; p++) { if (*p == '\0') *p = (type == 0 || type == 3)?'\t':':'; } /* new style : old style */ if (pos - line > 76) *(line + 76) = '\0'; if (type == 3) warn('F', TRUE, "Ignoring line in cache file with out-of-range dates looking like\n%s", line); else if (type == 2) warn('F', TRUE, "Incomplete line in cache file looking like\n%s", line); else /* type == 1 or 0 */ warn('F', TRUE, "Ignoring corrupt line in cache file looking like\n%s", line); *rc = FALSE; } logical parsecacheline(char *linestart, char *parsestart, unsigned int *code, unsigned int maxcode, int no_items, unsigned long *data, double *bys, Memman *mm) { choice rc = TRUE; char *temps, *temps2; int i; /* Note that maxcode is greater than the greatest possible code */ if (!ISDIGIT(*parsestart) || (*code = (unsigned int)atoi(parsestart)) >= maxcode || (temps2 = strchr(parsestart, '\t')) == NULL) corruptcacheline(linestart, &rc, 0); else { temps = strtok(temps2 + 1, "\t"); for (i = 0; i < no_items; i++) { if (rc == TRUE) { if (temps == NULL || !ISDIGIT(*temps)) corruptcacheline(linestart, &rc, 0); else { data[i] = strtoul(temps, (char **)NULL, 10); temps = strtok((char *)NULL, "\t"); } } } if (rc == TRUE && bys != NULL) { if (temps == NULL || !ISDIGIT(*temps)) corruptcacheline(linestart, &rc, 0); else { *bys = strtod(temps, (char **)NULL); temps = strtok((char *)NULL, "\t"); } } if (rc == TRUE && mm != NULL) { if (temps == NULL) corruptcacheline(linestart, &rc, 0); else { temps2 = strchr(temps, '\0'); memcpy(submalloc(mm, (size_t)(temps2 - temps) + 1), (void *)temps, (size_t)(temps2 - temps) + 1); temps = strtok((char *)NULL, "\t"); } } if (rc == TRUE && temps != NULL) corruptcacheline(linestart, &rc, 0); } return((logical)rc); } void readoldcache(Logfile *cachefilep, Dateman *dman, choice type, unsigned int granularity) { /* These very old caches only contained data over time */ extern char *block_start, *block_end, *record_start, *pos; unsigned int y, m, d, h; unsigned long reqs = 0, pages = 0; double bys = 0.0; timecode_t timecode; choice rc = TRUE; char *temps; char tempc; int i; while (rc != EOF) { rc = TRUE; if (pos >= block_end) { if ((rc = getmoredata(cachefilep, block_start, BLOCKSIZE)) == OK) rc = TRUE; pos = block_start; record_start = pos; } if (rc == TRUE) { (void)parsenewline(cachefilep, NULL, '\0'); record_start = pos; parsenonnewline(cachefilep); if (pos == record_start) rc = EOF; *(pos++) = '\0'; if (rc == TRUE) { if (sscanf(record_start, "%4u%2u%2u%2u%c", &y, &m, &d, &h, &tempc) != 5 || tempc != ':' || wantdate(&timecode, dman, h, 0, d, m - 1, y, 0) == ERR) corruptcacheline(record_start, &rc, 1); else { strtok(record_start, ":"); for ( ; h < 24 && rc == TRUE; h++) { if ((temps = strtok((char *)NULL, ":")) == NULL || !ISDIGIT(*temps)) { if (*temps == '*') rc = EOF; else corruptcacheline(record_start, &rc, 2); } else { reqs = strtoul(temps, (char **)NULL, 10); if ((temps = strtok((char *)NULL, ":")) == NULL || !ISDIGIT(*temps)) corruptcacheline(record_start, &rc, 2); else if (type == 2) { pages = strtoul(temps, (char **)NULL, 10); if ((temps = strtok((char *)NULL, ":")) == NULL || !ISDIGIT(*temps)) corruptcacheline(record_start, &rc, 2); else bys = strtod(temps, (char **)NULL); } else bys = strtod(temps, (char **)NULL); for (i = 0; i < 12; i++) { if (wantdate(&timecode, dman, h, (unsigned int)(5 * i), d, m - 1, y, 0)) datehash(timecode, dman, ((i + 1) * reqs) / 12 - (i * reqs) / 12, (type == 2)?\ (((i + 1) * pages) / 12 - (i * pages) / 12):0, ((i + 1) * bys) / 12 - (i * bys) / 12, granularity); /* maybe shouldn't datehash unless rc == TRUE (cf readcache()) but I no longer understand it well enough to mess with it */ cachefilep->from = MIN(cachefilep->from, timecode); cachefilep->to = MAX(cachefilep->to, timecode); } cachefilep->data[LOGDATA_SUCC] += reqs; if (type == 2) cachefilep->data[LOGDATA_PAGES] += pages; cachefilep->bytes += bys; if (timecode > dman->last7from && timecode <= dman->last7to) { cachefilep->data[LOGDATA_SUCC7] += reqs; if (type == 2) cachefilep->data[LOGDATA_PAGES7] += pages; cachefilep->bytes7 += bys; } } } } } } } } void readcache(Logfile *cachefilep, Hashtable **hash, unsigned int *no_cols, choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2], choice data2cols[ITEM_NUMBER][DATA_NUMBER], Arraydata **arraydata, Include **wanthead, Include *ispagehead, Dateman *dman, Tree **tree, Derv **derv, choice *alltrees, choice *alldervs, choice *lowmem, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte, unsigned int granularity) { /* compare with nextdnsline etc. in input.c */ extern Memman mmq; /* use mmq for another purpose here */ extern choice cache_records[]; extern char *block_start, *block_end, *record_start, *pos; extern unsigned int *rep2gran; unsigned long data[V5_DATA_NUMBER]; unsigned long data2[DATA_NUMBER]; int data_number; double bys; datecode_t datecode; timecode_t timecode, firsttime, lasttime; unsigned int code; choice rc = TRUE; logical rc2; char *temps; char type, tempc; int i; rc = getmoredata(cachefilep, block_start, BLOCKSIZE); pos = block_start; record_start = block_start; if (sscanf(pos, "CACHE type %c produced by analo%c", &type, &tempc) != 2 || type < '1' || tempc != 'g') { warn('F', TRUE, "%s is not an analog cache file: ignoring it", cachefilep->name); return; } else if (type > '5') { warn('F', TRUE, "Can't understand cache file %s written by a later version of analog: ignoring it", cachefilep->name); return; } parsenonnewline(cachefilep); if (type < '3') readoldcache(cachefilep, dman, (choice)(type - '0'), granularity); else { /* types 3 onwards are similar enough the same to use the same code */ if (type <= '4') data_number = V34_DATA_NUMBER; else data_number = V5_DATA_NUMBER; (void)parsenewline(cachefilep, NULL, '\0'); record_start = pos; parsenonnewline(cachefilep); if (sscanf(record_start, "T\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%lf%c", &(data[0]), &(data[1]), &(data[2]), &(data[3]), &(data[4]), &(data[5]), &bys, &tempc) != 8 || (tempc != '\r' && tempc != '\n')) { warn('F', TRUE, "Cache file %s is corrupt: ignoring it", cachefilep->name); return; } if (type <= '4') { for (i = 0, rc2 = FALSE; i < ITEM_NUMBER && !rc2; i++) { if (data2cols[i][SUCCFIRSTD] != -1 || data2cols[i][FAILFIRSTD] != -1 || data2cols[i][REDIRFIRSTD] != -1) { warn('M', TRUE, "Old-style cache file %s doesn't contain data on " "first-request times of items; so these may be overestimated", cachefilep->name); rc2 = TRUE; } } } if (type == '3') { firsttime = FIRST_TIME; lasttime = LAST_TIME; } else { (void)parsenewline(cachefilep, NULL, '\0'); record_start = pos; parsenonnewline(cachefilep); if (sscanf(record_start, "D\t%lu\t%lu%c", &firsttime, &lasttime, &tempc) != 3 || (tempc != '\r' && tempc != '\n') || firsttime > lasttime) { warn('F', TRUE, "Cache file %s is corrupt: ignoring it", cachefilep->name); return; } } if (lasttime > dman->last7from && lasttime != LAST_TIME) warn('M', TRUE, "Cache file %s doesn't contain last-seven-day " "statistics; so these may be underestimated", cachefilep->name); cachefilep->data[LOGDATA_UNKNOWN] += data[0]; cachefilep->data[LOGDATA_INFO] += data[1]; cachefilep->data[LOGDATA_SUCC] += data[2]; cachefilep->data[LOGDATA_PAGES] += data[3]; cachefilep->data[LOGDATA_REDIR] += data[4]; cachefilep->data[LOGDATA_FAIL] += data[5]; cachefilep->bytes += bys; while (rc != EOF) { rc = TRUE; if (pos >= block_end) { if ((rc = getmoredata(cachefilep, block_start, BLOCKSIZE)) == OK) rc = TRUE; pos = block_start; record_start = pos; } if (rc == TRUE) { (void)parsenewline(cachefilep, NULL, '\0'); record_start = pos; parsenonnewline(cachefilep); if (pos - record_start >= 2048) { *(record_start + 70) = '\0'; warn('F', TRUE, "Ignoring long line in cache file starting\n%s", record_start); rc = FALSE; } if (pos == record_start) rc = EOF; } if (rc == TRUE) { *(pos++) = '\0'; if (ISDIGIT(*record_start)) { if (ISDIGIT(*(record_start + 1))) { temps = strchr(record_start, '\t'); if (temps == NULL) corruptcacheline(record_start, &rc, 0); else { datecode = (unsigned int)atoi(record_start); if (parsecacheline(record_start, ++temps, &code, rep2gran[REP_FIVEREP], 2, data, &bys, NULL)) { timecode = (timecode_t)datecode * 1440 + (timecode_t)code * 5; /* time rounded down to nearest 5 minutes, so... */ if (timecode < firsttime) { if (firsttime - timecode <= 4) timecode = firsttime; else corruptcacheline(record_start, &rc, 3); } else if (timecode > lasttime) corruptcacheline(record_start, &rc, 3); else if (lasttime - timecode <= 4) timecode = lasttime; /* This doesn't cover the case where the first and last entries in the cache file are in the same five-minute period, but that's so unlikely that I can't be bothered to write special code for it. Anyway, it's not the only remaining problem with using only five-minute resolution in the cache file. */ if (rc == TRUE && timecode >= dman->from && timecode <= dman->to) { datehash(timecode, dman, data[0], data[1], bys, granularity); cachefilep->from = MIN(cachefilep->from, timecode); cachefilep->to = MAX(cachefilep->to, timecode); if (timecode > dman->last7from && timecode <= dman->last7to) { cachefilep->data[LOGDATA_SUCC7] += data[0]; cachefilep->data[LOGDATA_PAGES7] += data[1]; cachefilep->bytes7 += bys; } } } } } else if (*(record_start + 1) == '\t') { rc2 = parsecacheline(record_start, record_start, &code, ITEM_NUMBER, data_number, data, &bys, &mmq); if (rc2) { /* Map fields which are recorded into full data structure. */ for (i = 0; i < DATA_NUMBER; i++) data2[i] = 0; for (i = 0; i < V5_DATA_NUMBER; i++) data2[cache_records[i]] = data[i]; if (type <= '4') { /* In this case, firstd terms weren't recorded; use the obvious bound on them. */ data2[SUCCFIRSTD] = data2[SUCCDATE]; data2[REDIRFIRSTD] = data2[REDIRDATE]; data2[FAILFIRSTD] = data2[FAILDATE]; } hashbuild((choice)code, data2, bys, &mmq, &(hash[code]), no_cols[code], datacols[code], data2cols[code], wanthead[code], ispagehead, tree, derv, alltrees, alldervs, lowmem[code], dirsuffix, dirsufflength, usercase_insensitive, convfloor, multibyte); } } else corruptcacheline(record_start, &rc, 0); } else if (*record_start == 'z' && *(record_start + 1) == '\t') { if (parsecacheline(record_start, record_start + 2, &code, SIZEBINS, 3, data, &bys, NULL)) { arrayscore(arraydata[REP_SIZE - FIRST_ARRAYREP], arraydata[REP_SIZE - FIRST_ARRAYREP][code].threshold, data[0], 0, data[1], 0, bys, 0., data[2]); } } else if (*record_start == 'c' && *(record_start + 1) == '\t') { if (parsecacheline(record_start, record_start + 2, &code, 600, 2, data, NULL, NULL)) arrayscore(arraydata[REP_CODE - FIRST_ARRAYREP], code, data[0], 0, 0, 0, 0., 0., data[1]); } else if (*record_start == 'P' && *(record_start + 1) == '\t') { if (parsecacheline(record_start, record_start + 2, &code, 600002, 3, data, &bys, NULL)) arrayscore(arraydata[REP_PROCTIME - FIRST_ARRAYREP], code, data[0], 0, data[1], 0, bys, 0., data[2]); } else corruptcacheline(record_start, &rc, 0); } } } } analog-ce-6.0.17/src/dates.c000066400000000000000000000222011406366436600155010ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** dates.c; anything to do with dates. ***/ #include "anlghea3.h" /* Analog stores times internally in minutes since midnight 30-31/12/1969. (Not in "Unix time" because it works better if all valid times are > 0). Note also that months are numbered Jan = 0 to Dec = 11 internally. */ unsigned int daysbefore[12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; /* in non-leap year */ unsigned int monthlength[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; void code2date(datecode_t code, unsigned int *date, unsigned int *month, unsigned int *year) { /* not most efficient possible, but only used in output so doesn't need to be super-fast. NB DATE2CODE() is in anlghea3.h. */ code += 364; /* so 0 -> 1/1/69 */ *year = 1969 + 4 * (code / 1461); code %= 1461; *year += MIN(code / 365, 3); /* no leap days for a while after 1/1/69! */ if (code == 1460) { *month = DEC; *date = 31; } else { code %= 365; /* so 0 -> 1/Jan, any year */ for (*month = DEC; daysbefore[*month] + (IS_LEAPYEAR(*year) && *month > FEB) > code; (*month)--) ; /* run to right month */ *date = code - daysbefore[*month] + 1 - (IS_LEAPYEAR(*year) && *month > FEB); } } time_t shifttime(time_t timer, int diff) { /* Surprisingly, there is no ANSI C function to do this */ struct tm *lt = localtime(&timer); lt->tm_min += diff; timer = mktime(lt); return(timer); } choice parsedate(time_t starttime, char *s, timecode_t *date, logical from, logical unixtime) { struct tm *st; int y, m, d, h, n; char *p; #ifndef NOGMTIME if (unixtime) st = gmtime(&starttime); else #endif st = localtime(&starttime); if (ISDIGIT(*s) && ISDIGIT(*(s + 1))) { y = 10 * (*s - '0') + (*(s + 1) - '0'); s += 2; y += 1900; if (y < 1970) y += 100; } else if (*s == '+' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { y = st->tm_year + 1900 + 10 * (*(s + 1) - '0') + (*(s + 2) - '0'); s += 3; } else if (*s == '-' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { y = st->tm_year + 1900 - 10 * (*(s + 1) - '0') - (*(s + 2) - '0'); s += 3; } else return(ERR); if (ISDIGIT(*s) && ISDIGIT(*(s + 1))) { m = 10 * (*s - '0') + (*(s + 1) - '0') - 1; if (m > 11 || m < 0) return(ERR); s += 2; } else if (*s == '+' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { m = st->tm_mon + 10 * (*(s + 1) - '0') + (*(s + 2) - '0'); s += 3; } else if (*s == '-' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { m = st->tm_mon - 10 * (*(s + 1) - '0') - (*(s + 2) - '0'); s += 3; } else return(ERR); while (m < 0) { /* need to do this now because about to use monthlength */ m += 12; y--; } while (m > 11) { m -= 12; y++; } if (ISDIGIT(*s) && ISDIGIT(*(s + 1))) { d = (int)strtol(s, &p, 10); if (d > 31 || d <= 0) return(ERR); else if (d > (int)(monthlength[m]) + (m == FEB && IS_LEAPYEAR(y))) d = monthlength[m] + (m == FEB && IS_LEAPYEAR(y)); } /* relative dates must be >= 2 digits but can be more */ else if (*s == '+' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) d = st->tm_mday + (int)strtol(s + 1, &p, 10); else if (*s == '-' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) d = st->tm_mday - (int)strtol(s + 1, &p, 10); else return(ERR); if (*p == ':') { /* parse hour & minute */ s = p + 1; if (ISDIGIT(*s) && ISDIGIT(*(s + 1))) { h = 10 * (*s - '0') + (*(s + 1) - '0'); if (h > 23) return(ERR); s += 2; } else if (*s == '+' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { h = st->tm_hour + 10 * (*(s + 1) - '0') + (*(s + 2) - '0'); s += 3; } else if (*s == '-' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { h = st->tm_hour - 10 * (*(s + 1) - '0') - (*(s + 2) - '0'); s += 3; } else return(ERR); if (ISDIGIT(*s) && ISDIGIT(*(s + 1))) { n = 10 * (*s - '0') + (*(s + 1) - '0'); if (n > 59) return(ERR); s += 2; } else if (*s == '+' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { n = st->tm_min + 10 * (*(s + 1) - '0') + (*(s + 2) - '0'); s += 3; } else if (*s == '-' && ISDIGIT(*(s + 1)) && ISDIGIT(*(s + 2))) { n = st->tm_min - 10 * (*(s + 1) - '0') - (*(s + 2) - '0'); s += 3; } else return(ERR); if (*s != '\0') return(ERR); } /* end *p == ':' */ else if (*p == '\0' || *p == 'd' || *p == 'D' || *p == 'e' || *p == 'E') { /* d, e can come from FLOOR */ if (from) { h = 0; n = 0; } else { h = 23; n = 59; } } else return(ERR); while (n < 0) { n += 60; h--; } while (n > 59) { n -= 60; h++; } while (h < 0) { h += 24; d--; } while (h > 23) { h -= 24; d++; } while (d < 0) { m--; if (m < 0) { /* NB already adjusted m once above */ m += 12; y--; } d += monthlength[m] + (m == FEB && IS_LEAPYEAR(y)); } while (d > (int)(monthlength[m]) + (m == FEB && IS_LEAPYEAR(y))) { d -= monthlength[m] + (m == FEB && IS_LEAPYEAR(y)); m++; if (m > 11) { m -= 12; y++; } } *date = TIMECODE(DATE2CODE(y, m, d), h, n); #ifndef NOGMTIME if (unixtime) *date -= 1440; /* Unix time is one day different from analog time */ #endif return(OK); } choice wantdate(timecode_t *timecode, Dateman *dman, unsigned int hour, unsigned int minute, unsigned int date, unsigned int month, unsigned int year, int tz) { static unsigned int oldy = 0, oldm = 0, oldd = 0, oldh = 25; static timecode_t oldtime = 0; /* first check integrity of date */ if (month > 11 || hour > 23 || minute > 59 || date == 0 || date > monthlength[month] + (month == FEB && IS_LEAPYEAR(year)) || year < 1970 || year > 2069) return(ERR); if (hour != oldh || date != oldd || month != oldm || year != oldy) { oldtime = TIMECODE(DATE2CODE(year, month, date), hour, 0); oldh = hour; /* only calculate once an hour */ oldd = date; oldm = month; oldy = year; } *timecode = oldtime + minute + tz; if (*timecode < dman->from || *timecode > dman->to) return(FALSE); return(TRUE); } choice wantunixtime(timecode_t *timecode, Dateman *dman, unsigned long unixtime, int tz) { /* no need to check range because parseunixtime() catches it */ *timecode = UXTIME2CODE(unixtime) + tz; if (*timecode < dman->from || *timecode > dman->to) return(FALSE); return(TRUE); } Daysdata *newday(unsigned int granularity) { extern Memman *xmemman; Daysdata *dp; unsigned int i; dp = (Daysdata *)submalloc(xmemman, sizeof(Daysdata)); dp->reqs = (unsigned long *)submalloc(xmemman, granularity * sizeof(unsigned long)); dp->pages = (unsigned long *)submalloc(xmemman, granularity * sizeof(unsigned long)); dp->bytes = (double *)submalloc(xmemman, granularity * sizeof(double)); for (i = 0; i < granularity; i++) { dp->reqs[i] = 0; dp->pages[i] = 0; dp->bytes[i] = 0.0; } dp->prev = NULL; dp->next = NULL; return(dp); } void dmaninit(Dateman *dman, datecode_t datecode, unsigned int granularity) { dman->firstdate = datecode; dman->lastdate = datecode; dman->currdate = datecode; dman->firstdp = newday(granularity); dman->lastdp = dman->firstdp; dman->currdp = dman->firstdp; } void datehash(timecode_t timecode, Dateman *dman, unsigned long reqs, unsigned long pages, double bytes, unsigned int granularity) { int i; Daysdata *dp; datecode_t datecode = (datecode_t)(timecode/1440); if (dman->currdp == NULL) dmaninit(dman, datecode, granularity); if (datecode >= dman->lastdate) { for (i = datecode - dman->lastdate; i > 0; i--) { dp = newday(granularity); dman->lastdp->next = dp; dp->prev = dman->lastdp; dman->lastdp = dp; dman->lastdate = datecode; } dman->currdp = dman->lastdp; } else if (datecode >= dman->currdate) { for (i = datecode - dman->currdate; i > 0; i--) dman->currdp = dman->currdp->next; } else if (datecode <= dman->firstdate) { for (i = dman->firstdate - datecode; i > 0; i--) { dp = newday(granularity); dman->firstdp->prev = dp; dp->next = dman->firstdp; dman->firstdp = dp; dman->firstdate = datecode; } dman->currdp = dman->firstdp; } else { dman->currdp = dman->firstdp; for (i = datecode - dman->firstdate; i > 0; i--) { dman->currdp = dman->currdp->next; } } dman->currdate = datecode; i = ((timecode % 1440) * granularity) / 1440; dman->currdp->reqs[i] += reqs; dman->currdp->pages[i] += pages; dman->currdp->bytes[i] += bytes; } analog-ce-6.0.17/src/globals.c000066400000000000000000003126221406366436600160350ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** globals.c; declaration and initialisation of globals, and defaults ***/ /* See also init.c and init2.c */ #include "anlghea3.h" /* Program time */ time_t origstarttime, starttime; timecode_t starttimec, starttimeuxc; char *starttimestr; /* NB starttime and starttimec are displaced by TIMEOFFSET in correct(), but starttimestr (used in warnings) and starttimeuxc (used in DNS) are not. */ /* What to read from input lines */ unsigned int year, month, date, hour, minute, code; unsigned long unixtime, proctime; double bytes; char am; /* Input processing */ char *block_start, *block_end, *block_bell, *record_start, *pos; logical termchar[256]; /* Memory allocation */ Memman *xmemman, *amemman, mm[ITEM_NUMBER], mmq, mms; char *workspace; /* scratch space for aliasing: see note at top of alias.c */ /* NB Be careful not to nest two usages of workspace. */ /* Are we running from form? */ logical cgi = FALSE; /* DNS lookups: externs so that no worries about whether to pass them around */ #ifndef NODNS choice dnslevel; char *dnsfile, *dnslockfile; FILE *dnsfilep = NULL, *dnslock = NULL; Hashtable *dnstable; unsigned int dnsgoodhrs, dnsbadhrs; #ifndef NOALARM unsigned int dnstimeout; JMP_BUF jumpbuf; #endif #endif /* Signal entries for unwanted hash entries (NULL is already used for unset) */ Hashentry *unwanted_entry, *blank_entry; Hashindex *dummy_item; /* Translating reports to other arrays */ choice *rep2type, *rep2reqs, *rep2reqs7, *rep2date, *rep2firstd; unsigned int *rep2gran, *rep2lng, *rep2datefmt, *rep2colhead, *rep2busystr; unsigned int *col2colhead, *method2sing, *method2pl, *method2date; unsigned int *method2pc, *method2relpc, *method2sort; logical *repistree; char *byteprefix = " kMGTPEZY"; /* Room for growth :) Note initial space */ /* NB Output versions of the byte prefixes are in the language files */ /* Domain levels; making this global is messy but easiest */ Strpairlist **domlevels; /* Log formats */ Inputformatlist *logformat = NULL, *deflogformat; logical newloglist = TRUE, iscache = FALSE; int tz = 0, stz = 0; choice wantitem[INPUT_NUMBER]; #ifndef NOPIPES Strpairlist *uncompresshead = NULL; #endif /* Debugging, warnings, pretty printing */ FILE *errfile; char *commandname = NULL, *commandpath = NULL; char *debug_args = NULL, *warn_args = NULL; logical anywarns = FALSE, errmess = FALSE, vblesonly = FALSE; unsigned int errwidth = ERRLINELENGTH; unsigned long progressfreq = 0; unsigned int ppcol = 0; /* What's recorded by cache files. Array size V5_DATA_NUMBER in anlghea3.h. */ /* don't record "last 7" stuff because it won't be correct at read time */ choice cache_records[V5_DATA_NUMBER] = {REQUESTS, PAGES, REDIR, FAIL, SUCCDATE, REDIRDATE, FAILDATE, SUCCFIRSTD, REDIRFIRSTD, FAILFIRSTD}; /* Date names for unlocalised text. See also ENGMONTHLEN etc. in anlghea3.h. */ char *engmonths[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; char *englongdays[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; char *engshortdays[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; /* Names for things, always in order of enums in anlghea3.h */ char *item_type[] = {"virtual hosts", "files", "users", "referrers", "browsers", "hosts"}; /* In methodname, we don't need them all, because some only occur internally */ char *methodname[] = {"requests","7-day requests", "pages", "7-day pages", "", "", "", "", "last date", "", "", "first date", "", "", "bytes", "7-day bytes", "alphabetical", "random"}; /* Filenames for each language, in order of enum in anlghea3.h */ char *country[] = {"am", "baq", /*"ba",*/ "bg", "bgm", "cat", "cn", "tw", /*"hr",*/ "cz", "cz1", "dk", "nl", "uk", "us", "fi", "fr", "de", /*"gr",*/ "hu", /*"is",*/ "id", "it", "jpe", "jpj", "jps", "jpu", "kr", "lv", /*"lt",*/ "no", "no2", "pl", "pt", "br", /*"ro",*/ "ru", "ru1", "yu", "sk", "sk1", "si", "si1", "es", "se", "se2", "tr", "ua"}; /* Report code letters in order of enum in anlghea3.h */ /* Any new ones must also be added to reportorder in anlghea2.h */ char repcodes[] = "1QmWDH45dhw67xrEItiSlLofskKBvRMujJZNnYybpzcP"; /* Column code letters in order of enum in anlghea3.h */ char colcodes[] = "xRSPQBCrspqbcdDeEN"; /* Names for the anchors within the report, in the same order */ /* At most eight letters, because we use them as filenames too. (This limit is assumed in piechart()). */ char *anchorname[] = {"year", "quartly", "month", "week", "dayrep", "hourrep", "quartrep", "fiverep", "daysum", "hoursum", "weekhour", "quartsum", "fivesum", "gensum", "req", "redir", "fail", "type", "dir", "host", "redihost", "failhost", "dom", "ref", "refsite", "redirref", "failref", "browrep", "vhost", "redirvh", "failvh", "user", "rediuser", "failuser", "org", "searchq", "searchw", "isearchq", "isearchw", "browsum", "os", "size", "code", "proctime"}; /* These report names are in English, so not the same as in langfile */ /* Again in order of enum in anlghea3.h */ char *repname[] = {"Yearly Report", "Quarterly Report", "Monthly Report", "Weekly Report", "Daily Report", "Hourly Report", "Quarter-Hour Report", "Five-Minute Report", "Daily Summary", "Hourly Summary", "Hour of the Week Summary", "Quarter-Hour Summary", "Five-Minute Summary", "General Summary", "Request Report", "Redirection Report", "Failure Report", "File Type Report", "Directory Report", "Host Report", "Host Redirection Report", "Host Failure Report", "Domain Report", "Referrer Report", "Referring Site Report", "Redirected Referrer Report", "Failed Referrer Report", "Browser Report", "Virtual Host Report", "Virtual Host Redirection Report", "Virtual Host Failure Report", "User Report", "User Redirection Report", "User Failure Report", "Organisation Report", "Search Query Report", "Search Word Report", "Internal Search Query Report", "Internal Search Word Report", "Browser Summary", "Operating System Report", "File Size Report", "Status Code Report", "Processing Time Report"}; #ifdef EBCDIC /* EBCDIC-to-ASCII tables: These tables are bijective - there are no ambigous or duplicate characters. */ const unsigned char os_toascii[256] = { #ifdef _OSD_POSIX /* Fujitsu-Siemens' EDF04 character set on BS2000: */ /*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/ /*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/ /*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/ /*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/ /*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/ /*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/ /*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/ /*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/ /*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/ /*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/ /*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/ /*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/ /*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/ /*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/ /*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/ /*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/ #elif defined(OS390) || defined(AS400) || defined(TPF) /* IBM's OS/390 and TPF systems: */ /* Bijective EBCDIC (character set IBM-1047) to US-ASCII table: */ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */ 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */ 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */ 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */ 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */ 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */ 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */ 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */ 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */ 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */ 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */ 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */ 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */ 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */ 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */ 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */ 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */ 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */ 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */ 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */ 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */ #else #error Unimplemented EBCDIC platform. Please send information about your system to ! #endif }; /* Bijective ascii-to-ebcdic table: */ const unsigned char os_toebcdic[256] = { #ifdef _OSD_POSIX /* Fujitsu-Siemens' EDF04 character set on BS2000: */ /*00*/ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/ /*10*/ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/ /*20*/ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */ /*30*/ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /*0123456789:;<=>?*/ /*40*/ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /*@ABCDEFGHIJKLMNO*/ /*50*/ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d, /*PQRSTUVWXYZ[\]^_*/ /*60*/ 0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /*`abcdefghijklmno*/ /*70*/ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07, /*pqrstuvwxyz{|}~.*/ /*80*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /*................*/ /*90*/ 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f, /*................*/ /*a0*/ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5, 0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1, /*................*/ /*b0*/ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /*................*/ /*c0*/ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /*................*/ /*d0*/ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, 0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59, /*................*/ /*e0*/ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /*................*/ /*f0*/ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, 0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /*................*/ #elif defined(OS390) || defined(AS400) || defined(TPF) /* IBM's OS/390 and TPF systems: */ /* The US-ASCII to EBCDIC (character set IBM-1047) table: This table is bijective (no ambiguous or duplicate characters) */ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */ 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */ 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */ 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */ 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */ 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */ #else #error Unimplemented EBCDIC platform. Please send information about your system to ! #endif }; #endif logical convertchar[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */ 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20 - 2F */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, /* 30 - 3F */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 50 - 5F */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60 - 6F */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, /* 70 - 7F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* F0 - FF */ /* %nm escapes to convert in do_alias(r|f). We convert all ASCII printable characters (0x20 - 0x7E) with the exception of % (0x25) [to distinguish %25ab from %ab]; and ? (0x3f), & (0x26), ; (0x3b) and = (0x3d) [to split query strings up correctly]. Could argue for + (0x2b) in query strings, but messes search reports up if we do this. */ logical unprintable[256]; /* Unprintable chars for the reports. This is charset dependent. But NB not the same as isctrl() or !isprint() even for ASCII range. */ /* The outputters */ Outputter cro_outputter = {cro_pagewidth, cro_cgihead, cro_stylehead, cro_pagetitle, cro_timings, cro_closehead, cro_pagebotstart, cro_credit, cro_runtime, cro_pagefoot, cro_stylefoot, cro_reporttitle, cro_reportfooter, cro_reportdesc, cro_reportspan, cro_gensumhead, cro_gensumfoot, cro_gensumline, cro_gensumlineb, cro_lastseven, cro_prestart, cro_preend, cro_hrule, cro_endash, cro_putch, cro_strlength, cro_allowmonth, cro_calcwidths, cro_declareunit, cro_colheadstart, cro_colheadcol, cro_colheadend, cro_colheadustart, cro_colheadunderline, cro_colheaduend, cro_rowstart, cro_levelcell, cro_namecell, cro_ulcell, cro_strcell, cro_bytescell, cro_pccell, cro_indexcell, cro_rowend, cro_blankline, cro_barchart, cro_busyprintf, cro_notlistedstr, cro_whatincluded, NULL, NULL, NULL, NULL, cro_includefile, cro_riscosfiletype}; Outputter html_outputter = {html_pagewidth, html_cgihead, html_stylehead, html_pagetitle, html_timings, html_closehead, html_pagebotstart, html_credit, html_runtime, html_pagefoot, html_stylefoot, html_reporttitle, html_reportfooter, html_reportdesc, html_reportspan, html_gensumhead, html_gensumfoot, html_gensumline, html_gensumlineb, html_lastseven, html_prestart, html_preend, html_hrule, html_endash, html_putch, html_strlength, html_allowmonth, html_calcwidths, html_declareunit, html_colheadstart, html_colheadcol, html_colheadend, html_colheadustart, html_colheadunderline, html_colheaduend, html_rowstart, html_levelcell, html_namecell, html_ulcell, html_strcell, html_bytescell, html_pccell, html_indexcell, html_rowend, html_blankline, html_barchart, html_busyprintf, html_notlistedstr, html_whatincluded, html_whatinchead, html_whatincfoot, html_whatincprintstr, html_printdouble, html_includefile, html_riscosfiletype}; Outputter latex_outputter = {latex_pagewidth, latex_cgihead, latex_stylehead, latex_pagetitle, latex_timings, latex_closehead, latex_pagebotstart, latex_credit, latex_runtime, latex_pagefoot, latex_stylefoot, latex_reporttitle, latex_reportfooter, latex_reportdesc, latex_reportspan, latex_gensumhead, latex_gensumfoot, latex_gensumline, latex_gensumlineb, latex_lastseven, latex_prestart, latex_preend, latex_hrule, latex_endash, latex_putch, latex_strlength, latex_allowmonth, latex_calcwidths, latex_declareunit, latex_colheadstart, latex_colheadcol, latex_colheadend, latex_colheadustart, latex_colheadunderline, latex_colheaduend, latex_rowstart, latex_levelcell, latex_namecell, latex_ulcell, latex_strcell, latex_bytescell, latex_pccell, latex_indexcell, latex_rowend, latex_blankline, latex_barchart, latex_busyprintf, latex_notlistedstr, latex_whatincluded, latex_whatinchead, latex_whatincfoot, latex_whatincprintstr, latex_printdouble, latex_includefile, latex_riscosfiletype}; Outputter plain_outputter = {plain_pagewidth, plain_cgihead, plain_stylehead, plain_pagetitle, plain_timings, plain_closehead, plain_pagebotstart, plain_credit, plain_runtime, plain_pagefoot, plain_stylefoot, plain_reporttitle, plain_reportfooter, plain_reportdesc, plain_reportspan, plain_gensumhead, plain_gensumfoot, plain_gensumline, plain_gensumlineb, plain_lastseven, plain_prestart, plain_preend, plain_hrule, plain_endash, plain_putch, plain_strlength, plain_allowmonth, plain_calcwidths, plain_declareunit, plain_colheadstart, plain_colheadcol, plain_colheadend, plain_colheadustart, plain_colheadunderline, plain_colheaduend, plain_rowstart, plain_levelcell, plain_namecell, plain_ulcell, plain_strcell, plain_bytescell, plain_pccell, plain_indexcell, plain_rowend, plain_blankline, plain_barchart, plain_busyprintf, plain_notlistedstr, plain_whatincluded, plain_whatinchead, plain_whatincfoot, plain_whatincprintstr, plain_printdouble, plain_includefile, plain_riscosfiletype}; Outputter xhtml_outputter = {xhtml_pagewidth, xhtml_cgihead, xhtml_stylehead, xhtml_pagetitle, xhtml_timings, xhtml_closehead, xhtml_pagebotstart, xhtml_credit, xhtml_runtime, xhtml_pagefoot, xhtml_stylefoot, xhtml_reporttitle, xhtml_reportfooter, xhtml_reportdesc, xhtml_reportspan, xhtml_gensumhead, xhtml_gensumfoot, xhtml_gensumline, xhtml_gensumlineb, xhtml_lastseven, xhtml_prestart, xhtml_preend, xhtml_hrule, xhtml_endash, xhtml_putch, xhtml_strlength, xhtml_allowmonth, xhtml_calcwidths, xhtml_declareunit, xhtml_colheadstart, xhtml_colheadcol, xhtml_colheadend, xhtml_colheadustart, xhtml_colheadunderline, xhtml_colheaduend, xhtml_rowstart, xhtml_levelcell, xhtml_namecell, xhtml_ulcell, xhtml_strcell, xhtml_bytescell, xhtml_pccell, xhtml_indexcell, xhtml_rowend, xhtml_blankline, xhtml_barchart, xhtml_busyprintf, xhtml_notlistedstr, xhtml_whatincluded, xhtml_whatinchead, xhtml_whatincfoot, xhtml_whatincprintstr, xhtml_printdouble, xhtml_includefile, xhtml_riscosfiletype}; Outputter xml_outputter = {xml_pagewidth, xml_cgihead, xml_stylehead, xml_pagetitle, xml_timings, xml_closehead, xml_pagebotstart, xml_credit, xml_runtime, xml_pagefoot, xml_stylefoot, xml_reporttitle, xml_reportfooter, xml_reportdesc, xml_reportspan, xml_gensumhead, xml_gensumfoot, xml_gensumline, xml_gensumlineb, xml_lastseven, xml_prestart, xml_preend, xml_hrule, xml_endash, xml_putch, xml_strlength, xml_allowmonth, xml_calcwidths, xml_declareunit, xml_colheadstart, xml_colheadcol, xml_colheadend, xml_colheadustart, xml_colheadunderline, xml_colheaduend, xml_rowstart, xml_levelcell, xml_namecell, xml_ulcell, xml_strcell, xml_bytescell, xml_pccell, xml_indexcell, xml_rowend, xml_blankline, xml_barchart, xml_busyprintf, xml_notlistedstr, xml_whatincluded, xml_whatinchead, xml_whatincfoot, xml_whatincprintstr, xml_printdouble, xml_includefile, xml_riscosfiletype}; Inputfns inpfns[] = { /* first the ITEM fns in any order */ /* See also ITEMFNS_NUMBER in anlghea3.c */ /* Also, some letters, namely those with &parsestring and other codes that take following separators (see list in strtoinfmt() in init.c), need to be included in the list in report_logfmt() in settings.c. */ {'v', ITEM_VHOST, &parsestring, &mm[ITEM_VHOST]}, {'r', ITEM_FILE, &parsestring, &mm[ITEM_FILE]}, {'u', ITEM_USER, &parsestring, &mm[ITEM_USER]}, {'f', ITEM_REFERRER, &parsestring, &mm[ITEM_REFERRER]}, {'B', ITEM_BROWSER, &parsestring, &mm[ITEM_BROWSER]}, {'S', ITEM_HOST, &parsestring, &mm[ITEM_HOST]}, {'F', ITEM_REFERRER, &parseref, &mm[ITEM_REFERRER]}, {'A', ITEM_BROWSER, &parsemsbrow, &mm[ITEM_BROWSER]}, {'q', INP_QUERY, &parsestring, &mmq}, {'s', INP_IP, &parsestring, &mms}, {'n', INP_MIN, &parseuint2strict, (void *)&minute}, {'h', INP_HOUR, &parseuint2, (void *)&hour}, {'a', INP_AM, &parseam, (void *)&am}, {'d', INP_DATE, &parseuint2, (void *)&date}, {'m', INP_MONTH, &parsenmonth, (void *)&month}, {'M', INP_MONTH, &parsemonth, (void *)&month}, {'y', INP_YEAR, &parseyear2, (void *)&year}, {'Y', INP_YEAR, &parseuint4strict, (void *)&year}, {'Z', INP_YEAR, &parseyear2or4, (void *)&year}, {'U', INP_UNIXTIME, &parseunixtime, (void *)&unixtime}, {'T', INP_PROCTIME, &parseunixtime, (void *)&proctime}, {'t', INP_PROCTIME, &parseproctime, (void *)&proctime}, {'D', INP_PROCTIME, &parseproctimeu, (void *)&proctime}, {'c', INP_CODE, &parsescode, (void *)&code}, {'C', INP_CODE, &parsecode, (void *)&code}, {'b', INP_BYTES, &parseudint, (void *)&bytes}, {'w', UNSET, &parsespace, NULL}, {'W', UNSET, &parseoptspace, NULL}, {'j', UNSET, &parsejunk, NULL}, {'x', UNSET, &parselogfmt, NULL}, {'\0', UNSET, &checkchar, NULL} /* this one must be last as marker */ }; Inputfns pnlinpfn = {'\n', UNSET, &parsenewline, NULL}; Inputfns ccinpfn = {'\0', UNSET, &checkchar, NULL}; Inputfns pjinpfn = {'j', UNSET, &parsejunk, NULL}; Options opts; /* So that in future we can have several sets of options, and yet still declare cf[] neatly as below, we shunt them in and out of opts */ Configfns cf[] = { {"TIMECOLS", &configallcols, (void *)(opts.outopts.cols)}, {"YEARCOLS", &configcols, (void *)(opts.outopts.cols[REP_YEAR])}, {"QUARTERLYCOLS", &configcols, (void *)(opts.outopts.cols[REP_QUARTERLY])}, {"MONTHCOLS", &configcols, (void *)(opts.outopts.cols[REP_MONTH])}, {"WEEKCOLS", &configcols, (void *)(opts.outopts.cols[REP_WEEK])}, {"DAYREPCOLS", &configcols, (void *)(opts.outopts.cols[REP_DAYREP])}, {"FULLDAYCOLS", &configcols, (void *)(opts.outopts.cols[REP_DAYREP])}, {"DAYSUMCOLS", &configcols, (void *)(opts.outopts.cols[REP_DAYSUM])}, {"DAYCOLS", &configcols, (void *)(opts.outopts.cols[REP_DAYSUM])}, {"HOURREPCOLS", &configcols, (void *)(opts.outopts.cols[REP_HOURREP])}, {"FULLHOURCOLS", &configcols, (void *)(opts.outopts.cols[REP_HOURREP])}, {"HOURSUMCOLS", &configcols, (void *)(opts.outopts.cols[REP_HOURSUM])}, {"HOURCOLS", &configcols, (void *)(opts.outopts.cols[REP_HOURSUM])}, {"WEEKHOURCOLS", &configcols, (void *)(opts.outopts.cols[REP_WEEKHOUR])}, {"QUARTERREPCOLS", &configcols, (void *)(opts.outopts.cols[REP_QUARTERREP])}, {"QUARTERCOLS", &configcols, (void *)(opts.outopts.cols[REP_QUARTERREP])}, {"QUARTERSUMCOLS", &configcols, (void *)(opts.outopts.cols[REP_QUARTERSUM])}, {"FIVEREPCOLS", &configcols, (void *)(opts.outopts.cols[REP_FIVEREP])}, {"FIVECOLS", &configcols, (void *)(opts.outopts.cols[REP_FIVEREP])}, {"FIVESUMCOLS", &configcols, (void *)(opts.outopts.cols[REP_FIVESUM])}, {"REQCOLS", &configcols, (void *)(opts.outopts.cols[REP_REQ])}, {"REDIRCOLS", &configcols, (void *)(opts.outopts.cols[REP_REDIR])}, {"FAILCOLS", &configcols, (void *)(opts.outopts.cols[REP_FAIL])}, {"TYPECOLS", &configcols, (void *)(opts.outopts.cols[REP_TYPE])}, {"SIZECOLS", &configcols, (void *)(opts.outopts.cols[REP_SIZE])}, {"PROCTIMECOLS", &configcols, (void *)(opts.outopts.cols[REP_PROCTIME])}, {"DIRCOLS", &configcols, (void *)(opts.outopts.cols[REP_DIR])}, {"HOSTCOLS", &configcols, (void *)(opts.outopts.cols[REP_HOST])}, {"REDIRHOSTCOLS", &configcols, (void *)(opts.outopts.cols[REP_REDIRHOST])}, {"FAILHOSTCOLS", &configcols, (void *)(opts.outopts.cols[REP_FAILHOST])}, {"DOMCOLS", &configcols, (void *)(opts.outopts.cols[REP_DOM])}, {"ORGCOLS", &configcols, (void *)(opts.outopts.cols[REP_ORG])}, {"REFCOLS", &configcols, (void *)(opts.outopts.cols[REP_REF])}, {"REFSITECOLS", &configcols, (void *)(opts.outopts.cols[REP_REFSITE])}, {"REDIRREFCOLS", &configcols, (void *)(opts.outopts.cols[REP_REDIRREF])}, {"FAILREFCOLS", &configcols, (void *)(opts.outopts.cols[REP_FAILREF])}, {"BROWREPCOLS", &configcols, (void *)(opts.outopts.cols[REP_BROWREP])}, {"FULLBROWCOLS", &configcols, (void *)(opts.outopts.cols[REP_BROWREP])}, {"BROWSUMCOLS", &configcols, (void *)(opts.outopts.cols[REP_BROWSUM])}, {"BROWCOLS", &configcols, (void *)(opts.outopts.cols[REP_BROWSUM])}, {"OSCOLS", &configcols, (void *)(opts.outopts.cols[REP_OS])}, {"VHOSTCOLS", &configcols, (void *)(opts.outopts.cols[REP_VHOST])}, {"REDIRVHOSTCOLS", &configcols, (void *)(opts.outopts.cols[REP_REDIRVHOST])}, {"FAILVHOSTCOLS", &configcols, (void *)(opts.outopts.cols[REP_FAILVHOST])}, {"USERCOLS", &configcols, (void *)(opts.outopts.cols[REP_USER])}, {"REDIRUSERCOLS", &configcols, (void *)(opts.outopts.cols[REP_REDIRUSER])}, {"FAILUSERCOLS", &configcols, (void *)(opts.outopts.cols[REP_FAILUSER])}, {"SEARCHQUERYCOLS", &configcols, (void *)(opts.outopts.cols[REP_SEARCHREP])}, {"SEARCHWORDCOLS", &configcols, (void *)(opts.outopts.cols[REP_SEARCHSUM])}, {"INTSEARCHQUERYCOLS", &configcols, (void *)(opts.outopts.cols[REP_INTSEARCHREP])}, {"INTSEARCHWORDCOLS", &configcols, (void *)(opts.outopts.cols[REP_INTSEARCHSUM])}, {"STATUSCOLS", &configcols, (void *)(opts.outopts.cols[REP_CODE])}, {"YEARGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_YEAR])}, {"QUARTERLYGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_QUARTERLY])}, {"MONTHGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_MONTH])}, {"WEEKGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_WEEK])}, {"DAYREPGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_DAYREP])}, {"FULLDAYGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_DAYREP])}, {"DAYSUMGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_DAYSUM])}, {"DAYGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_DAYSUM])}, {"HOURREPGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_HOURREP])}, {"FULLHOURGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_HOURREP])}, {"HOURSUMGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_HOURSUM])}, {"HOURGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_HOURSUM])}, {"WEEKHOURGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_WEEKHOUR])}, {"QUARTERREPGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_QUARTERREP])}, {"QUARTERGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_QUARTERREP])}, {"QUARTERSUMGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_QUARTERSUM])}, {"FIVEREPGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_FIVEREP])}, {"FIVEGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_FIVEREP])}, {"FIVESUMGRAPH", &configgraph, (void *)&(opts.outopts.graph[REP_FIVESUM])}, {"ALLGRAPH", &configallgraph, (void *)(opts.outopts.graph)}, {"ALLGRAPHS", &configallgraph, (void *)(opts.outopts.graph)}, #ifndef NOGRAPHICS {"REQCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REQ)])}, {"REDIRCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REDIR)])}, {"FAILCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_FAIL)])}, {"TYPECHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_TYPE)])}, {"SIZECHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_SIZE)])}, {"PROCTIMECHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_PROCTIME)])}, {"DIRCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_DIR)])}, {"HOSTCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_HOST)])}, {"REDIRHOSTCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REDIRHOST)])}, {"FAILHOSTCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_FAILHOST)])}, {"DOMCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_DOM)])}, {"ORGCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_ORG)])}, {"REFCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REF)])}, {"REFSITECHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REFSITE)])}, {"REDIRREFCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REDIRREF)])}, {"FAILREFCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_FAILREF)])}, {"BROWREPCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_BROWREP)])}, {"BROWSUMCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_BROWSUM)])}, {"OSCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_OS)])}, {"VHOSTCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_VHOST)])}, {"REDIRVHOSTCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REDIRVHOST)])}, {"FAILVHOSTCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_FAILVHOST)])}, {"USERCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_USER)])}, {"REDIRUSERCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_REDIRUSER)])}, {"FAILUSERCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_FAILUSER)])}, {"SEARCHQUERYCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_SEARCHREP)])}, {"SEARCHWORDCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_SEARCHSUM)])}, {"INTSEARCHQUERYCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_INTSEARCHREP)])}, {"INTSEARCHWORDCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_INTSEARCHSUM)])}, {"STATUSCHART", &configchoice, (void *)&(opts.outopts.chartby[G(REP_CODE)])}, {"ALLCHART", &configallchart, (void *)(opts.outopts.chartby)}, {"ALLCHARTS", &configallchart, (void *)(opts.outopts.chartby)}, {"REQCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_REQ)])}, {"REDIRCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_REDIR)])}, {"FAILCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_FAIL)])}, {"TYPECHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_TYPE)])}, {"DIRCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_DIR)])}, {"DOMCHARTEXPAND", &configstrlist, /* NB special case in configstrlist */ (void *)&(opts.outopts.expandhead[G(REP_DOM)])}, {"ORGCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_ORG)])}, {"REFCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_REF)])}, {"REFSITECHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_REFSITE)])}, {"REDIRREFCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_REDIRREF)])}, {"FAILREFCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_FAILREF)])}, {"BROWSUMCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_BROWSUM)])}, {"BROWCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_BROWSUM)])}, {"OSCHARTEXPAND", &configstrlist, (void *)&(opts.outopts.expandhead[G(REP_OS)])}, {"CHARTDIR", &configstr, (void *)&(opts.outopts.chartdir)}, {"LOCALCHARTDIR", &configstr, (void *)&(opts.outopts.localchartdir)}, #ifdef HAVE_GD {"JPEGCHARTS", &configchoice, (void *)&(opts.outopts.jpegcharts)}, #endif #endif /* NOGRAPHICS */ {"PNGIMAGES", &configchoice, (void *)&(opts.outopts.pngimages)}, {"BARSTYLE", &configbarstyle, (void *)&(opts.outopts.barstyle)}, {"COMPSEP", &configstr, (void *)&(opts.outopts.compsep)}, {"PRESEP", &configstr, (void *)&(opts.outopts.compsep)}, {"HOSTNAME", &configstr, (void *)&(opts.outopts.hostname)}, {"XMLDTD", &configstr, (void *)&(opts.outopts.xmldtd)}, {"HOSTURL", &configstr, (void *)&(opts.outopts.hosturl)}, {"LOGO", &configstr, (void *)&(opts.outopts.logo)}, {"LOGOURL", &configstr, (void *)&(opts.outopts.logourl)}, {"STYLESHEET", &configstr, (void *)&(opts.outopts.stylesheet)}, {"CSSPREFIX", &configstr, (void *)&(opts.outopts.cssprefix)}, {"BASEURL", &configstr, (void *)&(opts.outopts.baseurl)}, {"ANONYMIZERURL", &configstr, (void *)&(opts.outopts.anonymizerurl)}, {"LOGFORMAT", &configlogfmt, (void *)&logformat}, {"DEFAULTLOGFORMAT", &configlogfmt, (void *)&deflogformat}, {"APACHELOGFORMAT", &configapachelogfmt, (void *)&logformat}, {"APACHEDEFAULTLOGFORMAT", &configapachelogfmt, (void *)&deflogformat}, {"TIMEOFFSET", &configoffset, (void *)&stz}, {"LOGTIMEOFFSET", &configoffset, (void *)&tz}, {"LOGFILE", &configlogfile, (void *)(opts.miscopts.logfile)}, {"CACHEFILE", &configcachefile, (void *)(opts.miscopts.logfile)}, {"IMAGEDIR", &configstr, (void *)&(opts.outopts.imagedir)}, {"HEADERFILE", &configstr, (void *)&(opts.outopts.headerfile)}, {"FOOTERFILE", &configstr, (void *)&(opts.outopts.footerfile)}, {"LANGUAGE", &configlang, (void *)&(opts.outopts.lang)}, {"LANGFILE", &configstr, (void *)&(opts.outopts.lang.file)}, {"OUTFILE", &configoutfile, (void *)&(opts.outopts.outfile)}, {"CACHEOUTFILE", &configstr, (void *)&(opts.outopts.cacheoutfile)}, {"ERRFILE", &configerrfile, (void *)&errfile}, {"DOMAINSFILE", &configstr, (void *)&(opts.outopts.domainsfile)}, {"DESCFILE", &configstr, (void *)&(opts.outopts.descfile)}, {"DIRSUFFIX", &configstr, (void *)&(opts.miscopts.dirsuffix)}, {"SEPCHAR", &configchar, (void *)&(opts.outopts.sepchar)}, {"REPSEPCHAR", &configchar, (void *)&(opts.outopts.repsepchar)}, {"DECPOINT", &configchar, (void *)&(opts.outopts.decpt)}, {"DECPT", &configchar, (void *)&(opts.outopts.decpt)}, {"MARKCHAR", &configchar, (void *)&(opts.outopts.markchar)}, {"REQFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REQ)])}, {"REQARGSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_REQ)])}, {"REDIRFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REDIR)])}, {"REDIRARGSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_REDIR)])}, {"FAILFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_FAIL)])}, {"FAILARGSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_FAIL)])}, {"TYPEFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_TYPE)])}, {"SUBTYPEFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_TYPE)])}, {"DIRFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_DIR)])}, {"SUBDIRFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_DIR)])}, {"HOSTFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_HOST)])}, {"REDIRHOSTFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REDIRHOST)])}, {"FAILHOSTFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_FAILHOST)])}, {"DOMFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_DOM)])}, {"SUBDOMFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_DOM)])}, {"ORGFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_ORG)])}, {"SUBORGFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_ORG)])}, {"REFFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REF)])}, {"REFARGSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_REF)])}, {"REFSITEFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REFSITE)])}, {"REFDIRFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_REFSITE)])}, {"SUBREFSITEFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_REFSITE)])}, {"REDIRREFFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REDIRREF)])}, {"REDIRREFARGSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_REDIRREF)])}, {"FAILREFFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_FAILREF)])}, {"FAILREFARGSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_FAILREF)])}, {"BROWREPFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_BROWREP)])}, {"FULLBROWFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_BROWREP)])}, {"BROWSUMFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_BROWSUM)])}, {"BROWFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_BROWSUM)])}, {"SUBBROWFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_BROWSUM)])}, {"OSFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_OS)])}, {"SUBOSFLOOR", &configfloor, (void *)&(opts.outopts.subfloor[G(REP_OS)])}, {"VHOSTFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_VHOST)])}, {"REDIRVHOSTFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REDIRVHOST)])}, {"FAILVHOSTFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_FAILVHOST)])}, {"USERFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_USER)])}, {"REDIRUSERFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_REDIRUSER)])}, {"FAILUSERFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_FAILUSER)])}, {"SEARCHQUERYFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_SEARCHREP)])}, {"SEARCHWORDFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_SEARCHSUM)])}, {"INTSEARCHQUERYFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_INTSEARCHREP)])}, {"INTSEARCHWORDFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_INTSEARCHSUM)])}, {"STATUSFLOOR", &configfloor, (void *)&(opts.outopts.floor[G(REP_CODE)])}, {"FILEALIAS", &configalias, (void *)&(opts.aliashead[ITEM_FILE])}, {"HOSTALIAS", &configalias, (void *)&(opts.aliashead[ITEM_HOST])}, {"REFALIAS", &configalias, (void *)&(opts.aliashead[ITEM_REFERRER])}, {"BROWALIAS", &configalias, (void *)&(opts.aliashead[ITEM_BROWSER])}, {"USERALIAS", &configalias, (void *)&(opts.aliashead[ITEM_USER])}, {"VHOSTALIAS", &configalias, (void *)&(opts.aliashead[ITEM_VHOST])}, {"SEARCHENGINE", &configstrpair2list, (void *)&(opts.searchengines)}, {"INTSEARCHENGINE", &configstrpair2list, (void *)&(opts.intsearchengines)}, {"REQALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REQ)])}, {"REQOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REQ)])}, {"REDIRALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIR)])}, {"REDIROUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIR)])}, {"FAILALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAIL)])}, {"FAILOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAIL)])}, {"TYPEALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_TYPE)])}, {"TYPEOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_TYPE)])}, {"DIRALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_DIR)])}, {"DIROUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_DIR)])}, {"HOSTREPALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_HOST)])}, {"HOSTOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_HOST)])}, {"REDIRHOSTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRHOST)])}, {"REDIRHOSTOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRHOST)])}, {"FAILHOSTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILHOST)])}, {"FAILHOSTOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILHOST)])}, {"DOMALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_DOM)])}, {"DOMOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_DOM)])}, {"ORGALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_ORG)])}, {"ORGOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_ORG)])}, {"REFREPALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REF)])}, {"REFOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REF)])}, {"REFSITEALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REFSITE)])}, {"REFSITEOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REFSITE)])}, {"REDIRREFALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRREF)])}, {"REDIRREFOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRREF)])}, {"FAILREFALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILREF)])}, {"FAILREFOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILREF)])}, {"BROWREPALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_BROWREP)])}, {"BROWREPOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_BROWREP)])}, {"FULLBROWOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_BROWREP)])}, {"BROWSUMALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_BROWSUM)])}, {"BROWSUMOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_BROWSUM)])}, {"BROWOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_BROWSUM)])}, {"OSALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_OS)])}, {"OSOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_OS)])}, {"VHOSTREPALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_VHOST)])}, {"VHOSTOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_VHOST)])}, {"REDIRVHOSTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRVHOST)])}, {"REDIRVHOSTOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRVHOST)])}, {"FAILVHOSTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILVHOST)])}, {"FAILVHOSTOUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILVHOST)])}, {"USERREPALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_USER)])}, {"USEROUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_USER)])}, {"REDIRUSERALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRUSER)])}, {"REDIRUSEROUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_REDIRUSER)])}, {"FAILUSERALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILUSER)])}, {"FAILUSEROUTPUTALIAS", &configalias, (void *)&(opts.outopts.aliashead[G(REP_FAILUSER)])}, #ifndef NOPIPES {"UNCOMPRESS", &configstrpairlist, (void *)&uncompresshead}, #endif {"REQARGS", &configtree, (void *)&(opts.outopts.tree[G(REP_REQ)])}, {"REDIRARGS", &configtree, (void *)&(opts.outopts.tree[G(REP_REDIR)])}, {"FAILARGS", &configtree, (void *)&(opts.outopts.tree[G(REP_FAIL)])}, {"REFARGS", &configtree, (void *)&(opts.outopts.tree[G(REP_REF)])}, {"REDIRREFARGS", &configtree, (void *)&(opts.outopts.tree[G(REP_REDIRREF)])}, {"FAILREFARGS", &configtree, (void *)&(opts.outopts.tree[G(REP_FAILREF)])}, {"SUBDOMAIN", &configtree, (void *)&(opts.outopts.tree[G(REP_DOM)])}, {"SUBDOM", &configtree, (void *)&(opts.outopts.tree[G(REP_DOM)])}, {"SUBDIR", &configtree, (void *)&(opts.outopts.tree[G(REP_DIR)])}, {"SUBTYPE", &configtree, (void *)&(opts.outopts.tree[G(REP_TYPE)])}, {"REFDIR", &configtree, (void *)&(opts.outopts.tree[G(REP_REFSITE)])}, {"SUBREFSITE", &configtree, (void *)&(opts.outopts.tree[G(REP_REFSITE)])}, {"SUBBROW", &configtree, (void *)&(opts.outopts.tree[G(REP_BROWSUM)])}, {"SUBOS", &configtree, (void *)&(opts.outopts.tree[G(REP_OS)])}, {"SUBORG", &configstrlist, (void *)&(opts.outopts.suborgs)}, {"SUBORG2", &configtree, (void *)&(opts.outopts.tree[G(REP_ORG)])}, /* have to postpone SUBORG's until domains file has been read */ {"FILEINCLUDE", &configinc, (void *)&(opts.wanthead[ITEM_FILE])}, {"FILEEXCLUDE", &configexc, (void *)&(opts.wanthead[ITEM_FILE])}, {"HOSTINCLUDE", &confighostinc, (void *)&(opts.wanthead[ITEM_HOST])}, {"HOSTEXCLUDE", &confighostexc, (void *)&(opts.wanthead[ITEM_HOST])}, {"REFINCLUDE", &configinc, (void *)&(opts.wanthead[ITEM_REFERRER])}, {"REFEXCLUDE", &configexc, (void *)&(opts.wanthead[ITEM_REFERRER])}, {"BROWINCLUDE", &configinc, (void *)&(opts.wanthead[ITEM_BROWSER])}, {"BROWEXCLUDE", &configexc, (void *)&(opts.wanthead[ITEM_BROWSER])}, {"USERINCLUDE", &configinc, (void *)&(opts.wanthead[ITEM_USER])}, {"USEREXCLUDE", &configexc, (void *)&(opts.wanthead[ITEM_USER])}, {"VHOSTINCLUDE", &configinc, (void *)&(opts.wanthead[ITEM_VHOST])}, {"VHOSTEXCLUDE", &configexc, (void *)&(opts.wanthead[ITEM_VHOST])}, {"STATUSINCLUDE", &configscinc, (void *)(opts.code2type)}, {"STATUSEXCLUDE", &configscexc, (void *)(opts.code2type)}, {"304ISSUCCESS", &configchoice, (void *)&(opts.succ304)}, {"REQINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_REQ)])}, {"REQEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_REQ)])}, {"REDIRINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_REDIR)])}, {"REDIREXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_REDIR)])}, {"FAILINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_FAIL)])}, {"FAILEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_FAIL)])}, {"TYPEINCLUDE", &configincd, (void *)&(opts.outopts.wanthead[G(REP_TYPE)])}, {"TYPEEXCLUDE", &configexcd, (void *)&(opts.outopts.wanthead[G(REP_TYPE)])}, {"DIRINCLUDE", &configincs, (void *)&(opts.outopts.wanthead[G(REP_DIR)])}, {"DIREXCLUDE", &configexcs, (void *)&(opts.outopts.wanthead[G(REP_DIR)])}, {"HOSTREPINCLUDE", &confighostinc, (void *)&(opts.outopts.wanthead[G(REP_HOST)])}, {"HOSTREPEXCLUDE", &confighostexc, (void *)&(opts.outopts.wanthead[G(REP_HOST)])}, {"REDIRHOSTINCLUDE", &confighostinc, (void *)&(opts.outopts.wanthead[G(REP_REDIRHOST)])}, {"REDIRHOSTEXCLUDE", &confighostexc, (void *)&(opts.outopts.wanthead[G(REP_REDIRHOST)])}, {"FAILHOSTINCLUDE", &confighostinc, (void *)&(opts.outopts.wanthead[G(REP_FAILHOST)])}, {"FAILHOSTEXCLUDE", &confighostexc, (void *)&(opts.outopts.wanthead[G(REP_FAILHOST)])}, {"DOMINCLUDE", &configincd, (void *)&(opts.outopts.wanthead[G(REP_DOM)])}, {"DOMEXCLUDE", &configexcd, (void *)&(opts.outopts.wanthead[G(REP_DOM)])}, {"ORGINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_ORG)])}, {"ORGEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_ORG)])}, {"REFREPINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_REF)])}, {"REFREPEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_REF)])}, {"REFSITEINCLUDE", &configincs, (void *)&(opts.outopts.wanthead[G(REP_REFSITE)])}, {"REFSITEEXCLUDE", &configexcs, (void *)&(opts.outopts.wanthead[G(REP_REFSITE)])}, {"REDIRREFINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_REDIRREF)])}, {"REDIRREFEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_REDIRREF)])}, {"FAILREFINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_FAILREF)])}, {"FAILREFEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_FAILREF)])}, {"BROWSUMINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_BROWSUM)])}, {"BROWSUMEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_BROWSUM)])}, {"BROWREPINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_BROWREP)])}, {"BROWREPEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_BROWREP)])}, {"FULLBROWINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_BROWREP)])}, {"FULLBROWEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_BROWREP)])}, {"OSINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_OS)])}, {"OSEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_OS)])}, {"VHOSTREPINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_VHOST)])}, {"VHOSTREPEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_VHOST)])}, {"REDIRVHOSTINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_REDIRVHOST)])}, {"REDIRVHOSTEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_REDIRVHOST)])}, {"FAILVHOSTINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_FAILVHOST)])}, {"FAILVHOSTEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_FAILVHOST)])}, {"USERREPINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_USER)])}, {"USERREPEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_USER)])}, {"REDIRUSERINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_REDIRUSER)])}, {"REDIRUSEREXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_REDIRUSER)])}, {"FAILUSERINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_FAILUSER)])}, {"FAILUSEREXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_FAILUSER)])}, {"SEARCHQUERYINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_SEARCHREP)])}, {"SEARCHQUERYEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_SEARCHREP)])}, {"SEARCHWORDINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_SEARCHSUM)])}, {"SEARCHWORDEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_SEARCHSUM)])}, {"INTSEARCHQUERYINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_INTSEARCHREP)])}, {"INTSEARCHQUERYEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_INTSEARCHREP)])}, {"INTSEARCHWORDINCLUDE", &configinc, (void *)&(opts.outopts.wanthead[G(REP_INTSEARCHSUM)])}, {"INTSEARCHWORDEXCLUDE", &configexc, (void *)&(opts.outopts.wanthead[G(REP_INTSEARCHSUM)])}, {"LINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_REQ)])}, {"LINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_REQ)])}, {"REQLINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_REQ)])}, {"REQLINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_REQ)])}, {"REDIRLINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_REDIR)])}, {"REDIRLINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_REDIR)])}, {"FAILLINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_FAIL)])}, {"FAILLINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_FAIL)])}, {"REFLINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_REF)])}, {"REFLINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_REF)])}, {"REDIRREFLINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_REDIRREF)])}, {"REDIRREFLINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_REDIRREF)])}, {"FAILREFLINKINCLUDE", &configinc, (void *)&(opts.outopts.link[G(REP_FAILREF)])}, {"FAILREFLINKEXCLUDE", &configexc, (void *)&(opts.outopts.link[G(REP_FAILREF)])}, {"ARGSINCLUDE", &configinc, (void *)&(opts.argshead)}, {"ARGSEXCLUDE", &configexc, (void *)&(opts.argshead)}, {"REFARGSINCLUDE", &configinc, (void *)&(opts.refargshead)}, {"REFARGSEXCLUDE", &configexc, (void *)&(opts.refargshead)}, {"PAGEINCLUDE", &configinc, (void *)&(opts.ispagehead)}, {"PAGEEXCLUDE", &configexc, (void *)&(opts.ispagehead)}, {"ROBOTINCLUDE", &configinc, (void *)&(opts.robots)}, {"ROBOTEXCLUDE", &configexc, (void *)&(opts.robots)}, {"REQSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REQ)])}, {"REQARGSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_REQ)])}, {"REDIRSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REDIR)])}, {"REDIRARGSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_REDIR)])}, {"FAILSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_FAIL)])}, {"FAILARGSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_FAIL)])}, {"TYPESORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_TYPE)])}, {"SUBTYPESORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_TYPE)])}, {"DIRSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_DIR)])}, {"SUBDIRSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_DIR)])}, {"HOSTSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_HOST)])}, {"REDIRHOSTSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REDIRHOST)])}, {"FAILHOSTSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_FAILHOST)])}, {"DOMSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_DOM)])}, {"SUBDOMSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_DOM)])}, {"ORGSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_ORG)])}, {"SUBORGSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_ORG)])}, {"REFSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REF)])}, {"REFARGSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_REF)])}, {"REFSITESORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REFSITE)])}, {"REFDIRSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_REFSITE)])}, {"SUBREFSITESORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_REFSITE)])}, {"REDIRREFSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REDIRREF)])}, {"REDIRREFARGSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_REDIRREF)])}, {"FAILREFSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_FAILREF)])}, {"FAILREFARGSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_FAILREF)])}, {"BROWREPSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_BROWREP)])}, {"FULLBROWSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_BROWREP)])}, {"BROWSUMSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_BROWSUM)])}, {"BROWSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_BROWSUM)])}, {"SUBBROWSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_BROWSUM)])}, {"OSSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_OS)])}, {"SUBOSSORTBY", &configchoice, (void *)&(opts.outopts.subsortby[G(REP_OS)])}, {"STATUSSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_CODE)])}, {"VHOSTSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_VHOST)])}, {"REDIRVHOSTSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REDIRVHOST)])}, {"FAILVHOSTSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_FAILVHOST)])}, {"USERSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_USER)])}, {"REDIRUSERSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_REDIRUSER)])}, {"FAILUSERSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_FAILUSER)])}, {"SEARCHQUERYSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_SEARCHREP)])}, {"SEARCHWORDSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_SEARCHSUM)])}, {"INTSEARCHQUERYSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_INTSEARCHREP)])}, {"INTSEARCHWORDSORTBY", &configchoice, (void *)&(opts.outopts.sortby[G(REP_INTSEARCHSUM)])}, {"ALL", &configall, (void *)(opts.outopts.repq)}, {"ALLBACK", &configallback, (void *)(opts.outopts.back)}, {"YEARLY", &configchoice, (void *)&(opts.outopts.repq[REP_YEAR])}, {"QUARTERLY", &configchoice, (void *)&(opts.outopts.repq[REP_QUARTERLY])}, {"MONTHLY", &configchoice, (void *)&(opts.outopts.repq[REP_MONTH])}, {"WEEKLY", &configchoice, (void *)&(opts.outopts.repq[REP_WEEK])}, {"DAILYREP", &configchoice, (void *)&(opts.outopts.repq[REP_DAYREP])}, {"FULLDAILY", &configchoice, (void *)&(opts.outopts.repq[REP_DAYREP])}, {"DAILYSUM", &configchoice, (void *)&(opts.outopts.repq[REP_DAYSUM])}, {"DAILY", &configchoice, (void *)&(opts.outopts.repq[REP_DAYSUM])}, {"HOURLYREP", &configchoice, (void *)&(opts.outopts.repq[REP_HOURREP])}, {"FULLHOURLY", &configchoice, (void *)&(opts.outopts.repq[REP_HOURREP])}, {"HOURLYSUM", &configchoice, (void *)&(opts.outopts.repq[REP_HOURSUM])}, {"HOURLY", &configchoice, (void *)&(opts.outopts.repq[REP_HOURSUM])}, {"WEEKHOUR", &configchoice, (void *)&(opts.outopts.repq[REP_WEEKHOUR])}, {"QUARTERREP", &configchoice, (void *)&(opts.outopts.repq[REP_QUARTERREP])}, {"QUARTER", &configchoice, (void *)&(opts.outopts.repq[REP_QUARTERREP])}, {"QUARTERSUM", &configchoice, (void *)&(opts.outopts.repq[REP_QUARTERSUM])}, {"FIVEREP", &configchoice, (void *)&(opts.outopts.repq[REP_FIVEREP])}, {"FIVE", &configchoice, (void *)&(opts.outopts.repq[REP_FIVEREP])}, {"FIVESUM", &configchoice, (void *)&(opts.outopts.repq[REP_FIVESUM])}, {"GENERAL", &configchoice, (void *)&(opts.outopts.repq[REP_GENSUM])}, {"LASTSEVEN", &configchoice, (void *)&(opts.outopts.last7)}, {"RUNTIME", &configchoice, (void *)&(opts.outopts.runtime)}, {"GOTOS", &configchoice, (void *)&(opts.outopts.gotos)}, {"REPORTSPAN", &configchoice, (void *)&(opts.outopts.repspan)}, {"REPORTSPANTHRESHOLD", &configuint, (void *)&(opts.outopts.rsthresh)}, {"RSTHRESH", &configuint, (void *)&(opts.outopts.rsthresh)}, {"DESCRIPTIONS", &configchoice, (void *)&(opts.outopts.descriptions)}, {"REQUEST", &configchoice, (void *)&(opts.outopts.repq[REP_REQ])}, {"REDIR", &configchoice, (void *)&(opts.outopts.repq[REP_REDIR])}, {"REDIRECTION", &configchoice, (void *)&(opts.outopts.repq[REP_REDIR])}, {"FAILURE", &configchoice, (void *)&(opts.outopts.repq[REP_FAIL])}, {"FILETYPE", &configchoice, (void *)&(opts.outopts.repq[REP_TYPE])}, {"SIZE", &configchoice, (void *)&(opts.outopts.repq[REP_SIZE])}, {"PROCTIME", &configchoice, (void *)&(opts.outopts.repq[REP_PROCTIME])}, {"DIRECTORY", &configchoice, (void *)&(opts.outopts.repq[REP_DIR])}, {"HOST", &configchoice, (void *)&(opts.outopts.repq[REP_HOST])}, {"REDIRHOST", &configchoice, (void *)&(opts.outopts.repq[REP_REDIRHOST])}, {"FAILHOST", &configchoice, (void *)&(opts.outopts.repq[REP_FAILHOST])}, {"DOMAIN", &configchoice, (void *)&(opts.outopts.repq[REP_DOM])}, {"ORGANISATION", &configchoice, (void *)&(opts.outopts.repq[REP_ORG])}, {"ORGANIZATION", &configchoice, (void *)&(opts.outopts.repq[REP_ORG])}, {"REFERRER", &configchoice, (void *)&(opts.outopts.repq[REP_REF])}, {"REFERER", &configchoice, (void *)&(opts.outopts.repq[REP_REF])}, {"REFSITE", &configchoice, (void *)&(opts.outopts.repq[REP_REFSITE])}, {"REDIRREF", &configchoice, (void *)&(opts.outopts.repq[REP_REDIRREF])}, {"FAILREF", &configchoice, (void *)&(opts.outopts.repq[REP_FAILREF])}, {"BROWSERREP", &configchoice, (void *)&(opts.outopts.repq[REP_BROWREP])}, {"BROWREP", &configchoice, (void *)&(opts.outopts.repq[REP_BROWREP])}, {"FULLBROWSER", &configchoice, (void *)&(opts.outopts.repq[REP_BROWREP])}, {"BROWSERSUM", &configchoice, (void *)&(opts.outopts.repq[REP_BROWSUM])}, {"BROWSUM", &configchoice, (void *)&(opts.outopts.repq[REP_BROWSUM])}, {"BROWSER", &configchoice, (void *)&(opts.outopts.repq[REP_BROWSUM])}, {"OSREP", &configchoice, (void *)&(opts.outopts.repq[REP_OS])}, {"VHOST", &configchoice, (void *)&(opts.outopts.repq[REP_VHOST])}, {"REDIRVHOST", &configchoice, (void *)&(opts.outopts.repq[REP_REDIRVHOST])}, {"FAILVHOST", &configchoice, (void *)&(opts.outopts.repq[REP_FAILVHOST])}, {"USER", &configchoice, (void *)&(opts.outopts.repq[REP_USER])}, {"REDIRUSER", &configchoice, (void *)&(opts.outopts.repq[REP_REDIRUSER])}, {"FAILUSER", &configchoice, (void *)&(opts.outopts.repq[REP_FAILUSER])}, {"SEARCHQUERY", &configchoice, (void *)&(opts.outopts.repq[REP_SEARCHREP])}, {"SEARCHWORD", &configchoice, (void *)&(opts.outopts.repq[REP_SEARCHSUM])}, {"INTSEARCHQUERY", &configchoice, (void *)&(opts.outopts.repq[REP_INTSEARCHREP])}, {"INTSEARCHWORD", &configchoice, (void *)&(opts.outopts.repq[REP_INTSEARCHSUM])}, {"STATUS", &configchoice, (void *)&(opts.outopts.repq[REP_CODE])}, {"YEARBACK", &configchoice, (void *)&(opts.outopts.back[REP_YEAR])}, {"QUARTERLYBACK", &configchoice, (void *)&(opts.outopts.back[REP_QUARTERLY])}, {"MONTHBACK", &configchoice, (void *)&(opts.outopts.back[REP_MONTH])}, {"WEEKBACK", &configchoice, (void *)&(opts.outopts.back[REP_WEEK])}, {"DAYBACK", &configchoice, (void *)&(opts.outopts.back[REP_DAYREP])}, {"DAYREPBACK", &configchoice, (void *)&(opts.outopts.back[REP_DAYREP])}, {"FULLDAYBACK", &configchoice, (void *)&(opts.outopts.back[REP_DAYREP])}, {"HOURBACK", &configchoice, (void *)&(opts.outopts.back[REP_HOURREP])}, {"HOURREPBACK", &configchoice, (void *)&(opts.outopts.back[REP_HOURREP])}, {"FULLHOURBACK", &configchoice, (void *)&(opts.outopts.back[REP_HOURREP])}, {"QUARTERBACK", &configchoice, (void *)&(opts.outopts.back[REP_QUARTERREP])}, {"QUARTERREPBACK", &configchoice, (void *)&(opts.outopts.back[REP_QUARTERREP])}, {"FIVEBACK", &configchoice, (void *)&(opts.outopts.back[REP_FIVEREP])}, {"FIVEREPBACK", &configchoice, (void *)&(opts.outopts.back[REP_FIVEREP])}, {"RAWBYTES", &configchoice, (void *)&(opts.outopts.rawbytes)}, {"BYTESDP", &configuint, (void *)&(opts.outopts.bytesdp)}, {"NOROBOTS", &configchoice, (void *)&(opts.outopts.norobots)}, {"LINKNOFOLLOW", &configchoice, (void *)&(opts.outopts.linknofollow)}, {"SETTINGS", &configchoice, (void *)&vblesonly}, {"CGI", &configchoice, (void *)&cgi}, {"OUTPUT", &configchoice, (void *)&(opts.outopts.outstyle)}, {"PDFLATEX", &configchoice, (void *)&(opts.outopts.pdflatex)}, {"CASE", &configchoice, (void *)&(opts.miscopts.case_insensitive)}, {"USERCASE", &configchoice, (void *)&(opts.miscopts.usercase_insensitive)}, {"SEARCHCHARCONVERT", &configchoice, (void *)&(opts.outopts.searchconv)}, {"YEARROWS", &configuint, (void *)&(opts.outopts.rows[REP_YEAR])}, {"QUARTERLYROWS", &configuint, (void *)&(opts.outopts.rows[REP_QUARTERLY])}, {"MONTHROWS", &configuint, (void *)&(opts.outopts.rows[REP_MONTH])}, {"WEEKROWS", &configuint, (void *)&(opts.outopts.rows[REP_WEEK])}, {"DAYROWS", &configuint, (void *)&(opts.outopts.rows[REP_DAYREP])}, {"DAYREPROWS", &configuint, (void *)&(opts.outopts.rows[REP_DAYREP])}, {"FULLDAYROWS", &configuint, (void *)&(opts.outopts.rows[REP_DAYREP])}, {"HOURROWS", &configuint, (void *)&(opts.outopts.rows[REP_HOURREP])}, {"HOURREPROWS", &configuint, (void *)&(opts.outopts.rows[REP_HOURREP])}, {"FULLHOURROWS", &configuint, (void *)&(opts.outopts.rows[REP_HOURREP])}, {"QUARTERROWS", &configuint, (void *)&(opts.outopts.rows[REP_QUARTERREP])}, {"QUARTERREPROWS", &configuint, (void *)&(opts.outopts.rows[REP_QUARTERREP])}, {"FIVEROWS", &configuint, (void *)&(opts.outopts.rows[REP_FIVEREP])}, {"FIVEREPROWS", &configuint, (void *)&(opts.outopts.rows[REP_FIVEREP])}, {"FILELOWMEM", &configlowmem, (void *)&(opts.miscopts.lowmem[ITEM_FILE])}, {"HOSTLOWMEM", &configlowmem, (void *)&(opts.miscopts.lowmem[ITEM_HOST])}, {"REFLOWMEM", &configlowmem, (void *)&(opts.miscopts.lowmem[ITEM_REFERRER])}, {"BROWLOWMEM", &configlowmem, (void *)&(opts.miscopts.lowmem[ITEM_BROWSER])}, {"USERLOWMEM", &configlowmem, (void *)&(opts.miscopts.lowmem[ITEM_USER])}, {"VHOSTLOWMEM", &configlowmem, (void *)&(opts.miscopts.lowmem[ITEM_VHOST])}, {"ASCIIPAGEWIDTH", &configuint, (void *)&(opts.outopts.plainpagewidth)}, {"PLAINPAGEWIDTH", &configuint, (void *)&(opts.outopts.plainpagewidth)}, {"HTMLPAGEWIDTH", &configuint, (void *)&(opts.outopts.htmlpagewidth)}, {"LATEXPAGEWIDTH", &configuint, (void *)&(opts.outopts.latexpagewidth)}, {"MINGRAPHWIDTH", &configuint, (void *)&(opts.outopts.mingraphwidth)}, {"ERRLINELENGTH", &configuint, (void *)&errwidth}, {"PROGRESSFREQ", &configulong, (void *)&progressfreq}, {"WEEKBEGINSON", &configchoice, (void *)&(opts.outopts.weekbeginson)}, {"FROM", &configstr, (void *)&(opts.dman.fromstr)}, {"TO", &configstr, (void *)&(opts.dman.tostr)}, {"REPORTORDER", &configrepord, (void *)(opts.outopts.reporder)}, {"DEBUG", &configdebug, (void *)&debug_args}, {"WARNINGS", &configdebug, (void *)&warn_args}, {"GENSUMLINES", &configdebug, (void *)&(opts.outopts.gensumlines)}, {"DOMLEVEL", &configdomlevel, (void *)&domlevels}, #ifndef NODNS {"DNS", &configchoice, (void *)&dnslevel}, {"DNSFILE", &configstr, (void *)&dnsfile}, {"DNSLOCKFILE", &configstr, (void *)&dnslockfile}, {"DNSGOODHOURS", &configuint, (void *)&dnsgoodhrs}, {"DNSBADHOURS", &configuint, (void *)&dnsbadhrs}, #ifndef NOALARM {"DNSTIMEOUT", &configuint, (void *)&dnstimeout}, #endif #endif {"CONFIGFILE", &configcall, NULL}, {"", NULL, NULL} /* at end as marker */ }; void globals(char *comname) { #ifndef NOFOLLOW struct stat buf; char *path, *pathcp, *s, *t = NULL; size_t l = 0; logical done; #endif int i; time(&starttime); starttimestr = ctime(&starttime); starttimestr[24] = '\0'; (void)parsedate(starttime, "-00-00-00:-00-00", &starttimec, FALSE, FALSE); (void)parsedate(starttime, "-00-00-00:-00-00", &starttimeuxc, FALSE, TRUE); /* parsedate() is needed because we don't know the encoding of time() */ errfile = stderr; setvbuf(stderr, NULL, ERRBUFMODE, BUFSIZ); signal(SIGTERM, sighandler); signal(SIGINT, sighandler); #ifdef SIGHUP signal(SIGHUP, sighandler); #endif #ifdef SIGQUIT signal(SIGQUIT, sighandler); #endif #ifdef SIGPIPE signal(SIGPIPE, SIG_IGN); #endif workspace = (char *)xmalloc(BLOCKSIZE); block_start = (char *)xmalloc(BLOCKSIZE + 1); /* 1 for terminating char */ for (i = 0; i < ITEM_NUMBER; i++) { mm[i].curr_pos = NULL; mm[i].first = NULL; mm[i].alignment = 1; } mmq.curr_pos = NULL; mmq.first = NULL; mmq.alignment = 1; mms.curr_pos = NULL; mms.first = NULL; mms.alignment = 1; xmemman = (Memman *)xmalloc(sizeof(Memman)); xmemman->curr_pos = NULL; xmemman->first = NULL; xmemman->alignment = ALIGNSIZE; amemman = (Memman *)xmalloc(sizeof(Memman)); amemman->curr_pos = NULL; amemman->first = NULL; amemman->alignment = ALIGNSIZE; for (i = 0; i < 256; i++) termchar[i] = FALSE; termchar[(unsigned char)'\r'] = TRUE; termchar[(unsigned char)'\n'] = TRUE; termchar[(unsigned char)'\0'] = TRUE; if (IS_EMPTY_STRING(comname)) COPYSTR(commandname, "analog") /* no semicolon by defn of COPYSTR */ else COPYSTR(commandname, comname); #ifndef NOFOLLOW commandpath = (char *)xmalloc(PATH_MAX); done = FALSE; if (strpbrk(commandname, PATHSEPS) == NULL && (path = getenv("PATH")) != NULL) { pathcp = (char *)xmalloc(strlen(path) + 1); strcpy(pathcp, path); for (s = strtok(pathcp, ":"); !done && s != NULL; s = strtok(NULL, ":")) { ENSURE_LEN(t, l, strlen(s) + strlen(commandname) + 2); sprintf(t, "%s%c%s", s, DIRSEP, commandname); if (realpath(t, commandpath) != NULL && access(commandpath, X_OK) == 0 && stat(commandpath, &buf) == 0 && S_ISREG(buf.st_mode)) done = TRUE; } } else if (realpath(commandname, commandpath) != NULL) done = TRUE; if (!done) strcpy(commandpath, commandname); commandpath = (char *)xrealloc((void *)commandpath, strlen(commandpath) + 1); #else commandpath = commandname; #endif unwanted_entry = newhashentry(DATA_NUMBER, FALSE); blank_entry = newhashentry(DATA_NUMBER, FALSE); dummy_item = (Hashindex *)submalloc(xmemman, sizeof(Hashindex)); dummy_item->own = newhashentry(DATA_NUMBER, FALSE); rep2lng = (unsigned int *)xmalloc(REP_NUMBER * sizeof(unsigned int)); rep2lng[REP_GENSUM] = gensum_; rep2lng[REP_YEAR] = yearrep_; rep2lng[REP_QUARTERLY] = quarterlyrep_; rep2lng[REP_MONTH] = monthrep_; rep2lng[REP_WEEK] = weekrep_; rep2lng[REP_DAYREP] = dayrep_; rep2lng[REP_DAYSUM] = daysum_; rep2lng[REP_HOURREP] = hourrep_; rep2lng[REP_HOURSUM] = hoursum_; rep2lng[REP_WEEKHOUR] = weekhoursum_; rep2lng[REP_QUARTERREP] = quarterrep_; rep2lng[REP_QUARTERSUM] = quartersum_; rep2lng[REP_FIVEREP] = fiverep_; rep2lng[REP_FIVESUM] = fivesum_; rep2lng[REP_REQ] = reqrep_; rep2lng[REP_REDIR] = redirrep_; rep2lng[REP_FAIL] = failrep_; rep2lng[REP_TYPE] = typerep_; rep2lng[REP_SIZE] = sizerep_; rep2lng[REP_PROCTIME] = proctimerep_; rep2lng[REP_DIR] = dirrep_; rep2lng[REP_HOST] = hostrep_; rep2lng[REP_REDIRHOST] = redirhostrep_; rep2lng[REP_FAILHOST] = failhostrep_; rep2lng[REP_DOM] = domrep_; rep2lng[REP_ORG] = orgrep_; rep2lng[REP_REF] = refrep_; rep2lng[REP_REFSITE] = refsiterep_; rep2lng[REP_REDIRREF] = redirrefrep_; rep2lng[REP_FAILREF] = failrefrep_; rep2lng[REP_BROWREP] = browrep_; rep2lng[REP_BROWSUM] = browsum_; rep2lng[REP_OS] = osrep_; rep2lng[REP_VHOST] = vhostrep_; rep2lng[REP_REDIRVHOST] = redirvhostrep_; rep2lng[REP_FAILVHOST] = failvhostrep_; rep2lng[REP_USER] = userrep_; rep2lng[REP_REDIRUSER] = rediruserrep_; rep2lng[REP_FAILUSER] = failuserrep_; rep2lng[REP_SEARCHREP] = searchrep_; rep2lng[REP_SEARCHSUM] = searchsum_; rep2lng[REP_INTSEARCHREP] = intsearchrep_; rep2lng[REP_INTSEARCHSUM] = intsearchsum_; rep2lng[REP_CODE] = statrep_; rep2type = (choice *)xmalloc(REP_NUMBER * sizeof(choice)); rep2type[REP_YEAR] = INP_DATE; rep2type[REP_QUARTERLY] = INP_DATE; rep2type[REP_MONTH] = INP_DATE; rep2type[REP_WEEK] = INP_DATE; rep2type[REP_DAYREP] = INP_DATE; rep2type[REP_DAYSUM] = INP_DATE; rep2type[REP_HOURREP] = INP_DATE; rep2type[REP_HOURSUM] = INP_DATE; rep2type[REP_WEEKHOUR] = INP_DATE; rep2type[REP_QUARTERREP] = INP_DATE; rep2type[REP_QUARTERSUM] = INP_DATE; rep2type[REP_FIVEREP] = INP_DATE; rep2type[REP_FIVESUM] = INP_DATE; rep2type[REP_GENSUM] = UNSET; rep2type[REP_REQ] = ITEM_FILE; rep2type[REP_TYPE] = ITEM_FILE; rep2type[REP_DIR] = ITEM_FILE; rep2type[REP_REDIR] = ITEM_FILE; rep2type[REP_FAIL] = ITEM_FILE; rep2type[REP_HOST] = ITEM_HOST; rep2type[REP_REDIRHOST] = ITEM_HOST; rep2type[REP_FAILHOST] = ITEM_HOST; rep2type[REP_DOM] = ITEM_HOST; rep2type[REP_ORG] = ITEM_HOST; rep2type[REP_USER] = ITEM_USER; rep2type[REP_REDIRUSER] = ITEM_USER; rep2type[REP_FAILUSER] = ITEM_USER; rep2type[REP_REF] = ITEM_REFERRER; rep2type[REP_REFSITE] = ITEM_REFERRER; rep2type[REP_REDIRREF] = ITEM_REFERRER; rep2type[REP_FAILREF] = ITEM_REFERRER; rep2type[REP_SEARCHREP] = ITEM_REFERRER; rep2type[REP_SEARCHSUM] = ITEM_REFERRER; rep2type[REP_INTSEARCHREP] = ITEM_FILE; rep2type[REP_INTSEARCHSUM] = ITEM_FILE; rep2type[REP_BROWREP] = ITEM_BROWSER; rep2type[REP_BROWSUM] = ITEM_BROWSER; rep2type[REP_OS] = ITEM_BROWSER; rep2type[REP_VHOST] = ITEM_VHOST; rep2type[REP_REDIRVHOST] = ITEM_VHOST; rep2type[REP_FAILVHOST] = ITEM_VHOST; rep2type[REP_SIZE] = INP_BYTES; rep2type[REP_PROCTIME] = INP_PROCTIME; rep2type[REP_CODE] = INP_CODE; repistree = (logical *)xmalloc(GENREP_NUMBER * sizeof(logical)); for (i = 0; i < GENREP_NUMBER; i++) repistree[i] = FALSE; repistree[G(REP_REQ)] = TRUE; repistree[G(REP_REDIR)] = TRUE; repistree[G(REP_FAIL)] = TRUE; repistree[G(REP_REF)] = TRUE; repistree[G(REP_REDIRREF)] = TRUE; repistree[G(REP_FAILREF)] = TRUE; repistree[G(REP_TYPE)] = TRUE; repistree[G(REP_DIR)] = TRUE; repistree[G(REP_DOM)] = TRUE; repistree[G(REP_ORG)] = TRUE; repistree[G(REP_REFSITE)] = TRUE; repistree[G(REP_BROWSUM)] = TRUE; repistree[G(REP_OS)] = TRUE; rep2reqs = (choice *)xmalloc(GENREP_NUMBER * sizeof(choice)); rep2reqs7 = (choice *)xmalloc(GENREP_NUMBER * sizeof(choice)); rep2date = (choice *)xmalloc(GENREP_NUMBER * sizeof(choice)); rep2firstd = (choice *)xmalloc(GENREP_NUMBER * sizeof(choice)); for (i = 0; i < GENREP_NUMBER; i++) rep2reqs[i] = REQUESTS; rep2reqs[G(REP_REDIR)] = REDIR; rep2reqs[G(REP_FAIL)] = FAIL; rep2reqs[G(REP_REDIRHOST)] = REDIR; rep2reqs[G(REP_FAILHOST)] = FAIL; rep2reqs[G(REP_REDIRUSER)] = REDIR; rep2reqs[G(REP_FAILUSER)] = FAIL; rep2reqs[G(REP_REDIRREF)] = REDIR; rep2reqs[G(REP_FAILREF)] = FAIL; rep2reqs[G(REP_REDIRVHOST)] = REDIR; rep2reqs[G(REP_FAILVHOST)] = FAIL; for (i = 0; i < GENREP_NUMBER; i++) { rep2reqs7[i] = (rep2reqs[i] == REDIR)?REDIR7:\ ((rep2reqs[i] == FAIL)?FAIL7:REQUESTS7); rep2date[i] = (rep2reqs[i] == REDIR)?REDIRDATE:\ ((rep2reqs[i] == FAIL)?FAILDATE:SUCCDATE); rep2firstd[i] = (rep2reqs[i] == REDIR)?REDIRFIRSTD:\ ((rep2reqs[i] == FAIL)?FAILFIRSTD:SUCCFIRSTD); } rep2gran = (unsigned int *)xmalloc(DATEREP_NUMBER * sizeof(unsigned int)); rep2gran[REP_DAYREP] = 1; rep2gran[REP_HOURREP] = 24; rep2gran[REP_QUARTERREP] = 96; rep2gran[REP_FIVEREP] = 288; rep2gran[REP_YEAR] = 1; rep2gran[REP_QUARTERLY] = 1; rep2gran[REP_MONTH] = 1; rep2gran[REP_WEEK] = 1; rep2gran[REP_DAYSUM] = 1; rep2gran[REP_HOURSUM] = 24; rep2gran[REP_WEEKHOUR] = 24; rep2gran[REP_QUARTERSUM] = 96; rep2gran[REP_FIVESUM] = 288; rep2datefmt = (unsigned int *)xmalloc(DATEREP_NUMBER * sizeof(unsigned int)); rep2datefmt[REP_DAYREP] = dayrepfmt_; rep2datefmt[REP_DAYSUM] = daysumfmt_; rep2datefmt[REP_HOURREP] = hourrepfmt_; rep2datefmt[REP_QUARTERREP] = quarterrepfmt_; rep2datefmt[REP_FIVEREP] = quarterrepfmt_; rep2datefmt[REP_WEEK] = weekfmt_; rep2datefmt[REP_MONTH] = monthfmt_; rep2datefmt[REP_QUARTERLY] = quarterlyfmt_; rep2datefmt[REP_YEAR] = yearfmt_; rep2datefmt[REP_HOURSUM] = hoursumfmt_; rep2datefmt[REP_WEEKHOUR] = weekhoursumfmt_; rep2datefmt[REP_QUARTERSUM] = quartersumfmt_; rep2datefmt[REP_FIVESUM] = quartersumfmt_; rep2colhead = (unsigned int *)xmalloc(REP_NUMBER * sizeof(unsigned int)); rep2colhead[REP_DAYREP] = date_; rep2colhead[REP_DAYSUM] = day_; rep2colhead[REP_HOURREP] = time_; rep2colhead[REP_HOURSUM] = hr_; rep2colhead[REP_WEEKHOUR] = hr_; rep2colhead[REP_QUARTERREP] = time_; rep2colhead[REP_QUARTERSUM] = time_; rep2colhead[REP_FIVEREP] = time_; rep2colhead[REP_FIVESUM] = time_; rep2colhead[REP_WEEK] = weekbeg_; rep2colhead[REP_MONTH] = month_; rep2colhead[REP_QUARTERLY] = quarteryr_; rep2colhead[REP_YEAR] = year_; rep2colhead[REP_REQ] = file_; rep2colhead[REP_REDIR] = file_; rep2colhead[REP_FAIL] = file_; rep2colhead[REP_TYPE] = ext_; rep2colhead[REP_SIZE] = size_; rep2colhead[REP_PROCTIME] = seconds_; rep2colhead[REP_DIR] = dir_; rep2colhead[REP_HOST] = host_; rep2colhead[REP_REDIRHOST] = host_; rep2colhead[REP_FAILHOST] = host_; rep2colhead[REP_DOM] = dom_; rep2colhead[REP_ORG] = org_; rep2colhead[REP_REF] = url_; rep2colhead[REP_REFSITE] = site_; rep2colhead[REP_REDIRREF] = url_; rep2colhead[REP_FAILREF] = url_; rep2colhead[REP_BROWREP] = browser_; rep2colhead[REP_BROWSUM] = browser_; rep2colhead[REP_OS] = os_; rep2colhead[REP_VHOST] = vhost_; rep2colhead[REP_REDIRVHOST] = vhost_; rep2colhead[REP_FAILVHOST] = vhost_; rep2colhead[REP_USER] = user_; rep2colhead[REP_REDIRUSER] = user_; rep2colhead[REP_FAILUSER] = user_; rep2colhead[REP_SEARCHREP] = search_; rep2colhead[REP_SEARCHSUM] = search_; rep2colhead[REP_INTSEARCHREP] = search_; rep2colhead[REP_INTSEARCHSUM] = search_; rep2colhead[REP_CODE] = code_; rep2busystr = (unsigned int *)xmalloc(DATEREPORTS_NUMBER * sizeof(unsigned int)); rep2busystr[REP_DAYREP] = busyday_; rep2busystr[REP_HOURREP] = busyhour_; rep2busystr[REP_QUARTERREP] = busyquarterhr_; rep2busystr[REP_FIVEREP] = busyfive_; rep2busystr[REP_WEEK] = busyweek_; rep2busystr[REP_MONTH] = busymonth_; rep2busystr[REP_QUARTERLY] = busyquarteryr_; rep2busystr[REP_YEAR] = busyyear_; col2colhead = (unsigned int *)xmalloc(COL_NUMBER * sizeof(unsigned int)); col2colhead[COL_REQS] = nreqs_; col2colhead[COL_PAGES] = npgs_; col2colhead[COL_BYTES] = nbytes_; col2colhead[COL_PREQS] = preqs_; col2colhead[COL_PPAGES] = ppgs_; col2colhead[COL_PBYTES] = pbytes_; col2colhead[COL_REQS7] = nreqs7_; col2colhead[COL_PAGES7] = npgs7_; col2colhead[COL_BYTES7] = nbytes7_; col2colhead[COL_PREQS7] = preqs7_; col2colhead[COL_PPAGES7] = ppgs7_; col2colhead[COL_PBYTES7] = pbytes7_; col2colhead[COL_DATE] = lastdate_; col2colhead[COL_TIME] = lasttime_; col2colhead[COL_FIRSTD] = firstdate_; col2colhead[COL_FIRSTT] = firsttime_; col2colhead[COL_INDEX] = index_; method2sing = (unsigned int *)xmalloc(METHOD_NUMBER * sizeof(unsigned int)); method2sing[REQUESTS] = request_; method2sing[REQUESTS7] = request7_; method2sing[PAGES] = pagereq_; method2sing[PAGES7] = pagereq7_; method2sing[REDIR] = redirreq_; method2sing[REDIR7] = redirreq7_; method2sing[FAIL] = failreq_; method2sing[FAIL7] = failreq7_; method2sing[BYTES] = bytetraffic_; method2sing[BYTES7] = bytetraffic7_; method2pl = (unsigned int *)xmalloc(METHOD_NUMBER * sizeof(unsigned int)); method2pl[REQUESTS] = requests_; method2pl[REQUESTS7] = requests7_; method2pl[PAGES] = pagereqs_; method2pl[PAGES7] = pagereqs7_; method2pl[REDIR] = redirreqs_; method2pl[REDIR7] = redirreqs7_; method2pl[FAIL] = failreqs_; method2pl[FAIL7] = failreqs7_; method2pl[BYTES] = bytestraffic_; method2pl[BYTES7] = bytestraffic7_; method2date = (unsigned int *)xmalloc(METHOD_NUMBER * sizeof(unsigned int)); method2date[SUCCDATE] = sincedate_; method2date[REDIRDATE] = sinceredirdate_; method2date[FAILDATE] = sincefaildate_; method2date[SUCCFIRSTD] = sincefirstd_; method2date[REDIRFIRSTD] = sinceredirfirstd_; method2date[FAILFIRSTD] = sincefailfirstd_; method2pc = (unsigned int *)xmalloc(METHOD_NUMBER * sizeof(unsigned int)); method2pc[REQUESTS] = prequests_; method2pc[REQUESTS7] = prequests7_; method2pc[PAGES] = ppages_; method2pc[PAGES7] = ppages7_; method2pc[REDIR] = predirs_; method2pc[REDIR7] = predirs7_; method2pc[FAIL] = pfails_; method2pc[FAIL7] = pfails7_; method2pc[BYTES] = ptraffic_; method2pc[BYTES7] = ptraffic7_; method2relpc = (unsigned int *)xmalloc(METHOD_NUMBER * sizeof(unsigned int)); method2relpc[REQUESTS] = pmrequests_; method2relpc[REQUESTS7] = pmrequests7_; method2relpc[PAGES] = pmpages_; method2relpc[PAGES7] = pmpages7_; method2relpc[REDIR] = pmredirs_; method2relpc[REDIR7] = pmredirs7_; method2relpc[FAIL] = pmfails_; method2relpc[FAIL7] = pmfails7_; method2relpc[BYTES] = pmtraffic_; method2relpc[BYTES7] = pmtraffic7_; method2sort = (unsigned int *)xmalloc(METHOD_NUMBER * sizeof(unsigned int)); method2sort[REQUESTS] = nrequests_; method2sort[REQUESTS7] = nrequests7_; method2sort[PAGES] = npages_; method2sort[PAGES7] = npages7_; method2sort[REDIR] = nredirs_; method2sort[REDIR7] = nredirs7_; method2sort[FAIL] = nfails_; method2sort[FAIL7] = nfails7_; method2sort[SUCCDATE] = succdate_; method2sort[REDIRDATE] = redirdate_; method2sort[FAILDATE] = faildate_; method2sort[SUCCFIRSTD] = succfirstd_; method2sort[REDIRFIRSTD] = redirfirstd_; method2sort[FAILFIRSTD] = failfirstd_; method2sort[BYTES] = traffic_; method2sort[BYTES7] = traffic7_; } void defaults(Options *op) { double codethresh[] = {100., 101., 199., 200., 201., 202., 203., 204., 205., 206., 299., 300., 301., 302., 303., 304., 305., 306., 307., 399., 400., 401., 402., 403., 404., 405., 406., 407., 408., 409., 410., 411., 412., 413., 414., 415., 416., 417., 499., 500., 501., 502., 503., 504., 505., 506., 599., -1.}; double sizethresh[] = {0., 10., 100., 1024., 10240., 102400., 1048576., 10485760., 104857600., 1073741824., -1.}; double ptthresh[] = {0., 10., 20., 50., 100., 200., 500., 1000., 2000., 5000., 10000., 20000., 60000., 120000., 300000., 600000., -1.}; /* These thresholds have to be coordinated with the names in arrayrep(). The max codethresh & ptthresh also feature near the end of readcache(). */ double *thresh; int i, j, k; op->conffilelist = NULL; confline(op, "DEBUG", "OFF", NULL, -1); confline(op, "WARNINGS", "ON", NULL, -1); op->outopts.gensumlines = NULL; confline(op, "GENSUMLINES", "ON", NULL, -1); deflogformat = (Inputformatlist *)submalloc(xmemman, sizeof(Inputformatlist)); logformat = (Inputformatlist *)submalloc(xmemman, sizeof(Inputformatlist)); deflogformat->used = TRUE; logformat->used = TRUE; configlogfmt((void *)&deflogformat, "DEFAULTLOGFORMAT", "AUTO", NULL, -1); configlogfmt((void *)&logformat, "LOGFORMAT", "DEFAULT", NULL, -1); deflogformat->used = TRUE; op->miscopts.logfile[0] = NULL; op->miscopts.logfile[1] = NULL; confline(op, "LOGFILE", LOGFILE, NULL, -1); confline(op, "CACHEFILE", CACHEFILE, NULL, -1); op->outopts.domainsfile = NULL; op->outopts.descfile = NULL; COPYSTR(op->miscopts.dirsuffix, DIRSUFFIX); #ifndef NODNS dnslevel = DNS; dnsgoodhrs = DNSGOODHOURS; dnsbadhrs = DNSBADHOURS; COPYSTR(dnsfile, DNSFILE); COPYSTR(dnslockfile, DNSLOCKFILE); #ifndef NOALARM dnstimeout = DNSTIMEOUT; #endif #endif op->miscopts.case_insensitive = CASE_INSENSITIVE; op->miscopts.usercase_insensitive = USERCASE_INSENSITIVE; op->outopts.searchconv = SEARCHCHARCONVERT; op->outopts.outstyle = OUTPUT; op->outopts.html = TRUE; op->outopts.pdflatex = TRUE; COPYSTR(op->outopts.headerfile, HEADERFILE); COPYSTR(op->outopts.footerfile, FOOTERFILE); COPYSTR(op->outopts.outfile, OUTFILE); COPYSTR(op->outopts.cacheoutfile, CACHEOUTFILE); COPYSTR(op->outopts.imagedir, IMAGEDIR); op->outopts.chartdir = NULL; op->outopts.localchartdir = NULL; op->outopts.jpegcharts = FALSE; op->outopts.pngimages = PNGIMAGES; confline(op, "YEARCOLS", YEARCOLS, NULL, -1); confline(op, "QUARTERLYCOLS", QUARTERLYCOLS, NULL, -1); confline(op, "MONTHCOLS", MONTHCOLS, NULL, -1); confline(op, "WEEKCOLS", WEEKCOLS, NULL, -1); confline(op, "DAYREPCOLS", DAYREPCOLS, NULL, -1); confline(op, "DAYSUMCOLS", DAYSUMCOLS, NULL, -1); confline(op, "HOURREPCOLS", HOURREPCOLS, NULL, -1); confline(op, "HOURSUMCOLS", HOURSUMCOLS, NULL, -1); confline(op, "WEEKHOURCOLS", WEEKHOURCOLS, NULL, -1); confline(op, "QUARTERREPCOLS", QUARTERREPCOLS, NULL, -1); confline(op, "QUARTERSUMCOLS", QUARTERSUMCOLS, NULL, -1); confline(op, "FIVEREPCOLS", FIVEREPCOLS, NULL, -1); confline(op, "FIVESUMCOLS", FIVESUMCOLS, NULL, -1); confline(op, "REQCOLS", REQCOLS, NULL, -1); confline(op, "REDIRCOLS", REDIRCOLS, NULL, -1); confline(op, "FAILCOLS", FAILCOLS, NULL, -1); confline(op, "TYPECOLS", TYPECOLS, NULL, -1); confline(op, "SIZECOLS", SIZECOLS, NULL, -1); confline(op, "PROCTIMECOLS", PROCTIMECOLS, NULL, -1); confline(op, "DIRCOLS", DIRCOLS, NULL, -1); confline(op, "HOSTCOLS", HOSTCOLS, NULL, -1); confline(op, "REDIRHOSTCOLS", REDIRHOSTCOLS, NULL, -1); confline(op, "FAILHOSTCOLS", FAILHOSTCOLS, NULL, -1); confline(op, "DOMCOLS", DOMCOLS, NULL, -1); confline(op, "ORGCOLS", ORGCOLS, NULL, -1); confline(op, "REFCOLS", REFCOLS, NULL, -1); confline(op, "REFSITECOLS", REFSITECOLS, NULL, -1); confline(op, "REDIRREFCOLS", REDIRREFCOLS, NULL, -1); confline(op, "FAILREFCOLS", FAILREFCOLS, NULL, -1); confline(op, "BROWREPCOLS", BROWREPCOLS, NULL, -1); confline(op, "BROWSUMCOLS", BROWSUMCOLS, NULL, -1); confline(op, "OSCOLS", OSCOLS, NULL, -1); confline(op, "VHOSTCOLS", VHOSTCOLS, NULL, -1); confline(op, "REDIRVHOSTCOLS", REDIRVHOSTCOLS, NULL, -1); confline(op, "FAILVHOSTCOLS", FAILVHOSTCOLS, NULL, -1); confline(op, "USERCOLS", USERCOLS, NULL, -1); confline(op, "REDIRUSERCOLS", REDIRUSERCOLS, NULL, -1); confline(op, "FAILUSERCOLS", FAILUSERCOLS, NULL, -1); confline(op, "SEARCHQUERYCOLS", SEARCHQUERYCOLS, NULL, -1); confline(op, "SEARCHWORDCOLS", SEARCHWORDCOLS, NULL, -1); confline(op, "INTSEARCHQUERYCOLS", INTSEARCHQUERYCOLS, NULL, -1); confline(op, "INTSEARCHWORDCOLS", INTSEARCHWORDCOLS, NULL, -1); confline(op, "STATUSCOLS", STATUSCOLS, NULL, -1); op->outopts.repq[REP_YEAR] = YEARLY; op->outopts.repq[REP_QUARTERLY] = QUARTERLY; op->outopts.repq[REP_MONTH] = MONTHLY; op->outopts.repq[REP_WEEK] = WEEKLY; op->outopts.repq[REP_DAYREP] = DAILYREP; op->outopts.repq[REP_DAYSUM] = DAILYSUM; op->outopts.repq[REP_HOURREP] = HOURLYREP; op->outopts.repq[REP_HOURSUM] = HOURLYSUM; op->outopts.repq[REP_WEEKHOUR] = WEEKHOUR; op->outopts.repq[REP_QUARTERREP] = QUARTERREP; op->outopts.repq[REP_QUARTERSUM] = QUARTERSUM; op->outopts.repq[REP_FIVEREP] = FIVEREP; op->outopts.repq[REP_FIVESUM] = FIVESUM; op->outopts.repq[REP_GENSUM] = GENERAL; op->outopts.repq[REP_REQ] = REQUEST; op->outopts.repq[REP_REDIR] = REDIRREP; op->outopts.repq[REP_FAIL] = FAILREP; op->outopts.repq[REP_TYPE] = FILETYPE; op->outopts.repq[REP_SIZE] = SIZEREP; op->outopts.repq[REP_PROCTIME] = PROCTIME; op->outopts.repq[REP_DIR] = DIRECTORY; op->outopts.repq[REP_HOST] = HOST; op->outopts.repq[REP_REDIRHOST] = REDIRHOST; op->outopts.repq[REP_FAILHOST] = FAILHOST; op->outopts.repq[REP_DOM] = DOMAINREP; op->outopts.repq[REP_ORG] = ORGANISATION; op->outopts.repq[REP_REF] = REFERRER; op->outopts.repq[REP_REFSITE] = REFSITE; op->outopts.repq[REP_REDIRREF] = REDIRREF; op->outopts.repq[REP_FAILREF] = FAILREF; op->outopts.repq[REP_BROWREP] = BROWSERREP; op->outopts.repq[REP_BROWSUM] = BROWSERSUM; op->outopts.repq[REP_OS] = OSREP; op->outopts.repq[REP_VHOST] = VHOST; op->outopts.repq[REP_REDIRVHOST] = REDIRVHOST; op->outopts.repq[REP_FAILVHOST] = FAILVHOST; op->outopts.repq[REP_USER] = USER; op->outopts.repq[REP_REDIRUSER] = REDIRUSER; op->outopts.repq[REP_FAILUSER] = FAILUSER; op->outopts.repq[REP_SEARCHREP] = SEARCHQUERY; op->outopts.repq[REP_SEARCHSUM] = SEARCHWORD; op->outopts.repq[REP_INTSEARCHREP] = INTSEARCHQUERY; op->outopts.repq[REP_INTSEARCHSUM] = INTSEARCHWORD; op->outopts.repq[REP_CODE] = STATUS; op->outopts.last7 = LASTSEVEN; op->outopts.runtime = RUNTIME; op->outopts.gotos = GOTOS; op->outopts.repspan = REPORTSPAN; op->outopts.rsthresh = REPORTSPANTHRESHOLD; op->outopts.descriptions = DESCRIPTIONS; op->outopts.lang.code = LANGUAGE; op->outopts.lang.file = NULL; op->outopts.graph[REP_YEAR] = YEARGRAPH; op->outopts.graph[REP_QUARTERLY] = QUARTERLYGRAPH; op->outopts.graph[REP_MONTH] = MONTHGRAPH; op->outopts.graph[REP_WEEK] = WEEKGRAPH; op->outopts.graph[REP_DAYREP] = DAYREPGRAPH; op->outopts.graph[REP_DAYSUM] = DAYSUMGRAPH; op->outopts.graph[REP_HOURREP] = HOURREPGRAPH; op->outopts.graph[REP_HOURSUM] = HOURSUMGRAPH; op->outopts.graph[REP_WEEKHOUR] = WEEKHOURGRAPH; op->outopts.graph[REP_QUARTERREP] = QUARTERREPGRAPH; op->outopts.graph[REP_QUARTERSUM] = QUARTERSUMGRAPH; op->outopts.graph[REP_FIVEREP] = FIVEREPGRAPH; op->outopts.graph[REP_FIVESUM] = FIVESUMGRAPH; op->outopts.back[REP_YEAR] = YEARBACK; op->outopts.back[REP_QUARTERLY] = QUARTERLYBACK; op->outopts.back[REP_MONTH] = MONTHBACK; op->outopts.back[REP_WEEK] = WEEKBACK; op->outopts.back[REP_DAYREP] = DAYBACK; op->outopts.back[REP_HOURREP] = HOURBACK; op->outopts.back[REP_QUARTERREP] = QUARTERBACK; op->outopts.back[REP_FIVEREP] = FIVEBACK; op->outopts.rows[REP_YEAR] = YEARROWS; op->outopts.rows[REP_QUARTERLY] = QUARTERLYROWS; op->outopts.rows[REP_MONTH] = MONTHROWS; op->outopts.rows[REP_WEEK] = WEEKROWS; op->outopts.rows[REP_DAYREP] = DAYROWS; op->outopts.rows[REP_HOURREP] = HOURROWS; op->outopts.rows[REP_QUARTERREP] = QUARTERROWS; op->outopts.rows[REP_FIVEREP] = FIVEROWS; #ifndef NOGRAPHICS op->outopts.chartby[G(REP_REQ)] = REQCHART; op->outopts.chartby[G(REP_REDIR)] = REDIRCHART; op->outopts.chartby[G(REP_FAIL)] = FAILCHART; op->outopts.chartby[G(REP_TYPE)] = TYPECHART; op->outopts.chartby[G(REP_DIR)] = DIRCHART; op->outopts.chartby[G(REP_HOST)] = HOSTCHART; op->outopts.chartby[G(REP_REDIRHOST)] = REDIRHOSTCHART; op->outopts.chartby[G(REP_FAILHOST)] = FAILHOSTCHART; op->outopts.chartby[G(REP_DOM)] = DOMCHART; op->outopts.chartby[G(REP_REF)] = REFCHART; op->outopts.chartby[G(REP_REFSITE)] = REFSITECHART; op->outopts.chartby[G(REP_REDIRREF)] = REDIRREFCHART; op->outopts.chartby[G(REP_FAILREF)] = FAILREFCHART; op->outopts.chartby[G(REP_BROWREP)] = BROWREPCHART; op->outopts.chartby[G(REP_VHOST)] = VHOSTCHART; op->outopts.chartby[G(REP_REDIRVHOST)] = REDIRVHOSTCHART; op->outopts.chartby[G(REP_FAILVHOST)] = FAILVHOSTCHART; op->outopts.chartby[G(REP_USER)] = USERCHART; op->outopts.chartby[G(REP_REDIRUSER)] = REDIRUSERCHART; op->outopts.chartby[G(REP_FAILUSER)] = FAILUSERCHART; op->outopts.chartby[G(REP_ORG)] = ORGCHART; op->outopts.chartby[G(REP_SEARCHREP)] = SEARCHQUERYCHART; op->outopts.chartby[G(REP_SEARCHSUM)] = SEARCHWORDCHART; op->outopts.chartby[G(REP_INTSEARCHREP)] = INTSEARCHQUERYCHART; op->outopts.chartby[G(REP_INTSEARCHSUM)] = INTSEARCHWORDCHART; op->outopts.chartby[G(REP_BROWSUM)] = BROWSUMCHART; op->outopts.chartby[G(REP_OS)] = OSCHART; op->outopts.chartby[G(REP_SIZE)] = SIZECHART; op->outopts.chartby[G(REP_CODE)] = STATUSCHART; op->outopts.chartby[G(REP_PROCTIME)] = PROCTIMECHART; #else for (i = 0; i < GENREP_NUMBER; i++) op->outopts.chartby[i] = CHART_NONE;/* to avoid recording spurious stuff */ #endif /* NOGRAPHICS */ for (i = 0; i < GENREP_NUMBER; i++) { /* initialise all SUBSORTBYs to UNSET. Then we can use this later as a test for whether the report is a hierarchical report. Also set all SUBFLOOR methods to UNSET so that we don't count any unneeded data by mistake. */ op->outopts.subsortby[i] = UNSET; op->outopts.subfloor[i].floorby = UNSET; } op->outopts.sortby[G(REP_REQ)] = REQSORTBY; op->outopts.subsortby[G(REP_REQ)] = REQSORTBY; op->outopts.sortby[G(REP_REDIR)] = REDIRSORTBY; op->outopts.subsortby[G(REP_REDIR)] = REDIRSORTBY; op->outopts.sortby[G(REP_FAIL)] = FAILSORTBY; op->outopts.subsortby[G(REP_FAIL)] = FAILSORTBY; op->outopts.sortby[G(REP_TYPE)] = TYPESORTBY; op->outopts.subsortby[G(REP_TYPE)] = TYPESORTBY; op->outopts.sortby[G(REP_DIR)] = DIRSORTBY; op->outopts.subsortby[G(REP_DIR)] = DIRSORTBY; op->outopts.sortby[G(REP_HOST)] = HOSTSORTBY; op->outopts.sortby[G(REP_REDIRHOST)] = REDIRHOSTSORTBY; op->outopts.sortby[G(REP_FAILHOST)] = FAILHOSTSORTBY; op->outopts.sortby[G(REP_DOM)] = DOMSORTBY; op->outopts.subsortby[G(REP_DOM)] = DOMSORTBY; op->outopts.sortby[G(REP_ORG)] = ORGSORTBY; op->outopts.subsortby[G(REP_ORG)] = ORGSORTBY; op->outopts.sortby[G(REP_REF)] = REFSORTBY; op->outopts.subsortby[G(REP_REF)] = REFSORTBY; op->outopts.sortby[G(REP_REFSITE)] = REFSITESORTBY; op->outopts.subsortby[G(REP_REFSITE)] = REFSITESORTBY; op->outopts.sortby[G(REP_REDIRREF)] = REDIRREFSORTBY; op->outopts.subsortby[G(REP_REDIRREF)] = REDIRREFSORTBY; op->outopts.sortby[G(REP_FAILREF)] = FAILREFSORTBY; op->outopts.subsortby[G(REP_FAILREF)] = FAILREFSORTBY; op->outopts.sortby[G(REP_BROWREP)] = BROWREPSORTBY; op->outopts.sortby[G(REP_BROWSUM)] = BROWSUMSORTBY; op->outopts.subsortby[G(REP_BROWSUM)] = BROWSUMSORTBY; op->outopts.sortby[G(REP_OS)] = OSSORTBY; op->outopts.subsortby[G(REP_OS)] = OSSORTBY; op->outopts.sortby[G(REP_VHOST)] = VHOSTSORTBY; op->outopts.sortby[G(REP_REDIRVHOST)] = REDIRVHOSTSORTBY; op->outopts.sortby[G(REP_FAILVHOST)] = FAILVHOSTSORTBY; op->outopts.sortby[G(REP_USER)] = USERSORTBY; op->outopts.sortby[G(REP_REDIRUSER)] = REDIRUSERSORTBY; op->outopts.sortby[G(REP_FAILUSER)] = FAILUSERSORTBY; op->outopts.sortby[G(REP_SEARCHREP)] = SEARCHQUERYSORTBY; op->outopts.sortby[G(REP_SEARCHSUM)] = SEARCHWORDSORTBY; op->outopts.sortby[G(REP_INTSEARCHREP)] = INTSEARCHQUERYSORTBY; op->outopts.sortby[G(REP_INTSEARCHSUM)] = INTSEARCHWORDSORTBY; op->outopts.sortby[G(REP_CODE)] = STATUSSORTBY; op->outopts.sortby[G(REP_SIZE)] = ALPHABETICAL; op->outopts.sortby[G(REP_PROCTIME)] = ALPHABETICAL; confline(op, "REQFLOOR", REQFLOOR, NULL, -1); confline(op, "REQARGSFLOOR", REQARGSFLOOR, NULL, -1); confline(op, "REDIRFLOOR", REDIRFLOOR, NULL, -1); confline(op, "REDIRARGSFLOOR", REDIRARGSFLOOR, NULL, -1); confline(op, "FAILFLOOR", FAILFLOOR, NULL, -1); confline(op, "FAILARGSFLOOR", FAILARGSFLOOR, NULL, -1); confline(op, "TYPEFLOOR", TYPEFLOOR, NULL, -1); confline(op, "SUBTYPEFLOOR", SUBTYPEFLOOR, NULL, -1); confline(op, "DIRFLOOR", DIRFLOOR, NULL, -1); confline(op, "SUBDIRFLOOR", SUBDIRFLOOR, NULL, -1); confline(op, "HOSTFLOOR", HOSTFLOOR, NULL, -1); confline(op, "REDIRHOSTFLOOR", REDIRHOSTFLOOR, NULL, -1); confline(op, "FAILHOSTFLOOR", FAILHOSTFLOOR, NULL, -1); confline(op, "DOMFLOOR", DOMFLOOR, NULL, -1); confline(op, "SUBDOMFLOOR", SUBDOMFLOOR, NULL, -1); confline(op, "ORGFLOOR", ORGFLOOR, NULL, -1); confline(op, "SUBORGFLOOR", SUBORGFLOOR, NULL, -1); confline(op, "REFFLOOR", REFFLOOR, NULL, -1); confline(op, "REFARGSFLOOR", REFARGSFLOOR, NULL, -1); confline(op, "REFSITEFLOOR", REFSITEFLOOR, NULL, -1); confline(op, "REFDIRFLOOR", REFDIRFLOOR, NULL, -1); confline(op, "REDIRREFFLOOR", REDIRREFFLOOR, NULL, -1); confline(op, "REDIRREFARGSFLOOR", REDIRREFARGSFLOOR, NULL, -1); confline(op, "FAILREFFLOOR", FAILREFFLOOR, NULL, -1); confline(op, "FAILREFARGSFLOOR", FAILREFARGSFLOOR, NULL, -1); confline(op, "BROWREPFLOOR", BROWREPFLOOR, NULL, -1); confline(op, "BROWSUMFLOOR", BROWSUMFLOOR, NULL, -1); confline(op, "SUBBROWFLOOR", SUBBROWFLOOR, NULL, -1); confline(op, "OSFLOOR", OSFLOOR, NULL, -1); confline(op, "SUBOSFLOOR", SUBOSFLOOR, NULL, -1); confline(op, "VHOSTFLOOR", VHOSTFLOOR, NULL, -1); confline(op, "REDIRVHOSTFLOOR", REDIRVHOSTFLOOR, NULL, -1); confline(op, "FAILVHOSTFLOOR", FAILVHOSTFLOOR, NULL, -1); confline(op, "USERFLOOR", USERFLOOR, NULL, -1); confline(op, "REDIRUSERFLOOR", REDIRUSERFLOOR, NULL, -1); confline(op, "FAILUSERFLOOR", FAILUSERFLOOR, NULL, -1); confline(op, "SEARCHQUERYFLOOR", SEARCHQUERYFLOOR, NULL, -1); confline(op, "SEARCHWORDFLOOR", SEARCHWORDFLOOR, NULL, -1); confline(op, "INTSEARCHQUERYFLOOR", INTSEARCHQUERYFLOOR, NULL, -1); confline(op, "INTSEARCHWORDFLOOR", INTSEARCHWORDFLOOR, NULL, -1); confline(op, "STATUSFLOOR", STATUSFLOOR, NULL, -1); confline(op, "REPORTORDER", REPORTORDER, NULL, -1); op->outopts.barstyle = BARSTYLE; op->outopts.markchar = MARKCHAR; op->outopts.rawbytes = RAWBYTES; op->outopts.bytesdp = BYTESDP; op->outopts.norobots = NOROBOTS; op->outopts.linknofollow = LINKNOFOLLOW; COPYSTR(op->outopts.hostname, HOSTNAME); COPYSTR(op->outopts.xmldtd, XMLDTD); COPYSTR(op->outopts.hosturl, HOSTURL); COPYSTR(op->outopts.anonymizerurl, ANONYMIZERURL); op->outopts.baseurl = NULL; COPYSTR(op->outopts.logo, LOGO); COPYSTR(op->outopts.logourl, LOGOURL); COPYSTR(op->outopts.stylesheet, STYLESHEET); COPYSTR(op->outopts.cssprefix, CSSPREFIX); op->outopts.weekbeginson = WEEKBEGINSON; op->outopts.plainpagewidth = PLAINPAGEWIDTH; op->outopts.htmlpagewidth = HTMLPAGEWIDTH; op->outopts.latexpagewidth = LATEXPAGEWIDTH; op->outopts.mingraphwidth = MINGRAPHWIDTH; op->outopts.sepchar = (char)UNSET; op->outopts.repsepchar = (char)UNSET; op->outopts.decpt = (char)UNSET; COPYSTR(op->outopts.compsep, COMPSEP); for (i = 0; i < GENREP_NUMBER; i++) { op->outopts.link[i] = NULL; op->outopts.wanthead[i] = NULL; op->outopts.aliashead[i] = NULL; op->outopts.expandhead[i] = NULL; op->outopts.tree[i] = (Tree *)xmalloc(sizeof(Tree)); op->outopts.tree[i]->tree = NULL; op->outopts.tree[i]->space = (Memman *)xmalloc(sizeof(Memman)); op->outopts.tree[i]->space->curr_pos = NULL; op->outopts.tree[i]->space->first = NULL; op->outopts.tree[i]->space->alignment = ALIGNSIZE; } domlevels = (Strpairlist **)xmalloc(DOMLEVEL_NUMBER * sizeof(Strpairlist *)); for (i = 0; i < DOMLEVEL_NUMBER; i++) domlevels[i] = NULL; op->outopts.tree[G(REP_REQ)]->cutfn = &rnextname; op->outopts.tree[G(REP_REDIR)]->cutfn = &rnextname; op->outopts.tree[G(REP_FAIL)]->cutfn = &rnextname; op->outopts.tree[G(REP_REF)]->cutfn = &rnextname; op->outopts.tree[G(REP_REDIRREF)]->cutfn = &rnextname; op->outopts.tree[G(REP_FAILREF)]->cutfn = &rnextname; op->outopts.tree[G(REP_TYPE)]->cutfn = &tnextname; op->outopts.tree[G(REP_DIR)]->cutfn = &inextname; op->outopts.tree[G(REP_DOM)]->cutfn = &onextname; op->outopts.tree[G(REP_REFSITE)]->cutfn = &snextname; op->outopts.tree[G(REP_BROWSUM)]->cutfn = &bnextname; op->outopts.tree[G(REP_OS)]->cutfn = &pnextname; op->outopts.tree[G(REP_ORG)]->cutfn = &Znextname; for (i = 0; i < DERVREP_NUMBER; i++) { op->outopts.derv[i] = (Derv *)xmalloc(sizeof(Derv)); op->outopts.derv[i]->table = rehash(NULL, HASHSIZE, NULL); op->outopts.derv[i]->space = (Memman *)xmalloc(sizeof(Memman)); op->outopts.derv[i]->space->curr_pos = NULL; op->outopts.derv[i]->space->first = NULL; op->outopts.derv[i]->space->alignment = 1; } op->outopts.derv[REP_SEARCHREP - FIRST_DERVREP]->cutfn = &Nnextname; op->outopts.derv[REP_SEARCHSUM - FIRST_DERVREP]->cutfn = &nnextname; op->outopts.derv[REP_INTSEARCHREP - FIRST_DERVREP]->cutfn = &Nnextname; op->outopts.derv[REP_INTSEARCHSUM - FIRST_DERVREP]->cutfn = &nnextname; op->outopts.derv[REP_BROWSUM - FIRST_DERVREP]->cutfn = &Bnextname; op->outopts.derv[REP_OS - FIRST_DERVREP]->cutfn = &Pnextname; /* derv[*]->arg is set in finalinit so that lists of search engines and robots have already been read in */ op->outopts.suborgs = NULL; for (i = 0; i < LOGDATA_NUMBER; i++) op->miscopts.data[i] = 0; op->miscopts.bytes = 0.0; op->miscopts.bytes7 = 0.0; confline(op, "REQARGS", "*?*", NULL, -1); confline(op, "REDIRARGS", "*?*", NULL, -1); confline(op, "FAILARGS", "*?*", NULL, -1); confline(op, "REFARGS", "*?*", NULL, -1); confline(op, "REDIRREFARGS", "*?*", NULL, -1); confline(op, "FAILREFARGS", "*?*", NULL, -1); confline(op, "SUBDOMAIN", "*", NULL, -1); confline(op, "SUBORG2", "*", NULL, -1); confline(op, "SUBDIR", "*", NULL, -1); confline(op, "SUBTYPE", "*", NULL, -1); confline(op, "REFDIR", "*", NULL, -1); confline(op, "SUBBROW", "*", NULL, -1); confline(op, "SUBOS", "*:*", NULL, -1); for (i = 0; i < ITEM_NUMBER; i++) { op->wanthead[i] = NULL; op->aliashead[i] = NULL; op->hash[i] = rehash(NULL, HASHSIZE, NULL); op->miscopts.lowmem[i] = 0; } for (i = 0; i < MIN_SC; i++) op->code2type[i] = UNWANTED; for ( ; i < SC_NUMBER; i++) op->code2type[i] = UNSET; op->code2type[0] = UNSET; /* code2type[0] used as a special marker in ... */ op->succ304 = TRUE; /* ... configsinex(), correctlogfmt() & finalinit() */ for (i = 0; i < ARRAYREP_NUMBER; i++) { if (i == REP_CODE - FIRST_ARRAYREP) thresh = codethresh; else if (i == REP_SIZE - FIRST_ARRAYREP) thresh = sizethresh; else thresh = ptthresh; for (k = 0; thresh[k] > -0.5; k++) ; /* find size of array */ k++; op->arraydata[i] = (Arraydata *)xmalloc(k * sizeof(Arraydata)); for (j = 0; j < k; j++) { op->arraydata[i][j].threshold = thresh[j]; op->arraydata[i][j].reqs = 0; op->arraydata[i][j].pages = 0; op->arraydata[i][j].bytes = 0.0; op->arraydata[i][j].reqs7 = 0; op->arraydata[i][j].pages7 = 0; op->arraydata[i][j].bytes7 = 0.0; op->arraydata[i][j].lastdate = 0; op->arraydata[i][j].firstdate = LAST_TIME; } } op->searchengines = NULL; op->intsearchengines = NULL; op->robots = NULL; op->ispagehead = NULL; op->argshead = NULL; op->refargshead = NULL; confline(op, "PAGEINCLUDE", "*/", NULL, -1); confline(op, "PAGEINCLUDE", "REGEXPI:\\.html?$", NULL, -1); op->dman.fromstr = NULL; op->dman.tostr = NULL; op->dman.currdp = NULL; op->dman.firstdp = NULL; op->dman.lastdp = NULL; op->dman.firsttime = LAST_TIME; op->dman.lasttime = FIRST_TIME; } analog-ce-6.0.17/src/hash.c000066400000000000000000000204021406366436600153250ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** hash.c; the functions which do all the work in the hash tables. ***/ #include "anlghea3.h" Hashtable *rehash(Hashtable *old, unsigned long size, Memman *treespace) { /* Construct a new hash table out of an old one, using same buckets */ unsigned long i, magic; Hashindex *p, *nextp; Hashtable *ans; char *c; if (treespace != NULL && size * sizeof(Hashindex *) < BLOCKSIZE) { ans = (Hashtable *)submalloc(treespace, sizeof(Hashtable)); ans->head = (Hashindex **)submalloc(treespace, size * sizeof(Hashindex *)); } else { ans = (Hashtable *)xmalloc(sizeof(Hashtable)); ans->head = (Hashindex **)xmalloc(size * sizeof(Hashindex *)); } ans->size = size; ans->n = 0; for (i = 0; i < size; i++) ans->head[i] = NULL; if (old != NULL) { if (treespace != NULL) /* i.e. is tree */ ans->head[0] = old->head[0]; for (i = (unsigned long)(treespace != NULL); i < old->size; i++) { /* run through items in old table */ for (p = old->head[i]; p != NULL; p = nextp) { nextp = p->next; /* rehash p into new table */ if (treespace != NULL) { c = strchr(p->name, '\0'); MAGICNOTREE(magic, p->name, c, size); } else MAGICNO(magic, p->name, size); p->next = ans->head[magic]; ans->head[magic] = p; ans->n++; } } if (treespace == NULL || old->size * sizeof(Hashindex *) >= BLOCKSIZE) { /* free old table, if originally xmalloc'ed */ free((void *)(old->head)); free((void *)old); } } return(ans); } Hashindex *hashfind(Memman *mp, Hashtable **table, unsigned int data_number, Include *wanthead, choice ispage, Include *ispagehead, Alias *aliashead, char *dirsuffix, unsigned int dirsufflength, logical usercase_insensitive, unsigned char convfloor, logical multibyte, choice type, logical aliased) { /* NB The calling function will normally consult (lp->own) if aliased, (Hashentry *)(lp->other) if !aliased */ /* NB2 ispage != UNSET only if aliasing and in/excluding already done too */ /* If aliased, aliashead isn't used */ /* convfloor and multibyte only passed to do_alias, and only used if we are constructing the Search Word Report or Search Query Report */ extern Hashentry *unwanted_entry, *blank_entry; extern Memman *amemman, *xmemman; unsigned long magic; /* register'ing this made it slower on my machine */ Hashindex *lp, *lastlp; char *name, *c; choice rc; if (TOO_FULL((*table)->n, (*table)->size)) *table = rehash(*table, NEW_SIZE((*table)->size), NULL); name = (char *)(mp->curr_pos); MAGICNO(magic, name, (*table)->size); lp = (*table)->head[magic]; lastlp = NULL; while (TRUE) { if (lp == NULL) { /* need a new index entry */ lp = (Hashindex *)submalloc(xmemman, sizeof(Hashindex)); if (lastlp == NULL) (*table)->head[magic] = lp; else lastlp->next = lp; lp->name = name; lp->own = NULL; lp->other = NULL; lp->next = NULL; ((*table)->n)++; if (aliased) { if (ispage == UNSET) { ispage = (choice)pageq(name, ispagehead, type); if (included(name, (logical)ispage, wanthead)) lp->own = newhashentry(data_number, (logical)ispage); else lp->own = unwanted_entry; } else lp->own = newhashentry(data_number, (logical)ispage); } else { if ((rc = do_alias(lp->name, amemman, aliashead, dirsuffix, dirsufflength, usercase_insensitive, convfloor, multibyte, type)) == TRUE) lp->other = (void *)hashfind(amemman, table, data_number, wanthead, UNSET, ispagehead, NULL, dirsuffix, dirsufflength, usercase_insensitive, convfloor, multibyte, type, TRUE)->own; else if (rc == ERR) { if (included("", FALSE, wanthead)) { lp->own = blank_entry; lp->other = (void *)blank_entry; } else { lp->own = unwanted_entry; lp->other = (void *)unwanted_entry; } } else { ispage = (choice)pageq(name, ispagehead, type); if (included(name, (logical)ispage, wanthead)) { lp->own = newhashentry(data_number, (logical)ispage); lp->other = (void *)(lp->own); } else { lp->own = unwanted_entry; lp->other = (void *)unwanted_entry; } } } /* end !aliased */ return(lp); } /* end need new entry */ else if (STREQ(lp->name, name)) { /* found it */ mp->next_pos = mp->curr_pos; /* overwrites old name in mp */ if (aliased) { if (lp->own == NULL) { /* haven't calculated lp->own yet */ if (ispage == UNSET) { if (type == ITEM_FILE) { if ((c = strchr(name, '?')) != NULL) { *c = '\0'; ispage = (choice)included(name, FALSE, ispagehead); *c = '?'; } else ispage = (choice)included(name, FALSE, ispagehead); } else ispage = FALSE; if (included(name, (logical)ispage, wanthead)) lp->own = newhashentry(data_number, (logical)ispage); else lp->own = unwanted_entry; } else lp->own = newhashentry(data_number, (logical)ispage); } } else { /* !aliased */ if (lp->other == NULL) { if ((rc = do_alias(lp->name, amemman, aliashead, dirsuffix, dirsufflength, usercase_insensitive, convfloor, multibyte, type)) == FALSE) lp->other = (void *)(lp->own); /* own must have been set because alias hasn't */ else if (rc == TRUE) lp->other = (void *)hashfind(amemman, table, data_number, wanthead, UNSET, ispagehead, NULL, dirsuffix, dirsufflength, usercase_insensitive, convfloor, multibyte, type, TRUE)->own; else /* rc == ERR */ if (included("", FALSE, wanthead)) lp->other = (void *)blank_entry; else lp->other = (void *)unwanted_entry; } } /* end !aliased */ return(lp); } /* end found it */ else { lastlp = lp; TO_NEXT(lp); } } } Hashentry *newhashentry(unsigned int data_number, logical ispage) { extern Memman *xmemman; Hashentry *ans; unsigned int i; ans = (Hashentry *)submalloc(xmemman, sizeof(Hashentry)); ans->data = (unsigned long *)submalloc(xmemman, data_number * sizeof(unsigned long)); for (i = 0; i < data_number; i++) ans->data[i] = 0; ans->bytes = 0.0; ans->bytes7 = 0.0; ans->ispage = ispage; ans->reused = TRUE; /* only used in tree.c: see newtreedata() there */ return(ans); } void hashscore(Hashentry *ep, unsigned long data[DATA2_NUMBER], choice datacols[DATACOLS_NUMBER][2], choice outcome, double bytes) { for ( ; **datacols >= 0; datacols++) { if ((*datacols)[1] == DATE2) ep->data[(*datacols)[0]] = MAX(ep->data[(*datacols)[0]], data[DATE2]); else if ((*datacols)[1] == FIRSTD2 && ep->data[(*datacols)[0]] != 0 && data[FIRSTD2] != 0) /* kludge for first entry: too hard to initialise the correct columns to LAST_TIME in newhashentry */ ep->data[(*datacols)[0]] = MIN(ep->data[(*datacols)[0]], data[FIRSTD2]); else ep->data[(*datacols)[0]] += data[(*datacols)[1]]; } if (outcome == SUCCESS) { ep->bytes += bytes; if (data[REQUESTS72] > 0) { ep->bytes7 += bytes; } } } void unhash(Hashtable *hash, Hashindex **gooditems, Hashindex **baditems) { Hashindex *p, *nextp; unsigned long j; *gooditems = NULL; *baditems = NULL; for (j = 0; j < hash->size; j++) { /* run through all items */ for (p = hash->head[j]; p != NULL; p = nextp) { nextp = p->next; p->next = *gooditems; /* compiling backwards is easier */ *gooditems = p; } } } void unhashall(Hashtable **hash, Hashindex ***gooditems, Hashindex ***baditems) { unsigned int i; *gooditems = (Hashindex **)xmalloc(ITEM_NUMBER * sizeof(Hashindex *)); *baditems = (Hashindex **)xmalloc(ITEM_NUMBER * sizeof(Hashindex *)); for (i = 0; i < ITEM_NUMBER; i++) { unhash(hash[i], &((*gooditems)[i]), &((*baditems)[i])); } } analog-ce-6.0.17/src/init.c000066400000000000000000002037741406366436600153640ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** init.c; initialisation routines ***/ /* See also init2.c and globals.c */ #include "anlghea3.h" void initialise(int argc, char *argv[], Options *op) { #ifdef MAC_EVENTS MacInit(&argc, &argv); #endif #ifdef WIN32 Win32Init(); #endif globals(argv[0]); defaults(op); settings(op, argc, argv); correct(op); finalinit(op); } void confline(Options *op, char *cmd, char *arg1, char *arg2, int rc) { extern Options opts; extern Configfns cf[]; extern char *pos; char u[265]; /* see nextconfline() and uses of u below */ char *savepos; int i; logical done = FALSE; strtoupper(cmd); if (rc >= 2 && (STREQ(cmd, "SUBDOMAIN") || STREQ(cmd, "SUBDOM"))) { /* ugly but easy */ if (strchr(arg1, '*') != NULL) warn('C', TRUE, "Can't have * in first of two arguments to SUBDOMAIN: " "ignoring second argument"); else { sprintf(u, "PLAIN:%s (%s)", arg1, arg2); configalias((void *)&(op->outopts.aliashead[G(REP_DOM)]), "SUBDOMAIN", arg1, u, -1); } rc--; /* to avoid error message */ } for (i = 0; cf[i].fn != NULL && !done; i++) { if (STREQ(cmd, cf[i].name)) { /* I think memcpy is OK, but in case we call it recursively one day... */ memmove((void *)&opts, (void *)op, sizeof(Options)); cf[i].fn(cf[i].opt, cmd, arg1, arg2, rc); memmove((void *)op, (void *)&opts, sizeof(Options)); if (cf[i].fn == &configcall && rc != '\0' && !IS_EMPTY_STRING(arg1)) { savepos = pos; strcpy(u, arg1); /* or name will get obliterated before fclose */ (void)config(u, op, FALSE); pos = savepos; } done = TRUE; } } if (!done) unknownwarn(cmd, arg1, arg2); } choice config(char *filename, Options *op, logical fromcommandline) { extern Inputformatlist *logformat; extern char *pos; static int no_confs = 0; FILE *f; char *fullname, *cmd, *arg1, *arg2; int rc; if (fromcommandline || IS_STDIN(filename)) fullname = filename; else fullname = buildfilename(CONFIGDIR, "", filename); if ((f = my_fopen(fullname, "configuration file")) == NULL) return(ERR); if (no_confs++ >= MAX_CONFIGS) error("Attempted to read more than %d configuration files", MAX_CONFIGS); configstrlist((void *)&(op->conffilelist), "", fullname, NULL, -1); pos = NULL; while ((rc = nextconfline(f, &cmd, &arg1, &arg2)) != EOF) confline(op, cmd, arg1, arg2, rc); (void)my_fclose(f, fullname, "configuration file"); if (!(logformat->used)) warn('D', TRUE, "LOGFORMAT in configuration file %s with no subsequent LOGFILE", filename); configlogfmt((void *)&logformat, "LOGFORMAT", "DEFAULT", NULL, -1); return(OK); } void settings(Options *op, int argc, char *argv[]) { extern Inputformatlist *logformat; extern logical newloglist; int i; logical done; /* once through command line arguments to see if we just want help */ for (i = 0; i < argc; i++) { if (STREQ(argv[i], "-help") || STREQ(argv[i], "-version") || STREQ(argv[i], "--help") || STREQ(argv[i], "--version")) { fprintf(stderr, "This is analog version %s\n", VERSION); fprintf(stderr, "For help see docs/Readme.html, " #ifdef UNIX "or man analog, " #endif "or %s\n", ANALOGURL); my_exit(EXIT_SUCCESS); } } /* once through command line arguments to see if default config wanted */ newloglist = TRUE; if (!strcaseeq(DEFAULTCONFIGFILE, "none")) { for (i = argc - 1, done = FALSE; i >= 1 && !done; i--) { if (!IS_EMPTY_STRING(argv[i]) && argv[i][1] == 'G' && (argv[i][0] == '+' || argv[i][0] == '-')) { done = TRUE; CLLONGCHECK(if (argv[i][0] == '+') (void)config(DEFAULTCONFIGFILE, op, FALSE);) } } if (!done) (void)config(DEFAULTCONFIGFILE, op, FALSE); } /* now read in rest of command line arguments */ newloglist = TRUE; clargs(op, argc, argv); if (!(logformat->used)) warn('D', TRUE, "LOGFORMAT on command line with no subsequent logfile"); configlogfmt((void *)&logformat, "LOGFORMAT", "DEFAULT", NULL, -1); /* finally, read in mandatory config file, aborting if not found */ newloglist = TRUE; if (!strcaseeq(MANDATORYCONFIGFILE, "none") && config(MANDATORYCONFIGFILE, op, FALSE) == ERR) error("Cannot ignore mandatory configuration file"); } Inputformatlist *correctlogfmt(Logfile *lp, Include **wanthead, choice *code2type, Dateman *dman) { /* Here's a summary of what happens, minus several bells and whistles. At logfile parse time (strtoinfmt() below), fmt->count[ITEM] was set to 2 for counted items, 1 for starred items. Now if the item isn't wanted, its count is reduced to 1. Then if an item with count 1 is not filtered, its count is reduced to 0 and its %x is changed to %j. Filenames are special because whether a lot of other things get counted depend on the presence of a filename. If there are no items left with count 2, the whole logfile is ignored. */ extern choice wantitem[]; extern Inputfns inpfns[], pjinpfn; extern char *item_type[]; Inputformatlist *fmt; Inputformat *fns; logical noitem[ITEM_NUMBER], nodates, nocodes, nonames, nobytes; int count, i, j; for (count = 0, fmt = lp->format; fmt != NULL; TO_NEXT(fmt)) { if (!wantitem[INP_CODE] && fmt->count[INP_CODE] == 2) fmt->count[INP_CODE] = 1; if (!wantitem[INP_DATE] && fmt->count[INP_DATE] == 2) fmt->count[INP_DATE] = 1; /* NB read date even if not filtered */ for (fns = fmt->form; fns->inpfns != NULL; TO_NEXT(fns)) { for (i = 0; i < ITEMFNS_NUMBER; i++) { if (fns->inpfns == &inpfns[i]) { j = inpfns[i].type; if (!wantitem[j] && fmt->count[j] == 2 && !(j == ITEM_FILE && (fmt->count[INP_DATE] == 2 || fmt->count[INP_CODE] > 0 || fmt->count[INP_BYTES] > 0 || fmt->count[INP_PROCTIME] > 0))) fmt->count[j] = 1; if (wanthead[j] == NULL && fmt->count[j] == 1 && j != ITEM_FILE && !(j == ITEM_VHOST && lp->pvpos != UNSET)) { if (inpfns[i].fn != &parseref) fns->inpfns = &pjinpfn; fmt->count[j] = 0; } count += (int)(fmt->count[j] == 2); } } /* end for i through ITEMFNS */ if (fns->inpfns->fn == &parselogfmt) { count++; for (i = 0; i < INPUT_NUMBER; i++) fmt->count[i] = 1; /* just so doesn't trigger warnings below */ } } /* end for fns in fmt */ } /* end for fmt through formats */ if (count == 0) lp->format = NULL; /* i.e., mark logfile to be ignored */ else { for (i = 0; i < ITEM_NUMBER; i++) noitem[i] = FALSE; nodates = FALSE; nocodes = FALSE; nonames = FALSE; nobytes = FALSE; for (fmt = lp->format; fmt != NULL; TO_NEXT(fmt)) { for (count = 0, j = 0; j < INPUT_NUMBER; j++) count += (int)(fmt->count[j] == 2); if (count > 0) { for (i = 0; i < ITEM_NUMBER; i++) { if (fmt->count[i] == 0) noitem[i] = TRUE; } if (fmt->count[INP_DATE] == 0) nodates = TRUE; if (fmt->count[INP_CODE] == 0) nocodes = TRUE; if (fmt->count[ITEM_FILE] == 0) nonames = TRUE; if (fmt->count[INP_BYTES] == 0) nobytes = TRUE; } } for (i = 0; i < ITEM_NUMBER; i++) { if (wanthead[i] != NULL && noitem[i]) warn('M', TRUE, "Logfile %s contains lines with no %s, which are " "being filtered", lp->name, item_type[i]); } if (code2type[0] != UNSET && nocodes) warn('M', TRUE, "Logfile %s contains lines with no status codes, " "which are being filtered", lp->name); if ((dman->from > FIRST_TIME || dman->to < LAST_TIME) && nodates) warn('M', TRUE, "Logfile %s contains lines with no dates, which are " "being filtered", lp->name); if (nonames) warn('M', TRUE, "Logfile %s contains lines with no file names: " "page counts may be low", lp->name); if (nobytes) warn('M', TRUE, "Logfile %s contains lines with no bytes: byte counts " "may be low", lp->name); } return(lp->format); } void correct(Options *op) { extern time_t origstarttime, starttime; extern timecode_t starttimec; extern int stz; extern Inputformatlist *deflogformat; extern char *repname[], *methodname[]; extern unsigned int *rep2gran; extern choice *rep2type, *rep2reqs; extern choice wantitem[]; extern logical vblesonly; Outchoices *od = &(op->outopts); choice outstyle = od->outstyle; char *sf = "SUBFLOOR"; char *af = "ARGSFLOOR"; char *ss = "SUBSORTBY"; char *as = "ARGSSORTBY"; Logfile *lp; Include *incp, *lastincp; choice rep, *cols, floor, subfloor, sortby, subsortby, chartby; char *subf, *subs, *c; logical colsinc[COL_NUMBER], istree, templ; char graph; int i, j, k; /* NB some options, e.g. reportorder, corrected when parsed */ origstarttime = starttime; starttime = shifttime(starttime, stz); starttimec += stz; if (od->markchar == '\0') { warn('C', TRUE, "MARKCHAR none not allowed. Using + instead."); od->markchar = '+'; } if (od->decpt == '\0') { warn('C', TRUE, "DECPOINT none not allowed. " "Getting it from language file instead."); od->decpt = (char)UNSET; /* and will be read from lang file */ } if (od->bytesdp > 6) { warn('C', TRUE, "The maximum allowed value of BYTESDP is 6. " "For exact numbers, use RAWBYTES ON"); od->bytesdp = 6; } op->dman.from = FIRST_TIME; if (op->dman.fromstr != NULL && /* so parse unless fromstr is NULL */ parsedate(starttime, op->dman.fromstr, &(op->dman.from), TRUE, FALSE) == ERR) warn('C', TRUE, "Invalid FROM string %s: ignoring it", op->dman.fromstr); op->dman.to = LAST_TIME; if (op->dman.tostr != NULL && parsedate(starttime, op->dman.tostr, &(op->dman.to), FALSE, FALSE) == ERR) warn('C', TRUE, "Invalid TO string %s: ignoring it", op->dman.tostr); if (op->dman.from > op->dman.to) { warn('C', TRUE, "FROM time is later than TO time: " "would exclude everything so ignoring them"); op->dman.from = FIRST_TIME; op->dman.to = LAST_TIME; } for (i = 0, lp = op->miscopts.logfile[0]; lp != NULL; TO_NEXT(lp)) i = MAX(i, lp->tz); if (op->dman.from > starttimec + i + 60) /* one hour's grace */ warn('D', TRUE, "FROM time is later than the present"); if (op->dman.to < LAST_TIME) { op->dman.last7from = op->dman.to - MINS_IN_WEEK; op->dman.last7to = op->dman.to; } else { op->dman.last7from = starttimec - MINS_IN_WEEK; op->dman.last7to = starttimec; } if (outstyle == HTML || outstyle == XHTML) { if (od->htmlpagewidth == 0) od->htmlpagewidth = 1; else if (od->htmlpagewidth > MAXPAGEWIDTH) { warn('C', TRUE, "HTMLPAGEWIDTH %u too large: using maximum allowed " "value of %u", od->htmlpagewidth, MAXPAGEWIDTH); od->htmlpagewidth = MAXPAGEWIDTH; } } else if (outstyle == ASCII || outstyle == PLAIN) { if (od->plainpagewidth == 0) od->plainpagewidth = 1; else if (od->plainpagewidth > MAXPAGEWIDTH) { warn('C', TRUE, "PLAINPAGEWIDTH %u too large: using maximum allowed " "value of %u", od->plainpagewidth, MAXPAGEWIDTH); od->plainpagewidth = MAXPAGEWIDTH; } } else if (outstyle == LATEX) { if (od->latexpagewidth == 0) od->latexpagewidth = 1; else if (od->latexpagewidth > MAXPAGEWIDTH) { warn('C', TRUE, "LATEXPAGEWIDTH %u too large: using maximum allowed " "value of %u", od->latexpagewidth, MAXPAGEWIDTH); od->latexpagewidth = MAXPAGEWIDTH; } } for (lastincp = NULL, incp = op->argshead, templ = FALSE; incp != NULL; TO_NEXT(incp)) { if (STREQ((char *)(incp->name), "pages")) { if (!templ) warn('C', TRUE, "ARGSINCLUDE/EXCLUDE can't include 'pages'"); templ = TRUE; if (lastincp == NULL) op->argshead = incp->next; else lastincp->next = incp->next; } else lastincp = incp; } for (lastincp = NULL, incp = op->refargshead, templ = FALSE; incp != NULL; TO_NEXT(incp)) { if (STREQ((char *)(incp->name), "pages")) { if (!templ) warn('C', TRUE, "REFARGSINCLUDE/EXCLUDE can't include 'pages'"); templ = TRUE; if (lastincp == NULL) op->refargshead = incp->next; else lastincp->next = incp->next; } else lastincp = incp; } for (i = 0, j = 0, k = 0; i < DATEREPORTS_NUMBER; i++) { j += (int)(od->repq[i] && od->back[i]); k += (int)(od->repq[i]); } if (j != 0 && j != k) warn('D', TRUE, "Time reports have not all got same value of BACK"); /* The next bit is totally foul, so here's a guide. Numbers are repeated in comments below. [C] problems are overridden, [D] are just warned. for (i through reports turned on, except GENSUM) { if (time report) { *** (1) *** check COLS don't include C, c, D, d, E, e, Q, q, S, s or N [C] check GRAPH included in COLS [D] } else (non-time reports) { *** (2) *** if (REP_REQ || REP_TYPE) { *** (3) *** Check P, Q not in COLS or (sub)SORTBY or (sub)FLOOR [C] For REP_TYPE, also check p, q not in COLS or CHART [C] } else if (redirection/failure report || REP_CODE) { *** (4) *** Check P, p, Q, q, B, b, C, c not in COLS or (sub)SORTBY or (sub)FLOOR or CHART [C] } Interpret "CHART SORTBY" *** (5) *** if (REP_SIZE || REP_PROCTIME) { *** (6) *** Check N not in COLS [C] } else { *** (7) *** Check SORTBY matches SUBSORTBY [D] Check FLOOR matches SUBFLOOR [D] Check SORTBY matches FLOOR [D] Check CHART matches SORTBY [D] Check no column N if SORTBY ALPHABETICAL or RANDOM [D] Check (sub)SORTBY and (sub)FLOOR and CHART in COLS [D] } } Check COLS non-empty [D] *** (8) *** } */ for (i = 0; od->reporder[i] != -1; i++) { rep = od->reporder[i]; if (rep != REP_GENSUM && od->repq[rep]) { cols = od->cols[rep]; for (j = 0; j < COL_NUMBER; j++) colsinc[j] = FALSE; for (j = 0; cols[j] != COL_NUMBER; j++) colsinc[cols[j]] = TRUE; if (rep < DATEREP_NUMBER) { /* *** (1) *** time reports */ graph = od->graph[rep]; if (colsinc[COL_FIRSTD] || colsinc[COL_FIRSTT] || colsinc[COL_DATE] || colsinc[COL_TIME] || colsinc[COL_INDEX] || colsinc[COL_REQS7] || colsinc[COL_PAGES7] || colsinc[COL_BYTES7] || colsinc[COL_PREQS7] || colsinc[COL_PPAGES7] || colsinc[COL_PBYTES7]) { warn('C', TRUE, "In %s, C, c, D, d, E, e, Q, q, S, s and N not " "allowed in COLS: ignoring them", repname[rep]); for (j = 0; cols[j] != COL_NUMBER; j++) { if (cols[j] == COL_FIRSTD || cols[j] == COL_FIRSTT || cols[j] == COL_DATE || cols[j] == COL_TIME || cols[j] == COL_REQS7 || cols[j] == COL_PAGES7 || cols[j] == COL_BYTES7 || cols[j] == COL_PREQS7 || cols[j] == COL_PPAGES7 || cols[j] == COL_PBYTES7 || cols[j] == COL_INDEX) { for (k = j; cols[k] != COL_NUMBER; k++) cols[k] = cols[k + 1]; j--; } } } if (cols[0] != COL_NUMBER) { /* o/wise different warning below */ if (((graph == 'R' || graph == 'r') && !colsinc[COL_REQS] && !colsinc[COL_PREQS]) || ((graph == 'P' || graph == 'p') && !colsinc[COL_PAGES] && !colsinc[COL_PPAGES]) || ((graph == 'B' || graph == 'b') && !colsinc[COL_BYTES] && !colsinc[COL_PBYTES])) warn('D', TRUE, "In %s, GRAPH (%c) isn't included in COLS", repname[rep], graph); } } /* end if time report */ else { /* *** (2) *** non-time reports */ sortby = od->sortby[G(rep)]; floor = od->floor[G(rep)].floorby; subsortby = od->subsortby[G(rep)]; subfloor = od->subfloor[G(rep)].floorby; chartby = (outstyle == HTML || outstyle == XHTML)?\ (od->chartby[G(rep)]):CHART_NONE; if (rep == REP_REQ || rep == REP_FAIL || rep == REP_REDIR || rep == REP_REF || rep == REP_FAILREF || rep == REP_REDIRREF) { subf = af; /* Just to get the error messages right */ subs = as; } else { subf = sf; subs = ss; } istree = (od->subsortby[G(rep)] != UNSET); /* For istree, see comment on initialising SUBSORTBYs in globals.c */ if (rep == REP_REQ || rep == REP_TYPE) { /* *** (3) *** */ if (rep == REP_REQ) { if (colsinc[COL_PAGES] || colsinc[COL_PAGES7]) { warn('C', TRUE, "In %s, P and Q not allowed in COLS: " "ignoring them", repname[rep]); for (j = 0; cols[j] != COL_NUMBER; j++) { if (cols[j] == COL_PAGES || cols[j] == COL_PAGES7) { for (k = j; cols[k] != COL_NUMBER; k++) cols[k] = cols[k + 1]; j--; } } } } else /* REP_TYPE */if (colsinc[COL_PAGES] || colsinc[COL_PAGES7] || colsinc[COL_PPAGES] || colsinc[COL_PPAGES7]) { warn('C', TRUE, "In %s, P, p, Q and q not allowed in COLS: " "ignoring them", repname[rep]); for (j = 0; cols[j] != COL_NUMBER; j++) { if (cols[j] == COL_PAGES || cols[j] == COL_PAGES7 || cols[j] == COL_PPAGES|| cols[j] == COL_PPAGES7) { for (k = j; cols[k] != COL_NUMBER; k++) cols[k] = cols[k + 1]; j--; } } } if (sortby == PAGES || sortby == PAGES7) { warn('C', TRUE, "In %s, illegal SORTBY (%s): will sort by " "requests instead", repname[rep], methodname[sortby]); od->sortby[G(rep)] = (sortby == PAGES)?REQUESTS:REQUESTS7; sortby = (sortby == PAGES)?REQUESTS:REQUESTS7; } if (floor == PAGES || floor == PAGES7) { warn('C', TRUE, "In %s, illegal FLOOR (%s): will use requests " "instead", repname[rep], methodname[floor]); od->floor[G(rep)].floorby = (floor == PAGES)?REQUESTS:REQUESTS7; floor = (floor == PAGES)?REQUESTS:REQUESTS7; } if (istree) { if (subsortby == PAGES || subsortby == PAGES7) { warn('C', TRUE, "In %s, illegal %s (%s): will sort by requests " "instead", repname[rep], subs, methodname[subsortby]); od->subsortby[G(rep)] = (subsortby == PAGES)?REQUESTS:REQUESTS7; subsortby = (subsortby == PAGES)?REQUESTS:REQUESTS7; } if (subfloor == PAGES || subfloor == PAGES7) { warn('C', TRUE, "In %s, illegal %s (%s): will use requests " "instead", repname[rep], subf, methodname[subfloor]); od->subfloor[G(rep)].floorby = (subfloor == PAGES)?REQUESTS:REQUESTS7; subfloor = (subfloor == PAGES)?REQUESTS:REQUESTS7; } } if (rep == REP_TYPE && (chartby == PAGES || chartby == PAGES7)) { warn('C', TRUE, "In %s, illegal CHART (%s): will chart by " "requests instead", repname[rep], methodname[chartby]); od->chartby[G(rep)] = REQUESTS; chartby = REQUESTS; } } /* end rep == REP_REQ || rep == REP_TYPE */ else if (rep2reqs[G(rep)] != REQUESTS || rep == REP_CODE) { /* i.e. redirection/failure or REP_CODE */ /* *** (4) *** */ if (colsinc[COL_PAGES] || colsinc[COL_PPAGES] || colsinc[COL_PAGES7] || colsinc[COL_PPAGES7] || colsinc[COL_BYTES] || colsinc[COL_PBYTES] || colsinc[COL_BYTES7] || colsinc[COL_PBYTES7]) { warn('C', TRUE, "In %s, P, p, Q, q B, b, C and c not allowed in " "COLS: ignoring them", repname[rep]); for (j = 0; cols[j] != COL_NUMBER; j++) { if (cols[j] == COL_PAGES || cols[j] == COL_PPAGES || cols[j] == COL_PAGES7 || cols[j] == COL_PPAGES7 || cols[j] == COL_BYTES || cols[j] == COL_PBYTES || cols[j] == COL_BYTES7 || cols[j] == COL_PBYTES7) { for (k = j; cols[k] != COL_NUMBER; k++) cols[k] = cols[k + 1]; j--; } } } if (sortby == PAGES || sortby == PAGES7 || sortby == BYTES || sortby == BYTES7) { warn('C', TRUE, "In %s, illegal SORTBY (%s): will sort by " "requests instead", repname[rep], methodname[sortby]); od->sortby[G(rep)] = REQUESTS; sortby = REQUESTS; } if (floor == PAGES || floor == PAGES7 || floor == BYTES || floor == BYTES7) { warn('C', TRUE, "In %s, illegal FLOOR (%s): will use -50r instead", repname[rep], methodname[floor]); od->floor[G(rep)].min = -50; od->floor[G(rep)].qual = '\0'; od->floor[G(rep)].floorby = REQUESTS; floor = REQUESTS; } if (chartby == PAGES || chartby == PAGES7 || chartby == BYTES || chartby == BYTES7) { warn('C', TRUE, "In %s, illegal CHART (%s): will chart by " "requests instead", repname[rep], methodname[chartby]); od->chartby[G(rep)] = REQUESTS; chartby = REQUESTS; } if (istree) { if (subsortby == PAGES || subsortby == PAGES7 || subsortby == BYTES || subsortby == BYTES7) { warn('C', TRUE, "In %s, illegal %s (%s): will sort by requests " "instead", repname[rep], subs, methodname[subsortby]); od->subsortby[G(rep)] = REQUESTS; subsortby = REQUESTS; } if (subfloor == PAGES || subfloor == PAGES7 || subfloor == BYTES || subfloor == BYTES7) { warn('C', TRUE, "In %s, illegal %s (%s): will use -1r instead", repname[rep], subf, methodname[subfloor]); od->subfloor[G(rep)].min = -1; od->subfloor[G(rep)].qual = '\0'; od->subfloor[G(rep)].floorby = REQUESTS; subfloor = REQUESTS; } } } /* end redirection/failure || REP_CODE */ if (chartby == CHART_SORTBY) { /* *** (5) *** */ if (sortby == REQUESTS || sortby == REQUESTS7 || sortby == PAGES || sortby == PAGES7 || sortby == BYTES || sortby == BYTES7) od->chartby[G(rep)] = sortby; else if (floor == REQUESTS || floor == REQUESTS7 || floor == PAGES || floor == PAGES7 || floor == BYTES || floor == BYTES7) od->chartby[G(rep)] = floor; else od->chartby[G(rep)] = REQUESTS; chartby = od->chartby[G(rep)]; } /* "if" not "else if" is correct (to make next "else if" work) */ if (rep == REP_SIZE || rep == REP_PROCTIME) { /* *** (6) *** */ if (colsinc[COL_INDEX]) { warn('C', TRUE, "In %s, N not allowed in COLS: ignoring it", repname[rep]); for (j = 0; cols[j] != COL_NUMBER; j++) { if (cols[j] == COL_INDEX) { for (k = j; cols[k] != COL_NUMBER; k++) cols[k] = cols[k + 1]; j--; } } } } else { /* *** (7) *** rep != REP_SIZE && rep != REP_PROCTIME */ /* check SORTBYs (SIZE & PROCTIME don't have SORTBY's) */ if (istree) { if (sortby != subsortby && subsortby != ALPHABETICAL && subsortby != RANDOM) warn('D', TRUE, "In %s, SORTBY (%s) doesn't match %s (%s)", repname[rep], methodname[sortby], subs, methodname[subsortby]); if (floor != subfloor) warn('D', TRUE, "In %s, FLOOR (%s) doesn't match %s (%s)", repname[rep], methodname[floor], subf, methodname[subfloor]); } if (((sortby == REQUESTS || sortby == REQUESTS7 || sortby == PAGES || sortby == PAGES7 || sortby == BYTES || sortby == BYTES7) && (floor == REQUESTS || floor == REQUESTS7 || floor == PAGES || floor == PAGES7 || floor == BYTES || floor == BYTES7) && sortby != floor) || (sortby == DATESORT && floor == FIRSTDATE) || (sortby == FIRSTDATE && floor == DATESORT)) warn('D', TRUE, "In %s, SORTBY (%s) doesn't match FLOOR (%s)", repname[rep], methodname[sortby], methodname[floor]); if (chartby != CHART_NONE) { if (sortby == REQUESTS || sortby == REQUESTS7 || sortby == PAGES || sortby == PAGES7 || sortby == BYTES || sortby == BYTES7) { if (sortby != chartby) { warn('D', TRUE, "In %s, CHART (%s) doesn't match SORTBY (%s)", repname[rep], methodname[chartby], methodname[sortby]); } } else if ((floor == REQUESTS || floor == REQUESTS7 || floor == PAGES || floor == PAGES7 || floor == BYTES || floor == BYTES7) && floor != chartby) { warn('D', TRUE, "In %s, CHART (%s) doesn't match FLOOR (%s)", repname[rep], methodname[chartby], methodname[floor]); } } if (sortby == ALPHABETICAL && colsinc[COL_INDEX]) warn('D', TRUE, "In %s, column N with SORTBY ALPHABETICAL", repname[rep]); else if (sortby == RANDOM && colsinc[COL_INDEX]) warn('D', TRUE, "In %s, column N with SORTBY RANDOM", repname[rep]); if (cols[0] != COL_NUMBER) { /* o/wise different warning below */ if ((sortby == REQUESTS && !colsinc[COL_REQS] && !colsinc[COL_PREQS]) || (sortby == REQUESTS7 && !colsinc[COL_REQS7] && !colsinc[COL_PREQS7]) || (sortby == PAGES && !colsinc[COL_PAGES] && !colsinc[COL_PPAGES]) || (sortby == PAGES7 && !colsinc[COL_PAGES7] && !colsinc[COL_PPAGES7]) || (sortby == BYTES && !colsinc[COL_BYTES] && !colsinc[COL_PBYTES]) || (sortby == BYTES7 && !colsinc[COL_BYTES7] && !colsinc[COL_PBYTES7]) || (sortby == DATESORT && !colsinc[COL_DATE] && !colsinc[COL_TIME]) || (sortby == FIRSTDATE && !colsinc[COL_FIRSTD] && !colsinc[COL_FIRSTT])) warn('D', TRUE, "In %s, SORTBY (%s) isn't included in COLS", repname[rep], methodname[sortby]); if ((floor == REQUESTS && !colsinc[COL_REQS] && !colsinc[COL_PREQS]) || (floor == REQUESTS7 && !colsinc[COL_REQS7] && !colsinc[COL_PREQS7]) || (floor == PAGES && !colsinc[COL_PAGES] && !colsinc[COL_PPAGES]) || (floor == PAGES7 && !colsinc[COL_PAGES7] && !colsinc[COL_PPAGES7]) || (floor == BYTES && !colsinc[COL_BYTES] && !colsinc[COL_PBYTES]) || (floor == BYTES7 && !colsinc[COL_BYTES7] && !colsinc[COL_PBYTES7]) || (floor == DATESORT && !colsinc[COL_DATE] && !colsinc[COL_TIME]) || (floor == FIRSTDATE && !colsinc[COL_FIRSTD] && !colsinc[COL_FIRSTT])) warn('D', TRUE, "In %s, FLOOR (%s) isn't included in COLS", repname[rep], methodname[floor]); if (istree) { if ((subsortby == REQUESTS && !colsinc[COL_REQS] && !colsinc[COL_PREQS]) || (subsortby == REQUESTS7 && !colsinc[COL_REQS7] && !colsinc[COL_PREQS7]) || (subsortby == PAGES && !colsinc[COL_PAGES] && !colsinc[COL_PPAGES]) || (subsortby == PAGES7 && !colsinc[COL_PAGES7] && !colsinc[COL_PPAGES7]) || (subsortby == BYTES && !colsinc[COL_BYTES] && !colsinc[COL_PBYTES]) || (subsortby == BYTES7 && !colsinc[COL_BYTES7] && !colsinc[COL_PBYTES7]) || (subsortby == DATESORT && !colsinc[COL_DATE] && !colsinc[COL_TIME]) || (subsortby == FIRSTDATE && !colsinc[COL_FIRSTD] && !colsinc[COL_FIRSTT])) warn('D', TRUE, "In %s, %s (%s) isn't included in COLS", repname[rep], subs, methodname[subsortby]); if ((subfloor == REQUESTS && !colsinc[COL_REQS] && !colsinc[COL_PREQS]) || (subfloor == REQUESTS7 && !colsinc[COL_REQS7] && !colsinc[COL_PREQS7]) || (subfloor == PAGES && !colsinc[COL_PAGES] && !colsinc[COL_PPAGES]) || (subfloor == PAGES7 && !colsinc[COL_PAGES7] && !colsinc[COL_PPAGES7]) || (subfloor == BYTES && !colsinc[COL_BYTES] && !colsinc[COL_PBYTES]) || (subfloor == BYTES7 && !colsinc[COL_BYTES7] && !colsinc[COL_PBYTES7]) || (subfloor == DATESORT && !colsinc[COL_DATE] && !colsinc[COL_TIME]) || (subfloor == FIRSTDATE && !colsinc[COL_FIRSTD] && !colsinc[COL_FIRSTT])) warn('D', TRUE, "In %s, %s (%s) isn't included in COLS", repname[rep], subf, methodname[subfloor]); } if ((chartby == REQUESTS && !colsinc[COL_REQS] && !colsinc[COL_PREQS]) || (chartby == REQUESTS7 && !colsinc[COL_REQS7] && !colsinc[COL_PREQS7]) || (chartby == PAGES && !colsinc[COL_PAGES] && !colsinc[COL_PPAGES]) || (chartby == PAGES7 && !colsinc[COL_PAGES7] && !colsinc[COL_PPAGES7]) || (chartby == BYTES && !colsinc[COL_BYTES] && !colsinc[COL_PBYTES]) || (chartby == BYTES7 && !colsinc[COL_BYTES7] && !colsinc[COL_PBYTES7])) warn('D', TRUE, "In %s, CHART (%s) isn't included in COLS", repname[rep], methodname[chartby]); } } } if (cols[0] == COL_NUMBER) /* *** (8) *** */ warn('D', TRUE, "%s contains no COLS", repname[rep]); } } /* end for i through reports */ /* change logformats to ignore items which are not wanted (see 28/10/97) */ for (lp = op->miscopts.logfile[0]; lp != NULL; TO_NEXT(lp)) { if (lp->format->form->inpfns->fn == &parselogfmt && lp->format->form->sep == '0') /* DEFAULT format */ lp->format = deflogformat; } if (!vblesonly) { if (STREQ(od->cssprefix, "none")) od->cssprefix[0] = '\0'; if (!STREQ(od->cacheoutfile, "none")) { if (outstyle != OUT_NONE) { if (IS_STDOUT(od->outfile) && IS_STDOUT(od->cacheoutfile)) error("OUTFILE and CACHEOUTFILE both set to stdout"); else if (STREQ(od->cacheoutfile, od->outfile)) error("OUTFILE and CACHEOUTFILE are the same"); /* won't catch same file under different names, but cache file opening will still fail later in that case */ } for (i = 0; i < INPUT_NUMBER; i++) wantitem[i] = TRUE; op->miscopts.granularity = rep2gran[REP_FIVEREP]; for (i = 0, j = 0; i < ITEM_NUMBER; i++) j += (int)(op->miscopts.lowmem[i] >= 3); if (j != 0) warn('D', TRUE, "LOWMEM 3 prevents that item being cached"); } else if (outstyle == OUT_NONE) error("OUTPUT NONE and CACHEOUTFILE none selected"); else { /* cachefile == none */ for (i = 0; i < INPUT_NUMBER; i++) wantitem[i] = FALSE; for (op->miscopts.granularity = 1, i = 0; od->reporder[i] != -1; i++) { rep = od->reporder[i]; if (rep < DATEREP_NUMBER && od->repq[rep]) op->miscopts.granularity = MAX(op->miscopts.granularity, rep2gran[rep]); if (od->repq[rep] && rep2type[rep] != UNSET) wantitem[rep2type[rep]] = TRUE; if (strchr(od->gensumlines, 'I') != NULL) wantitem[ITEM_FILE] = TRUE; if (strchr(od->gensumlines, 'J') != NULL) wantitem[ITEM_HOST] = TRUE; } } /* end cachefile == none */ for (lp = op->miscopts.logfile[0], templ = FALSE; lp != NULL; TO_NEXT(lp)) { (void)correctlogfmt(lp, op->wanthead, op->code2type, &(op->dman)); if (op->miscopts.lowmem[ITEM_VHOST] >= 3 && lp->pvpos != UNSET) { if (!templ) { warn('C', TRUE, "Ignoring %%v in logfile prefixes because of VHOSTLOWMEM 3"); templ = TRUE; } lp->pvpos = UNSET; } } } /* end if (!vblesonly) */ if (outstyle == COMPUTER) { od->sepchar = '\0'; od->repsepchar = '\0'; od->decpt = '.'; od->rawbytes = TRUE; od->lang.code = ENGLISH; /* force English in CRO */ od->lang.file = NULL; while ((c = strstr(od->compsep, "\\t")) != NULL) { *c = '\t'; memmove((void *)(c + 1), (void *)(c + 2), strlen(c + 2) + 1); } } else if (od->repsepchar == (char)UNSET) od->repsepchar = '\0'; /* sepchar, decpt set from langfile below */ /* lower case appropriate aliases and in/excludes */ /* NB could send them through all fixed aliases, but others probably never needed and could cause confusion */ toloweralias(op->aliashead[ITEM_HOST], TRUE); toloweralias(od->aliashead[G(REP_HOST)], FALSE); toloweralias(od->aliashead[G(REP_DOM)], FALSE); toloweralias(od->aliashead[G(REP_ORG)], FALSE); tolowerinc(op->wanthead[ITEM_HOST]); tolowerinc(od->wanthead[G(REP_HOST)]); tolowerinc(od->wanthead[G(REP_DOM)]); tolowerinc(od->wanthead[G(REP_ORG)]); toloweralias(op->aliashead[ITEM_VHOST], TRUE); toloweralias(od->aliashead[G(REP_VHOST)], FALSE); tolowerinc(op->wanthead[ITEM_VHOST]); tolowerinc(od->wanthead[G(REP_VHOST)]); tolowerinc(od->wanthead[G(REP_SEARCHREP)]); tolowerinc(od->wanthead[G(REP_SEARCHSUM)]); if (op->miscopts.usercase_insensitive) { toloweralias(op->aliashead[ITEM_USER], TRUE); toloweralias(od->aliashead[G(REP_USER)], FALSE); toloweralias(od->aliashead[G(REP_FAILUSER)], FALSE); tolowerinc(op->wanthead[ITEM_USER]); tolowerinc(od->wanthead[G(REP_USER)]); tolowerinc(od->wanthead[G(REP_FAILUSER)]); } if (op->miscopts.case_insensitive) { toloweralias(op->aliashead[ITEM_FILE], TRUE); toloweralias(od->aliashead[G(REP_REQ)], FALSE); toloweralias(od->aliashead[G(REP_REDIR)], FALSE); toloweralias(od->aliashead[G(REP_FAIL)], FALSE); toloweralias(od->aliashead[G(REP_TYPE)], FALSE); toloweralias(od->aliashead[G(REP_DIR)], FALSE); tolowerinc(op->wanthead[ITEM_FILE]); tolowerinc(op->ispagehead); tolowerinc(op->argshead); tolowerinc(od->wanthead[G(REP_REQ)]); tolowerinc(od->wanthead[G(REP_REDIR)]); tolowerinc(od->wanthead[G(REP_FAIL)]); tolowerinc(od->wanthead[G(REP_TYPE)]); tolowerinc(od->wanthead[G(REP_DIR)]); tolowerse(op->intsearchengines); } } #define POSSTREE(r) if (op->miscopts.lowmem[rep2type[r]] >= 3 && od->repq[r]) \ od->alltrees[i++] = r #define POSSDERV(r) if (op->miscopts.lowmem[rep2type[r]] >= 3 && od->repq[r]) \ od->alldervs[i++] = r #define POSSDATACOL(t, a, b) if (op->data2cols[i][a] >= 0) { \ op->datacols[i][t][k][0] = op->data2cols[i][a]; \ op->datacols[i][t][k++][1] = b; } #define CLOSECATEGORY(t) op->datacols[i][t][k][0] = -1; k = 0; #define ALIASP(c, f, t) ENSURE_LEN(ss, len, strlen(t) + 7); \ sprintf(ss, "PLAIN:%s", t); confline(op, c, f, ss, -1) void finalinit(Options *op) { #ifndef NODNS extern choice dnslevel; extern char *dnsfile, *dnslockfile; extern FILE *dnsfilep, *dnslock; extern Hashtable *dnstable; extern unsigned int dnsgoodhrs, dnsbadhrs; extern Outputter cro_outputter, html_outputter, latex_outputter, plain_outputter, xhtml_outputter, xml_outputter; timecode_t timec, goodtimec, badtimec; char *name, *alias; choice rc; #endif #ifndef NOPIPES extern Strpairlist *uncompresshead; #endif extern timecode_t starttimeuxc; extern char *country[]; extern Memman *xmemman; extern choice *rep2type, *rep2reqs, *rep2reqs7, *rep2date, *rep2firstd; extern choice cache_records[]; extern char *pos; extern logical vblesonly; extern logical unprintable[256]; static char *ss = NULL; static size_t len = 0; Outchoices *od = &(op->outopts); choice outstyle = od->outstyle; Logfile *lp, *lastlp; logical wantcol[ITEM_NUMBER][DATA_NUMBER]; choice *cols; char **lngstr = NULL; /* just to keep compiler happy */ FILE *tempf; char temps[10]; /* for "ukdom.tab" */ char *s; Strlist *sp; int i, j, k; /* if only doing cache file, turn off all reports to avoid recording unwanted stuff inadvertently */ if (outstyle == OUT_NONE) { for (i = 0; i < REP_NUMBER; i++) od->repq[i] = FALSE; } /* set code2type variable */ for (i = MIN_SC; i < SC_NUMBER; i++) { if (op->code2type[i] == UNWANTED || (op->code2type[i] == UNSET && op->code2type[0] == SUCCESS)) op->code2type[i] = UNWANTED; else if (i <= 199) op->code2type[i] = INFO; else if (i <= 299 || (i == 304 && op->succ304)) op->code2type[i] = SUCCESS; else if (i <= 399) op->code2type[i] = REDIRECT; else op->code2type[i] = FAILURE; } /* swap aliases round */ for (i = 0; i < ITEM_NUMBER; i++) reversealias(&(op->aliashead[i])); for (i = 0; i < GENREP_NUMBER; i++) reversealias(&(od->aliashead[i])); /* and swap uncompress list round */ #ifndef NOPIPES reversestrpairlist(&uncompresshead); #endif /* Translate filenames to put files in the correct directories */ /* Also interpret %date codes and wild cards where appropriate */ if (!strcaseeq(od->headerfile, "none") && !IS_STDIN(od->headerfile)) od->headerfile = buildfilename(HEADERDIR, "", od->headerfile); if (!strcaseeq(od->footerfile, "none") && !IS_STDIN(od->footerfile)) od->footerfile = buildfilename(HEADERDIR, "", od->footerfile); if (!STREQ(od->cacheoutfile, "none") && !IS_STDOUT(od->cacheoutfile)) { s = timesprintf(NULL, buildfilename(CACHEDIR, "", od->cacheoutfile), op->dman.last7to, TRUE); COPYSTR(od->cacheoutfile, s); } if (!IS_STDOUT(od->outfile)) { s = timesprintf(NULL, od->outfile, op->dman.last7to, TRUE); /* outfile has already had buildfilename() in configoutfile() */ COPYSTR(od->outfile, s); } for (i = 0; i <= 1; i++) { for (lp = op->miscopts.logfile[i], lastlp = NULL; lp != NULL; lastlp = lp, TO_NEXT(lp)) { if (!IS_STDIN(lp->name)) { s = timesprintf(NULL, lp->name, op->dman.last7to, TRUE); COPYSTR(lp->name, s); #ifndef NODIRENT if (strchr(lp->name, '*') != NULL || strchr(lp->name, '?') != NULL) lp = expandwildlogs(lp, (lastlp == NULL)?\ (&(op->miscopts.logfile[i])):(&(lastlp->next))); #endif } } } #ifndef NOGRAPHICS if (outstyle == HTML || outstyle == XHTML) { if (od->chartdir == NULL || od->localchartdir == NULL) { /* If CHARTDIR and LOCALCHARTDIR both set, everything is OK */ for (i = 0, j = 0; i < GENREP_NUMBER; i++) j += (od->chartby[i] != CHART_NONE && od->repq[i + FIRST_GENREP]); if (j != 0) { /* j = number of wanted charts */ if (od->chartdir != NULL) warn('C', TRUE, "Ignoring CHARTDIR because LOCALCHARTDIR is unset"); else if (od->localchartdir != NULL) warn('C', TRUE, "Ignoring LOCALCHARTDIR because CHARTDIR is unset"); if (IS_STDOUT(od->outfile)) { warn('D', TRUE, "Turning all pie charts off because OUTFILE is " "stdout and CHARTDIR is unset"); for (i = 0, j = 0; i < GENREP_NUMBER; i++) od->chartby[i] = CHART_NONE; } else { od->localchartdir = buildfilename(od->outfile, "", ""); od->chartdir = ""; } } } /* convert any date codes in CHARTDIRs */ if (od->chartdir != NULL && od->localchartdir != NULL) { s = timesprintf(NULL, od->localchartdir, op->dman.last7to, TRUE); COPYSTR(od->localchartdir, s); s = timesprintf(NULL, od->chartdir, op->dman.last7to, TRUE); COPYSTR(od->chartdir, s); } } #endif #ifndef NODNS if (!IS_STDIN(dnsfile)) dnsfile = buildfilename(DNSDIR, "", dnsfile); dnslockfile = buildfilename(LOCKDIR, "", dnslockfile); #endif if (od->domainsfile != NULL && !IS_STDIN(od->domainsfile)) od->domainsfile = buildfilename(LANGDIR, "lang", od->domainsfile); if (od->descfile != NULL && !IS_STDIN(od->descfile)) od->descfile = buildfilename(LANGDIR, "lang", od->descfile); if (od->lang.file == NULL) selectlang(country[od->lang.code], &(op->outopts)); else if (!IS_STDIN(od->lang.file)) od->lang.file = buildfilename(LANGDIR, "lang", od->lang.file); if (od->domainsfile == NULL) { sprintf(temps, "ukdom%ctab", EXTSEP); od->domainsfile = buildfilename(LANGDIR, "lang", temps); } od->multibyte = FALSE; if (outstyle == PLAIN) { od->outstyle = ASCII; outstyle = ASCII; /* The only difference is the langfile, which we have just chosen */ } if (outstyle == ASCII) od->outputter = &plain_outputter; else if (outstyle == HTML) od->outputter = &html_outputter; else if (outstyle == XHTML) od->outputter = &xhtml_outputter; else if (outstyle == LATEX) od->outputter = &latex_outputter; else if (outstyle == XML) od->outputter = &xml_outputter; else /* outstyle == COMPUTER */ od->outputter = &cro_outputter; if (!vblesonly) { /* persists to end of function */ if (outstyle != OUT_NONE) { /* Read in language information */ if ((tempf = my_fopen(od->lang.file, "language file")) == NULL) error("Can't read language file %s", od->lang.file); od->lngstr = (char **)xmalloc(LNGSTR_NUMBER * sizeof(char *)); lngstr = od->lngstr; /* just for conciseness */ pos = NULL; COPYSTR(lngstr[charset_], nextlngstr(tempf, od->lang.file, TRUE)); if (outstyle == LATEX && !strcaseeq(lngstr[charset_], "US-ASCII") && !(headcasematch(lngstr[charset_], "ISO-8859-") && (lngstr[charset_][9] == '1' || lngstr[charset_][9] == '2') && lngstr[charset_][10] == '\0')) error("OUTPUT LATEX only available with US-ASCII, ISO-8859-1 and " "ISO-8859-2 character sets"); /* NB Latin-3 and -5 have LaTeX .def files too but I have no such language files, so no way to test them (and no need). Ditto some Windows codepages. */ if (*(lngstr[charset_]) == '*') { od->multibyte = TRUE; (lngstr[charset_])++; od->html = FALSE; } if (outstyle == HTML || outstyle == XHTML) { if (strcaseeq(lngstr[charset_], "UTF-8")) od->outputter->strlength = &html_strlength_utf8; else if (strcaseeq(lngstr[charset_], "ISO-2022-JP")) od->outputter->strlength = &html_strlength_jis; } for (i = 0; i < 7; i++) COPYSTR(od->dayname[i], nextlngstr(tempf, od->lang.file, TRUE)); for (i = 0; i < 12; i++) COPYSTR(od->monthname[i], nextlngstr(tempf, od->lang.file, TRUE)); for (i = 1; i < LNGSTR_NUMBER; i++) /* charset_ was 0 */ COPYSTR(lngstr[i], nextlngstr(tempf, od->lang.file, TRUE)); (void)nextlngstr(tempf, od->lang.file, FALSE); /* This final nextlngstr() checks the language file isn't too long */ if (strchr(lngstr[xbytes_], '?') == NULL || strchr(lngstr[nxbytes_], '?') == NULL || strchr(lngstr[nxbytes7_], '?') == NULL || strchr(lngstr[xbytestraffic_], '?') == NULL || strchr(lngstr[xbytestraffic7_], '?') == NULL) error("language file %s corrupt: translation of \"?bytes\" missing " "a question mark", od->lang.file); /* Fatal error is harsh here: but it avoids all sorts of trouble later */ od->plainmonthlen = arraymaxlen(od->monthname, 12, NULL); /* plain is longer: by pretending to be ASCII it includes whole strlen */ /* But note that even this is not enough for formatted dates: could need max_ascii_len + (max_html_len - min_html_len) to apply spacing */ od->monthlen = arraymaxlen(od->monthname, 12, od); od->plaindaylen = arraymaxlen(od->dayname, 7, NULL); od->daylen = arraymaxlen(od->dayname, 7, od); od->plainampmlen = MAX(strlen(lngstr[am_]), strlen(lngstr[pm_])); od->ampmlen = MAX(od->outputter->strlength(lngstr[am_]), od->outputter->strlength(lngstr[pm_])); /* Set the convfloor (see do_alias(n|N)). We only do this approximately: convert A0-FF for ISO-8859-*, 80-FF o/wise. This may still include some non-printable characters! But we can't have a table for every charset. */ if (od->searchconv == UNSET) od->searchconv = !(od->multibyte); if (!od->searchconv || strcaseeq(lngstr[charset_], "US-ASCII")) od->convfloor = 0; else if (substrcaseeq(lngstr[charset_], "iso-8859-") || strcaseeq(lngstr[charset_], "armscii-8")) od->convfloor = 0xA0; else od->convfloor = 0x80; /* Similarly set the characters we shall consider as unprintable in the reports. */ #ifdef EBCDIC for (i = 0; i <= 0x3F; i++) unprintable[i] = TRUE; #else for (i = 0; i <= 0x1F; i++) unprintable[i] = TRUE; for (i = 0x20; i <= 0xFF; i++) unprintable[i] = FALSE; if (substrcaseeq(lngstr[charset_], "iso-8859-") || strcaseeq(lngstr[charset_], "armscii-8")) { for (i = 0x80; i <= 0x9F; i++) unprintable[i] = TRUE; } unprintable[0x7F] = TRUE; #endif unprintable[(unsigned char)'\0'] = FALSE; unprintable[(unsigned char)'\t'] = FALSE; if (od->baseurl != NULL && STREQ(od->baseurl, "none")) od->baseurl = NULL; if (outstyle == COMPUTER) { COPYSTR(lngstr[succreqs_], "SRS7"); COPYSTR(lngstr[totunknown_], "NCC7"); COPYSTR(lngstr[totpages_], "PRP7"); COPYSTR(lngstr[totfails_], "FLF7"); COPYSTR(lngstr[totredirs_], "RRR7"); COPYSTR(lngstr[inforeqs_], "NII7"); COPYSTR(lngstr[distfiles_], "NFN7"); COPYSTR(lngstr[disthosts_], "NHH7"); COPYSTR(lngstr[corrupt_], "CL"); COPYSTR(lngstr[unwanted_], "UL"); COPYSTR(lngstr[totdata_], "BTB7"); COPYSTR(lngstr[dayrepfmt_], "%Y%\b%M%\b%D"); COPYSTR(lngstr[daysumfmt_], "%w"); COPYSTR(lngstr[hourrepfmt_], "%Y%\b%M%\b%D%\b%H"); COPYSTR(lngstr[hoursumfmt_], "%H"); COPYSTR(lngstr[weekhoursumfmt_], "%w%\b%H"); COPYSTR(lngstr[quarterrepfmt_], "%Y%\b%M%\b%D%\b%H%\b%n"); COPYSTR(lngstr[quartersumfmt_], "%H%\b%n"); COPYSTR(lngstr[weekfmt_], "%Y%\b%M%\b%D"); COPYSTR(lngstr[monthfmt_], "%Y%\b%M"); COPYSTR(lngstr[quarterlyfmt_], "%Y%\b%q"); COPYSTR(lngstr[yearfmt_], "%Y"); COPYSTR(lngstr[genrepdate_], "%Y%\b%M%\b%D"); COPYSTR(lngstr[genreptime_], "%Y%\b%M%\b%D%\b%H%\b%n"); COPYSTR(lngstr[datefmt1_], "%Y%\b%M%\b%D%\b%H%\b%n"); COPYSTR(lngstr[datefmt2_], "%Y%\b%M%\b%D%\b%H%\b%n"); } /* repsepchar done above. Also OUTPUT COMPUTER versions done above. */ if (od->sepchar == (char)UNSET) od->sepchar = *(lngstr[sepchar_]); if (od->decpt == (char)UNSET) od->decpt = *(lngstr[decpoint_]); (void)my_fclose(tempf, od->lang.file, "language file"); if ((tempf = my_fopen(od->domainsfile, "domains file")) != NULL) { process_domainsfile(tempf, op); (void)my_fclose(tempf, od->domainsfile, "domains file"); } if (od->descriptions && od->descfile != NULL && (tempf = my_fopen(od->descfile, "report descriptions file")) != NULL) { process_descfile(tempf, od->descfile, op); (void)my_fclose(tempf, od->descfile, "report descriptions file"); } else od->descriptions = FALSE; } /* end outstyle != OUT_NONE */ /* Which data we should collect about each item? */ for (i = 0; i < ITEM_NUMBER; i++) { for (j = 0; j < DATA_NUMBER; j++) wantcol[i][j] = FALSE; } if (!strcaseeq(od->cacheoutfile, "none")) { /* If we are writing a cache file, must have everything it records. */ for (i = 0; i < ITEM_NUMBER; i++) for (j = 0; j < V5_DATA_NUMBER; j++) wantcol[i][cache_records[j]] = TRUE; } if (outstyle != OUT_NONE) { /* For a regular output file, check all reports to see what's wanted. */ for (i = FIRST_GENREP; i <= LAST_NORMALREP; i++) { if (od->repq[i]) { /* always need REQUESTS */ wantcol[rep2type[i]][rep2reqs[G(i)]] = TRUE; /* need (SUB)FLOOR and (SUB)SORTBY and CHART */ if (od->floor[G(i)].floorby == REQUESTS7 || od->sortby[G(i)] == REQUESTS7 || od->subfloor[G(i)].floorby == REQUESTS7 || od->subsortby[G(i)] == REQUESTS7 || od->chartby[G(i)] == REQUESTS7) wantcol[rep2type[i]][rep2reqs7[G(i)]] = TRUE; if (od->floor[G(i)].floorby == PAGES || od->sortby[G(i)] == PAGES || od->subfloor[G(i)].floorby == PAGES || od->subsortby[G(i)] == PAGES || od->chartby[G(i)] == PAGES) wantcol[rep2type[i]][PAGES] = TRUE; if (od->floor[G(i)].floorby == PAGES7 || od->sortby[G(i)] == PAGES7 || od->subfloor[G(i)].floorby == PAGES7 || od->subsortby[G(i)] == PAGES7 || od->chartby[G(i)] == PAGES7) wantcol[rep2type[i]][PAGES7] = TRUE; if (od->floor[G(i)].floorby == DATESORT || od->sortby[G(i)] == DATESORT || od->subfloor[G(i)].floorby == DATESORT || od->subsortby[G(i)] == DATESORT) /* NB chartby can't be date or firstdate */ wantcol[rep2type[i]][rep2date[G(i)]] = TRUE; if (od->floor[G(i)].floorby == FIRSTDATE || od->sortby[G(i)] == FIRSTDATE || od->subfloor[G(i)].floorby == FIRSTDATE || od->subsortby[G(i)] == FIRSTDATE) wantcol[rep2type[i]][rep2firstd[G(i)]] = TRUE; /* need COLS */ cols = od->cols[i]; for (j = 0; cols[j] != COL_NUMBER; j++) { if (cols[j] == COL_REQS7 || cols[j] == COL_PREQS7) wantcol[rep2type[i]][rep2reqs7[G(i)]] = TRUE; else if (cols[j] == COL_PAGES || cols[j] == COL_PPAGES) wantcol[rep2type[i]][PAGES] = TRUE; else if (cols[j] == COL_PAGES7 || cols[j] == COL_PPAGES7) wantcol[rep2type[i]][PAGES7] = TRUE; else if (cols[j] == COL_DATE || cols[j] == COL_TIME) wantcol[rep2type[i]][rep2date[G(i)]] = TRUE; else if (cols[j] == COL_FIRSTD || cols[j] == COL_FIRSTT) wantcol[rep2type[i]][rep2firstd[G(i)]] = TRUE; } /* if reportspan is on, need firsttime and lasttime */ if (od->repspan) { wantcol[rep2type[i]][rep2date[G(i)]] = TRUE; wantcol[rep2type[i]][rep2firstd[G(i)]] = TRUE; } } } /* and General Summary needs count of files and hosts */ wantcol[ITEM_FILE][REQUESTS] = TRUE; wantcol[ITEM_FILE][REQUESTS7] = TRUE; wantcol[ITEM_HOST][REQUESTS] = TRUE; wantcol[ITEM_HOST][REQUESTS7] = TRUE; } /* end outstyle != OUT_NONE */ /* now assemble wantcol into a data2cols structure */ for (i = 0; i < ITEM_NUMBER; i++) { for (j = 0, k = 0; j < DATA_NUMBER; j++) op->data2cols[i][j] = (wantcol[i][j])?(k++):(-1); op->no_cols[i] = k; } /* and finally, turn data2cols into datacols */ for (i = 0, k = 0; i < ITEM_NUMBER; i++) { POSSDATACOL(SUCCESS, REQUESTS, REQUESTS2); POSSDATACOL(SUCCESS, REQUESTS7, REQUESTS72); POSSDATACOL(SUCCESS, PAGES, PAGES2); POSSDATACOL(SUCCESS, PAGES7, PAGES72); POSSDATACOL(SUCCESS, SUCCDATE, DATE2); POSSDATACOL(SUCCESS, SUCCFIRSTD, FIRSTD2); CLOSECATEGORY(SUCCESS); POSSDATACOL(FAILURE, FAIL, REQUESTS2); POSSDATACOL(FAILURE, FAIL7, REQUESTS72); POSSDATACOL(FAILURE, FAILDATE, DATE2); POSSDATACOL(FAILURE, FAILFIRSTD, FIRSTD2); CLOSECATEGORY(FAILURE); POSSDATACOL(REDIRECT, REDIR, REQUESTS2); POSSDATACOL(REDIRECT, REDIR7, REQUESTS72); POSSDATACOL(REDIRECT, REDIRDATE, DATE2); POSSDATACOL(REDIRECT, REDIRFIRSTD, FIRSTD2); CLOSECATEGORY(REDIRECT); } op->miscopts.dirsufflength = strlen(op->miscopts.dirsuffix); for (i = 0; i < GENREP_NUMBER; i++) allgraft(od->tree[i]->tree, od->tree[i]->space, op->no_cols[rep2type[i + FIRST_GENREP]]); for (sp = od->suborgs; sp != NULL; TO_NEXT(sp)) { if (strlen(sp->name) > 0 && !ISDIGIT(*(sp->name)) && sp->name[strlen(sp->name) - 1] == '*') /* won't catch 3com.* */ warn('C', TRUE, "SUBORG %s meaningless: must specify a domain because " "organisations are at different levels in different domains", sp->name); else confline(op, "SUBORG2", sp->name, NULL, 1); } od->alltrees = (choice *)submalloc(xmemman, 6 * sizeof(choice)); i = 0; POSSTREE(REP_DIR); POSSTREE(REP_DOM); POSSTREE(REP_ORG); POSSTREE(REP_TYPE); POSSTREE(REP_REFSITE); /* if adding more, change '6' above */ od->alltrees[i] = REP_NUMBER; od->alldervs = (choice *)submalloc(xmemman, 5 * sizeof(choice)); i = 0; POSSDERV(REP_SEARCHREP); POSSDERV(REP_SEARCHSUM); POSSDERV(REP_BROWSUM); POSSDERV(REP_OS); /* if adding more, change '5' above */ od->alldervs[i] = REP_NUMBER; od->derv[REP_SEARCHREP - FIRST_DERVREP]->arg = (void *)(op->searchengines); od->derv[REP_SEARCHSUM - FIRST_DERVREP]->arg = (void *)(op->searchengines); od->derv[REP_INTSEARCHREP - FIRST_DERVREP]->arg = (void *)(op->intsearchengines); od->derv[REP_INTSEARCHSUM - FIRST_DERVREP]->arg = (void *)(op->intsearchengines); od->derv[REP_OS - FIRST_DERVREP]->arg = (void *)(op->robots); od->derv[REP_BROWSUM - FIRST_DERVREP]->arg = NULL; if (outstyle != OUT_NONE) { ALIASP("DOMOUTPUTALIAS", LNGSTR_UNRESOLVED, lngstr[unresolved_]); ALIASP("DOMOUTPUTALIAS", LNGSTR_NODOMAIN, lngstr[nodomain_]); ALIASP("DOMOUTPUTALIAS", LNGSTR_UNKDOMAIN, lngstr[unkdomain_]); ALIASP("ORGOUTPUTALIAS", LNGSTR_NODOMAIN, lngstr[nodomain_]); ALIASP("ORGOUTPUTALIAS", LNGSTR_UNKDOMAIN, lngstr[unkdomain_]); ALIASP("DIROUTPUTALIAS", LNGSTR_ROOTDIR, lngstr[rootdir_]); ALIASP("DIROUTPUTALIAS", LNGSTR_NODIR, lngstr[nodir_]); ALIASP("TYPEOUTPUTALIAS", LNGSTR_NOEXT, lngstr[noext_]); ALIASP("TYPEOUTPUTALIAS", LNGSTR_BRKDIRS, lngstr[brkdirs_]); ALIASP("OSOUTPUTALIAS", LNGSTR_UNKWIN, lngstr[unkwin_]); ALIASP("OSOUTPUTALIAS", LNGSTR_UNKUX, lngstr[unkux_]); ALIASP("OSOUTPUTALIAS", LNGSTR_UNKOS, lngstr[unkos_]); ALIASP("OSOUTPUTALIAS", LNGSTR_ROBOTS, lngstr[robots_]); } #ifndef NODNS if (dnslevel != DNS_NONE) { dnstable = rehash(NULL, HASHSIZE, NULL); if ((tempf = my_fopen(dnsfile, "DNS input file")) != NULL) { pos = NULL; goodtimec = (starttimeuxc > (timecode_t)dnsgoodhrs * 60)?\ (starttimeuxc - (timecode_t)dnsgoodhrs * 60):0; badtimec = (starttimeuxc > (timecode_t)dnsbadhrs * 60)?\ (starttimeuxc - (timecode_t)dnsbadhrs * 60):0; while((rc = nextdnsline(tempf, &timec, &name, &alias)) != EOF) { if (rc == TRUE && ((STREQ(alias, "*") && timec >= badtimec) || (!STREQ(alias, "*") && timec >= goodtimec)) && !(timec > starttimeuxc + MINS_IN_WEEK)) do_dns(name, alias, dnslevel); } (void)my_fclose(tempf, dnsfile, "DNS input file"); } if (dnslevel == DNS_WRITE) { #ifdef NOOPEN /* The ANSI, but less preferred, option. There is a race problem. Also if we have got overwrite access but not read, it will go wrong. */ if ((tempf = FOPENR(dnslockfile)) == NULL) { if ((dnslock = FOPENW(dnslockfile)) == NULL) { warn('F', TRUE, "Failed to create DNS lock file %s: " "backing off to DNS LOOKUP", dnslockfile); dnslevel = DNS_LOOKUP; } else debug('F', "Creating %s as DNS lock file", dnslockfile); } else { fclose(tempf); warn('F', TRUE, "DNS lock file %s already exists: backing off to DNS LOOKUP", dnslockfile); dnslevel = DNS_LOOKUP; } #else /* The following is not the strictly correct procedure on Unix. NFS is broken, so there can still be a race condition. One should really @ create a guaranteed unique file; @ hard link the lock file to the unique file; @ stat the unique file, testing for links == 2. However, this has the disadvantage that it can leave files with weird names lying around. Also it can't then share code with other platforms. I think that the chance of a problem is so small, and the consequences sufficiently non-serious, that this is good enough. */ if ((i = open(dnslockfile, O_WRONLY | O_CREAT | O_EXCL, OPEN_MODE)) < 0) { if (errno == EEXIST) warn('F', TRUE, "DNS lock file %s already exists: backing off to DNS LOOKUP", dnslockfile); else warn('F', TRUE, "Failed to create DNS lock file %s: " "backing off to DNS LOOKUP", dnslockfile); dnslevel = DNS_LOOKUP; } else if ((dnslock = fdopen(i, "w")) == NULL) { /* can this happen? */ /* We don't actually write to the dnslock. But this is convenient for compatibility with the #ifdef NOOPEN approach. */ warn('F', TRUE, "Failed to create DNS lock file %s: backing off to DNS LOOKUP", dnslockfile); dnslevel = DNS_LOOKUP; } else debug('F', "Creating %s as DNS lock file", dnslockfile); #endif /* NOOPEN */ if (dnslevel == DNS_WRITE) { if ((dnsfilep = FOPENA(dnsfile)) == NULL) { warn('F', TRUE, "Failed to open DNS output file %s for writing: " "backing off to DNS LOOKUP", dnsfile); dnslevel = DNS_LOOKUP; fclose(dnslock); dnslock = NULL; if (remove(dnslockfile) != 0) warn('F', TRUE, "Trouble deleting DNS lock file %s", dnslockfile); else debug('F', "Deleting DNS lock file %s", dnslockfile); } else debug('F', "Opening %s as DNS output file", dnsfile); } } } /* end if dnslevel != DNS_NONE */ #endif /* NODNS */ } /* end if !vblesonly */ } /* Now functions for turning strings into log formats. */ /* The actual mapping of codes to functions is at inpfns[] in globals.c. */ choice strtoinfmt(Inputformat **ans, char *s, choice *count) { /* For a discussion of count[], see correctlogfmt() above */ extern Memman *xmemman; extern Inputfns inpfns[], pnlinpfn, ccinpfn; Inputformat *ifp; logical done, count_this, typedone[INP_NUMBER]; char tempchar = '\0'; char *c; int i; if (strchr(s, '%') == NULL) return(FMT_NOPC); for (i = 0; i < ITEM_NUMBER; i++) count[i] = 0; for (i = 0; i < INP_NUMBER; i++) typedone[i] = FALSE; *ans = (Inputformat *)submalloc(xmemman, sizeof(Inputformat)); ifp = *ans; /* First a messy special case. If %s occurs but not %S, promote %s to %S */ for (c = s, done = FALSE; *c != '\0' && !done; c++) { if (*c == '%') { c++; if (*c == '*') c++; if (*c == 'S') done = TRUE; c++; } } if (!done) { for (c = s; *c != '\0'; c++) { if (*c == '%') { c++; if (*c == '*') c++; if (*c == 's') *c = 'S'; c++; } } } /* Now the main routine */ for (c = s; *c != '\0'; c++) { if (*c == '%') { c++; if (*c == '%') { ifp->inpfns = &ccinpfn; ifp->sep = *c; } else { if (*c == '*') { count_this = FALSE; c++; } else count_this = TRUE; done = FALSE; for (i = 0; !done && inpfns[i].code != '\0'; i++) { if (*c == inpfns[i].code) { if (inpfns[i].type != UNSET) { if (typedone[inpfns[i].type]) return(FMT_DUP); typedone[inpfns[i].type] = TRUE; } ifp->inpfns = &inpfns[i]; if (inpfns[i].fn == &parsestring || inpfns[i].fn == &parseref || inpfns[i].fn == &parsemsbrow || inpfns[i].fn == &parsejunk || inpfns[i].fn == &parsecode) { c++; if (*c == '\0') { ifp->sep = '\n'; c--; } else if (*c == '\\') { c++; if (*c == '\\') ifp->sep = *c; else if (*c == 'n' || *c == 'r') ifp->sep = '\n'; else if (*c == 't') ifp->sep = '\t'; else return(FMT_BADCHAR); } else if (*c == '%') { c++; if (*c == '%') ifp->sep = *c; else if (*c == 'w' && inpfns[i].fn != &parseref) { ifp->sep = WHITESPACE; /* parseref can't take %w */ c -= 2; /* need to parsespace() too */ } else return(FMT_NOTERM); } else ifp->sep = *c; } else if (inpfns[i].fn == &parselogfmt) { c++; if (*c < '0' || *c > '6') return(FMT_BADBUILTIN); else ifp->sep = *c; } else /* fn != parse(string|ref|msbrow|junk|code|logfmt) */ ifp->sep = '\0'; if (i < ITEMFNS_NUMBER) count[inpfns[i].type] = count_this?2:1; done = TRUE; } /* end if *c == inpfns[i].code */ } /* end for i */ if (!done) return(FMT_BADPC); } } /* end if *c == '%' */ else if (*c == '\\') { c++; if (*c == '\\') { ifp->inpfns = &ccinpfn; ifp->sep = *c; } else if (*c == 'n' || *c == 'r') { ifp->inpfns = &pnlinpfn; ifp->sep = '\n'; } else if (*c == 't') { ifp->inpfns = &ccinpfn; ifp->sep = '\t'; } else return(FMT_BADCHAR); } /* end if *c == '\\' */ else { ifp->inpfns = &ccinpfn; ifp->sep = *c; } ifp->next = (Inputformat *)submalloc(xmemman, sizeof(Inputformat)); tempchar = ifp->sep; TO_NEXT(ifp); } if (tempchar != '\n') { ifp->inpfns = &pnlinpfn; ifp->next = (Inputformat *)submalloc(xmemman, sizeof(Inputformat)); TO_NEXT(ifp); } ifp->inpfns = NULL; if (typedone[INP_YEAR] || typedone[INP_MONTH] || typedone[INP_DATE] || typedone[INP_HOUR] || typedone[INP_MIN] || typedone[INP_AM]) { if (typedone[INP_UNIXTIME]) return(FMT_DUP); if (!(typedone[INP_YEAR] && typedone[INP_MONTH] && typedone[INP_DATE] && typedone[INP_HOUR] && typedone[INP_MIN])) return(FMT_PARTTIME); /* partial time info is corrupt */ count[INP_DATE] = (count[ITEM_FILE] == 2)?2:1; count[INP_AM] = (choice)typedone[INP_AM]; count[INP_UNIXTIME] = 0; } else if (typedone[INP_UNIXTIME]) { count[INP_DATE] = (count[ITEM_FILE] == 2)?2:1; count[INP_AM] = 0; count[INP_UNIXTIME] = 1; } else { count[INP_DATE] = 0; count[INP_AM] = 0; count[INP_UNIXTIME] = 0; } if (typedone[INP_QUERY] && !typedone[ITEM_FILE]) return(FMT_QBUTNOR); count[INP_BYTES] = typedone[INP_BYTES]?((count[ITEM_FILE] == 2)?2:1):0; count[INP_PROCTIME] = 2 * (choice)(typedone[INP_PROCTIME] && count[ITEM_FILE] == 2); if (typedone[INP_CODE] && count[ITEM_FILE] == 2) count[INP_CODE] = 2; else if (typedone[INP_CODE]) count[INP_CODE] = 1; else count[INP_CODE] = 0; return(FMT_OK); } char *apachelogfmt(char *fmt) { static char *ans = NULL; static size_t len = 0; char *p, *q; ENSURE_LEN(ans, len, 32); /* Arbitrary amount to get started */ ans[0] = '\0'; for (p = fmt; *p != '\0'; p++) { ENSURE_LEN(ans, len, strlen(ans) + 20); /* Enough to add any next string. Not v efficient, but that's OK. */ if (*p == '\\' && (*(p + 1) == '"' || *(p + 1) == '\\')) p++; /* NB \t will stay as \t etc. and analog LOGFORMAT will interpret */ if (*p == '%' && *(p + 1) != '\0') { p++; while (ISDIGIT(*p) || *p == ',' || *p == '!' || *p == '<' || *p == '>') p++; if (*p == 'b') strcat(ans, "%b"); else if (*p == 'u') strcat(ans, "%u"); else if (*p == 'h' || *p == 'a') strcat(ans, "%S"); else if (*p == 's') strcat(ans, "%c"); else if (*p == 'U') strcat(ans, "%r"); else if (*p == 'r') strcat(ans, "%j%w%r%wHTTP%j"); else if (*p == 't') strcat(ans, "[%d/%M/%Y:%h:%n:%j]"); else if (*p == 'T') strcat(ans, "%t"); else if (*p == 'D') strcat(ans, "%D"); else if (*p == 'q') strcat(ans, "%q"); else if (*p == 'A' || *p == 'v' || *p == 'V') strcat(ans, "%v"); else if (substrcaseeq(p, "{host}") && *(p + 6) == 'i') { strcat(ans, "%v"); p += 6; } else if (substrcaseeq(p, "{user-agent}") && *(p + 12) == 'i') { strcat(ans, "%B"); p += 12; } else if (substrcaseeq(p, "{referer}") && *(p + 9) == 'i') { strcat(ans, "%f"); p += 9; } else { /* unknown or unwanted code */ if (*p == '{') { while (*p != '}' && *p != '\0') p++; if (*p == '}') p++; if (*p == 't') return(NULL); } strcat(ans, "%j"); } } /* *p == '%' && ... */ else { q = strchr(ans, '\0'); *(q++) = *p; *q = '\0'; } } return(ans); } /*** Finally we move on to the command line argument processing. ***/ void clconfline(Options *op, char *s) { char *cmd = NULL, *arg1 = NULL, *arg2 = NULL; int rc; if ((rc = parseconfline(s, &cmd, &arg1, &arg2)) != -1) confline(op, cmd, arg1, arg2, rc); } void clgenrep(Options *op, choice rep, char *arg) { size_t len; char c, *d; op->outopts.repq[rep] = (arg[0] == '+')?TRUE:FALSE; if (arg[0] == '-') { if (arg[2] != '\0') CLLONGWARN(arg); } else if (arg[2] != '\0') { /* parse sort method */ rep = G(rep); /* future args are genargs only */ if (!ISALPHA(arg[2])) d = arg + 2; else { d = arg + 3; c = TOLOWER(arg[2]); if (c == 'r') op->outopts.sortby[rep] = REQUESTS; else if (c == 's') op->outopts.sortby[rep] = REQUESTS7; else if (c == 'p') op->outopts.sortby[rep] = PAGES; else if (c == 'q') op->outopts.sortby[rep] = PAGES7; else if (c == 'b') op->outopts.sortby[rep] = BYTES; else if (c == 'c') op->outopts.sortby[rep] = BYTES7; else if (c == 'a') op->outopts.sortby[rep] = ALPHABETICAL; else if (c == 'd') op->outopts.sortby[rep] = DATESORT; else if (c == 'e') op->outopts.sortby[rep] = FIRSTDATE; else if (c == 'x') op->outopts.sortby[rep] = RANDOM; else { warn('C', TRUE, "Unknown sort method in command line option %s", arg); return; } } if (*d != '\0') { /* parse floor */ len = strlen(d); c = TOLOWER(*(d + len - 1)); /* final character */ if (c != 'r' && c != 's' && c != 'p' && c != 'q' && c != 'b' && c != 'c' && c != 'd' && c != 'e') { if (d == arg + 2) { warn('C', TRUE, "No sort method or floor given in command line option %s", arg); return; } /* else deduce floor method */ c = arg[2]; memmove((void *)(arg + 2), (void *)(arg + 3), len + 1); if (c == 'a' || c == 'x') *(d + len - 1) = 'r'; else *(d + len - 1) = c; configfloor((void *)&(op->outopts.floor[rep]), arg, arg + 2, NULL, -2); } else configfloor((void *)&(op->outopts.floor[rep]), arg, d, NULL, -2); } } } void cldebug(char **s, char *arg) { if (arg[0] == '-') { if (arg[2] != '\0') CLLONGWARN(arg); configdebug(s, arg, "FALSE", NULL, -2); } else if (arg[2] == '\0') configdebug(s, arg, "TRUE", NULL, -2); else configdebug(s, arg, arg + 2, NULL, -2); } void clargs(Options *op, int argc, char *argv[]) { extern char repcodes[]; extern logical vblesonly; extern char *debug_args, *warn_args; int i; choice j; for (i = 1; i < argc; i++) { if (strlen(argv[i]) > 255) { argv[i][70] = '\0'; warn('C', TRUE, "Ignoring long command line argument starting\n%s", argv[i]); } else if (!IS_EMPTY_STRING(argv[i])) { if (argv[i][0] != '+' && argv[i][0] != '-') configlogfile((void *)&(op->miscopts.logfile[0]), argv[i], argv[i], NULL, -2); else switch (argv[i][1]) { case '\0': configlogfile((void *)&(op->miscopts.logfile[0]), argv[i], "stdin", NULL, -2); break; case '1': case '4': case '5': case '6': case '7': case 'd': case 'D': case 'H': case 'h': case 'm': case 'P': case 'Q': case 'W': case 'w': case 'x': case 'z': for (j = 0; repcodes[j] != argv[i][1]; j++) ; CLREPTOGGLE(j); break; case 'b': case 'B': case 'c': case 'E': case 'f': case 'i': case 'I': case 'j': case 'J': case 'k': case 'K': case 'l': case 'L': case 'M': case 'n': case 'N': case 'p': case 'o': case 'r': case 'R': case 'S': case 't': case 'u': case 'v': case 'y': case 'Y': case 'Z': for (j = 0; repcodes[j] != argv[i][1]; j++) ; clgenrep(op, j, argv[i]); break; case 's': if (STREQ(argv[i] + 2, "ettings")) vblesonly = TRUE; else clgenrep(op, REP_REFSITE, argv[i]); break; case 'a': CLOUTSTYLE(op->outopts.outstyle); break; case 'A': CLLONGCHECK(configall((void *)(op->outopts.repq), argv[i], (argv[i][0] == '+')?"ON":"OFF", NULL, -2)); break; case 'C': CLSHORTCHECK(clconfline(op, argv[i] + 2)); break; case 'F': if (argv[i][0] == '-') { CLLONGCHECK(op->dman.fromstr = NULL); } else CLSHORTCHECK(confline(op, "FROM", argv[i] + 2, NULL, -2)); break; case 'g': CLSHORTCHECK((void)config(argv[i] + 2, op, TRUE)); break; case 'G': /* mandatory config file: already dealt with */ break; case 'O': CLSHORTCHECK(confline(op, "OUTFILE", argv[i] + 2, NULL, -2)); break; case 'q': cldebug(&warn_args, argv[i]); break; case 'T': if (argv[i][0] == '-') { CLLONGCHECK(op->dman.tostr = NULL); } else CLSHORTCHECK(confline(op, "TO", argv[i] + 2, NULL, -2)); break; case 'U': CLSHORTCHECK(confline(op, "CACHEFILE", argv[i] + 2, NULL, -2)); break; case 'V': cldebug(&debug_args, argv[i]); break; case 'X': CLGOTOS(op->outopts.gotos); break; case '-': if (STREQ(argv[i] + 2, "settings")) vblesonly = TRUE; else warn('C', TRUE, "Ignoring unknown command line argument %s", argv[i]); /* --help and --version are detected earlier, */ break; /* in settings() */ default: warn('C', TRUE, "Ignoring unknown command line argument %s", argv[i]); break; } } } } analog-ce-6.0.17/src/init2.c000066400000000000000000001601471406366436600154420ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** init2.c; subsiduary functions for parsing config files */ /* See also init.c */ #include "anlghea3.h" /*** All config commands have the following structure: void config.....(void *opt, char *cmd, char *arg1, char *arg2, int rc) opt is the variable to be changed, "cmd arg1 arg2" is the config command issued, rc is the number of arguments retrieved from the config line (0..3), or -1 if the config command was issued by the program internally, or -2 if it was issued by the program in parsing command line (for those -2's which don't go through confline(), cmd is command line option). -3 is occasionally used for special cases. ***/ /* First some warnings of things that can go wrong in config commands. NB rc = -1 announced to be because anlghead.h got messed up. But it could be an internal error caused by a bug. */ void shortwarn(char *cmd, char *arg1, int rc) { char *s = "Not enough arguments for configuration command: ignoring it"; if (rc == -1) error("Default given for %s in anlghead.h too short"); else if (arg1 == NULL) warn('C', TRUE, "%s:\n%s", s, cmd); else warn('C', TRUE, "%s:\n%s %s", s, cmd, delimit(arg1)); } void longwarn(char *cmd, char *arg1, char *arg2, int rc) { char *s = "Too many arguments for configuration command: " "ignoring end of line starting"; if (rc == -1) warn('C', TRUE, "Default given for %s in anlghead.h too long: " "ignoring end of it", cmd); else if (arg2 == NULL) warn('C', TRUE, "%s:\n%s %s", s, cmd, delimit(arg1)); else warn('C', TRUE, "%s:\n%s %s %s", s, cmd, delimit(arg1), delimit(arg2)); } void badwarn(char *cmd, choice domess, char *arg1, char *arg2, int rc) { char *s = "Bad argument in configuration command: ignoring it"; if (rc == -2) warn('C', TRUE, "Bad argument in command line argument %s: ignoring it", cmd); else if (rc == -1) error("Incorrect default given for %s in anlghead.h", cmd); else if (arg2 == NULL) warn('C', domess, "%s:\n%s %s", s, cmd, delimit(arg1)); else warn('C', domess, "%s:\n%s %s %s", s, cmd, delimit(arg1), delimit(arg2)); } void unknownwarn(char *cmd, char *arg1, char *arg2) { char *s = "Unknown configuration command: ignoring it"; if (arg1 == NULL) warn('C', TRUE, "%s:\n%s", s, cmd); else if (arg2 == NULL) warn('C', TRUE, "%s:\n%s %s", s, cmd, delimit(arg1)); else warn('C', TRUE, "%s:\n%s %s %s", s, cmd, delimit(arg1), delimit(arg2)); } void configcall(void *opt, char *cmd, char *arg1, char *arg2, int rc) { if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); /* calling function will then call config() */ } void configcols(void *opt, char *cmd, char *arg1, char *arg2, int rc) { extern char colcodes[]; choice *cols = (choice *)opt; /* see also configallcols() */ logical warn1 = FALSE, warn2 = FALSE, warn3; char *c; int i = 0, j, k; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } for (c = arg1; *c != '\0' && i < COL_NUMBER - 1; c++, i++) { for (cols[i] = COL_NUMBER, k = 0; cols[i] == COL_NUMBER && colcodes[k] != '\0'; k++) { if (*c == colcodes[k]) cols[i] = k; } if (cols[i] == COL_NUMBER) { i--; if (!warn1) { warn('C', TRUE, "Ignoring unknown columns in\n%s %s", cmd, arg1); warn1 = TRUE; } } /* check for repeated columns */ else if ((cols[i] == COL_DATE && strchr(arg1, 'D') != NULL) || (cols[i] == COL_FIRSTD && strchr(arg1, 'E') != NULL)) { i--; /* cancel i++ in for loop, so overwriting this column */ if (!warn2) { warn('C', TRUE, "Ignoring repeated columns in configuration command\n%s %s", cmd, arg1); warn2 = TRUE; } } else { for (j = 0, warn3 = FALSE; j < i && !warn3; j++) { if (cols[j] == cols[i]) { /* shortest code, not least work */ warn3 = TRUE; i--; /* see above */ if (!warn2) { warn('C', TRUE, "Ignoring repeated columns in configuration command\n%s %s", cmd, arg1); warn2 = TRUE; } } } } } /* for c */ if (*c != '\0' /* can this happen? */ || rc > 1) longwarn(cmd, arg1, arg2, rc); cols[i] = COL_NUMBER; } void configallcols(void *opt, char *cmd, char *arg1, char *arg2, int rc) { choice *cols = (choice *)opt; int j; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); for (j = 0; j < DATEREP_NUMBER; j++) /* possibility of dup. warns */ configcols((void *)&(cols[j * COL_NUMBER]), cmd, arg1, NULL, -3); } /* A set of symbolic word choices for use with configchoice() below. Must all end with "". */ Choices sortbychoices[] = {{"REQUESTS", REQUESTS}, {"REQUESTS7", REQUESTS7}, {"PAGES", PAGES}, {"PAGES7", PAGES7}, {"BYTES", BYTES}, {"BYTES7", BYTES7}, {"LASTDATE", DATESORT}, {"DATE", DATESORT}, {"FIRSTDATE", FIRSTDATE}, {"ALPHABETICAL", ALPHABETICAL}, {"RANDOM", RANDOM}, {"", 0}}; #ifndef NOGRAPHICS Choices chartchoices[] = {{"ON", CHART_SORTBY}, {"TRUE", CHART_SORTBY}, {"SORTBY", CHART_SORTBY}, {"OFF", CHART_NONE}, {"FALSE", CHART_NONE}, {"NONE", CHART_NONE}, {"REQUESTS", REQUESTS}, {"REQUESTS7", REQUESTS7}, {"PAGES", PAGES}, {"PAGES7", PAGES7}, {"BYTES", BYTES}, {"BYTES7", BYTES7}, {"", 0}}; #endif Choices outstylechoices[] = {{"HTML", HTML}, {"XHTML", XHTML}, {"PLAIN", PLAIN}, {"ASCII", ASCII}, {"LATEX", LATEX}, {"COMPUTER", COMPUTER}, {"PREFORMATTED", COMPUTER}, {"CRO", COMPUTER}, {"XML", XML}, {"CACHE", OUT_NONE}, {"NONE", OUT_NONE}, {"", 0}}; #ifndef NODNS Choices dnschoices[] = {{"NONE", DNS_NONE}, {"OFF", DNS_NONE}, {"READ", DNS_READ}, {"LOOKUP", DNS_LOOKUP}, {"WRITE", DNS_WRITE}, {"", 0}}; #endif Choices gotochoices[] = {{"ON", TRUE}, {"TRUE", TRUE}, {"ALL", TRUE}, {"OFF", FALSE}, {"FALSE", FALSE}, {"NONE", FALSE}, {"FEW", FEW}, {"SOME", FEW}, {"", 0}}; Choices casechoices[] = {{"INSENSITIVE", TRUE}, {"SENSITIVE", FALSE}, {"", 0}}; Choices daychoices[] = {{"SUNDAY", SUNDAY}, {"MONDAY", MONDAY}, {"TUESDAY", TUESDAY}, {"WEDNESDAY", WEDNESDAY}, {"THURSDAY", THURSDAY}, {"FRIDAY", FRIDAY}, {"SATURDAY", SATURDAY}, {"", 0}}; Choices langchoices[] = {{"ARMENIAN", ARMENIAN}, {"BASQUE", BASQUE}, {"BOSNIAN", OLDLANG}, {"BULGARIAN", BULGARIAN}, {"BULGARIAN-MIK", BULGARIAN_MIK}, {"CATALAN", CATALAN}, {"SIMP-CHINESE", SIMP_CHINESE}, {"CHINESE", SIMP_CHINESE}, {"TRAD-CHINESE", TRAD_CHINESE}, {"TAIWANESE", TRAD_CHINESE}, {"CROATIAN", OLDLANG}, {"CZECH", CZECH}, {"CZECH-1250", CZECH_1250}, {"DANISH", DANISH}, {"DUTCH", DUTCH}, {"FLEMISH", DUTCH}, {"ENGLISH", ENGLISH}, {"US-ENGLISH", US_ENGLISH}, {"FINNISH", FINNISH}, {"FRENCH", FRENCH}, {"GERMAN", GERMAN}, {"GREEK", OLDLANG}, {"HUNGARIAN", HUNGARIAN}, {"ICELANDIC", OLDLANG}, {"INDONESIAN", INDONESIAN}, {"ITALIAN", ITALIAN}, {"JAPANESE-EUC", JAPANESE_EUC}, {"JAPANESE-JIS", JAPANESE_JIS}, {"JAPANESE-SJIS", JAPANESE_SJIS}, {"JAPANESE-UTF", JAPANESE_UTF}, {"JAPANESE", JAPANESE_JIS}, {"KOREAN", KOREAN}, {"LATVIAN", LATVIAN}, {"LITHUANIAN", OLDLANG}, {"NORWEGIAN", NORWEGIAN}, {"BOKMAL", NORWEGIAN}, {"BOKMAAL", NORWEGIAN}, {"NYNORSK", NYNORSK}, {"POLISH", POLISH}, {"PORTUGUESE", PORTUGUESE}, {"PORTUGESE", PORTUGUESE}, {"BR-PORTUGUESE", BR_PORTUGUESE}, {"BR-PORTUGESE", BR_PORTUGUESE}, {"BRAZILIAN", BR_PORTUGUESE}, {"ROMANIAN", OLDLANG}, {"RUSSIAN", RUSSIAN}, {"RUSSIAN-1251", RUSSIAN_1251}, {"SERBIAN", SERBIAN}, {"SERBOCROATIAN", SERBIAN}, {"SERBOCROAT", SERBIAN}, {"SLOVAK", SLOVAK}, {"SLOVAK-1250", SLOVAK_1250}, {"SLOVENE", SLOVENE}, {"SLOVENIAN", SLOVENE}, {"SLOVENE-1250", SLOVENE_1250}, {"SLOVENIAN-1250", SLOVENE_1250}, {"SPANISH", SPANISH}, {"SWEDISH", SWEDISH}, {"SWEDISH-ALT", SWEDISH_ALT}, {"TURKISH", TURKISH}, {"UKRAINIAN", UKRAINIAN}, {"UKRANIAN", UKRAINIAN}, {"", 0}}; Choices onoffchoices[] = {{"ON", TRUE}, {"TRUE", TRUE}, {"OFF", FALSE}, {"FALSE", FALSE}, {"", 0}}; void configchoice(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Choices *choices; choice *ans = (choice *)opt; logical *ansl = (logical *)opt; char *cmdend = strchr(cmd, '\0'); int i; logical done, islog = FALSE; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (STREQ(cmdend - 6, "SORTBY")) choices = sortbychoices; #ifndef NOGRAPHICS else if (STREQ(cmdend - 5, "CHART")) choices = chartchoices; #endif else if (STREQ(cmd, "OUTPUT")) choices = outstylechoices; #ifndef NODNS else if (STREQ(cmd, "DNS")) choices = dnschoices; #endif else if (STREQ(cmd, "LANGUAGE")) choices = langchoices; else if (STREQ(cmd, "GOTOS")) choices = gotochoices; else if (STREQ(cmdend - 4, "CASE")) { choices = casechoices; islog = TRUE; } else if (STREQ(cmd, "WEEKBEGINSON")) choices = daychoices; else if (STREQ(cmd, "SEARCHCHARCONVERT")) choices = onoffchoices; else { choices = onoffchoices; islog = TRUE; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); for (i = 0, done = FALSE; !done && !IS_EMPTY_STRING(choices[i].name); i++) { if (strcaseeq(arg1, choices[i].name)) { if (islog) *ansl = (logical)(choices[i].arg); else *ans = choices[i].arg; /* I'm sure islog is unnecessary -- that we can safely pass a logical in to this function and pretend it's a choice in here. But let's pretend we're in a strongly-typed language. :-) */ done = TRUE; } } if (!done) badwarn(cmd, TRUE, arg1, arg2, rc); } #ifndef NOGRAPHICS void configallchart(void *opt, char *cmd, char *arg1, char *arg2, int rc) { /* only takes ON and OFF to avoid invalid choices */ choice *q = (choice *)opt; choice p = UNSET; int i; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strcaseeq(arg1, "ON") || strcaseeq(arg1, "TRUE") || strcaseeq(arg1, "SORTBY")) p = CHART_SORTBY; else if (strcaseeq(arg1, "OFF") || strcaseeq(arg1, "FALSE") || strcaseeq(arg1, "NONE")) p = CHART_NONE; if (p == UNSET) badwarn(cmd, TRUE, arg1, arg2, rc); else for (i = 0; i < GENREP_NUMBER; i++) q[i] = p; } #endif /* NOGRAPHICS */ void configdebug(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char **args = (char **)opt; char *a, *c; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strcaseeq(arg1, "ON") || strcaseeq(arg1, "TRUE") || strcaseeq(arg1, "ALL")) configstr(args, NULL, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", NULL, -1); else if (strcaseeq(arg1, "OFF") || strcaseeq(arg1, "FALSE") || strcaseeq(arg1, "NONE")) configstr(args, NULL, "", NULL, -1); else { strtoupper(arg1); if (arg1[0] == '-') { while ((c = strpbrk(*args, arg1 + 1)) != NULL) memmove((void *)c, (void *)(c + 1), strlen(c)); } else if (arg1[0] == '+') { /* c.f. configstr() */ *args = (char *)xrealloc((void *)(*args), strlen(arg1) + strlen(*args)); for (a = strchr(*args, '\0'), c = arg1 + 1; *c != '\0'; c++) { if (!strchr(*args, *c)) { *a = *c; *(++a) = '\0'; } } } else configstr(args, NULL, arg1, NULL, -1); } } void configall(void *opt, char *cmd, char *arg1, char *arg2, int rc) { logical *q = (logical *)opt; choice result = UNSET; int i; configchoice((void *)(&result), cmd, arg1, arg2, rc); if (result != UNSET) { for (i = 0; i < REP_NUMBER; i++) { if (i != REP_GENSUM) q[i] = result; } } } void configallback(void *opt, char *cmd, char *arg1, char *arg2, int rc) { logical *q = (logical *)opt; /* same as configall(), but only DATEREPORTs */ choice result = UNSET; int i; configchoice((void *)(&result), cmd, arg1, arg2, rc); if (result != UNSET) { for (i = 0; i < DATEREPORTS_NUMBER; i++) q[i] = (logical)result; } } void configlang(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Lang *lang = (Lang *)opt; choice code = UNSET; configchoice((void *)(&code), cmd, arg1, arg2, rc); if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (code == OLDLANG) { badwarn(cmd, FALSE, arg1, arg2, rc); warn('C', CONTINUATION, " (language not yet translated for version 5)"); } else if (code != UNSET) { /* code == UNSET warning in configchoice() */ lang->code = code; lang->file = NULL; } } void selectlang(char *country, Outchoices *op) { /* Select localisation files with country code. If outstyle is HTML/XHTML or ASCII, look first for special files for those styles. */ char partname[13]; /* The longest name we might want to build is 3 for the country code, 1 for h or a, 8 for "desc.txt" and terminating \0. */ char *filename = NULL; /* Just to keep the compiler happy */ FILE *f; if (op->outstyle == HTML || op->outstyle == XHTML || op->outstyle == ASCII) { sprintf(partname, "%s%c%clng", country, (op->outstyle == ASCII)?'a':'h', EXTSEP); filename = buildfilename(LANGDIR, "lang", partname); } if ((op -> outstyle != HTML && op->outstyle != XHTML && op->outstyle != ASCII) || (f = FOPENR(filename)) == NULL) { sprintf(partname, "%s%clng", country, EXTSEP); filename = buildfilename(LANGDIR, "lang", partname); } else fclose(f); COPYSTR(op->lang.file, filename); if (op->domainsfile == NULL) { if (op->outstyle == HTML || op->outstyle == XHTML || op->outstyle == ASCII) { sprintf(partname, "%s%cdom%ctab", country, (op->outstyle == ASCII)?'a':'h', EXTSEP); filename = buildfilename(LANGDIR, "lang", partname); } if ((op->outstyle == HTML || op->outstyle == XHTML || op->outstyle == ASCII) && (f = FOPENR(filename)) != NULL) fclose(f); else { sprintf(partname, "%sdom%ctab", country, EXTSEP); filename = buildfilename(LANGDIR, "lang", partname); if ((f = FOPENR(filename)) == NULL) filename = NULL; /* and will get set to ukdom.tab on return */ else fclose(f); } if (filename != NULL) COPYSTR(op->domainsfile, filename); } if (op->descriptions && op->descfile == NULL) { if (op->outstyle == HTML || op->outstyle == XHTML || op->outstyle == ASCII) { sprintf(partname, "%s%cdesc%ctxt", country, (op->outstyle == ASCII)?'a':'h', EXTSEP); filename = buildfilename(LANGDIR, "lang", partname); } if ((op->outstyle == HTML || op->outstyle == XHTML || op->outstyle == ASCII) && (f = FOPENR(filename)) != NULL) fclose(f); else { sprintf(partname, "%sdesc%ctxt", country, EXTSEP); filename = buildfilename(LANGDIR, "lang", partname); if ((f = FOPENR(filename)) == NULL) filename = NULL; else fclose(f); } if (filename != NULL) COPYSTR(op->descfile, filename); } } void configlogfmt(void *opt, char *cmd, char *arg1, char *arg2, int rc) { extern Memman *xmemman; Inputformatlist **logfmt = (Inputformatlist **)opt; Inputformatlist *fp; Inputformat *form; choice count[INPUT_NUMBER]; choice rc2; char code; int i; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strcaseeq(arg1, "DEFAULT")) { (*logfmt)->used = TRUE; configlogfmt(opt, NULL, "%x0", NULL, -1); (*logfmt)->used = TRUE; } else if (strcaseeq(arg1, "AUTO")) { (*logfmt)->used = TRUE; configlogfmt(opt, NULL, "%x1", NULL, -1); (*logfmt)->used = TRUE; } else if (strcaseeq(arg1, "COMMON")) { configlogfmt(opt, NULL, LOG_COMMON1, NULL, -1); configlogfmt(opt, NULL, LOG_COMMON2, NULL, -1); configlogfmt(opt, NULL, LOG_COMMON3, NULL, -1); } else if (strcaseeq(arg1, "MS-COMMON")) { configlogfmt(opt, NULL, LOG_MS_COMMON1, NULL, -1); configlogfmt(opt, NULL, LOG_COMMON2, NULL, -1); configlogfmt(opt, NULL, LOG_COMMON3, NULL, -1); } else if (strcaseeq(arg1, "COMBINED")) { configlogfmt(opt, NULL, LOG_COMBINED1, NULL, -1); configlogfmt(opt, NULL, LOG_COMBINED2, NULL, -1); configlogfmt(opt, NULL, LOG_COMBINED3, NULL, -1); } else if (strcaseeq(arg1, "MICROSOFT-NA") || strcaseeq(arg1, "MICROSOFT-NA2") || strcaseeq(arg1, "MICROSOFT-NA4")) { /* NA2 and NA4 are legacy */ configlogfmt(opt, NULL, LOG_MS_NA1, NULL, -1); configlogfmt(opt, NULL, LOG_MS_NA2, NULL, -1); } else if (strcaseeq(arg1, "MICROSOFT-INT") || strcaseeq(arg1, "MICROSOFT-INT2") || strcaseeq(arg1, "MICROSOFT-INT4")) { configlogfmt(opt, NULL, LOG_MS_INT1, NULL, -1); configlogfmt(opt, NULL, LOG_MS_INT2, NULL, -1); } else if (strcaseeq(arg1, "WEBSITE-NA")) configlogfmt(opt, NULL, LOG_WEBSITE_NA, NULL, -1); else if (strcaseeq(arg1, "WEBSITE-INT")) configlogfmt(opt, NULL, LOG_WEBSITE_INT, NULL, -1); else if (strcaseeq(arg1, "WEBSTAR")) { configlogfmt(opt, NULL, LOG_WEBSTAR1, NULL, -1); configlogfmt(opt, NULL, LOG_WEBSTAR2, NULL, -1); } else if (strcaseeq(arg1, "EXTENDED")) { configlogfmt(opt, NULL, LOG_EXTENDED1, NULL, -1); configlogfmt(opt, NULL, LOG_EXTENDED2, NULL, -1); } else if (strcaseeq(arg1, "MS-EXTENDED")) { configlogfmt(opt, NULL, LOG_MS_EXTENDED1, NULL, -1); configlogfmt(opt, NULL, LOG_EXTENDED2, NULL, -1); } else if (strcaseeq(arg1, "WEBSTAR-EXTENDED")) { configlogfmt(opt, NULL, LOG_WEBSTAR_EXTENDED1, NULL, -1); configlogfmt(opt, NULL, LOG_EXTENDED2, NULL, -1); } else if (strcaseeq(arg1, "MACHTTP")) configlogfmt(opt, NULL, LOG_MACHTTP, NULL, -1); else if (strcaseeq(arg1, "NETSCAPE")) configlogfmt(opt, NULL, LOG_NETSCAPE, NULL, -1); else if (strcaseeq(arg1, "BROWSER")) configlogfmt(opt, NULL, LOG_BROWSER, NULL, -1); else if (strcaseeq(arg1, "REFERRER") || strcaseeq(arg1, "REFERER")) { configlogfmt(opt, NULL, LOG_REFERRER1, NULL, -1); configlogfmt(opt, NULL, LOG_REFERRER2, NULL, -1); } else if ((rc2 = strtoinfmt(&form, arg1, count)) != FMT_OK) { code = (rc == -3)?'F':'C'; if (rc == -3) warn(code, FALSE, "Ignoring corrupt format line in logfile"); else badwarn(cmd, FALSE, arg1, arg2, rc); if (rc2 == FMT_DUP) warn(code, CONTINUATION, " (reason: one item occurs twice in format)"); else if (rc2 == FMT_PARTTIME) warn(code, CONTINUATION, " (reason: time without date or vice versa)"); else if (rc2 == FMT_BADPC) warn(code, CONTINUATION, " (reason: an unknown item code is present)"); else if (rc2 == FMT_NOPC) warn(code, CONTINUATION, " (reason: no item codes are present)"); else if (rc2 == FMT_BADCHAR) warn(code, CONTINUATION, " (reason: an unknown escape sequence is present)"); else if (rc2 == FMT_NOTERM) warn(code, CONTINUATION, " (reason: an unterminated string is present)"); else if (rc2 == FMT_BADBUILTIN) warn(code, CONTINUATION, " (reason: non-existent built-in format)"); else if (rc2 == FMT_QBUTNOR) warn(code, CONTINUATION, " (reason: query string without filename)"); /* despite finishing "else if", that should be all the rc2's */ return; } else { if ((*logfmt)->used) { fp = (Inputformatlist *)submalloc(xmemman, sizeof(Inputformatlist)); *logfmt = fp; (*logfmt)->used = FALSE; } else { for (fp = *logfmt; fp->next != NULL; TO_NEXT(fp)) ; fp->next = (Inputformatlist *)submalloc(xmemman, sizeof(Inputformatlist)); TO_NEXT(fp); } fp->form = form; for (i = 0; i < INPUT_NUMBER; i++) fp->count[i] = count[i]; fp->next = NULL; } } void configapachelogfmt(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char *p; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if ((p = apachelogfmt(arg1)) == NULL) warn('C', TRUE, "Sorry, can't parse \"%%...{format}t\" in %s: ignoring whole line", cmd); else if (STREQ(cmd, "APACHELOGFORMAT")) configlogfmt(opt, "APACHELOGFORMAT -> LOGFORMAT", p, NULL, 1); else configlogfmt(opt, "APACHEDAFAULTLOGFORMAT -> DEFAULTLOGFORMAT", p, NULL, 1); } void configrepord(void *opt, char *cmd, char *arg1, char *arg2, int rc) { extern char repcodes[]; char *s1 = "REPORTORDER"; char *s2 = "REPORTORDER in anlghead.h"; char *s = (rc == -1)?s2:s1; choice *order = (choice *)opt; logical used[REP_NUMBER]; int i, j, k; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } for (i = 0; i < REP_NUMBER; i++) used[i] = 0; for (i = 0, k = 0; k < REP_NUMBER && arg1[i] != '\0'; i++) { if (ISALNUM(arg1[i])) { /* else ignore */ for (j = 0; repcodes[j] != arg1[i] && repcodes[j] != '\0'; j++) ; if (repcodes[j] == '\0') warn('C', TRUE, "Spurious character %c in %s: ignoring it", arg1[i], s); else if (used[j] == 0) { order[k++] = j; used[j] = 1; } else if (used[j] == 1) { warn('C', TRUE, "Character %c used more than once in %s: " "ignoring later occurrences", arg1[i], s); used[j] = 2; } } } if (rc > 1 || arg1[i] != '\0') longwarn(cmd, arg1, arg2, rc); if (k < REP_NUMBER) { for (i = 0; i < REP_NUMBER && k < REP_NUMBER; i++) { if (used[i] == 0) { /* k should stay < R_N automatically, but... */ warn('C', TRUE, "Character %c not used in %s: adding it at end", repcodes[i], s); order[k++] = i; } } } order[k] = -1; } void configstr(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char **s = (char **)opt; size_t len; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); len = strlen(arg1); *s = (char *)xrealloc((void *)(*s), len + 1); strcpy(*s, arg1); } void configstrlist(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Strlist **list = (Strlist **)opt; Strlist *lp = NULL; char *t; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc == -1) /* have to be careful because can't strtok a const string */ t = arg1; else if ((t = strtok(arg1, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (*list != NULL) { for (lp = *list; lp->next != NULL; TO_NEXT(lp)) ; /* find end of list */ } for ( ; t != NULL; t = ((rc == -1)?NULL:strtok((char *)NULL, ","))) { if (strcaseeq(t, "none")) *list = NULL; else { if (*list == NULL) { lp = (Strlist *)xmalloc(sizeof(Strlist)); *list = lp; } else { lp->next = (Strlist *)xmalloc(sizeof(Strlist)); TO_NEXT(lp); } if (STREQ(cmd, "DOMCHARTEXPAND") && *t == '.') /* ugly special case */ t++; COPYSTR(lp->name, t); lp->next = NULL; } } return; } void configerrfile(void *opt, char *cmd, char *arg1, char *arg2, int rc) { /* NB Don't use freopen(), coz fatal errors sent to both errfile & stderr. */ FILE **err = (FILE **)opt; FILE *tmp; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strcaseeq(arg1, "stderr")) { if (*err != stderr) { debug('F', "Opening stderr as new ERRFILE"); warn('E', TRUE, "Redirecting future diagnostic messages to stderr"); fclose(*err); *err = stderr; } } else { arg1 = buildfilename(ERRDIR, "", arg1); if ((tmp = FOPENW(arg1)) == NULL) warn('F', TRUE, "Failed to open ERRFILE %s: ignoring it", arg1); else { debug('F', "Opening %s as new ERRFILE", arg1); warn('E', TRUE, "Redirecting future diagnostic messages to %s", arg1); if (*err != stderr) fclose(*err); *err = tmp; setvbuf(*err, NULL, ERRBUFMODE, BUFSIZ); } } } /* There are several versions of expandwildlogs(), according to the following flags: NODIRENT excludes all wildcards in logfile names. Otherwise, if VMSDIRENT, MACDIRENT, WIN32DIRENT or RISCOSDIRENT is defined, use that. Otherwise use POSIX.2 glob, unless NOGLOB is defined when use POSIX.1 stuff, not allowing wildcards in directory names. MACDIRENT does actually include the POSIX.1 dirent code here, but implements all the functions itself in macstuff.c. In all cases, expandwildlogs() takes an argument, Logfile *lp, and clones it within the list (using clonelogs()) as it expands the wildcards. It returns a pointer to the last clone. E.g. expandwildlogs(log2*) turns log1 -> log2* -> log3 into log1 -> log2a -> log2b -> log3 returning log2b */ #ifndef NODIRENT Logfile *clonelogs(Logfile *from, char *name) { Logfile *ans = (Logfile *)xmalloc(sizeof(Logfile)); memcpy(ans, from, sizeof(Logfile)); COPYSTR(ans->name, name); ans->next = from->next; from->next = ans; return(ans); } #ifndef VMSDIRENT #ifndef WIN32DIRENT #ifndef RISCOSDIRENT #ifndef NOGLOB /* Glob code is due to Owen Cliffe Feb 2001, slightly modified by Stephen Turner */ Logfile *expandwildlogs(Logfile *lp, Logfile **pter) { Logfile *ans = lp; glob_t globbuf; struct stat statbuf; int i; globbuf.gl_offs = 0; if(glob(lp->name,GLOB_NOCHECK,NULL,&globbuf) != 0){ warn('F', TRUE, "Failed to expand wildcards %s", lp->name); return(ans); } for(i=0;inext; return(ans); } #else /* not GLOB; use POSIX dirent */ Logfile *expandwildlogs(Logfile *lp, Logfile **pter) { Logfile *ans = lp; struct dirent *filep; struct stat buf; DIR *dirp; char *dirname, *filename, *c; size_t dirlen, len = 0; if ((c = strrpbrk(lp->name, PATHSEPS)) == NULL) { filename = lp->name; dirname = (char *)xmalloc(3); #ifdef MAC dirname[0] = '\0'; #else sprintf(dirname, ".%c", DIRSEP); #endif } else { filename = c + 1; dirname = (char *)xmalloc((size_t)(c - lp->name) + 2); memcpy((void *)dirname, (void *)(lp->name), (size_t)(c - lp->name) + 1); dirname[(c - lp->name) + 1] = '\0'; } if ((dirp = opendir(dirname)) == NULL) { if (strchr(dirname, '*') != NULL || strchr(dirname, '?') != NULL) warn('F', TRUE, "Cannot open directory %s: won't expand wildcards %s\n" "(wildcards not allowed in directory name)", dirname, lp->name); else warn('F', TRUE, "Cannot open directory %s: won't expand wildcards %s", dirname, lp->name); return(ans); } dirlen = strlen(dirname); while ((filep = readdir(dirp)) != NULL) { if (MATCHES(filep->d_name, filename)) { if (strlen(filep->d_name) > len) { len = strlen(filep->d_name); /* d_namlen is not portable */ dirname = (char *)xrealloc((void *)dirname, dirlen + len + 1); } memcpy((void *)(dirname + dirlen), (void *)(filep->d_name), len + 1); stat(dirname, &buf); /* dirname now contains complete filename */ if (S_ISREG(buf.st_mode)) ans = clonelogs(ans, dirname); } } closedir(dirp); free((void *)dirname); if (ans != lp) *pter = lp->next; return(ans); } #endif /* NOGLOB */ #else /* RISCOSDIRENT */ /* The RISC OS dirent is due to Stefan Bellon (sbellon@sbellon.de) */ static struct { unsigned int load, exec, length, attributes, type; char name[255]; /* WARNING: arbitrary limit */ } direntry; Logfile *expandwildlogs(Logfile *lp, Logfile **pter) { Logfile *ans = lp; char *dirname, *leafname, *filename, *c; int count, context = 0; _kernel_oserror *e; size_t dirlen, path = 0, len = 0; if ((c = strrpbrk(lp->name, PATHSEPS)) == NULL) { path = 0; dirname = (char *)xmalloc(1); dirname[0] = '\0'; leafname = lp->name; } else { path = 1; dirname = (char *)xmalloc((size_t)(c - lp->name) + 1); memcpy((void *)dirname, (void *)(lp->name), (size_t)(c - lp->name)); dirname[(c - lp->name)] = '\0'; leafname = c + 1; } dirlen = strlen(dirname); filename = (char *)xmalloc(dirlen + path + 1); memcpy(filename, dirname, dirlen); filename[dirlen] = DIRSEP; filename[dirlen + path] = '\0'; /* may overwrite the DIRSEP again */ while (context != -1) { e = _swix(OS_GBPB, _INR(0,6) | _OUTR(3,4), 10, dirname, &direntry, 1, context, sizeof(direntry), leafname, &count, &context); if (e != NULL) error("%s\n", e->errmess); if (count > 0 && direntry.type == 1) { if (strlen(direntry.name) > len) { len = strlen(direntry.name); filename = (char *)xrealloc((void *)filename, dirlen + path + len + 1); } memcpy((void *)(filename + dirlen + path), (void *)(direntry.name), len + 1); ans = clonelogs(ans, filename); } } free((void *)dirname); free((void *)filename); if (ans != lp) *pter = lp->next; return(ans); } #endif /* RISCOSDIRENT */ #else /* WIN32DIRENT */ Logfile *expandwildlogs(Logfile *lp, Logfile **pter) { Logfile *ans = lp; struct _stat buf; char *dirname, *c; struct _finddata_t file; long code; int rc2; size_t dirlen, len = 0; if ((code = _findfirst(lp->name, &file)) != (long)(-1)) { if ((c = strrpbrk(lp->name, PATHSEPS)) == NULL) { dirname = (char *)xmalloc(1); dirname[0] = '\0'; } else { dirname = (char *)xmalloc((size_t)(c - lp->name) + 2); memcpy((void *)dirname, (void *)(lp->name), (size_t)(c - lp->name) + 1); dirname[(c - lp->name) + 1] = '\0'; } dirlen = strlen(dirname); for (rc2 = 0; rc2 == 0; rc2 = _findnext(code, &file)) { if (strlen(file.name) > len) { len = strlen(file.name); dirname = (char *)xrealloc((void *)dirname, dirlen + len + 1); } memcpy((void *)(dirname + dirlen), (void *)(file.name), len + 1); _stat(dirname, &buf); /* dirname now contains complete filename */ if (_S_IFREG & buf.st_mode) /* bitwise & */ ans = clonelogs(ans, dirname); } _findclose(code); free((void *)dirname); } if (ans != lp) *pter = lp->next; return(ans); } #endif /* WIN32DIRENT */ #else /* VMSDIRENT */ /* This function is due to Dave Jones (except for any errors I introduced when converting from old configwildlogs() to new expandwildlogs()) */ Logfile *expandwildlogs(Logfile *lp, Logfile **pter) { Logfile *ans = lp; static char fspec[VMS_FSPEC_MAX], related[VMS_FSPEC_MAX]; static char result[VMS_FSPEC_MAX]; static $DESCRIPTOR(fspec_dx,fspec); static $DESCRIPTOR(related_dx,""); static $DESCRIPTOR(default_dx,".log"); static $DESCRIPTOR(result_dx,result); char *space, *ques; long int context; int status, stsval, length, LIB$FIND_FILE(), LIB$FIND_FILE_END(); length = strlen (lp->name); if ( length >= VMS_FSPEC_MAX ) length = VMS_FSPEC_MAX - 1; strncpy ( fspec, lp->name, length ); fspec[length] = '\0'; while ( ques = strchr(fspec,'?') ) *ques = '%'; fspec_dx.dsc$w_length = length; for ( context = 0; 1&(status=LIB$FIND_FILE ( &fspec_dx, &result_dx, &context, &default_dx, &related_dx, &stsval, (long *) 0 )); ) { space = strchr ( result, ' ' ); if ( !space ) space = &result[VMS_FSPEC_MAX-1]; *space = '\0'; ans = clonelogs(ans, result); /* Save last result to use as default for next lookup */ strcpy ( related, result ); related_dx.dsc$w_length = strlen(result); related_dx.dsc$a_pointer = related; } if ( context ) LIB$FIND_FILE_END ( &context ); if (ans != lp) *pter = lp->next; return(ans); } #endif /* VMSDIRENT */ #endif /* NODIRENT */ void configlogfile(void *opt, char *cmd, char *arg1, char *arg2, int rc) { extern Inputformatlist *logformat; extern logical newloglist, iscache; /* see note in configcachefile() below re iscache */ extern int tz; Logfile **logfile = (Logfile **)opt; /* logfile[0] is logfiles, logfile[1] is cache files */ Logfile *lf; char *s, *t; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 2) longwarn(cmd, arg1, arg2, rc); if (strchr(arg1, ',') != NULL) { s = (char *)xmalloc(strlen(arg1) + 1); strcpy(s, arg1); /* can't strtok arg1 directly in case it's const */ if ((t = strtok(s, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); free((void *)s); return; } for ( ; t != NULL; t = strtok((char *)NULL, ",")) configlogfile(opt, "LOGFILE", t, arg2, rc); free((void *)s); return; } if (strcaseeq(arg1, "NONE")) { /* from LOGFILE not CACHEFILE because CACHEFILE NONE caught earlier */ configlogfmt((void *)&logformat, "LOGFORMAT", "DEFAULT", NULL, -1); logfile[iscache] = NULL; return; } if (newloglist) { logfile[0] = NULL; logfile[1] = NULL; newloglist = FALSE; } if (logfile[iscache] == NULL) { logfile[iscache] = (Logfile *)xmalloc(sizeof(Logfile)); lf = logfile[iscache]; } else { for (lf = logfile[iscache]; lf->next != NULL; TO_NEXT(lf)) ; lf->next = (Logfile *)xmalloc(sizeof(Logfile)); TO_NEXT(lf); } if (IS_STDIN(arg1) || rc == -2) { COPYSTR(lf->name, arg1); } else lf->name = buildfilename(iscache?(char *)CACHEDIR:(char *)LOGSDIR, "", arg1); /* Non-configuration options initialised in my_lfopen */ lf->type = LF_NOTOPENED; lf->format = logformat; lf->tz = tz; if (rc >= 2) { /* not from CACHEFILE: those are caught earlier */ COPYSTR(lf->prefix, arg2); lf->prefixlen = strlen(lf->prefix); if (strstr(arg2, "%v") == NULL) lf->pvpos = UNSET; else lf->pvpos = strstr(arg2, "%v") - arg2; } else lf->prefix = NULL; lf->next = NULL; if (!iscache) logformat->used = TRUE; } void configcachefile(void *opt, char *cmd, char *arg1, char *arg2, int rc) { /* a wrapper to configlogfile(), but we have to catch a few cases first */ Logfile **logfile = (Logfile **)opt; extern logical iscache; /* iscache tells configlogfile() to use logfile[1] instead of logfile[0], not to change logformat->used, and to use CACHEDIR instead of LOGSDIR. */ if (rc > 1) { longwarn(cmd, arg1, arg2, rc); rc = 1; } if (strcaseeq(arg1, "NONE")) { logfile[1] = NULL; return; } iscache = TRUE; configlogfile(opt, cmd, arg1, NULL, rc); iscache = FALSE; } void configoutfile(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char **file = (char **)opt; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (IS_STDOUT(arg1) || rc == -2) { COPYSTR(*file, arg1); } else *file = buildfilename(OUTDIR, "", arg1); } void configchar(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char *c = (char *)opt; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (IS_EMPTY_STRING(arg1) || strcaseeq(arg1, "none")) *c = '\0'; else { if (arg1[1] != '\0') longwarn(cmd, arg1, arg2, rc); *c = arg1[0]; } } void configbarstyle(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char *g = (char *)opt; char h; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (rc > 1 || arg1[1] != '\0') longwarn(cmd, arg1, arg2, rc); h = TOLOWER(arg1[0]); if (h != 'a' && h != 'b' && h != 'c' && h != 'd' && h != 'e' && h != 'f' && h != 'g' && h != 'h' && h != 'i' && h != 'j') badwarn(cmd, TRUE, arg1, arg2, rc); else *g = h; } void configgraph(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char *g = (char *)opt; /* see also configallgraph() below */ if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (rc > 1 || arg1[1] != '\0') longwarn(cmd, arg1, arg2, rc); if (arg1[0] != 'R' && arg1[0] != 'P' && arg1[0] != 'B' && arg1[0] != 'r' && arg1[0] != 'p' && arg1[0] != 'b') badwarn(cmd, TRUE, arg1, arg2, rc); else *g = arg1[0]; } void configallgraph(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char *g = (char *)opt; /* same as configgraph() */ int i; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (rc > 1 || arg1[1] != '\0') longwarn(cmd, arg1, arg2, rc); if (arg1[0] != 'R' && arg1[0] != 'P' && arg1[0] != 'B' && arg1[0] != 'r' && arg1[0] != 'p' && arg1[0] != 'b') badwarn(cmd, TRUE, arg1, arg2, rc); else { for (i = 0; i < DATEREP_NUMBER; i++) g[i] = arg1[0]; } } void configfloor(void *opt, char *cmd, char *arg1, char *arg2, int rc) { /* This function parses the following formats for floor r = requests, p = pages, b = bytes, s = 7-day requests, q = 7-day pages, c = 7-day bytes, d = last date, e = first date. -100(r|s|p|q|b|c|d|e) // top 100 1000(r|s|p|q|b|c) // at least 1000 9.5(k|M|G|T|P|E|Z|Y)(b|c) // ditto 0.5%(r|s|p|q|b|c) // at least 0.5% of total 0.5:(r|s|p|q|b|c) // at least 0.5% of largest 970701(d|e) // last/first access since -00-0201(d|e) // same with a relative date Upper case letters for r|p|b|c|d are also acceptable. */ extern time_t starttime; extern char *byteprefix; Floor *floor = (Floor *)opt; char **b, *c, d; choice floorby; char qual = '\0'; double mn; timecode_t t; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); c = arg1 + strlen(arg1) - 1; d = TOUPPER(*c); if (d == 'R') floorby = REQUESTS; else if (d == 'S') floorby = REQUESTS7; else if (d == 'P') floorby = PAGES; else if (d == 'Q') floorby = PAGES7; else if (d == 'B') floorby = BYTES; else if (d == 'C') floorby = BYTES7; else if (d == 'D') floorby = DATESORT; else if (d == 'E') floorby = FIRSTDATE; else { badwarn(cmd, TRUE, arg1, arg2, rc); return; } if (floorby != DATESORT && floorby != FIRSTDATE) { b = (char **)xmalloc(sizeof(char *)); mn = strtod(arg1, b); if (*b == arg1) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } else if (*b == c - 1) { if (mn < 0) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } else if (**b == '%' || **b == ':' || ((floorby == BYTES || floorby == BYTES7) && strchr(byteprefix + 1, **b))) qual = **b; else { badwarn(cmd, TRUE, arg1, arg2, rc); return; } } free((void *)b); } else { /* floorby == DATESORT or FIRSTDATE */ if (arg1[0] == '-' && arg1[1] != '0' && ISDIGIT(arg1[1])) mn = atof(arg1); else if (parsedate(starttime, arg1, &t, TRUE, FALSE) == ERR) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } else mn = (double)t; } floor->min = mn; floor->qual = qual; floor->floorby = floorby; } void configtree(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Tree **treex = (Tree **)opt; Hashindex item; Hashentry *own; char *name, *nameend, *t; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strchr(arg1, ',') != NULL) { if ((t = strtok(arg1, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } for ( ; t != NULL; t = strtok((char *)NULL, ",")) configtree(opt, cmd, t, NULL, -1); return; } own = newhashentry(DATA_NUMBER, FALSE); item.own = own; item.name = arg1; name = NULL; (*treex)->cutfn(&name, &nameend, item.name, TRUE); (void)treefind(name, nameend, &((*treex)->tree), &item, (*treex)->cutfn, TRUE, TRUE, FALSE, (*treex)->space, NULL, DATA_NUMBER); } void configulong(void *opt, char *cmd, char *arg1, char *arg2, int rc) { unsigned int *x = (unsigned int *)opt; char **c; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (!ISDIGIT(arg1[0])) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } c = (char **)xmalloc(sizeof(char *)); *x = strtoul(arg1, c, 10); if (rc > 1 || **c != '\0') longwarn(cmd, arg1, arg2, rc); free((void *)c); } void configuint(void *opt, char *cmd, char *arg1, char *arg2, int rc) { unsigned int *x = (unsigned int *)opt; char **c; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (!ISDIGIT(arg1[0])) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } c = (char **)xmalloc(sizeof(char *)); *x = (unsigned int)strtoul(arg1, c, 10); if (rc > 1 || **c != '\0') longwarn(cmd, arg1, arg2, rc); free((void *)c); } void configoffset(void *opt, char *cmd, char *arg1, char *arg2, int rc) { /* configint with extra checks */ int *x = (int *)opt; char **c; int y; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (arg1[0] == '+') { if (!ISDIGIT(arg1[1])) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } arg1++; } else if (!ISDIGIT(arg1[0]) && !(arg1[0] == '-' && ISDIGIT(arg1[1]))) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } c = (char **)xmalloc(sizeof(char *)); y = (int)strtol(arg1, c, 10); if (rc > 1 || **c != '\0') longwarn(cmd, arg1, arg2, rc); if (y > 40320 || y < -40320) warn('C', TRUE, "Ignoring offset of more than 28 days in configuration " "command\n%s %s", cmd, arg1); else { *x = y; if (*x % 30 != 0) warn('D', TRUE, "Offset not a multiple of 30 in configuration command\n%s %s", cmd, arg1); else if (*x > 1500 || *x < -1500) warn('D', TRUE, "Offset more than 25 hours in configuration command\n%s %s", cmd, arg1); } free((void *)c); } void configlowmem(void *opt, char *cmd, char *arg1, char *arg2, int rc) { choice *x = (choice *)opt; if (rc == 0 || IS_EMPTY_STRING(arg1)) { shortwarn(cmd, arg1, rc); return; } if (!(arg1[0] >= '0' && arg1[0] <= '3')) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } if (rc > 1 || arg1[1] != '\0') longwarn(cmd, arg1, arg2, rc); *x = (choice)(arg1[0] - '0'); } int aliastocount(char *s) { int n; if (headcasematch(s, "PLAIN:")) return(0); n = (strchr(s, '*') != NULL); while ((s = strchr(s, '$')) != NULL) { s++; if (*s < '1' || *s > '9') s++; else n = MAX(n, (*s - '0')); } return(n); } AliasTo *configaliasto(char *s, logical is_regex) { /* Can prob be optimised somewhat, but with loss of any remaining clarity. */ AliasTo *ans, *atp; char *t, next; ans = (AliasTo *)xmalloc(sizeof(AliasTo)); if (headcasematch(s, "PLAIN:")) { ans->string = (char *)xmalloc(strlen(s) - 5); strcpy(ans->string, s + 6); ans->after = -1; ans->next = NULL; return(ans); } /* else the normal case */ atp = ans; while (TRUE) { t = strpbrk(s, "*$"); while (t != NULL && *t == '$' && (*(t + 1) < '1' || *(t + 1) > '9')) /* ignore ${non-digit} */ t = strpbrk(t + 2, "*$"); if (t == NULL) t = strchr(s, '\0'); atp->string = (char *)xmalloc(t - s + 1); memcpy(atp->string, s, t - s); atp->string[t - s] = '\0'; for (s = atp->string; (s = strstr(s, "$$")) != NULL; s++) memmove(s + 1, s + 2, strlen(s + 1)); /* "$$"->"$" (reuse s) */ if (*t == '\0') atp->after = -1; else { if (*t == '*') next = '1'; else /* *t == '$' */ next = *(++t); atp->after = 2 * ((int)next - (int)(is_regex?'0':'1')); /* internal index of *'s is from 0; of regex brackets is from 1 */ } if (*t == '\0' || *(t + 1) == '\0') { atp->next = NULL; return(ans); } else { atp->next = (AliasTo *)xmalloc(sizeof(AliasTo)); TO_NEXT(atp); } s = t + 1; /* set s to rest of original string */ } } void configalias(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Alias **alias = (Alias **)opt; Alias *ap; unsigned int leftstars; int maxrightstar; char starchar; logical is_regex = FALSE; pcre *pattern = NULL; char *errstr; int erroffset; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc == 1) { if (strcaseeq(arg1, "none")) *alias = NULL; else shortwarn(cmd, arg1, rc); return; } if (rc > 2) longwarn(cmd, arg1, arg2, rc); if (headcasematch(arg1, "REGEXP:") || headcasematch(arg1, "REGEXPI:")) { if ((pattern = pcre_compile(arg1 + 7 + (arg1[6] != ':'), PCRE_DOTALL | ((arg1[6] == ':')?0:PCRE_CASELESS), (const char **)(&errstr), &erroffset, NULL)) == NULL) { badwarn(cmd, FALSE, arg1, arg2, rc); warn('C', CONTINUATION, " (%s in regular expression)", errstr); return; } starchar = '('; pcre_fullinfo(pattern, NULL, PCRE_INFO_CAPTURECOUNT, (void *)&leftstars); is_regex = TRUE; } else { starchar = '*'; leftstars = chrdistn(arg1, starchar); } if (leftstars >= 2 && strchr(arg2, '*') != NULL && !headcasematch(arg2, "PLAIN:")) { badwarn(cmd, FALSE, arg1, arg2, rc); warn('C', CONTINUATION, " (Can't have * on RHS with two %c's on LHS: use $1, $2 etc.)", starchar); return; } if ((maxrightstar = aliastocount(arg2)) > (int)leftstars) { badwarn(cmd, FALSE, arg1, arg2, rc); warn('C', CONTINUATION, " (More substitutions on RHS than %c's on LHS)", starchar); return; } /* add new one to front for speed; swap round in reversealias() later */ ap = (Alias *)xmalloc(sizeof(Alias)); COPYSTR(ap->from, arg1); /* save string even for regex: might l.c. */ ap->to = configaliasto(arg2, is_regex); ap->isregex = is_regex; if (is_regex) ap->pattern = pattern; ap->next = *alias; *alias = ap; } void configstrpair(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Strpairlist **pair = (Strpairlist **)opt; Strpairlist *ap; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc == 1) { if (strcaseeq(arg1, "none")) *pair = NULL; else shortwarn(cmd, arg1, rc); return; } if (chrn(arg1, '*') >= 2 && strchr(arg2, '*') != NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } if (rc > 2) longwarn(cmd, arg1, arg2, rc); if (*pair == NULL) { ap = (Strpairlist *)xmalloc(sizeof(Strpairlist)); *pair = ap; } else { for (ap = *pair; ap->next != NULL; TO_NEXT(ap)) ; /* find end of list */ ap->next = (Strpairlist *)xmalloc(sizeof(Strpairlist)); TO_NEXT(ap); } COPYSTR(ap->name, arg1); COPYSTR(ap->data, arg2); ap->next = NULL; } void configstrpairlist(void *opt, char *cmd, char *arg1, char *arg2, int rc) { char *t; if (arg1 == NULL) { configstrpair(opt, cmd, arg1, arg2, rc); /* will warn about args if nec. */ return; } if ((t = strtok(arg1, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } for ( ; t != NULL; t = strtok((char *)NULL, ",")) configstrpair(opt, cmd, t, arg2, rc); return; } void configstrpair2list(void *opt, char *cmd, char *arg1, char *arg2, int rc) { /* comma-separated list in arg2 instead of arg1 */ char *t; if (arg2 == NULL) { configstrpair(opt, cmd, arg1, arg2, rc); /* will warn about args if nec. */ return; } if ((t = strtok(arg2, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } for ( ; t != NULL; t = strtok((char *)NULL, ",")) configstrpair(opt, cmd, arg1, t, rc); return; } void configdomlevel(void *opt, char *cmd, char *arg1, char *arg2, int rc) { Strpairlist ***levels = (Strpairlist ***)opt; unsigned int c; c = 26 * ((int)(*arg1 - 'a')); if (*arg1 != '\0') c += (int)(*(arg1 + 1) - 'a'); if (c >= DOMLEVEL_NUMBER) /* this shouldn't happen */ c = DOMLEVEL_NUMBER - 1; configstrpair((void *)(&((*levels)[c])), cmd, arg1, arg2, rc); } void configinex(void *opt, char *cmd, char *arg1, char *arg2, int rc, logical in, logical omitinitdot, logical omittrailslash) { Include **include = (Include **)opt; Include *ip; char *errstr; int erroffset; char *t; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strchr(arg1, ',') != NULL && !headcasematch(arg1, "REGEXP:") && !headcasematch(arg1, "REGEXPI:")) { /* This still allows a REGEXP in a comma-separated list if it's not the first item and doesn't contain a comma. The docs don't admit this. :) */ if ((t = strtok(arg1, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } for ( ; t != NULL; t = strtok((char *)NULL, ",")) configinex(opt, cmd, t, NULL, -1, in, omitinitdot, omittrailslash); return; } /* NB Put new include on front of list (so will test it earlier) */ ip = *include; *include = (Include *)xmalloc(sizeof(Include)); if (omitinitdot && arg1[0] == '.') arg1++; if (omittrailslash && !IS_EMPTY_STRING(arg1) && arg1[strlen(arg1) - 1] == '/') arg1[strlen(arg1) - 1] = '\0'; COPYSTR((*include)->name, arg1); (*include)->next = ip; /* save name even for regex: might l.c. */ if (headcasematch(arg1, "REGEXP:") || headcasematch(arg1, "REGEXPI:")) { if (((*include)->pattern = pcre_compile(arg1 + 7 + (arg1[6] != ':'), PCRE_DOTALL | ((arg1[6] == ':')?0:PCRE_CASELESS), (const char **)(&errstr), &erroffset, NULL)) == NULL) { *include = ip; badwarn(cmd, FALSE, arg1, arg2, rc); warn('C', CONTINUATION, " (%s in regular expression)", errstr); return; } (*include)->type = in?(REGEX_INC):(REGEX_EXC); } else { if (strcaseeq((*include)->name, "pages")) strcpy((*include)->name, "pages"); (*include)->type = in?(NORMAL_INC):(NORMAL_EXC); } } void configinc(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configinex(opt, cmd, arg1, arg2, rc, TRUE, FALSE, FALSE); } void configexc(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configinex(opt, cmd, arg1, arg2, rc, FALSE, FALSE, FALSE); } /* same, omitting initial dot */ void configincd(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configinex(opt, cmd, arg1, arg2, rc, TRUE, TRUE, FALSE); } void configexcd(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configinex(opt, cmd, arg1, arg2, rc, FALSE, TRUE, FALSE); } /* same, omitting trailing slash */ void configincs(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configinex(opt, cmd, arg1, arg2, rc, TRUE, FALSE, TRUE); } void configexcs(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configinex(opt, cmd, arg1, arg2, rc, FALSE, FALSE, TRUE); } /* Try and interpret a string representing a range of IP addresses or a subnet mask. Return whether successful. cf matchiprange() in utils.c. */ logical parseiprange(char *arg1, unsigned long *minaddr, unsigned long *maxaddr) { unsigned long addr = 0, mask; int n1, n2, octet, i; char *arg, *tok, *sep, *c; /* We only interpret ranges and subnet masks here, not single addresses or wildcards, for example. Everything else is rejected so that it gets submitted to normal string matching, which is more efficient. */ if (!ISDIGIT(*arg1) || (strchr(arg1, '-') == NULL && strchr(arg1, '/') == NULL)) return FALSE; /* We can't use strtok here because it's already used in an outer loop in confighostinex(), so we do it by hand. We first copy arg1 into arg so that we don't have to worry about restoring arg1 afterwards. */ COPYSTR(arg, arg1); for (octet = 0, tok = arg; octet < 4 && tok != NULL; octet++, tok = sep) { if ((sep = strchr(tok, '.')) != NULL) { *sep = '\0'; sep++; /* sep is now NULL if no more tokens, else start of next token */ } /* Case 1: 131.111-114 or 131.111-114.* */ if ((c = strchr(tok, '-')) != NULL) { *c = 0; n1 = atoi255(tok); n2 = atoi255(c + 1); if (n1 < 0 || n2 <= n1) /* includes n2 < 0 */ return FALSE; /* Check just dots and stars left in the string. We don't bother checking for too many dots though. */ for (c = sep; c != NULL && *c != '\0'; c++) { if (*c != '.' && *c != '*') return FALSE; } addr <<= 8 * (4 - octet); *minaddr = addr + (n1 << 8 * (3 - octet)); *maxaddr = addr + (((n2 + 1) << 8 * (3 - octet)) - 1); /* brackets essential to avoid underflow or overflow */ return TRUE; } /* Case 2: 131.111.20.18/24 */ if ((c = strchr(tok, '/')) != NULL) { if (octet != 3) /* slash only valid after last octet */ return FALSE; if (sep != NULL && *sep != '\0') /* check end of string */ return FALSE; *c = 0; n1 = atoi255(tok); n2 = atoi255(c + 1); if (n1 < 0 || n2 < 1 || n2 > 32) return FALSE; addr <<= 8; addr += n1; /* calculate subnet mask */ mask = 0; for (i = 0; i < 32; i++) { mask <<= 1; mask += (i < n2); } addr &= mask; *minaddr = addr; *maxaddr = addr + ((1 << (32 - n2)) - 1); /* brackets essential to avoid underflow or overflow */ return TRUE; } /* Case 3: The normal case: just the next number */ n1 = atoi255(tok); if (n1 < 0) return FALSE; addr <<= 8; addr += n1; } /* for octet */ /* We can only get here if we've read four octets but still not encountered - or / . In that case, the string is corrupt. */ return FALSE; } /* For hosts, use confighostinex(). */ /* First try parsing as a contiguous range of IP addresses, using parseiprange() above. If that fails, pass to configinex for normal processing. */ void confighostinex(void *opt, char *cmd, char *arg1, char *arg2, int rc, logical in) { Include **include = (Include **)opt; Include *ip; unsigned long minaddr, maxaddr; char *c; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strchr(arg1, ',') != NULL) { if ((c = strtok(arg1, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } for ( ; c != NULL; c = strtok((char *)NULL, ",")) confighostinex(opt, cmd, c, NULL, 1, in); return; } /* First try parsing the argument as a range of IP addresses. */ if (parseiprange(arg1, &minaddr, &maxaddr)) { ip = *include; *include = (Include *)xmalloc(sizeof(Include)); COPYSTR((*include)->name, arg1); (*include)->minaddr = minaddr; (*include)->maxaddr = maxaddr; (*include)->next = ip; (*include)->type = in?(IPADDR_INC):(IPADDR_EXC); } /* If that fails, parse to the regular string-like processing. */ else configinex(opt, cmd, arg1, arg2, rc, in, FALSE, FALSE); } void confighostinc(void *opt, char *cmd, char *arg1, char *arg2, int rc) { confighostinex(opt, cmd, arg1, arg2, rc, TRUE); } void confighostexc(void *opt, char *cmd, char *arg1, char *arg2, int rc) { confighostinex(opt, cmd, arg1, arg2, rc, FALSE); } /* for status codes */ void configscinex(void *opt, char *cmd, char *arg1, char *arg2, int rc, logical in) { choice *code2type = (choice *)opt; unsigned int bottom, top, i; char *c, *d; logical f = FALSE; if (rc == 0) { shortwarn(cmd, arg1, rc); return; } if (rc > 1) longwarn(cmd, arg1, arg2, rc); if (strchr(arg1, ',') != NULL) { if ((c = strtok(arg1, ",")) == NULL) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } for ( ; c != NULL; c = strtok((char *)NULL, ",")) configscinex(opt, cmd, c, NULL, 1, in); return; } if (STREQ(arg1, "*")) { bottom = MIN_SC; top = SC_NUMBER - 1; } else { if (*arg1 == '-') { bottom = MIN_SC; c = arg1 + 1; if (!ISDIGIT(*c)) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } } else { bottom = (unsigned int)strtoul(arg1, &c, 10); if (*c == '-') { c++; f = TRUE; } if (bottom < MIN_SC || bottom >= SC_NUMBER || (*c != '\0' && !ISDIGIT(*c))) { badwarn(cmd, TRUE, arg1, arg2, rc); return; } } if (*c == '\0') { if (f) top = SC_NUMBER - 1; else top = bottom; } else { top = (unsigned int)strtoul(c, &d, 10); if (top < bottom || top >= SC_NUMBER || *d != '\0') { badwarn(cmd, TRUE, arg1, arg2, rc); return; } } } if (code2type[0] == UNSET) code2type[0] = in?SUCCESS:UNWANTED; /* mark first in/ex: see finalinit() */ for (i = bottom; i <= top; i++) code2type[i] = in?SUCCESS:UNWANTED; /* SUCCESS set more carefully there */ } void configscinc(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configscinex(opt, cmd, arg1, arg2, rc, TRUE); } void configscexc(void *opt, char *cmd, char *arg1, char *arg2, int rc) { configscinex(opt, cmd, arg1, arg2, rc, FALSE); } analog-ce-6.0.17/src/input.c000066400000000000000000001430601406366436600155470ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** input.c; parsing the logfiles */ #include "anlghea3.h" extern char *block_start, *block_end, *block_bell, *record_start, *pos; extern logical termchar[]; static logical stdin_used = FALSE; static char gzmagic[2] = {(char)0x1f, (char)0x8b}; static char zipmagic[4] = {'P', 'K', 0x03, 0x04}; static char bz2magic[3] = {'B', 'Z', 'h'}; /* Open logfile for reading. NB Even if open fails, may need to call my_lfclose() to clear up */ logical my_lfopen(Logfile *lf, char *filetype) { #ifndef NOPIPES extern Strpairlist *uncompresshead; char *cmd; Strpairlist *up; #endif #ifndef LINE_PARSER unz_file_info info; char magic[5]; size_t n, len; int bze; #endif int i; /* Initialise logfile */ lf->from = LAST_TIME; lf->to = FIRST_TIME; for (i = 0; i < LOGDATA_NUMBER; i++) lf->data[i] = 0; lf->bytes = 0; lf->bytes7 = 0; #ifndef LINE_PARSER /* Previously opened zip file: open next member. (Last member closed in my_lfclose()). */ if (lf->type == LF_ZIP) { if (unzGoToNextFile((unzFile)(lf->file)) == UNZ_OK && unzOpenCurrentFile((unzFile)(lf->file)) == UNZ_OK) { duplogfile(lf); /* One logfile for this member and 1 for the whole zip */ /* Calculate the name of the member, in the form "foo.zip:bar.log" */ /* Same code below */ len = strlen(lf->name); unzGetCurrentFileInfo((unzFile)(lf->file), &info, NULL, 0, NULL, 0, NULL, 0); lf->name = (char *)xmalloc(len + info.size_filename + 2); strcpy(lf->name, lf->next->name); /* lf->next is a clone of lf */ lf->name[len] = ':'; unzGetCurrentFileInfo((unzFile)(lf->file), NULL, lf->name + len + 1, info.size_filename + 1, NULL, 0, NULL, 0); debug('F', "Opening %s as zipped %s", lf->name, filetype); lf->type = LF_ZIPMEMBER; return TRUE; } return FALSE; /* no more members */ } else #endif /* LINE_PARSER */ if (lf->type != LF_NOTOPENED) return FALSE; /* other previously opened file: shouldn't happen */ /* Open the file */ lf->file = NULL; if (IS_STDIN(lf->name)) { if (stdin_used) { warn('F', TRUE, "stdin already used; cannot use it as %s", filetype); return FALSE; } else { lf->file = (void *)stdin; stdin_used = TRUE; debug('F', "Opening stdin as %s", filetype); lf->type = LF_NORMAL; return TRUE; } } lf->file = (void *)FOPENR(lf->name); if (lf->file == NULL) { warn('F', TRUE, "Failed to open %s %s: ignoring it", filetype, lf->name); return FALSE; } /* First see if it matches an UNCOMPRESS command: if so pass to a pipe */ #ifndef NOPIPES for (up = uncompresshead; up != NULL; TO_NEXT(up)) { if (strpbrk(lf->name, "*?") == NULL && MATCHES(lf->name, up->name)) { /* * and ? might be a security risk from the form: actually probably not because (i) they shouldn't get this far -- they are interpreted by configlogfile() unless they don't match anything; (ii) they probably wouldn't cause any harm anyway: but let's be over-cautious. */ fclose((FILE *)(lf->file)); cmd = (char *)xmalloc(strlen(up->data) + strlen(lf->name) + 4); if (strchr(lf->name, ' ') != NULL) sprintf(cmd, "%s \"%s\"", up->data, lf->name); else sprintf(cmd, "%s %s", up->data, lf->name); lf->file = (void *)POPENR(cmd); free((void *)cmd); debug('F', "Opening %s as %s", lf->name, filetype); debug('F', " Using %s to uncompress it", up->data); lf->type = LF_PIPE; return TRUE; } } #endif #ifndef LINE_PARSER /* Mac version has its own zip/gzip/bzip decompression */ /* If it didn't match an UNCOMPRESS, read in the first four bytes to see if it's a known decompression scheme. */ n = fread((void *)magic, 1, 4, (FILE *)(lf->file)); rewind((FILE *)(lf->file)); if (n >= 3 && strncmp(magic, bz2magic, 3) == 0) { lf->file2 = (void *)BZ2_bzReadOpen(&bze, (FILE *)(lf->file), 0, 0, NULL, 0); if (lf->file2 == NULL) { warn('F', TRUE, "Failed to open %s %s as bzip2 file: ignoring it", filetype, lf->name); return FALSE; } debug('F', "Opening %s as bzip2'ed %s", lf->name, filetype); lf->type = LF_BZ2; return TRUE; } else if (n >= 2 && strncmp(magic, gzmagic, 2) == 0) { fclose((FILE *)(lf->file)); lf->file = (void *)gzopen(lf->name, "rb"); if (lf->file == NULL) { warn('F', TRUE, "Failed to open %s %s as gzip file: ignoring it", filetype, lf->name); return FALSE; } debug('F', "Opening %s as gzipped %s", lf->name, filetype); lf->type = LF_GZIP; return TRUE; } else if (n >= 4 && strncmp(magic, zipmagic, 4) == 0) { fclose((FILE *)(lf->file)); lf->file = (void *)unzOpen(lf->name); /* Check file was opened, and first member can be opened */ if (lf->file == NULL || unzGoToFirstFile((unzFile)(lf->file)) != UNZ_OK || unzOpenCurrentFile((unzFile)(lf->file)) != UNZ_OK) { warn('F', TRUE, "Failed to open %s %s as zip file: ignoring it", filetype, lf->name); return FALSE; } debug('F', "Opening %s as zip file", lf->name); lf->type = LF_ZIP; duplogfile(lf); /* One logfile for this member and one for the whole zip */ /* Calculate the name of the member, in the form "foo.zip:bar.log" */ /* Same code above */ len = strlen(lf->name); unzGetCurrentFileInfo((unzFile)(lf->file), &info, NULL, 0, NULL, 0, NULL, 0); lf->name = (char *)xmalloc(len + info.size_filename + 2); strcpy(lf->name, lf->next->name); /* lf->next is a clone of lf */ lf->name[len] = ':'; unzGetCurrentFileInfo((unzFile)(lf->file), NULL, lf->name + len + 1, info.size_filename + 1, NULL, 0, NULL, 0); debug('F', "Opening %s as zipped %s", lf->name, filetype); lf->type = LF_ZIPMEMBER; return TRUE; } #endif /* LINE_PARSER */ /* The normal case: just an ordinary file */ debug('F', "Opening %s as %s", lf->name, filetype); lf->type = LF_NORMAL; return TRUE; } FILE *my_fopen(char *name, char *filetype) { /* open for reading */ FILE *f; if (IS_STDIN(name)) { if (stdin_used) { warn('F', TRUE, "stdin already used; cannot use it as %s", filetype); f = NULL; } else { f = stdin; stdin_used = TRUE; debug('F', "Opening stdin as %s", filetype); } } else { if ((f = FOPENR(name)) == NULL) warn('F', TRUE, "Failed to open %s %s: ignoring it", filetype, name); else debug('F', "Opening %s as %s", name, filetype); } return(f); } #define LFCLOSE_DATEFMT "%d/%m/%y:%H%n" void my_lfclose(Logfile *p, Logfile *allc, Logfile *allp, char *filetype, Dateman *dman, unsigned long *totdata, double *bys, double *bys7) { extern FILE *errfile; extern char *warn_args; unsigned long *data = p->data; Logfile *ap, *nextap; Inputformatlist *fmt; choice count[INPUT_NUMBER]; logical done; int i; #ifndef LINE_PARSER int bze; #endif if (p->type == LF_NOTOPENED) return; #ifndef LINE_PARSER /* zip container: don't do diagnostics etc. */ if (p->type == LF_ZIP) { debug('F', "Closing zip file %s", IS_STDIN(p->name)?"stdin":(p->name)); unzClose((unzFile)(p->file)); return; } #endif debug('F', "Closing %s %s", filetype, IS_STDIN(p->name)?"stdin":(p->name)); debug('S', "Successful requests: %lu", data[LOGDATA_SUCC]); debug('S', "Redirected requests: %lu", data[LOGDATA_REDIR]); debug('S', "Failed requests: %lu", data[LOGDATA_FAIL]); debug('S', "Requests returning informational status code: %lu", data[LOGDATA_INFO]); debug('S', "Status code not given: %lu", data[LOGDATA_UNKNOWN]); if (allp != NULL) { /* i.e. logfile not cache file */ debug('S', "Unwanted lines: %lu", data[LOGDATA_UNWANTED]); debug('S', "Corrupt lines: %lu", data[LOGDATA_CORRUPT]); if (data[LOGDATA_CORRUPT] > (data[LOGDATA_SUCC] + data[LOGDATA_REDIR] + data[LOGDATA_FAIL] + data[LOGDATA_INFO] + data[LOGDATA_UNKNOWN] + data[LOGDATA_UNWANTED]) / 10 && data[LOGDATA_CORRUPT] > 10) { warn('L', TRUE, "Large number of corrupt lines in %s %s: " "turn debugging on or try different LOGFORMAT", filetype, IS_STDIN(p->name)?"stdin":(p->name)); if (strchr(warn_args, 'L') != NULL) report_logformat(errfile, p->format, TRUE); } } for (i = 0; i < LOGDATA_NUMBER; i++) totdata[i] += data[i]; *bys += p->bytes; *bys7 += p->bytes7; if (p->from <= p->to) { dman->firsttime = MIN(dman->firsttime, p->from); dman->lasttime = MAX(dman->lasttime, p->to); if (p->tz > 0) debug('S', "Times in %s offset by +%d minutes", filetype, p->tz); else if (p->tz < 0) debug('S', "Times in %s offset by %d minutes", filetype, p->tz); debug('S', "Earliest entry in %s: %s", filetype, timesprintf(NULL, LFCLOSE_DATEFMT, p->from, FALSE)); debug('S', "Latest entry in %s: %s", filetype, timesprintf(NULL, LFCLOSE_DATEFMT, p->to, FALSE)); if (allp == NULL) { p->format->count[ITEM_FILE] = 2; /* good enough for date check */ count[ITEM_FILE] = 2; p->from += 4; /* avoid false alerts */ } else { for (i = 0; i < INPUT_NUMBER; i++) count[i] = 0; for (fmt = p->format; fmt != NULL; TO_NEXT(fmt)) { for (i = 0; i < INPUT_NUMBER; i++) count[i] = MAX(count[i], fmt->count[i]); } } for (ap = (allc == NULL)?allp:allc; ap != p; ap = nextap) { if (ap->from < p->to && p->from < ap->to) { for (done = FALSE, fmt = ap->format; fmt != NULL && !done; TO_NEXT(fmt)) { for (i = 0; i < INPUT_NUMBER && !done; i++) { if (fmt->count[i] == 2 && count[i] == 2) { warn('L', TRUE, "%ss %s and %s overlap: " "possible double counting", filetype, ap->name, p->name); done = TRUE; } } } } nextap = ap->next; if (nextap == NULL) nextap = allp; /* run through allc then through allp */ } } else if (data[LOGDATA_SUCC] + data[LOGDATA_REDIR] + data[LOGDATA_FAIL] + data[LOGDATA_INFO] + data[LOGDATA_UNKNOWN] > 0) debug('S', "No times in %s", filetype); /* Actually close the file */ switch (p->type) { case LF_NORMAL: fclose((FILE *)(p->file)); break; #ifndef LINE_PARSER case LF_GZIP: gzclose((gzFile)(p->file)); break; case LF_ZIPMEMBER: unzCloseCurrentFile((unzFile)(p->file)); break; case LF_BZ2: BZ2_bzReadClose(&bze, (BZFILE *)(p->file2)); fclose((FILE *)(p->file)); break; #endif #ifndef NOPIPES case LF_PIPE: if (feof((FILE *)(p->file))) { if (pclose((FILE *)(p->file)) != 0) warn('F', TRUE, "Problems uncompressing %s %s", filetype, p->name); } else pclose((FILE *)(p->file)); /* not reached EOF: pclose will return broken pipe */ break; #endif } } int my_fclose(FILE *f, char *name, char *filetype) { debug('F', "Closing %s %s", filetype, IS_STDIN(name)?"stdin":name); return(fclose(f)); } logical logfile_init(Logfile *lf) { extern unsigned int year, code; extern double bytes; if (lf->format == NULL) { debug('F', "Ignoring logfile %s, which contains no items being analysed", lf->name); return FALSE; } pos = NULL; year = 0; bytes = 0; code = 0; return(my_lfopen(lf, "logfile")); } /* Duplicate a logfile in the logfile list. Used to expand a zip file into many individual files. NB copies data member pointers not contents. */ void duplogfile(Logfile *lf) { Logfile *nextlf = lf->next; Logfile *newlf = (Logfile *)xmalloc(sizeof(Logfile)); memcpy(newlf, lf, sizeof(Logfile)); lf->next = newlf; newlf->next = nextlf; } choice getmoredata(Logfile *lf, char *start, size_t length) { #ifndef LINE_PARSER int bze; #endif int n; switch (lf->type) { case LF_NORMAL: case LF_PIPE: n = fread((void *)start, 1, length, (FILE *)(lf->file)); break; #ifndef LINE_PARSER case LF_GZIP: n = gzread((gzFile)(lf->file), (void *)start, length); if (n < 0) n = 0; /* gzread() returns -1 on error */ break; case LF_ZIPMEMBER: n = unzReadCurrentFile((unzFile)(lf->file), (void *)start, length); if (n < 0) n = 0; /* unzReadCurrentFile() returns -1 on error */ break; case LF_BZ2: n = BZ2_bzRead(&bze, (BZFILE *)(lf->file2), (void *)start, length); if (bze != BZ_OK && bze != BZ_STREAM_END) n = 0; /* return value from BZ2_bzRead() undefined on error */ break; #endif default: n = 0; /* shouldn't happen, but if it does return EOF */ } block_end = start + n; block_bell = block_end - BLOCK_EPSILON; /* saves repeating this calc. */ /* need to set block_end and block_bell even if returning EOF because still have to parse the rest of the last line of the file */ if (block_end == start) return(EOF); return(OK); } choice getnextline(FILE *f, char *start, size_t used) { /* not very efficient: only for use during initialisation */ char *s = start; if ((*s = (char)getc(f)) == (char)EOF && feof(f)) /* in case char == 255 */ return(EOF); while (*s == '\r' || *s == '\n') *s = (char)getc(f); /* run past any new line */ if (*s == (char)EOF && feof(f)) return(EOF); for (*(++s) = (char)getc(f); *s != '\r' && *s != '\n' && !feof(f) && s < start + BLOCKSIZE - used - 1; *(++s) = (char)getc(f)) ; /* read in to next new line */ *s = '\0'; if (s == start + BLOCKSIZE - 1) return(FALSE); return(TRUE); } void shunt_data(Logfile *lf) { memmove((void *)block_start, (void *)record_start, (size_t)(block_end - record_start)); (void)getmoredata(lf, block_start + (block_end - record_start), (size_t)(BLOCKSIZE - (block_end - record_start))); pos -= record_start - block_start; record_start = block_start; } int strtomonth(char *m) /* convert 3 letter month abbrev. to int */ { int monthno = ERR; switch (m[0]) { case 'A': case 'a': if ((m[1] == 'p' || m[1] == 'P') && (m[2] == 'r' || m[2] == 'R')) monthno = 3; else if ((m[1] == 'u' || m[1] == 'U') && (m[2] == 'g' || m[2] == 'G')) monthno = 7; break; case 'D': case 'd': if ((m[1] == 'e' || m[1] == 'E') && (m[2] == 'c' || m[2] == 'C')) monthno = 11; break; case 'F': case 'f': if ((m[1] == 'e' || m[1] == 'E') && (m[2] == 'b' || m[2] == 'B')) monthno = 1; break; case 'J': case 'j': if ((m[1] == 'a' || m[1] == 'A') && (m[2] == 'n' || m[2] == 'N')) monthno = 0; if ((m[1] == 'u' || m[1] == 'U')) { if ((m[2] == 'l' || m[2] == 'L')) monthno = 6; else if ((m[2] == 'n' || m[2] == 'N')) monthno = 5; } break; case 'M': case 'm': if ((m[1] == 'a' || m[1] == 'A')) { if ((m[2] == 'r' || m[2] == 'R')) monthno = 2; else if ((m[2] == 'y' || m[2] == 'Y')) monthno = 4; } break; case 'N': case 'n': if ((m[1] == 'o' || m[1] == 'O') && (m[2] == 'v' || m[2] == 'V')) monthno = 10; break; case 'O': case 'o': if ((m[1] == 'c' || m[1] == 'C') && (m[2] == 't' || m[2] == 'T')) monthno = 9; break; case 'S': case 's': if ((m[1] == 'e' || m[1] == 'E') && (m[2] == 'p' || m[2] == 'P')) monthno = 8; break; } return(monthno); } choice parsemonth(Logfile *lf, void *arg, char c) { unsigned int *m = (unsigned int *)arg; *block_end = '\0'; *m = (unsigned int)strtomonth(pos); if (*m == (unsigned int)ERR) return(FALSE); else { pos += 3; return(TRUE); } } choice parseuint2(Logfile *lf, void *arg, char c) { unsigned int *x = (unsigned int *)arg; *block_end = '\0'; if (!ISDIGIT(*pos)) { if (*pos == ' ') *x = 0; else return(FALSE); } else *x = *pos - '0'; pos++; if (!ISDIGIT(*pos)) return(TRUE); *x *= 10; *x += *pos - '0'; pos++; return(TRUE); } choice parsenmonth(Logfile *lf, void *arg, char c) { /* nearly same as uint2 */ unsigned int *x = (unsigned int *)arg; *block_end = '\0'; if (!ISDIGIT(*pos)) return(FALSE); *x = *pos - '0'; pos++; if (!ISDIGIT(*pos)) { if (*x == 0) { pos--; return(FALSE); } (*x)--; /* to convert to internal month representation */ return(TRUE); } *x *= 10; *x += *pos - '0'; if (*x == 0) return(FALSE); pos++; (*x)--; return(TRUE); } choice parseulong(Logfile *lf, void *arg, char c) { unsigned long *x = (unsigned long *)arg; register char *p = pos; *block_end = '\0'; if (!ISDIGIT(*p)) return(FALSE); *x = 0; while (ISDIGIT(*p)) { if (*x >= 429496729) /* (usual) max for unsigned long, divided by 10 */ return(FALSE); /* best to keep pos at beginning of number this time */ *x *= 10; *x += (*p - '0'); p++; } pos = p; return(TRUE); } choice parseunixtime(Logfile *lf, void *arg, char c) { unsigned long *x = (unsigned long *)arg; register char *p = pos; *block_end = '\0'; if (!ISDIGIT(*p)) return(FALSE); *x = 0; while (ISDIGIT(*p)) { if (*x >= 214748364) /* max for Unix time, divided by 10 */ return(FALSE); /* best to keep pos at beginning of number this time */ *x *= 10; *x += (*p - '0'); p++; } pos = p; return(TRUE); } /* Parse processing time in microseconds, convert to milliseconds */ choice parseproctimeu(Logfile *lf, void *arg, char c) { unsigned long *x; choice rc; rc = parseulong(lf, arg, c); if (rc == FALSE) return(FALSE); x = (unsigned long *)arg; *x /= 1000; return(rc); } choice parseproctime(Logfile *lf, void *arg, char c) { /* parse processing time in decimal seconds, converting to milliseconds */ unsigned long *x = (unsigned long *)arg; register char *p = pos; *block_end = '\0'; if (!ISDIGIT(*p)) /* NB Decimals must begin "0." not just "." */ return(FALSE); if (ISDIGIT(*(p + 3)) && ISDIGIT(*(p + 2)) && ISDIGIT(*(p + 1))) { *x = 1000000; /* signifying at least 1000 seconds */ while (ISDIGIT(*p)) p++; if (*p == '.') { p++; while (ISDIGIT(*p)) p++; } pos = p; return(TRUE); } for (*x = 0; ISDIGIT(*p); p++) { *x *= 10; *x += (*p - '0'); } *x *= 1000; if (*p == '.') { /* decimal follows; only read first 3 places */ p++; if (ISDIGIT(*p)) { *x += 100 * (*(p++) - '0'); if (ISDIGIT(*p)) { *x += 10 * (*(p++) - '0'); if (ISDIGIT(*p)) { *x += (*(p++) - '0'); while (ISDIGIT(*p)) p++; } } } } pos = p; return(TRUE); } choice parseuint2strict(Logfile *lf, void *arg, char c) { unsigned int *x = (unsigned int *)arg; *block_end = '\0'; if (!ISDIGIT(*pos)) return(FALSE); *x = 10 * (*pos - '0'); pos++; if (!ISDIGIT(*pos)) return(FALSE); *x += *pos - '0'; pos++; return(TRUE); } choice parsescode(Logfile *lf, void *arg, char c) { /* parseuint3strict() with twiddles */ unsigned int *x = (unsigned int *)arg; *block_end = '\0'; if (*pos < '1' || *pos > '5') { /* only accept codes 100 - 599, or - */ if (*pos == '-') { /* see also MIN_SC, SC_NUMBER in anlghea3.h */ pos++; *x = 200; return(TRUE); } else return(FALSE); } *x = 100 * (*pos - '0'); pos++; if (!ISDIGIT(*pos)) return(FALSE); *x += 10 * (*pos - '0'); pos++; if (!ISDIGIT(*pos)) return(FALSE); *x += *pos - '0'; pos++; return(TRUE); } choice parseuint4strict(Logfile *lf, void *arg, char c) { unsigned int *x = (unsigned int *)arg; *block_end = '\0'; if (!ISDIGIT(*pos)) return(FALSE); *x = 1000 * (*pos - '0'); pos++; if (!ISDIGIT(*pos)) return(FALSE); *x += 100 * (*pos - '0'); pos++; if (!ISDIGIT(*pos)) return(FALSE); *x += 10 * (*pos - '0'); pos++; if (!ISDIGIT(*pos)) return(FALSE); *x += *pos - '0'; pos++; return(TRUE); } choice parseudint(Logfile *lf, void *arg, char c) { double *x = (double *)arg; *block_end = '\0'; if (*pos == '-') { *x = 0.0; /* because used for bytes (only) */ pos++; return(TRUE); } if (!ISDIGIT(*pos)) return(FALSE); *x = *pos - '0'; pos++; while (ISDIGIT(*pos)) { *x *= 10; *x += *pos - '0'; pos++; } return(TRUE); } choice parseyear2(Logfile *lf, void *arg, char c) { unsigned int *y = (unsigned int *)arg; logical rc; rc = parseuint2strict(lf, arg, c); if (*y >= 70) *y += 1900; else *y += 2000; return(rc); } choice parseyear2or4(Logfile *lf, void *arg, char c) { if (*pos == '\0' || (*(pos + 1) == '\0')) return(FALSE); else if (ISDIGIT(*(pos + 2))) return(parseuint4strict(lf, arg, c)); else return(parseyear2(lf, arg, c)); } choice parseam(Logfile *lf, void *arg, char c) { char *d = (char *)arg; *block_end = '\0'; *d = TOLOWER(*pos); if (*d == 'a' || *d == 'p') { pos++; return(TRUE); } else return(FALSE); } choice parsecode(Logfile *lf, void *arg, char c) { unsigned int *x = (unsigned int *)arg; char *d = pos, e, *g; *block_end = '\0'; if (parsejunk(lf, NULL, c) == FALSE || pos == d) return(FALSE); g = (c == WHITESPACE)?pos:(pos - 1); /* parsejunk normally leaves pos AFTER delimiter, but ON delimiter if delimiter == WHITESPACE */ e = *g; *g = '\0'; *x = IGNORE_CODE; if (d[0] == 'O' && d[1] == 'K') *x = 200; else if (STREQ(d, "ERR!")) *x = 404; else if (STREQ(d, "PRIV")) *x = 401; else if (STREQ(d, "not modified")) *x = 304; else if (*(d++) == 'g' && *(d++) == 'e' && *(d++) == 't' && *(d++) == ' ' && *(d++) == 'f') { if (STREQ(d, "ile")) *x = 200; else if (STREQ(d, "ailed")) *x = 499; } *g = e; return(TRUE); } choice parsejunk(Logfile *lf, void *arg, char c) { /* NB allow empty strings */ register char *p = pos; if (c == WHITESPACE) { termchar[(unsigned char)' '] = TRUE; termchar[(unsigned char)'\t'] = TRUE; *block_end = ' '; } else { termchar[(unsigned char)c] = TRUE; *block_end = c; } while (!termchar[(unsigned char)(*p)]) p++; if (p == block_end) { if (record_start == block_start) { if (c == WHITESPACE) { termchar[(unsigned char)' '] = FALSE; termchar[(unsigned char)'\t'] = FALSE; } else if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; pos = p; return(FALSE); } pos = p; shunt_data(lf); p = pos; *block_end = (c == WHITESPACE)?' ':c; while (!termchar[(unsigned char)(*p)]) p++; if (p == block_end) { if (c == WHITESPACE) { termchar[(unsigned char)' '] = FALSE; termchar[(unsigned char)'\t'] = FALSE; } else if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; pos = p; return(FALSE); } } if (c == WHITESPACE) { termchar[(unsigned char)' '] = FALSE; termchar[(unsigned char)'\t'] = FALSE; } else if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; if (*p != c && !(c == '\n' && *p == '\r') && !(c == WHITESPACE && (*p == ' ' || *p == '\t'))) { pos = p; return(FALSE); } if (c == '\n' || c == '\r') { while ((*p == '\n' || *p == '\r') && p < block_end) p++; } else if (c != WHITESPACE) p++; /* Leave pos AFTER delimiter, except ON delimiter if delim == WHITESPACE */ pos = p; return(TRUE); } choice parsespace(Logfile *lf, void *arg, char c) { *block_end = '\0'; if (pos == block_end && record_start != block_start) shunt_data(lf); if (*pos != '\t' && *pos != ' ') return(FALSE); while (*pos == '\t' || *pos == ' ') pos++; if (pos == block_end && record_start != block_start) { shunt_data(lf); while (*pos == '\t' || *pos == ' ') pos++; } return(TRUE); } choice parseoptspace(Logfile *lf, void *arg, char c) { *block_end = '\0'; if (pos == block_end && record_start != block_start) shunt_data(lf); while (*pos == '\t' || *pos == ' ') pos++; if (pos == block_end && record_start != block_start) { shunt_data(lf); while (*pos == '\t' || *pos == ' ') pos++; } return(TRUE); } choice parsenewline(Logfile *lf, void *arg, char c) { /* allow new line to be preceded by white space */ *block_end = 'a'; if (*pos != '\n' && *pos != ' ' && *pos != '\r' && *pos != '\t') return(FALSE); while (*pos == ' ' || *pos == '\t') pos++; if (pos == block_end && record_start != block_start) { shunt_data(lf); *block_end = 'a'; while (*pos == ' ' || *pos == '\t') pos++; } if (*pos != '\n' && *pos != '\r') return(FALSE); termchar[(unsigned char)'\0'] = FALSE; while (termchar[(unsigned char)(*pos)]) pos++; if (pos == block_end && record_start != block_start) { shunt_data(lf); *block_end = 'a'; while (termchar[(unsigned char)(*pos)]) pos++; } termchar[(unsigned char)'\0'] = TRUE; return(TRUE); } void parsenonnewline(Logfile *lf) { *block_end = '\n'; termchar[(unsigned char)'\0'] = FALSE; while (!termchar[(unsigned char)(*pos)]) pos++; if (pos == block_end) { if (record_start == block_start) { termchar[(unsigned char)'\0'] = TRUE; return; } shunt_data(lf); *block_end = '\n'; while (!termchar[(unsigned char)(*pos)]) pos++; } termchar[(unsigned char)'\0'] = TRUE; } choice parsestring(Logfile *lf, void *arg, char c) { /*NB allow empty strings*/ register char *p = pos; Memman *m = (Memman *)arg; size_t length = 0; char *string_start; string_start = p; if (c == WHITESPACE) { termchar[(unsigned char)' '] = TRUE; termchar[(unsigned char)'\t'] = TRUE; *block_end = ' '; } else { termchar[(unsigned char)c] = TRUE; *block_end = c; } while (!termchar[(unsigned char)(*p)]) { p++; length++; } if (p == block_end) { if (record_start == block_start) { if (c == WHITESPACE) { termchar[(unsigned char)' '] = FALSE; termchar[(unsigned char)'\t'] = FALSE; } else if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; pos = p; return(FALSE); } string_start -= record_start - block_start; pos = p; shunt_data(lf); p = pos; *block_end = (c == WHITESPACE)?' ':c; while (!termchar[(unsigned char)(*p)]) { p++; length++; } if (p == block_end) { if (c == WHITESPACE) { termchar[(unsigned char)' '] = FALSE; termchar[(unsigned char)'\t'] = FALSE; } else if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; pos = p; return(FALSE); } } if (c == WHITESPACE) { termchar[(unsigned char)' '] = FALSE; termchar[(unsigned char)'\t'] = FALSE; } else if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; if (*p != c && !(c == '\n' && *p == '\r') && !(c == WHITESPACE && (*p == ' ' || *p == '\t'))) { pos = p; return(FALSE); } memcpy(submalloc(m, length + 1), (void *)string_start, length); *((char *)(m->next_pos) - 1) = '\0'; /* = curr_pos + length */ if (c == '\n' || c == '\r') { while ((*p == '\n' || *p == '\r') && p < block_end) p++; } else if (c != WHITESPACE) p++; pos = p; return(TRUE); } choice parsemsbrow(Logfile *lf, void *arg, char c) { Memman *m = (Memman *)arg; char *d; if (parsestring(lf, arg, c) == FALSE) return(FALSE); for (d = m->curr_pos; *d != '\0'; d++) { if (*d == '+') *d = ' '; } return(TRUE); } choice parseref(Logfile *lf, void *arg, char c) { /* For referrer in old referrer logs: as parsestring except also checks -> immediately after delimiting character (presumably space: may not be \n or \r: also WHITESPACE wouldn't work so is disallowed in strtoinfmt()) */ register char *p = pos; Memman *m = (Memman *)arg; size_t length = 0; char *string_start; string_start = p; *block_end = '\r'; termchar[(unsigned char)c] = TRUE; /* p + 1 or p + 2 could be past block_end, but this doesn't matter because they will never be read; *block_end == '\r' and there is no way to set c == '\r'. */ while (!termchar[(unsigned char)(*p)] || (*p == c && (*(p + 1) != '-' || *(p + 2) != '>'))) { p++; length++; } if (p == block_end) { if (record_start == block_start) { if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; pos = p; return(FALSE); } string_start -= record_start - block_start; pos = p; shunt_data(lf); p = pos; *block_end = '\r'; while (!termchar[(unsigned char)(*p)] || (*p == c && (*(p + 1) != '-' || *(p + 2) != '>'))) { p++; length++; } if (p == block_end) { if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; pos = p; return(FALSE); } } if (c != '\r' && c != '\n' && c != '\0') termchar[(unsigned char)c] = FALSE; if (*p != c) { pos = p; return(FALSE); } memcpy(submalloc(m, length + 1), (void *)string_start, length); *((char *)(m->next_pos) - 1) = '\0'; p++; pos = p; return(TRUE); } choice checkchar(Logfile *lf, void *arg, char c) { if (*pos == c) { pos++; return(TRUE); } else return(FALSE); } void resolveconflicts(unsigned int n, char *delims, ...) { /* Used in parselogfmt(). Munges a format header line, which is in pos, so that there are no "repeated" fields. n is the number of alternatives. */ va_list ap; char *arg, *s, *t; logical found; unsigned int i; va_start(ap, delims); for (i = 0, found = FALSE; i < n; i++) { arg = va_arg(ap, char *); for (s = strstr(pos, arg); s != NULL; s = strstr(s + 1, arg)) { t = s + strlen(arg); if ((s == pos || strchr(delims, *(s - 1)) != NULL) && (*t == '\0' || strchr(delims, *t) != NULL)) { /* true match */ if (found) { /* found an earlier occurrence */ *s = 'X'; *(s + 1) = 'X'; } else /* no earlier occurrence: leave this one alone */ found = TRUE; } } } va_end(ap); } choice parselogfmt(Logfile *lf, void *arg, char c) { extern Inputformatlist *logformat; static char *fmt = NULL; static size_t fmtlen = 0; char *d, *e; unsigned int x, y; logformat->used = TRUE; /* so as to start afresh */ *block_end = '\n'; d = strpbrk(pos, "\r\n"); if (d == block_end) { shunt_data(lf); *block_end = '\n'; d = strpbrk(pos, "\r\n"); if (d == block_end) return(FALSE); } if (d == NULL) return(BADLOGFMT); else *d = '\0'; switch (c) { case '0': /* DEFAULT format. These are caught and translated earlier: this is just in case we have specified DEFAULTLOGFORMAT DEFAULT */ case '1': /* AUTO format */ if (*pos == '!' && *(pos + 1) == '!') { debug('F', " Detect that it's in WebSTAR format"); configlogfmt((void *)&logformat, NULL, "WEBSTAR", NULL, -1); } else if (chrn(pos, ',') == 15) { e = strchr(strchr(pos, ',') + 1, ',') + 2; x = (*(e++) - '0'); if (ISDIGIT(*e)) x = x * 10 + (*(e++) - '0'); if (*(e++) != '/') { warn('F', TRUE, "Logfile seems to be in Microsoft format " "but I can't parse the date: use LOGFORMAT command"); return(BADLOGFMT); } y = (*(e++) - '0'); if (ISDIGIT(*e)) y = y * 10 + (*(e++) - '0'); if (*e != '/') { warn('F', TRUE, "Logfile seems to be in Microsoft format " "but I can't parse the date: use LOGFORMAT command"); return(BADLOGFMT); } if (x <= 12 && y > 12) { debug('F', " Detect that it's in Microsoft format (North American dates)"); configlogfmt((void *)&logformat, NULL, "MICROSOFT-NA", NULL, -1); } else if (x > 12 && y <= 12) { debug('F', " Detect that it's in Microsoft format (international dates)"); configlogfmt((void *)&logformat, NULL, "MICROSOFT-INT", NULL, -1); } else if (x > 12 && y > 12) { warn('F', TRUE, "Logfile seems to be in Microsoft format " "but I can't parse the date: use LOGFORMAT command"); return(BADLOGFMT); } else { warn('F', TRUE, "Microsoft logfile with ambiguous dates: " "use LOGFORMAT MICROSOFT-NA or LOGFORMAT MICROSOFT-INT"); *d = '\n'; return(BADLOGFMT); } } else if (*pos == 'f' && *(pos + 1) == 'o' && *(pos + 2) == 'r' && *(pos + 3) == 'm' && *(pos + 4) == 'a' && *(pos + 5) == 't' && *(pos + 6) == '=') { debug('F', " Detect that it's in Netscape format"); configlogfmt((void *)&logformat, NULL, "NETSCAPE", NULL, -1); } else if (ISDIGIT(*pos) && ISDIGIT(*(pos + 3)) && *(pos + 5) == '/' && *(pos + 14) == ':' && ISDIGIT(*(pos + 16))) { if (chrn(pos, '\t') == 12) { x = (*pos - '0') * 10 + (*(pos + 1) - '0'); y = (*(pos + 3) - '0') * 10 + (*(pos + 4) - '0'); if (x <= 12 && y > 12) { debug('F', " Detect that it's in WebSite format (North American dates)"); configlogfmt((void *)&logformat, NULL, "WEBSITE-NA", NULL, -1); } else if (x > 12 && y <= 12) { debug('F', " Detect that it's in WebSite format (international dates)"); configlogfmt((void *)&logformat, NULL, "WEBSITE-INT", NULL, -1); } else { warn('F', TRUE, "WebSite logfile with ambiguous dates: " "use LOGFORMAT WEBSITE-NA or LOGFORMAT WEBSITE-INT"); *d = '\n'; return(BADLOGFMT); } } else if (chrn(pos, '\t') == 5) { debug('F', " Detect that it's in MacHTTP format"); configlogfmt((void *)&logformat, NULL, "MACHTTP", NULL, -1); } else { *d = '\n'; return(BADLOGFMT); } } else if (strstr(pos, " -> ") != NULL) { debug('F', " Detect that it's in referrer log format"); configlogfmt((void *)&logformat, NULL, "REFERRER", NULL, -1); } else if (*pos == '[' && (*(pos + 21) == ']' || *(pos + 27) == ']')) { debug('F', " Detect that it's in browser log format"); configlogfmt((void *)&logformat, NULL, "BROWSER", NULL, -1); } else if (*pos == '#') { /* look at first the two lines to determine vendor, although we expect Microsoft string on first line, and WebSTAR on second. */ for (e = d + 1; *e == '\n' || *e == '\r'; e++) ; if (headmatch(pos + 1, "Software: Microsoft Internet Information Serv") || headmatch(e, "#Software: Microsoft Internet Information Serv")) { debug('F', " Detect that it's in Microsoft's version of extended format"); configlogfmt((void *)&logformat, NULL, "MS-EXTENDED", NULL, -1); } else if (headmatch(e, "#Software: WebSTAR") || headmatch(pos + 1, "Software: WebSTAR")) { debug('F', " Detect that it's in extended format (WebSTAR server)"); configlogfmt((void *)&logformat, NULL, "WEBSTAR-EXTENDED", NULL, -1); } else { debug('F', " Detect that it's in W3 extended format"); configlogfmt((void *)&logformat, NULL, "EXTENDED", NULL, -1); } } else if ((e = strchr(pos + 6, '[')) != NULL && *(e + 27) == ']' && strchr(pos, '"') == e + 29) { x = chrn(e + 23, '"'); if (x == 2) { debug('F', " Detect that it's in common log format"); configlogfmt((void *)&logformat, NULL, "COMMON", NULL, -1); } else if (x == 3) { debug('F', " Detect that it's in Microsoft's broken common log format"); configlogfmt((void *)&logformat, NULL, "MS-COMMON", NULL, -1); } else if (x == 6) { debug('F', " Detect that it's in NCSA combined format"); configlogfmt((void *)&logformat, NULL, "COMBINED", NULL, -1); } else { *d = '\n'; return(BADLOGFMT); } } else { *d = '\n'; return(BADLOGFMT); } *d = '\n'; break; case '2': /* WebSTAR format */ /* pos is already start of format proper */ strtoupper(pos); resolveconflicts(5, " \t", "SC-STATUS", "RESULT_CODE", "STATUS", "CS-STATUS", "RESULT"); resolveconflicts(3, " \t", "CS-URI-STEM", "CS-URI", "URL"); resolveconflicts(2, " \t", "BYTES", "BYTES_SENT"); resolveconflicts(4, " \t", "HOSTNAME", "C-DNS", "CS-HOST", "CS-DNS"); resolveconflicts(2, " \t", "C-IP", "CS-IP"); resolveconflicts(2, " \t", "REFERER", "CS(REFERER)"); resolveconflicts(2, " \t", "AGENT", "CS(USER-AGENT)"); resolveconflicts(4, " \t", "HOSTFIELD", "CS(HOST)", "HOST", "CS-SIP"); resolveconflicts(2, " \t", "SEARCH_ARGS", "CS-URI-QUERY"); ENSURE_LEN(fmt, fmtlen, 32); /* Arbitrary amount to get started */ fmt[0] = '\0'; pos = strtok(pos, " \t"); while (pos != NULL) { ENSURE_LEN(fmt, fmtlen, strlen(fmt) + 12); /* Enough to add \t + any next string. Not v efficient, but that's OK. */ if (!IS_EMPTY_STRING(fmt)) strcat(fmt, "\t"); if (STREQ(pos, "COMMON_LOG_FORMAT")) strcpy(fmt, "COMMON"); else if (STREQ(pos, "DATE")) strcat(fmt, "%m/%d/%Z"); else if (STREQ(pos, "TIME")) strcat(fmt, "%W%h:%n:%j"); else if (STREQ(pos, "RESULT")) strcat(fmt, "%C"); else if (STREQ(pos, "SC-STATUS") || STREQ(pos, "CS-STATUS") || STREQ(pos, "RESULT_CODE") || STREQ(pos, "STATUS")) strcat(fmt, "%c"); else if (STREQ(pos, "URL") || STREQ(pos, "CS-URI-STEM") || STREQ(pos, "CS-URI")) strcat(fmt, "%r"); else if (STREQ(pos, "BYTES") || STREQ(pos, "BYTES_SENT")) strcat(fmt, "%b"); else if (STREQ(pos, "HOSTNAME") || STREQ(pos, "CS-HOST") || STREQ(pos, "C-DNS") || STREQ(pos, "CS-DNS")) strcat(fmt, "%S"); else if (STREQ(pos, "CS-IP") || STREQ(pos, "C-IP")) strcat(fmt, "%s"); else if (STREQ(pos, "REFERER")) strcat(fmt, "%f"); else if (STREQ(pos, "CS(REFERER)")) strcat(fmt, "\"%f\""); else if (STREQ(pos, "AGENT")) strcat(fmt, "%B"); else if (STREQ(pos, "CS(USER-AGENT)")) strcat(fmt, "\"%B\""); else if (STREQ(pos, "CS(HOST)") || STREQ(pos, "HOSTFIELD")) strcat(fmt, "\"%v\""); else if (STREQ(pos, "HOST") || STREQ(pos, "CS-SIP")) strcat(fmt, "%v"); else if (STREQ(pos, "SEARCH_ARGS") || STREQ(pos, "CS-URI-QUERY")) strcat(fmt, "%q"); else if (STREQ(pos, "USER")) strcat(fmt, "%u"); else if (STREQ(pos, "TRANSFER_TIME")) strcat(fmt, "%t"); else strcat(fmt, "%j"); pos = strtok((char *)NULL, " \t"); } configlogfmt((void *)&logformat, NULL, "WEBSTAR", NULL, -1); configlogfmt((void *)&logformat, NULL, fmt, NULL, -3); pos = d + 1; /* start at next line */ (void)parsenewline(lf, NULL, '\0'); break; case '3': /* W3 extended format */ case '5': /* Microsoft's attempt at same */ case '6': /* WebSTAR's (much closer :-) attempt at same */ strtoupper(pos); resolveconflicts(2, " \t", "BYTES", "SC-BYTES"); resolveconflicts(2, " \t", "C-IP", "CS-IP"); if (c == '6') { /* WebSTAR */ resolveconflicts(3, " \t", "C-DNS", "CS-DNS", "CS-HOST"); resolveconflicts(6, " \t", "CS(HOST)", "S-DNS", "S-IP", "CS-SIP", "S-SITENAME", "S-COMPUTERNAME"); } else { resolveconflicts(2, " \t", "C-DNS", "CS-DNS"); resolveconflicts(7, " \t", "CS(HOST)", "CS-HOST", "S-DNS", "S-IP", "S-SITENAME", "S-COMPUTERNAME", "CS-SIP"); } resolveconflicts(2, " \t", "CS-URI-STEM", "CS-URI"); resolveconflicts(3, " \t", "CS-USERNAME", "CS(FROM)", "CS(COOKIE)"); ENSURE_LEN(fmt, fmtlen, 32); /* See above */ fmt[0] = '\0'; pos = strtok(pos, " \t"); while (pos != NULL) { ENSURE_LEN(fmt, fmtlen, strlen(fmt) + 11); /* See above */ if (!IS_EMPTY_STRING(fmt)) strcat(fmt, "%w"); if (STREQ(pos, "DATE")) strcat(fmt, "%Y-%m-%d"); else if (STREQ(pos, "TIME")) strcat(fmt, "%h:%n:%j"); else if (STREQ(pos, "BYTES") || STREQ(pos, "SC-BYTES")) strcat(fmt, "%b"); else if (STREQ(pos, "SC-STATUS")) strcat(fmt, "%c"); else if (STREQ(pos, "C-DNS") || STREQ(pos, "CS-DNS")) strcat(fmt, "%S"); else if (STREQ(pos, "CS-IP") || STREQ(pos, "C-IP")) strcat(fmt, "%s"); else if (STREQ(pos, "CS-URI-STEM") || STREQ(pos, "CS-URI")) strcat(fmt, "%r"); else if (STREQ(pos, "CS(REFERER)")) { if (c == '5') /* Microsoft */ strcat(fmt, "%f"); else strcat(fmt, "\"%f\""); } else if (STREQ(pos, "CS(USER-AGENT)")) { if (c == '5') /* Microsoft */ strcat(fmt, "%A"); else strcat(fmt, "\"%B\""); } else if (STREQ(pos, "CS-HOST")) { if (c == '6') /* WebSTAR */ strcat(fmt, "%S"); else strcat(fmt, "%v"); } else if (STREQ(pos, "CS(HOST)")) strcat(fmt, "\"%v\""); else if (STREQ(pos, "S-IP") || STREQ(pos, "S-DNS") || STREQ(pos, "CS-SIP") || STREQ(pos, "S-SITENAME") || STREQ(pos, "S-COMPUTERNAME")) strcat(fmt, "%v"); else if (STREQ(pos, "CS-URI-QUERY")) strcat(fmt, "%q"); else if (STREQ(pos, "CS(FROM)")) strcat(fmt, "\"%u\""); else if (STREQ(pos, "CS-USERNAME") || STREQ(pos, "CS(COOKIE)")) strcat(fmt, "%u"); else if (STREQ(pos, "TIME-TAKEN")) { if (c == '5') /* Microsoft */ strcat(fmt, "%T"); else strcat(fmt, "%t"); } else strcat(fmt, "%j"); pos = strtok((char *)NULL, " \t"); } if (c == '3') configlogfmt((void *)&logformat, NULL, "EXTENDED", NULL, -1); else if (c == '5') configlogfmt((void *)&logformat, NULL, "MS-EXTENDED", NULL, -1); else /* c == '6' */ configlogfmt((void *)&logformat, NULL, "WEBSTAR-EXTENDED", NULL, -1); configlogfmt((void *)&logformat, NULL, fmt, NULL, -3); pos = d + 1; (void)parsenewline(lf, NULL, '\0'); break; case '4': /* Netscape format */ resolveconflicts(2, "%", "Req->vars.auth-user", "Req->vars.pauth-user"); resolveconflicts(2, "%", "Req->reqpb.clf-request", "Req->reqpb.proxy-request"); resolveconflicts(3, "%", "Req->srvhdrs.content-length", "Req->headers.content-length", "Req->vars.p2c-cl"); resolveconflicts(2, "%", "Req->vars.xfer-time", "Req->vars.xfer-time-total"); ENSURE_LEN(fmt, fmtlen, 32); /* See above */ fmt[0] = '\0'; while (*pos != '\0') { ENSURE_LEN(fmt, fmtlen, strlen(fmt) + 18); /* See above */ if (*pos != '%') { e = strchr(fmt, '\0'); *e = *(pos++); *(e + 1) = '\0'; } else { if ((e = strchr(++pos, '%')) == NULL) return(BADLOGFMT); else *e = '\0'; if (STREQ(pos, "Ses->client.ip")) strcat(fmt, "%S"); else if (STREQ(pos, "Req->vars.auth-user") || STREQ(pos, "Req->vars.pauth-user")) strcat(fmt, "%u"); else if (STREQ(pos, "SYSDATE")) strcat(fmt, "%d/%M/%Y:%h:%n:%j"); else if (STREQ(pos, "Req->reqpb.clf-request") || STREQ(pos, "Req->reqpb.proxy-request")) strcat(fmt, "%j%w%r%wHTTP%j"); else if (STREQ(pos, "Req->srvhdrs.clf-status")) strcat(fmt, "%c"); else if (STREQ(pos, "Req->srvhdrs.content-length") || STREQ(pos, "Req->headers.content-length") || STREQ(pos, "Req->vars.p2c-cl")) strcat(fmt, "%b"); else if (STREQ(pos, "Req->headers.referer")) strcat(fmt, "%f"); else if (STREQ(pos, "Req->headers.user-agent")) strcat(fmt, "%B"); else if (STREQ(pos, "Req->headers.host")) strcat(fmt, "%v"); else if (STREQ(pos, "Req->vars.xfer-time") || STREQ(pos, "Req->vars.xfer-time-total")) strcat(fmt, "%t"); else strcat(fmt, "%j"); pos = e + 1; } } configlogfmt((void *)&logformat, NULL, "NETSCAPE", NULL, -1); configlogfmt((void *)&logformat, NULL, fmt, NULL, -3); pos = d + 1; (void)parsenewline(lf, NULL, '\0'); break; } return(NEWLOGFMT); } choice parsenextrecord(Logfile *lf, Inputformat *format) { Inputformat *ipf, *ipf2; logical rc; if (pos == NULL) { /* new logfile */ if (getmoredata(lf, block_start, BLOCKSIZE) == EOF) return(EOF); pos = block_start; if (*pos == '\n' || *pos == '\r') parsenewline(lf, NULL, '\0'); /* ignore completely blank lines at top */ record_start = pos; } pos = record_start; for (ipf = format; ipf->inpfns != NULL; TO_NEXT(ipf)) { if (pos > block_bell) { if (record_start != block_start) shunt_data(lf); if (pos == block_end && block_end - block_start < BLOCKSIZE) return(EOF); } rc = ipf->inpfns->fn(lf, ipf->inpfns->opt, ipf->sep); if (rc != TRUE) { for (ipf2 = format; ipf2 != ipf; TO_NEXT(ipf2)) { if (ipf2->inpfns->fn == &parsestring || ipf2->inpfns->fn == &parseref) ((Memman *)(ipf2->inpfns->opt))->next_pos = ((Memman *)(ipf2->inpfns->opt))->curr_pos; /* reset strings; NB ipf returned !TRUE so didn't allocate */ } return(rc); } } return(TRUE); } int parseconfline(char *s, char **cmd, char **arg1, char **arg2) { char *c, d; for (c = s; *c == ' ' || *c == '\t'; c++) ; /* run past white space */ if (*c == '\0' || *c == '#') return(-1); *cmd = c; while (*c != ' ' && *c != '\t' && *c != '\0' && *c != '#') c++; if (*c == '\0' || *c == '#') { *c = '\0'; return(0); } *c = '\0'; c++; for ( ; *c == ' ' || *c == '\t'; c++) ; /* run past white space again */ if (*c == '\0' || *c == '#') return(0); *arg1 = c; if (*c == '\'' || *c == '"' || *c == '(') { d = (*c == '(')?')':(*c); /* terminating character for next string */ *arg1 = (++c); while (*c != d && *c != '\0') c++; } else while (*c != ' ' && *c != '\t' && *c != '\0' && *c != '#') c++; if (*c == '\0' || *c == '#') { *c = '\0'; return(1); } *c = '\0'; c++; for ( ; *c == ' ' || *c == '\t'; c++) ; if (*c == '\0' || *c == '#') return(1); *arg2 = c; if (*c == '\'' || *c == '"' || *c == '(') { d = (*c == '(')?')':(*c); *arg2 = (++c); while (*c != d && *c != '\0') c++; } else while (*c != ' ' && *c != '\t' && *c != '\0' && *c != '#') c++; if (*c == '\0' || *c == '#') { *c = '\0'; return(2); } *c = '\0'; c++; for ( ; *c == ' ' || *c == '\t'; c++) ; if (*c == '\0' || *c == '#') return(2); return(3); } int nextconfline(FILE *f, char **cmd, char **arg1, char **arg2) { /* if 255 increased, so must u[] be in confline() */ size_t l; int rc; *cmd = NULL; *arg1 = NULL; *arg2 = NULL; while (TRUE) { if (getnextline(f, block_start, 0) == EOF) return(EOF); while ((l = strlen(block_start)) > 0 && *(block_start + l - 1) == '\\') { if (getnextline(f, block_start + l - 1, l - 1) == EOF) return(EOF); } if (l >= 255) { *(block_start + 70) = '\0'; warn('C', TRUE, "Ignoring long configuration line starting\n%s", block_start); } else if ((rc = parseconfline(block_start, cmd, arg1, arg2)) != -1) return(rc); /* o/wise line was blank or a comment: go round again */ } } char *nextlngstr(FILE *f, char *name, logical want) { while (TRUE) { if (getnextline(f, block_start, 0) == EOF) { /* EOF reached */ if (want) error("language file %s too short", name); else return((char *)NULL); } if (strlen(block_start) >= 255) error("language file %s contains excessively long lines", name); if (block_start[0] != '#' || block_start[1] != '#') { /* found a line */ if (want) return(block_start); else error("language file %s too long", name); } /* otherwise just found a comment; go round again */ } } choice nextdnsline(FILE *f, timecode_t *timec, char **name, char **alias) { char *timestr = NULL; *name = NULL; *alias = NULL; if (getnextline(f, block_start, 0) == EOF) return(EOF); if (strlen(block_start) >= 255) { *(block_start + 70) = '\0'; warn('G', TRUE, "Ignoring long line in DNS file starting\n%s", block_start); return(FALSE); } if ((timestr = strtok(block_start, " ")) == NULL || (*name = strtok((char *)NULL, " ")) == NULL || (*alias = strtok((char *)NULL, " ")) == NULL || strtok((char *)NULL, " ") != NULL || !ISDIGIT(*timestr) || (*timec = strtoul(timestr, (char **)NULL, 10)) == 0) { warn('G', TRUE, "Ignoring corrupt line in DNS file\n%s %s %s", block_start, (*name == NULL)?"":(*name), (*alias == NULL)?"":(*alias)); return(FALSE); } return(TRUE); } void process_domainsfile(FILE *f, Options *op) { /* size of v must be bounded because u in confline is */ char *s, *t, *c, *u, v[256]; while (TRUE) { if (getnextline(f, block_start, 0) == EOF) return; if (*block_start == '#') ; /* ignore comment line */ else if (strlen(block_start) >= 250) { *(block_start + 70) = '\0'; warn('G', TRUE, "Ignoring long line in domains file starting\n%s", block_start); } else { for (s = block_start; *s == ' ' || *s == '\t'; s++) ; for (t = s; *t != ' ' && *t != '\t' && *t != '\0'; t++) ; if (*t == '\0') warn('G', TRUE, "Ignoring incomplete line in domains file\n%s", block_start); else { for (c = t + 1; *c == ' ' || *c == '\t'; c++) ; if (*c < '1' || *c > '9' || (*(c + 1) != ' ' && *(c + 1) != '\t')) warn('G', TRUE, "Ignoring corrupt line in domains file\n%s", block_start); else { *t = '\0'; *(c + 1) = '\0'; for (t = c + 2; *t == ' ' || *t == '\t'; t++) ; for (u = strchr(block_start, '\0') - 1; (*u == ' ' || *u == '\t') && u > t; u--) ; if (u > t) *(u + 1) = '\0'; confline(op, "DOMLEVEL", s, c, -1); sprintf(v, "PLAIN:.%s (%s)", s, t); confline(op, "DOMOUTPUTALIAS", s, v, -1); } } } } } void process_descfile(FILE *f, char *name, Options *op) { int i; for (i = 0; i < REP_NUMBER; i++) { if (getnextline(f, block_start, 0) == EOF) { warn ('F', TRUE, "report descriptions file %s too short: ignoring it", name); op->outopts.descriptions = FALSE; return; } if (*block_start == '#') i--; /* ignore comment line */ else { if (strlen(block_start) > 500) { *(block_start + 500) = '\0'; warn('G', TRUE, "Long line in report descriptions file: truncating it " "at 500 characters"); /* Limit is because of prettyprintf() */ } COPYSTR(op->outopts.descstr[i], block_start); } } while (getnextline(f, block_start, 0) != EOF) { if (*block_start != '#') { warn ('F', TRUE, "report descriptions file %s too long: ignoring it", name); op->outopts.descriptions = FALSE; return; } } } analog-ce-6.0.17/src/libgd/000077500000000000000000000000001406366436600153215ustar00rootroot00000000000000analog-ce-6.0.17/src/libgd/LICENSE000066400000000000000000000053511406366436600163320ustar00rootroot00000000000000The files in this directory are from version 1.8.1 of Thomas Boutell's gd library, but have been heavily modified by Stephen Turner for use in analog. In particular: * Only functions I use in analog have been retained; * Most source comments have been removed. Therefore these routines are NOT SUITABLE for use in your own program. Get the latest version of libgd from http://www.boutell.com/gd/ instead. Many thanks to Thomas Boutell for his excellent routines and generous licence. === AUTHOR'S COPYRIGHT AND LICENCE START HERE === In order to resolve any possible confusion regarding the authorship of gd, the following copyright statement covers all of the authors who have required such a statement. _If you are aware of any oversights in this copyright notice, please contact Thomas Boutell who will be pleased to correct them._ COPYRIGHT STATEMENT FOLLOWS THIS LINE Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by the National Institutes of Health. Portions copyright 1996, 1997, 1998, 1999, 2000 by Boutell.Com, Inc. Portions relating to GD2 format copyright 1999, 2000 Philip Warner. Portions relating to PNG copyright 1999, 2000 Greg Roelofs. Portions relating to libttf copyright 1999, 2000 John Ellson (ellson@lucent.com). Portions relating to JPEG copyright 2000, Doug Becker and copyright (C) 1994-1998, Thomas G. Lane. This software is based in part on the work of the Independent JPEG Group. Portions relating to WBMP copyright 2000 Maurice Szmurlo. _Permission has been granted to copy, distribute and modify gd in any context without fee, including a commercial application, provided that this notice is present in user-accessible supporting documentation._ This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of gd, not to interfere with your productive use of gd. If you have questions, ask. "Derived works" includes all programs that utilize the library. Credit must be given in user-accessible documentation. _This software is provided "AS IS."_ The copyright holders disclaim all warranties, either express or implied, including but not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and accompanying documentation. Although their code does not appear in gd 1.8.1, the authors wish to thank David Koblas, David Rowley, and Hutchison Avenue Software Corporation for their prior contributions. END OF COPYRIGHT STATEMENT analog-ce-6.0.17/src/libgd/Makefile000066400000000000000000000014641406366436600167660ustar00rootroot00000000000000# Makefile for analog 6.0, libgd subdirectory # Please read docs/Readme.html, or http://www.analog.cx/ HEADERS = gd.h gd_io.h gdfontf.h gdfonts.h ../zlib/zlib.h ../libpng/png.h OBJS = gd.o gd_io.o gd_io_file.o gd_png.o gdfontf.o gdfonts.o gdtables.o all: $(OBJS) gd.o: gd.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c gd.c gd_io.o: gd_io.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c gd_io.c gd_io_file.o: gd_io_file.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c gd_io_file.c gd_png.o: gd_png.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c gd_png.c gdfontf.o: gdfontf.c $(HEADERS) gdfontf.h Makefile $(CC) $(ALLCFLAGS) -c gdfontf.c gdfonts.o: gdfonts.c $(HEADERS) gdfonts.h Makefile $(CC) $(ALLCFLAGS) -c gdfonts.c gdtables.o: gdtables.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) -c gdtables.c clean: rm -f *.o *~ analog-ce-6.0.17/src/libgd/gd.c000066400000000000000000000153341406366436600160650ustar00rootroot00000000000000/******************************** * GD Graphics Library * ********************************/ /* This file contains code from Thomas Boutell's gd library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #include #include #include #include #include "../zlib/zlib.h" #include "gd.h" extern int gdCosT[]; extern int gdSinT[]; gdImagePtr gdImageCreate(int sx, int sy) { int i; gdImagePtr im; im = (gdImage *) malloc(sizeof(gdImage)); im->pixels = (unsigned char **) malloc(sizeof(unsigned char *) * sy); im->polyInts = 0; im->polyAllocated = 0; im->brush = 0; im->tile = 0; im->style = 0; for (i=0; (ipixels[i] = (unsigned char *) calloc( sx, sizeof(unsigned char)); } im->sx = sx; im->sy = sy; im->colorsTotal = 0; im->transparent = (-1); im->interlace = 0; for (i=0; (i < gdMaxColors); i++) { im->open[i] = 1; im->red[i] = 0; im->green[i] = 0; im->blue[i] = 0; }; return im; } void gdImageDestroy(gdImagePtr im) { int i; for (i=0; (isy); i++) { free(im->pixels[i]); } free(im->pixels); if (im->polyInts) { free(im->polyInts); } if (im->style) { free(im->style); } free(im); } int gdImageColorAllocate(gdImagePtr im, int r, int g, int b) { int i; int ct = (-1); for (i=0; (i<(im->colorsTotal)); i++) { if (im->open[i]) { ct = i; break; } } if (ct == (-1)) { ct = im->colorsTotal; if (ct == gdMaxColors) { return -1; } im->colorsTotal++; } im->red[ct] = r; im->green[ct] = g; im->blue[ct] = b; im->open[ct] = 0; return ct; } void gdImageColorDeallocate(gdImagePtr im, int color) { im->open[color] = 1; } void gdImageColorTransparent(gdImagePtr im, int color) { im->transparent = color; } void gdImageSetPixel(gdImagePtr im, int x, int y, int color) { /* all other cases removed for analog S.R.E.T. */ if (gdImageBoundsSafe(im, x, y)) im->pixels[y][x] = color; } int gdImageGetPixel(gdImagePtr im, int x, int y) { if (gdImageBoundsSafe(im, x, y)) { return im->pixels[y][x]; } else { return 0; } } void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color) { int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag; dx = abs(x2-x1); dy = abs(y2-y1); if (dy <= dx) { d = 2*dy - dx; incr1 = 2*dy; incr2 = 2 * (dy - dx); if (x1 > x2) { x = x2; y = y2; ydirflag = (-1); xend = x1; } else { x = x1; y = y1; ydirflag = 1; xend = x2; } gdImageSetPixel(im, x, y, color); if (((y2 - y1) * ydirflag) > 0) { while (x < xend) { x++; if (d <0) { d+=incr1; } else { y++; d+=incr2; } gdImageSetPixel(im, x, y, color); } } else { while (x < xend) { x++; if (d <0) { d+=incr1; } else { y--; d+=incr2; } gdImageSetPixel(im, x, y, color); } } } else { d = 2*dx - dy; incr1 = 2*dx; incr2 = 2 * (dx - dy); if (y1 > y2) { y = y2; x = x2; yend = y1; xdirflag = (-1); } else { y = y1; x = x1; yend = y2; xdirflag = 1; } gdImageSetPixel(im, x, y, color); if (((x2 - x1) * xdirflag) > 0) { while (y < yend) { y++; if (d <0) { d+=incr1; } else { x++; d+=incr2; } gdImageSetPixel(im, x, y, color); } } else { while (y < yend) { y++; if (d <0) { d+=incr1; } else { x--; d+=incr2; } gdImageSetPixel(im, x, y, color); } } } } int gdImageBoundsSafe(gdImagePtr im, int x, int y) { return (!(((y < 0) || (y >= im->sy)) || ((x < 0) || (x >= im->sx)))); } void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color) { int cx, cy; int px, py; int fline; cx = 0; cy = 0; if ((c < f->offset) || (c >= (f->offset + f->nchars))) { return; } fline = (c - f->offset) * f->h * f->w; for (py = y; (py < (y + f->h)); py++) { for (px = x; (px < (x + f->w)); px++) { if (f->data[fline + cy * f->w + cx]) { gdImageSetPixel(im, px, py, color); } cx++; } cx = 0; cy++; } } void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color) { int i; int l; l = strlen((char *) s); for (i=0; (iw; } } void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color) { int i; int lx = 0, ly = 0; int w2, h2; w2 = w/2; h2 = h/2; while (e < s) { e += 360; } for (i=s; (i <= e); i++) { int x, y; x = ((long)gdCosT[i % 360] * (long)w2 / 1024) + cx; y = ((long)gdSinT[i % 360] * (long)h2 / 1024) + cy; if (i != s) { gdImageLine(im, lx, ly, x, y, color); } lx = x; ly = y; } } void gdImageFill(gdImagePtr im, int x, int y, int color) { int lastBorder; int old; int leftLimit, rightLimit; int i; old = gdImageGetPixel(im, x, y); if (color == gdTiled) { int p, tileColor; int srcx, srcy; if (!im->tile) { return; } if (gdImageGetTransparent(im->tile) != (-1)) { return; } srcx = x % gdImageSX(im->tile); srcy = y % gdImageSY(im->tile); p = gdImageGetPixel(im->tile, srcx, srcy); tileColor = im->tileColorMap[p]; if (old == tileColor) { return; } } else { if (old == color) { return; } } leftLimit = (-1); for (i = x; (i >= 0); i--) { if (gdImageGetPixel(im, i, y) != old) { break; } gdImageSetPixel(im, i, y, color); leftLimit = i; } if (leftLimit == (-1)) { return; } rightLimit = x; for (i = (x+1); (i < im->sx); i++) { if (gdImageGetPixel(im, i, y) != old) { break; } gdImageSetPixel(im, i, y, color); rightLimit = i; } if (y > 0) { lastBorder = 1; for (i = leftLimit; (i <= rightLimit); i++) { int c; c = gdImageGetPixel(im, i, y-1); if (lastBorder) { if (c == old) { gdImageFill(im, i, y-1, color); lastBorder = 0; } } else if (c != old) { lastBorder = 1; } } } if (y < ((im->sy) - 1)) { lastBorder = 1; for (i = leftLimit; (i <= rightLimit); i++) { int c; c = gdImageGetPixel(im, i, y+1); if (lastBorder) { if (c == old) { gdImageFill(im, i, y+1, color); lastBorder = 0; } } else if (c != old) { lastBorder = 1; } } } } void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color) { gdImageLine(im, x1, y1, x2, y1, color); gdImageLine(im, x1, y2, x2, y2, color); gdImageLine(im, x1, y1, x1, y2, color); gdImageLine(im, x2, y1, x2, y2, color); } void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color) { int x, y; for (y=y1; (y<=y2); y++) { for (x=x1; (x<=x2); x++) { gdImageSetPixel(im, x, y, color); } } } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gd.h000066400000000000000000000054621406366436600160730ustar00rootroot00000000000000/******************************** * GD Graphics Library * ********************************/ /* This file contains code from Thomas Boutell's gd library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifdef HAVE_GD #include #else #ifndef GD_H #define GD_H 1 #ifdef __cplusplus extern "C" { #endif #include #include "gd_io.h" #define gdMaxColors 256 typedef struct gdImageStruct { unsigned char ** pixels; int sx; int sy; int colorsTotal; int red[gdMaxColors]; int green[gdMaxColors]; int blue[gdMaxColors]; int open[gdMaxColors]; int transparent; int *polyInts; int polyAllocated; struct gdImageStruct *brush; struct gdImageStruct *tile; int brushColorMap[gdMaxColors]; int tileColorMap[gdMaxColors]; int styleLength; int stylePos; int *style; int interlace; } gdImage; typedef gdImage * gdImagePtr; typedef struct { int nchars; int offset; int w; int h; char *data; } gdFont; typedef gdFont *gdFontPtr; #define gdDashSize 4 #define gdStyled (-2) #define gdBrushed (-3) #define gdStyledBrushed (-4) #define gdTiled (-5) #define gdTransparent (-6) gdImagePtr gdImageCreate(int sx, int sy); void gdImageDestroy(gdImagePtr im); void gdImageSetPixel(gdImagePtr im, int x, int y, int color); int gdImageGetPixel(gdImagePtr im, int x, int y); void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color); void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color); void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color); int gdImageBoundsSafe(gdImagePtr im, int x, int y); void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color); void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color); int gdImageColorAllocate(gdImagePtr im, int r, int g, int b); void gdImageColorDeallocate(gdImagePtr im, int color); void gdImageColorTransparent(gdImagePtr im, int color); void gdImagePng(gdImagePtr im, FILE *out); void gdImagePngCtx(gdImagePtr im, gdIOCtx *out); void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color); void gdImageFill(gdImagePtr im, int x, int y, int color); void gdImageInterlace(gdImagePtr im, int interlaceArg); #define gdImageSX(im) ((im)->sx) #define gdImageSY(im) ((im)->sy) #define gdImageColorsTotal(im) ((im)->colorsTotal) #define gdImageRed(im, c) ((im)->red[(c)]) #define gdImageGreen(im, c) ((im)->green[(c)]) #define gdImageBlue(im, c) ((im)->blue[(c)]) #define gdImageGetTransparent(im) ((im)->transparent) #define gdImageGetInterlaced(im) ((im)->interlace) gdIOCtx* gdNewFileCtx(FILE*); gdIOCtx* gdNewDynamicCtx(int, void*); #ifdef __cplusplus } #endif #endif /* GD_H */ #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gd_io.c000066400000000000000000000010561406366436600165500ustar00rootroot00000000000000/******************************** * GD Graphics Library * ********************************/ /* This file contains code from Thomas Boutell's gd library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #include #include #include #include "gd.h" int gdPutBuf(const void *buf, int size, gdIOCtx* ctx) { return (ctx->putBuf)(ctx, buf, size); } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gd_io.h000066400000000000000000000011161406366436600165520ustar00rootroot00000000000000#ifndef NOGRAPHICS #ifdef HAVE_GD #include #else #ifndef GD_IO_H #define GD_IO_H 1 #include typedef struct gdIOCtx { int (*getC)(struct gdIOCtx*); int (*getBuf)(struct gdIOCtx*, void*, int); void (*putC)(struct gdIOCtx*, int); int (*putBuf)(struct gdIOCtx*, const void*, int); int (*seek)(struct gdIOCtx*, const int); long (*tell)(struct gdIOCtx*); void (*free)(struct gdIOCtx*); } gdIOCtx; typedef struct gdIOCtx *gdIOCtxPtr; int gdPutBuf(const void *, int, gdIOCtx*); #endif /* GD_IO_H */ #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gd_io_file.c000066400000000000000000000043331406366436600175500ustar00rootroot00000000000000/******************************** * GD Graphics Library * ********************************/ /* This file contains code from Thomas Boutell's gd library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #ifndef SEEK_SET #define SEEK_SET 0 #endif #include #include #include #include "gd.h" typedef struct fileIOCtx { gdIOCtx ctx; FILE *f; } fileIOCtx; struct fileIOCtx *fileIOCtxPtr; gdIOCtx* newFileCtx(FILE *f); static int fileGetbuf( gdIOCtx*, void *, int ); static int filePutbuf( gdIOCtx*, const void *, int ); static void filePutchar( gdIOCtx*, int ); static int fileGetchar( gdIOCtx* ctx); static int fileSeek(struct gdIOCtx*, const int); static long fileTell(struct gdIOCtx*); static void freeFileCtx(gdIOCtx *ctx); gdIOCtx* gdNewFileCtx (FILE *f) { fileIOCtx *ctx; ctx = (fileIOCtx*) malloc(sizeof(fileIOCtx)); if (ctx == NULL) { return NULL; } ctx->f = f; ctx->ctx.getC = fileGetchar; ctx->ctx.putC = filePutchar; ctx->ctx.getBuf = fileGetbuf; ctx->ctx.putBuf = filePutbuf; ctx->ctx.tell = fileTell; ctx->ctx.seek = fileSeek; ctx->ctx.free = freeFileCtx; return (gdIOCtx*)ctx; } static void freeFileCtx(gdIOCtx *ctx) { free(ctx); } static int filePutbuf( gdIOCtx* ctx, const void *buf, int size ) { fileIOCtx *fctx; fctx = (fileIOCtx*) ctx; return fwrite(buf, 1, size, fctx->f); } static int fileGetbuf( gdIOCtx* ctx, void *buf, int size ) { fileIOCtx *fctx; fctx = (fileIOCtx*) ctx; return (fread(buf, 1, size, fctx->f)); } static void filePutchar( gdIOCtx* ctx, int a ) { unsigned char b; fileIOCtx *fctx; fctx = (fileIOCtx*) ctx; b = a; putc(b, fctx->f); } static int fileGetchar( gdIOCtx* ctx) { fileIOCtx *fctx; fctx = (fileIOCtx*) ctx; return getc(fctx->f); } static int fileSeek(struct gdIOCtx* ctx, const int pos) { fileIOCtx *fctx; fctx = (fileIOCtx*) ctx; return (fseek(fctx->f, pos, SEEK_SET) == 0); } static long fileTell(struct gdIOCtx* ctx) { fileIOCtx *fctx; fctx = (fileIOCtx*) ctx; return ftell(fctx->f); } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gd_png.c000066400000000000000000000126421406366436600167300ustar00rootroot00000000000000/******************************** * GD Graphics Library * ********************************/ /* This file contains code from Thomas Boutell's gd library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #include #include #include #include #include "gd.h" #include "../libpng/png.h" #undef TRUE #define TRUE 1 #undef FALSE #define FALSE 0 typedef struct _jmpbuf_wrapper { jmp_buf jmpbuf; } jmpbuf_wrapper; static jmpbuf_wrapper gdPngJmpbufStruct; static void gdPngErrorHandler(png_structp png_ptr, png_const_charp msg) { jmpbuf_wrapper *jmpbuf_ptr; fprintf(stderr, "gd-png: fatal libpng error: %s\n", msg); fflush(stderr); jmpbuf_ptr = png_get_error_ptr(png_ptr); if (jmpbuf_ptr == NULL) { fprintf(stderr, "gd-png: EXTREMELY fatal error: jmpbuf unrecoverable; terminating.\n"); fflush(stderr); exit(99); } longjmp(jmpbuf_ptr->jmpbuf, 1); } static void gdPngWriteData(png_structp png_ptr, png_bytep data, png_size_t length) { gdPutBuf(data, length, (gdIOCtx *) png_get_io_ptr(png_ptr)); } static void gdPngFlushData(png_structp png_ptr) { } void gdImagePng(gdImagePtr im, FILE *outFile) { gdIOCtx *out = gdNewFileCtx(outFile); gdImagePngCtx(im, out); out->free(out); } void gdImagePngCtx(gdImagePtr im, gdIOCtx *outfile) { int i, j, bit_depth, interlace_type; int width = im->sx; int height = im->sy; int colors = im->colorsTotal; int *open = im->open; int mapping[gdMaxColors]; png_byte trans_value = 0; png_color palette[gdMaxColors]; png_structp png_ptr; png_infop info_ptr; volatile int transparent = im->transparent; volatile int remap = FALSE; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, &gdPngJmpbufStruct, gdPngErrorHandler, NULL); if (png_ptr == NULL) { fprintf(stderr, "gd-png error: cannot allocate libpng main struct\n"); return; } info_ptr = png_create_info_struct (png_ptr); if (info_ptr == NULL) { fprintf(stderr, "gd-png error: cannot allocate libpng info struct\n"); png_destroy_write_struct(&png_ptr, (png_infopp)NULL); return; } if (setjmp(gdPngJmpbufStruct.jmpbuf)) { fprintf(stderr, "gd-png error: setjmp returns error condition\n"); png_destroy_write_struct(&png_ptr, &info_ptr); return; } png_set_write_fn(png_ptr, (void *)outfile, gdPngWriteData, gdPngFlushData); if (transparent >= im->colorsTotal || (transparent >= 0 && open[transparent])) transparent = -1; for (i = 0; i < gdMaxColors; ++i) mapping[i] = -1; colors = 0; for (i = 0; i < im->colorsTotal; ++i) { if (!open[i]) { mapping[i] = colors; ++colors; } } if (colors < im->colorsTotal) { remap = TRUE; if (transparent >= 0) transparent = mapping[transparent]; } if (colors <= 2) bit_depth = 1; else if (colors <= 4) bit_depth = 2; else if (colors <= 16) bit_depth = 4; else bit_depth = 8; interlace_type = im->interlace? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE; png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_PALETTE, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); if (transparent >= 0) { if (transparent != 0) { if (!remap) { remap = TRUE; for (i = 0; i < colors; ++i) mapping[i] = i; } mapping[transparent] = 0; mapping[0] = transparent; } png_set_tRNS(png_ptr, info_ptr, &trans_value, 1, NULL); } if (remap) for (i = 0; i < im->colorsTotal; ++i) { if (mapping[i] < 0) continue; palette[mapping[i]].red = im->red[i]; palette[mapping[i]].green = im->green[i]; palette[mapping[i]].blue = im->blue[i]; } else for (i = 0; i < colors; ++i) { palette[i].red = im->red[i]; palette[i].green = im->green[i]; palette[i].blue = im->blue[i]; } png_set_PLTE(png_ptr, info_ptr, palette, colors); png_write_info(png_ptr, info_ptr); png_set_packing(png_ptr); if (remap) { png_bytep *row_pointers; row_pointers = malloc(sizeof(png_bytep) * height); if (row_pointers == NULL) { fprintf(stderr, "gd-png error: unable to allocate row_pointers\n"); } for (j = 0; j < height; ++j) { if ((row_pointers[j] = (png_bytep)malloc(width)) == NULL) { fprintf(stderr, "gd-png error: unable to allocate rows\n"); for (i = 0; i < j; ++i) free(row_pointers[i]); return; } for (i = 0; i < width; ++i) row_pointers[j][i] = mapping[im->pixels[j][i]]; } png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); for (j = 0; j < height; ++j) free(row_pointers[j]); free(row_pointers); } else { png_write_image(png_ptr, im->pixels); png_write_end(png_ptr, info_ptr); } png_destroy_write_struct(&png_ptr, &info_ptr); } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gdfontf.c000066400000000000000000001352261406366436600171250ustar00rootroot00000000000000/* This file generated by Stephen Turner using Jan Pazdziora's bdftogd */ /* The original font -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1 included this message: "Public domain font. Share and enjoy." */ #ifndef NOGRAPHICS /* As this is not part of the gd distribution, it isn't in #ifndef HAVE_GD */ #include "gdfontf.h" char gdFontFixedData[] = { /* Char 0 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 1 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 2 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 3 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 4 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 5 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 6 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 7 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 8 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 9 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 10 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 11 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 12 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 13 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 14 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 15 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 16 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 17 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 18 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 19 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 20 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 21 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 22 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 23 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 24 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 25 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 26 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 27 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 28 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 29 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 30 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 31 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 32 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 33 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 34 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 35 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,1,1,1,1,0, 0,1,0,1,0,0, 1,1,1,1,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 36 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,1,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 0,1,1,1,0,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 1,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 37 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 1,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,1,0,0, 1,0,1,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 38 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 1,0,0,1,1,0, 1,0,0,1,0,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 39 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 40 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 41 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 42 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 1,0,1,0,1,0, 1,1,1,1,1,0, 0,1,1,1,0,0, 1,1,1,1,1,0, 1,0,1,0,1,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 43 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 44 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* Char 45 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 46 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* Char 47 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 48 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 49 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,0,0,0, 1,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 50 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 51 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 52 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,0,0,1,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 53 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 54 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 55 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 56 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 57 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 58 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* Char 59 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* Char 60 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 61 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 62 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 63 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 64 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,1,0,0, 1,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 65 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 66 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 67 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 68 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 69 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 70 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 71 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 72 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 73 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 74 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,0,0,1,0,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 75 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,0,0, 1,0,1,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 76 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 77 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,1,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 78 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,1,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,1,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 79 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 80 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 81 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,0, /* Char 82 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 83 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 84 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 85 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 86 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 87 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,1,0,1,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 88 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 89 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 90 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 91 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 92 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 93 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 94 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 95 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, /* Char 96 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 97 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 98 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 99 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 100 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 101 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 102 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 103 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, /* Char 104 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 105 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 106 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,0,0,1,0,0, 1,0,0,1,0,0, 0,1,1,0,0,0, /* Char 107 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,1,0,0, 1,0,1,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 108 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 109 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,0,1,0,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 110 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 111 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 112 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, /* Char 113 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, /* Char 114 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 115 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 116 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 117 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 118 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 119 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 120 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 121 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, /* Char 122 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 123 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 124 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 125 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 126 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 1,0,1,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 127 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 128 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 129 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 130 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 131 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 132 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 133 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 134 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 135 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 136 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 137 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 138 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 139 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 140 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 141 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 142 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 143 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 144 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 145 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 146 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 147 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 148 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 149 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 150 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 151 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 152 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 153 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 154 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 155 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 156 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 157 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 158 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 159 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 160 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 161 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 162 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 1,0,1,0,1,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 1,0,1,0,1,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 163 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,1,0, 1,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 164 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 165 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 166 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 167 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 168 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,0,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 169 */ 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 1,1,0,1,1,0, 1,1,0,0,1,0, 1,1,0,1,1,0, 1,0,1,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 170 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 171 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 0,1,0,1,0,0, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 172 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 173 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 174 */ 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,0,1,0, 1,1,0,1,1,0, 1,1,0,1,1,0, 1,1,1,0,1,0, 1,1,0,1,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 175 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 176 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 177 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 178 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,1,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 179 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 1,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 180 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 181 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 1,1,1,0,1,0, 1,0,0,0,0,0, 0,0,0,0,0,0, /* Char 182 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 1,1,1,0,1,0, 1,1,1,0,1,0, 1,1,1,0,1,0, 1,1,1,0,1,0, 0,1,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 183 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 184 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, /* Char 185 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 1,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 186 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 187 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,0,0,0, 0,1,0,1,0,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 1,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 188 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 1,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,0,0,0, 0,0,0,0,1,0, 0,0,0,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 189 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 1,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,0,0,0, 0,0,0,1,0,0, 0,0,1,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 190 */ 0,0,0,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 1,0,1,0,0,0, 0,1,0,0,1,0, 0,0,0,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 191 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 192 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 193 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 194 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 195 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 196 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 197 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 198 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,1,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 1,0,1,1,0,0, 1,1,1,0,0,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 1,0,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 199 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, /* Char 200 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 201 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 202 */ 0,0,0,0,0,0, 0,1,1,0,0,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 203 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 204 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 205 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 206 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 207 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 208 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 209 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,0,1,0,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 210 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 211 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 212 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 213 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 214 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 215 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 216 */ 0,0,0,0,0,0, 0,0,0,0,1,0, 0,1,1,1,0,0, 1,0,0,1,1,0, 1,0,0,1,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,1,0,0,1,0, 1,1,0,0,1,0, 0,1,1,1,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, /* Char 217 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 218 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 219 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 220 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 221 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 222 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 223 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,0,1,1,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, /* Char 224 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 225 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 226 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 227 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 228 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 229 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 230 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,1,0,1,0, 0,1,1,1,0,0, 1,0,1,0,0,0, 1,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 231 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, /* Char 232 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 233 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 234 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 235 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 236 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 237 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 238 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 239 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 240 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 241 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 242 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 243 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 244 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 245 */ 0,0,0,0,0,0, 0,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 246 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 247 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 248 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,1,1,1,0,0, 1,0,0,1,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,1,0,0,1,0, 0,1,1,1,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, /* Char 249 */ 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 250 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 251 */ 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 252 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 253 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, /* Char 254 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,0,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, /* Char 255 */ 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, }; gdFont gdFontFixedRep = { 256, 0, 6, 13, gdFontFixedData }; gdFontPtr gdFontFixed = &gdFontFixedRep; #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gdfontf.h000066400000000000000000000003121406366436600171150ustar00rootroot00000000000000#ifndef NOGRAPHICS /* As this is not part of the gd distribution, it isn't in #ifndef HAVE_GD */ #ifndef _GDFONTF_H_ #define _GDFONTF_H_ 1 #include "gd.h" extern gdFontPtr gdFontFixed; #endif #endif analog-ce-6.0.17/src/libgd/gdfonts.c000066400000000000000000001352361406366436600171430ustar00rootroot00000000000000/* This is a header file for gd font, generated using bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz from bdf font -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2 at Thu Jan 8 14:13:20 1998. No copyright info was found in the original bdf. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #include "gdfonts.h" char gdFontSmallData[] = { /* Char 0 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 1 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 2 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 3 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 4 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 5 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 6 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 7 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 8 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 9 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 10 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 11 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 12 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 13 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 14 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 15 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 16 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 17 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 18 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 19 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 20 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 21 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 22 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 23 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 24 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 25 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 26 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 27 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 28 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 29 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 30 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 31 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 32 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 33 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 34 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 35 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 1,1,1,1,1,0, 0,1,0,1,0,0, 1,1,1,1,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 36 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,1,1,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 0,1,1,1,0,0, 0,0,1,0,1,0, 0,0,1,0,1,0, 1,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* Char 37 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 1,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,1,0,0, 1,0,1,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 38 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 1,0,1,0,0,0, 0,1,0,0,0,0, 1,0,1,0,0,0, 1,0,0,1,1,0, 1,0,0,1,0,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 39 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 40 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 41 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 42 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 1,0,1,0,1,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 1,0,1,0,1,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 43 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 44 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* Char 45 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 46 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 47 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, /* Char 48 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 49 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,1,0,0,0, 1,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 50 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 51 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,0,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 52 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,1,0,0, 0,1,0,1,0,0, 1,0,0,1,0,0, 1,0,0,1,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 53 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 54 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,1,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 55 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 56 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 57 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 1,1,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 58 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 59 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, /* Char 60 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 61 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 62 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 63 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 64 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,1,0,0, 1,0,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 65 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 66 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 67 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 68 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 69 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 70 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 71 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 72 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 73 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 74 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,0,0,1,0,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 75 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,0,0, 1,0,1,0,0,0, 1,1,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 76 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 77 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,1,0,1,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 78 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,1,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,1,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 79 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 80 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 81 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,0,0,0,0,0, /* Char 82 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 83 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 84 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 85 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 86 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 87 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,1,0,1,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 88 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 89 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 90 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 91 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 92 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,0,0,0,0,0, /* Char 93 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 94 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 95 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, /* Char 96 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 97 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 98 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 99 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 100 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,0,1,0, 0,1,1,0,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 101 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 102 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 103 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, /* Char 104 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 105 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 106 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 0,0,0,1,0,0, 1,0,0,1,0,0, 1,0,0,1,0,0, 0,1,1,0,0,0, /* Char 107 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,1,0,0, 1,0,1,0,0,0, 1,1,0,0,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 108 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 109 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,0,1,0,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 110 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 111 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 112 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,0,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, /* Char 113 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,1,0, 0,0,0,0,1,0, /* Char 114 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 115 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 116 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 117 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 118 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 119 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 120 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 121 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 1,1,1,0,0,0, /* Char 122 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 123 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, 0,0,0,0,0,0, /* Char 124 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, /* Char 125 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 1,1,0,0,0,0, 0,0,0,0,0,0, /* Char 126 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 1,0,1,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 127 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 128 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 129 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 130 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 131 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 132 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 133 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 134 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 135 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 136 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 137 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 138 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 139 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 140 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 141 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 142 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 143 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 144 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 145 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 146 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 147 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 148 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 149 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 150 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 151 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 152 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 153 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 154 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 155 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 156 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 157 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 158 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 159 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 160 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 161 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,1,0,0, 0,0,0,0,1,1, /* Char 162 */ 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 163 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,0,0,0, 0,1,0,0,0,0, 1,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 164 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 165 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 1,0,0,1,0,0, 1,0,1,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 166 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 167 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, /* Char 168 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,0,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 169 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 170 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, /* Char 171 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 172 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 173 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 174 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 175 */ 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 176 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 177 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,1,0,0, 0,0,0,0,1,1, /* Char 178 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, /* Char 179 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,1,0,0, 0,0,1,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 180 */ 0,0,0,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 181 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,1, 0,1,1,0,0,1, 0,0,1,0,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 182 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 183 */ 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 184 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,1,1,0,0,0, /* Char 185 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 186 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 0,1,1,0,0,0, 0,0,0,1,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, /* Char 187 */ 0,0,0,0,0,0, 0,0,0,1,1,0, 0,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 188 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 189 */ 0,0,0,0,0,0, 0,0,1,0,0,1, 0,1,0,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 190 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 191 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,1,0,0, 0,0,1,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 192 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 193 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 194 */ 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 195 */ 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 196 */ 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 197 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 198 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 199 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,1,0,0, 0,1,1,0,0,0, /* Char 200 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 201 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 202 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,0,1,1,0, /* Char 203 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 204 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 205 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 206 */ 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 207 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 208 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 1,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 209 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,1,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,1,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 210 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,1,0,0,1,0, 1,0,1,0,1,0, 1,0,1,0,1,0, 1,0,0,1,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 211 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 212 */ 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 213 */ 0,0,1,0,0,1, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 214 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 215 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 216 */ 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,1,0,0,0, 1,0,0,1,0,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 217 */ 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 218 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 219 */ 0,0,1,0,0,1, 0,1,0,0,1,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 220 */ 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 221 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 222 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, /* Char 223 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,1,0,0,1,0, 1,0,1,1,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, /* Char 224 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 225 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 226 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 227 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 228 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 0,1,0,0,1,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,1,0, 0,1,1,1,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 229 */ 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 230 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 231 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,1,0,0, 0,1,1,0,0,0, /* Char 232 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 233 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 234 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 0,0,1,0,0,0, 0,0,0,1,1,0, /* Char 235 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 236 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,1,1,1,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 237 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 238 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 239 */ 0,0,0,0,0,0, 0,0,0,0,1,1, 0,0,0,0,0,1, 0,0,0,1,1,0, 0,0,0,1,0,0, 0,1,0,1,0,0, 1,0,1,1,0,0, 1,0,0,1,0,0, 1,0,0,1,0,0, 1,0,0,1,0,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 240 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,1,1,1, 0,0,0,0,1,0, 0,1,1,0,1,0, 1,0,0,1,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 241 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 242 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 243 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 244 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 245 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 246 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 0,1,1,1,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 0,1,1,1,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 247 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,1,1,1,1,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 248 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 1,0,1,1,0,0, 1,1,0,0,1,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 1,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 249 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,1,0,1,0,0, 0,0,1,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 250 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 251 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,1,0, 1,0,0,1,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 252 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,1,0,0, 0,1,0,1,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,0,0, 0,0,0,0,0,0, /* Char 253 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,1,0, 0,1,1,0,0,0, 0,0,0,0,0,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,0,1,0, 1,0,0,1,1,0, 0,1,1,0,1,0, 0,0,0,0,1,0, 0,0,0,1,0,0, 1,1,1,0,0,0, /* Char 254 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,1,1,1,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,1,0, 0,0,1,1,0,0, 0,0,0,1,0,0, 0,0,1,0,0,0, /* Char 255 */ 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,1,0,0,0, 0,0,1,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, }; gdFont gdFontSmallRep = { 256, 0, 6, 13, gdFontSmallData }; gdFontPtr gdFontSmall = &gdFontSmallRep; #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libgd/gdfonts.h000066400000000000000000000002551406366436600171400ustar00rootroot00000000000000#ifndef NOGRAPHICS #ifdef HAVE_GD #include #else #ifndef _GDFONTS_H_ #define _GDFONTS_H_ 1 #include "gd.h" extern gdFontPtr gdFontSmall; #endif #endif #endif analog-ce-6.0.17/src/libgd/gdtables.c000066400000000000000000000133631406366436600172600ustar00rootroot00000000000000/******************************** * GD Graphics Library * ********************************/ /* This file contains code from Thomas Boutell's gd library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD int gdCosT[] = { 1024, 1023, 1023, 1022, 1021, 1020, 1018, 1016, 1014, 1011, 1008, 1005, 1001, 997, 993, 989, 984, 979, 973, 968, 962, 955, 949, 942, 935, 928, 920, 912, 904, 895, 886, 877, 868, 858, 848, 838, 828, 817, 806, 795, 784, 772, 760, 748, 736, 724, 711, 698, 685, 671, 658, 644, 630, 616, 601, 587, 572, 557, 542, 527, 512, 496, 480, 464, 448, 432, 416, 400, 383, 366, 350, 333, 316, 299, 282, 265, 247, 230, 212, 195, 177, 160, 142, 124, 107, 89, 71, 53, 35, 17, 0, -17, -35, -53, -71, -89, -107, -124, -142, -160, -177, -195, -212, -230, -247, -265, -282, -299, -316, -333, -350, -366, -383, -400, -416, -432, -448, -464, -480, -496, -512, -527, -542, -557, -572, -587, -601, -616, -630, -644, -658, -671, -685, -698, -711, -724, -736, -748, -760, -772, -784, -795, -806, -817, -828, -838, -848, -858, -868, -877, -886, -895, -904, -912, -920, -928, -935, -942, -949, -955, -962, -968, -973, -979, -984, -989, -993, -997, -1001, -1005, -1008, -1011, -1014, -1016, -1018, -1020, -1021, -1022, -1023, -1023, -1024, -1023, -1023, -1022, -1021, -1020, -1018, -1016, -1014, -1011, -1008, -1005, -1001, -997, -993, -989, -984, -979, -973, -968, -962, -955, -949, -942, -935, -928, -920, -912, -904, -895, -886, -877, -868, -858, -848, -838, -828, -817, -806, -795, -784, -772, -760, -748, -736, -724, -711, -698, -685, -671, -658, -644, -630, -616, -601, -587, -572, -557, -542, -527, -512, -496, -480, -464, -448, -432, -416, -400, -383, -366, -350, -333, -316, -299, -282, -265, -247, -230, -212, -195, -177, -160, -142, -124, -107, -89, -71, -53, -35, -17, 0, 17, 35, 53, 71, 89, 107, 124, 142, 160, 177, 195, 212, 230, 247, 265, 282, 299, 316, 333, 350, 366, 383, 400, 416, 432, 448, 464, 480, 496, 512, 527, 542, 557, 572, 587, 601, 616, 630, 644, 658, 671, 685, 698, 711, 724, 736, 748, 760, 772, 784, 795, 806, 817, 828, 838, 848, 858, 868, 877, 886, 895, 904, 912, 920, 928, 935, 942, 949, 955, 962, 968, 973, 979, 984, 989, 993, 997, 1001, 1005, 1008, 1011, 1014, 1016, 1018, 1020, 1021, 1022, 1023, 1023 }; int gdSinT[] = { 0, 17, 35, 53, 71, 89, 107, 124, 142, 160, 177, 195, 212, 230, 247, 265, 282, 299, 316, 333, 350, 366, 383, 400, 416, 432, 448, 464, 480, 496, 512, 527, 542, 557, 572, 587, 601, 616, 630, 644, 658, 671, 685, 698, 711, 724, 736, 748, 760, 772, 784, 795, 806, 817, 828, 838, 848, 858, 868, 877, 886, 895, 904, 912, 920, 928, 935, 942, 949, 955, 962, 968, 973, 979, 984, 989, 993, 997, 1001, 1005, 1008, 1011, 1014, 1016, 1018, 1020, 1021, 1022, 1023, 1023, 1024, 1023, 1023, 1022, 1021, 1020, 1018, 1016, 1014, 1011, 1008, 1005, 1001, 997, 993, 989, 984, 979, 973, 968, 962, 955, 949, 942, 935, 928, 920, 912, 904, 895, 886, 877, 868, 858, 848, 838, 828, 817, 806, 795, 784, 772, 760, 748, 736, 724, 711, 698, 685, 671, 658, 644, 630, 616, 601, 587, 572, 557, 542, 527, 512, 496, 480, 464, 448, 432, 416, 400, 383, 366, 350, 333, 316, 299, 282, 265, 247, 230, 212, 195, 177, 160, 142, 124, 107, 89, 71, 53, 35, 17, 0, -17, -35, -53, -71, -89, -107, -124, -142, -160, -177, -195, -212, -230, -247, -265, -282, -299, -316, -333, -350, -366, -383, -400, -416, -432, -448, -464, -480, -496, -512, -527, -542, -557, -572, -587, -601, -616, -630, -644, -658, -671, -685, -698, -711, -724, -736, -748, -760, -772, -784, -795, -806, -817, -828, -838, -848, -858, -868, -877, -886, -895, -904, -912, -920, -928, -935, -942, -949, -955, -962, -968, -973, -979, -984, -989, -993, -997, -1001, -1005, -1008, -1011, -1014, -1016, -1018, -1020, -1021, -1022, -1023, -1023, -1024, -1023, -1023, -1022, -1021, -1020, -1018, -1016, -1014, -1011, -1008, -1005, -1001, -997, -993, -989, -984, -979, -973, -968, -962, -955, -949, -942, -935, -928, -920, -912, -904, -895, -886, -877, -868, -858, -848, -838, -828, -817, -806, -795, -784, -772, -760, -748, -736, -724, -711, -698, -685, -671, -658, -644, -630, -616, -601, -587, -572, -557, -542, -527, -512, -496, -480, -464, -448, -432, -416, -400, -383, -366, -350, -333, -316, -299, -282, -265, -247, -230, -212, -195, -177, -160, -142, -124, -107, -89, -71, -53, -35, -17 }; #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/000077500000000000000000000000001406366436600155135ustar00rootroot00000000000000analog-ce-6.0.17/src/libpng/LICENSE000066400000000000000000000056311406366436600165250ustar00rootroot00000000000000The files in this directory are from version 1.0.6 of the PNG reference library, but have been heavily modified by Stephen Turner for use in analog. In particular: * Only functions I use in analog have been retained; * Most source comments have been removed. Therefore these routines are NOT SUITABLE for use in your own program. Get the latest version of libpng from http://www.libpng.org/pub/png/libpng.html instead. Many thanks to the authors for their excellent routines and generous licence. === AUTHORS' COPYRIGHT AND LICENCE START HERE === COPYRIGHT NOTICE: Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. (libpng versions 0.5, May 1995, through 0.89c, May 1996) Copyright (c) 1996, 1997 Andreas Dilger (libpng versions 0.90, December 1996, through 0.96, May 1997) Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson (libpng versions 0.97, January 1998, through 1.0.6, March 21, 2000) For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: John Bowler Kevin Bracey Sam Bushell Andreas Dilger Magnus Holmgren Tom Lane Dave Martindale Glenn Randers-Pehrson Eric S. Raymond Greg Roelofs Guy Eric Schalnat Paul Schmidt Tom Tanner Willem van Schaik Tim Wegner The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors and Group 42, Inc. specifically permit, without fee, and encourage the use of this source code as a component to supporting the PNG file format in commercial products. If you use this source code in a product, acknowledgment is not required but would be appreciated. A "png_get_copyright" function is available, for convenient use in "about" boxes and the like: printf("%s",png_get_copyright(NULL)); Also, the PNG logo (in PNG format, of course) is supplied in the file "pngnow.png". Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a certification mark of the Open Source Initiative. Glenn Randers-Pehrson randeg@alum.rpi.edu March 21, 2000 analog-ce-6.0.17/src/libpng/Makefile000066400000000000000000000020301406366436600171460ustar00rootroot00000000000000# Makefile for analog 6.0, libpng subdirectory # Please read docs/Readme.html, or http://www.analog.cx/ HEADERS = png.h pngconf.h ../zlib/zlib.h OBJS = png.o pngerror.o pngmem.o pngset.o pngtrans.o pngwio.o pngwrite.o \ pngwtran.o pngwutil.o all: $(OBJS) png.o: png.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c png.c pngerror.o: pngerror.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngerror.c pngmem.o: pngmem.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngmem.c pngset.o: pngset.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngset.c pngtrans.o: pngtrans.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngtrans.c pngwio.o: pngwio.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngwio.c pngwrite.o: pngwrite.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngwrite.c pngwtran.o: pngwtran.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngwtran.c pngwutil.o: pngwutil.c $(HEADERS) Makefile $(CC) $(ALLCFLAGS) $(INCDIRS) -c pngwutil.c clean: rm -f *.o *~ analog-ce-6.0.17/src/libpng/png.c000066400000000000000000000104451406366436600164470ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #define PNG_NO_EXTERN #include #include "png.h" typedef version_1_0_6 Your_png_h_is_not_version_1_0_6; #ifdef PNG_USE_GLOBAL_ARRAYS char png_libpng_ver[12] = "1.0.6"; png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; PNG_IHDR; PNG_IDAT; PNG_IEND; PNG_PLTE; PNG_bKGD; PNG_cHRM; PNG_gAMA; PNG_hIST; PNG_iCCP; PNG_iTXt; PNG_oFFs; PNG_pCAL; PNG_sCAL; PNG_pHYs; PNG_sBIT; PNG_sRGB; PNG_tEXt; PNG_tIME; PNG_tRNS; PNG_zTXt; int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; #ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; #endif int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; int FARDATA png_pass_dsp_mask[] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; #endif voidpf png_zalloc(voidpf png_ptr, uInt items, uInt size) { png_uint_32 num_bytes = (png_uint_32)items * size; png_voidp ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes); if (num_bytes > (png_uint_32)0x8000L) { png_memset(ptr, 0, (png_size_t)0x8000L); png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0, (png_size_t)(num_bytes - (png_uint_32)0x8000L)); } else { png_memset(ptr, 0, (png_size_t)num_bytes); } return ((voidpf)ptr); } void png_zfree(voidpf png_ptr, voidpf ptr) { png_free((png_structp)png_ptr, (png_voidp)ptr); } void png_reset_crc(png_structp png_ptr) { png_ptr->crc = crc32(0, Z_NULL, 0); } void png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length) { int need_crc = 1; if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ { if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) need_crc = 0; } else /* critical */ { if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) need_crc = 0; } if (need_crc) png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length); } png_infop png_create_info_struct(png_structp png_ptr) { png_infop info_ptr; png_debug(1, "in png_create_info_struct\n"); if(png_ptr == NULL) return (NULL); if ((info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO)) != NULL) { png_info_init(info_ptr); } return (info_ptr); } void png_info_init(png_infop info_ptr) { png_debug(1, "in png_info_init\n"); png_memset(info_ptr, 0, sizeof (png_info)); } void png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, int num) { if (png_ptr == NULL || info_ptr == NULL) return; #if defined(PNG_tRNS_SUPPORTED) if (mask & PNG_FREE_TRNS) { if (info_ptr->valid & PNG_INFO_tRNS) { if (info_ptr->free_me & PNG_FREE_TRNS) png_free(png_ptr, info_ptr->trans); info_ptr->valid &= ~PNG_INFO_tRNS; } } #endif if (mask & PNG_FREE_PLTE) { if (info_ptr->valid & PNG_INFO_PLTE) { if (info_ptr->free_me & PNG_FREE_PLTE) png_zfree(png_ptr, info_ptr->palette); info_ptr->valid &= ~(PNG_INFO_PLTE); info_ptr->num_palette = 0; } } #if defined(PNG_INFO_IMAGE_SUPPORTED) if (mask & PNG_FREE_ROWS) { if (info_ptr->free_me & PNG_FREE_ROWS) { int row; for (row = 0; row < (int)info_ptr->height; row++) png_free(png_ptr, info_ptr->row_pointers[row]); png_free(png_ptr, info_ptr->row_pointers); } } #endif if(num == -1) info_ptr->free_me &= ~mask; } png_voidp png_get_io_ptr(png_structp png_ptr) { return (png_ptr->io_ptr); } png_charp png_get_header_ver(png_structp png_ptr) { /* Version of *.h files used when building libpng */ if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */ return(PNG_LIBPNG_VER_STRING); return(PNG_LIBPNG_VER_STRING); } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/png.h000066400000000000000000000527031406366436600164570ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifdef HAVE_GD #include #else #ifndef _PNG_H #define _PNG_H #include "../zlib/zlib.h" #include "pngconf.h" #if defined(PNG_INTERNAL) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) # include "pngasmrd.h" #endif #define PNG_LIBPNG_VER_STRING "1.0.6" #define PNG_LIBPNG_VER 10006 /* 1.0.6 */ #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) #ifdef PNG_USE_GLOBAL_ARRAYS PNG_EXPORT_VAR (char) png_libpng_ver[12]; #else #define png_libpng_ver png_get_header_ver(NULL) #endif #ifdef PNG_USE_GLOBAL_ARRAYS PNG_EXPORT_VAR (int FARDATA) png_pass_start[7]; PNG_EXPORT_VAR (int FARDATA) png_pass_inc[7]; PNG_EXPORT_VAR (int FARDATA) png_pass_ystart[7]; PNG_EXPORT_VAR (int FARDATA) png_pass_yinc[7]; PNG_EXPORT_VAR (int FARDATA) png_pass_mask[7]; PNG_EXPORT_VAR (int FARDATA) png_pass_dsp_mask[7]; #ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW extern int FARDATA png_pass_width[7]; #endif #endif #endif /* PNG_NO_EXTERN */ typedef struct png_color_struct { png_byte red; png_byte green; png_byte blue; } png_color; typedef png_color FAR * png_colorp; typedef png_color FAR * FAR * png_colorpp; typedef struct png_color_16_struct { png_byte index; png_uint_16 red; png_uint_16 green; png_uint_16 blue; png_uint_16 gray; } png_color_16; typedef png_color_16 FAR * png_color_16p; typedef png_color_16 FAR * FAR * png_color_16pp; typedef struct png_color_8_struct { png_byte red; png_byte green; png_byte blue; png_byte gray; png_byte alpha; } png_color_8; typedef png_color_8 FAR * png_color_8p; typedef png_color_8 FAR * FAR * png_color_8pp; #define PNG_TEXT_COMPRESSION_NONE_WR -3 #define PNG_TEXT_COMPRESSION_zTXt_WR -2 #define PNG_TEXT_COMPRESSION_NONE -1 #define PNG_TEXT_COMPRESSION_zTXt 0 #define PNG_ITXT_COMPRESSION_NONE 1 #define PNG_ITXT_COMPRESSION_zTXt 2 #define PNG_TEXT_COMPRESSION_LAST 3 typedef struct png_time_struct { png_uint_16 year; png_byte month; png_byte day; png_byte hour; png_byte minute; png_byte second; } png_time; typedef png_time FAR * png_timep; typedef png_time FAR * FAR * png_timepp; typedef struct png_info_struct { png_uint_32 width; png_uint_32 height; png_uint_32 valid; png_uint_32 rowbytes; png_colorp palette; png_uint_16 num_palette; png_uint_16 num_trans; png_byte bit_depth; png_byte color_type; png_byte compression_type; png_byte filter_type; png_byte interlace_type; png_byte channels; png_byte pixel_depth; png_byte spare_byte; png_byte signature[8]; png_uint_32 free_me; #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \ defined(PNG_READ_BACKGROUND_SUPPORTED) png_bytep trans; png_color_16 trans_values; #endif #if defined(PNG_INFO_IMAGE_SUPPORTED) png_bytepp row_pointers; #endif } png_info; typedef png_info FAR * png_infop; typedef png_info FAR * FAR * png_infopp; #define PNG_MAX_UINT ((png_uint_32)0x7fffffffL) #define PNG_COLOR_MASK_PALETTE 1 #define PNG_COLOR_MASK_COLOR 2 #define PNG_COLOR_MASK_ALPHA 4 #define PNG_COLOR_TYPE_GRAY 0 #define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) #define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) #define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) #define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) #define PNG_COMPRESSION_TYPE_BASE 0 #define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE #define PNG_FILTER_TYPE_BASE 0 #define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE #define PNG_INTERLACE_NONE 0 #define PNG_INTERLACE_ADAM7 1 #define PNG_INTERLACE_LAST 2 #define PNG_INFO_gAMA 0x0001 #define PNG_INFO_sBIT 0x0002 #define PNG_INFO_cHRM 0x0004 #define PNG_INFO_PLTE 0x0008 #define PNG_INFO_tRNS 0x0010 #define PNG_INFO_bKGD 0x0020 #define PNG_INFO_hIST 0x0040 #define PNG_INFO_pHYs 0x0080 #define PNG_INFO_oFFs 0x0100 #define PNG_INFO_tIME 0x0200 #define PNG_INFO_pCAL 0x0400 #define PNG_INFO_sRGB 0x0800 #define PNG_INFO_iCCP 0x1000 #define PNG_INFO_sPLT 0x2000 #define PNG_INFO_sCAL 0x4000 #define PNG_INFO_IDAT 0x8000L typedef struct png_row_info_struct { png_uint_32 width; png_uint_32 rowbytes; png_byte color_type; png_byte bit_depth; png_byte channels; png_byte pixel_depth; } png_row_info; typedef png_row_info FAR * png_row_infop; typedef png_row_info FAR * FAR * png_row_infopp; typedef struct png_struct_def png_struct; typedef png_struct FAR * png_structp; typedef void (*png_error_ptr) PNGARG((png_structp, png_const_charp)); typedef void (*png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); typedef void (*png_flush_ptr) PNGARG((png_structp)); typedef void (*png_read_status_ptr) PNGARG((png_structp, png_uint_32, int)); typedef void (*png_write_status_ptr) PNGARG((png_structp, png_uint_32, int)); #define PNG_TRANSFORM_IDENTITY 0x0000 #define PNG_TRANSFORM_STRIP_16 0x0001 #define PNG_TRANSFORM_STRIP_ALPHA 0x0002 #define PNG_TRANSFORM_PACKING 0x0004 #define PNG_TRANSFORM_PACKSWAP 0x0008 #define PNG_TRANSFORM_EXPAND 0x0010 #define PNG_TRANSFORM_INVERT_MONO 0x0020 #define PNG_TRANSFORM_SHIFT 0x0040 #define PNG_TRANSFORM_BGR 0x0080 #define PNG_TRANSFORM_SWAP_ALPHA 0x0100 #define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 #define PNG_TRANSFORM_INVERT_ALPHA 0x0200 #define PNG_TRANSFORM_STRIP_FILLER 0x0800 typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); struct png_struct_def { #ifdef PNG_SETJMP_SUPPORTED jmp_buf jmpbuf; #endif png_error_ptr error_fn; png_error_ptr warning_fn; png_voidp error_ptr; png_rw_ptr write_data_fn; png_rw_ptr read_data_fn; png_voidp io_ptr; png_uint_32 mode; png_uint_32 flags; png_uint_32 free_me; png_uint_32 transformations; z_stream zstream; png_bytep zbuf; png_size_t zbuf_size; int zlib_level; int zlib_method; int zlib_window_bits; int zlib_mem_level; int zlib_strategy; png_uint_32 width; png_uint_32 height; png_uint_32 num_rows; png_uint_32 usr_width; png_uint_32 rowbytes; png_uint_32 irowbytes; png_uint_32 iwidth; png_uint_32 row_number; png_bytep prev_row; png_bytep row_buf; png_bytep sub_row; png_bytep up_row; png_bytep avg_row; png_bytep paeth_row; png_row_info row_info; png_uint_32 idat_size; png_uint_32 crc; png_colorp palette; png_uint_16 num_palette; png_uint_16 num_trans; png_byte chunk_name[5]; png_byte compression; png_byte filter; png_byte interlaced; png_byte pass; png_byte do_filter; png_byte color_type; png_byte bit_depth; png_byte usr_bit_depth; png_byte pixel_depth; png_byte channels; png_byte usr_channels; png_byte sig_bytes; #if defined(PNG_WRITE_FLUSH_SUPPORTED) png_flush_ptr output_flush_fn; png_uint_32 flush_dist; png_uint_32 flush_rows; #endif png_read_status_ptr read_row_fn; png_write_status_ptr write_row_fn; #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) png_bytepp offset_table_ptr; png_bytep offset_table; png_uint_16 offset_table_number; png_uint_16 offset_table_count; png_uint_16 offset_table_count_free; #endif #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_byte heuristic_method; png_byte num_prev_filters; png_bytep prev_filters; png_uint_16p filter_weights; png_uint_16p inv_filter_weights; png_uint_16p filter_costs; png_uint_16p inv_filter_costs; #endif #if defined(PNG_TIME_RFC1123_SUPPORTED) png_charp time_buffer; #endif #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) png_byte empty_plte_permitted; #endif }; typedef png_structp version_1_0_6; typedef png_struct FAR * FAR * png_structpp; extern PNG_EXPORT(png_structp,png_create_write_struct) PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn)); extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, png_bytep chunk_name, png_bytep data, png_size_t length)); extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, png_bytep chunk_name, png_uint_32 length)); extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_infop,png_create_info_struct) PNGARG((png_structp png_ptr)); extern void png_info_init PNGARG((png_infop info_ptr)); extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, png_infop info_ptr)); #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); #endif #if defined(PNG_WRITE_FLUSH_SUPPORTED) extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); #endif extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, png_bytep row)); extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, png_bytepp image)); extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, png_infop info_ptr)); extern PNG_EXPORT(void,png_destroy_write_struct) PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); extern void png_write_destroy PNGARG((png_structp png_ptr)); #define PNG_CRC_DEFAULT 0 #define PNG_CRC_ERROR_QUIT 1 #define PNG_CRC_WARN_DISCARD 2 #define PNG_CRC_WARN_USE 3 #define PNG_CRC_QUIET_USE 4 #define PNG_CRC_NO_CHANGE 5 #define PNG_NO_FILTERS 0x00 #define PNG_FILTER_NONE 0x08 #define PNG_FILTER_SUB 0x10 #define PNG_FILTER_UP 0x20 #define PNG_FILTER_AVG 0x40 #define PNG_FILTER_PAETH 0x80 #define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ PNG_FILTER_AVG | PNG_FILTER_PAETH) #define PNG_FILTER_VALUE_NONE 0 #define PNG_FILTER_VALUE_SUB 1 #define PNG_FILTER_VALUE_UP 2 #define PNG_FILTER_VALUE_AVG 3 #define PNG_FILTER_VALUE_PAETH 4 #define PNG_FILTER_VALUE_LAST 5 #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) #ifdef PNG_FLOATING_POINT_SUPPORTED extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, int heuristic_method, int num_weights, png_doublep filter_weights, png_doublep filter_costs)); #endif #endif #define PNG_FILTER_HEURISTIC_DEFAULT 0 #define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 #define PNG_FILTER_HEURISTIC_WEIGHTED 2 #define PNG_FILTER_HEURISTIC_LAST 3 extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, png_uint_32 size)); extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 free_me, int num)); #define PNG_FREE_PLTE 0x0001 #define PNG_FREE_TRNS 0x0002 #define PNG_FREE_TEXT 0x0004 #define PNG_FREE_HIST 0x0008 #define PNG_FREE_ICCP 0x0010 #define PNG_FREE_SPLT 0x0020 #define PNG_FREE_ROWS 0x0040 #define PNG_FREE_PCAL 0x0080 #define PNG_FREE_SCAL 0x0100 #define PNG_FREE_UNKN 0x0200 #define PNG_FREE_LIST 0x0400 #define PNG_FREE_ALL 0x07ff extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, png_voidp s1, png_voidp s2, png_uint_32 size)); #if defined(USE_FAR_KEYWORD) extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, int check)); #endif extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, png_const_charp error)); extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, png_const_charp error)); extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, png_const_charp message)); extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, png_const_charp message)); extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_type, int compression_type, int filter_type)); extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, png_infop info_ptr, png_colorp palette, int num_palette)); #if defined(PNG_tRNS_SUPPORTED) extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, png_infop info_ptr, png_bytep trans, int num_trans, png_color_16p trans_values)); #endif #if defined(PNG_INFO_IMAGE_SUPPORTED) extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, png_infop info_ptr, int transforms, voidp params)); #endif #define png_debug(l, m) #define png_debug1(l, m, p1) #define png_debug2(l, m, p1, p2) extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); #define PNG_HEADER_VERSION_STRING \ " libpng version 1.0.6 - March 21, 2000 (header)\n" #if defined(PNG_INTERNAL) #define PNG_HAVE_IHDR 0x01 #define PNG_HAVE_PLTE 0x02 #define PNG_HAVE_IDAT 0x04 #define PNG_AFTER_IDAT 0x08 #define PNG_HAVE_IEND 0x10 #define PNG_HAVE_gAMA 0x20 #define PNG_HAVE_cHRM 0x40 #define PNG_HAVE_sRGB 0x80 #define PNG_HAVE_CHUNK_HEADER 0x100 #define PNG_WROTE_tIME 0x200 #define PNG_WROTE_INFO_BEFORE_PLTE 0x400 #define PNG_BACKGROUND_IS_GRAY 0x800 #define PNG_BGR 0x0001 #define PNG_INTERLACE 0x0002 #define PNG_PACK 0x0004 #define PNG_SHIFT 0x0008 #define PNG_SWAP_BYTES 0x0010 #define PNG_INVERT_MONO 0x0020 #define PNG_DITHER 0x0040 #define PNG_BACKGROUND 0x0080 #define PNG_BACKGROUND_EXPAND 0x0100 #define PNG_16_TO_8 0x0400 #define PNG_RGBA 0x0800 #define PNG_EXPAND 0x1000 #define PNG_GAMMA 0x2000 #define PNG_GRAY_TO_RGB 0x4000 #define PNG_FILLER 0x8000L #define PNG_PACKSWAP 0x10000L #define PNG_SWAP_ALPHA 0x20000L #define PNG_STRIP_ALPHA 0x40000L #define PNG_INVERT_ALPHA 0x80000L #define PNG_USER_TRANSFORM 0x100000L #define PNG_RGB_TO_GRAY_ERR 0x200000L #define PNG_RGB_TO_GRAY_WARN 0x400000L #define PNG_RGB_TO_GRAY 0x600000L #define PNG_STRUCT_PNG 0x0001 #define PNG_STRUCT_INFO 0x0002 #define PNG_WEIGHT_SHIFT 8 #define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) #define PNG_COST_SHIFT 3 #define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) #define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 #define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 #define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 #define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 #define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 #define PNG_FLAG_ZLIB_FINISHED 0x0020 #define PNG_FLAG_ROW_INIT 0x0040 #define PNG_FLAG_FILLER_AFTER 0x0080 #define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 #define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 #define PNG_FLAG_CRC_CRITICAL_USE 0x0400 #define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x1000 #define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x2000 #define HANDLE_CHUNK_AS_DEFAULT 0 #define HANDLE_CHUNK_NEVER 1 #define HANDLE_CHUNK_IF_SAFE 2 #define HANDLE_CHUNK_ALWAYS 3 #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ PNG_FLAG_CRC_ANCILLARY_NOWARN) #define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ PNG_FLAG_CRC_CRITICAL_IGNORE) #define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ PNG_FLAG_CRC_CRITICAL_MASK) #define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ abs((int)((c1).green) - (int)((c2).green)) + \ abs((int)((c1).blue) - (int)((c2).blue))) #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) #ifdef PNG_USE_GLOBAL_ARRAYS PNG_EXPORT_VAR (png_byte FARDATA) png_sig[8]; #else #define png_sig png_sig_bytes(NULL) #endif #endif #define PNG_IHDR const png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} #define PNG_IDAT const png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} #define PNG_IEND const png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} #define PNG_PLTE const png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} #define PNG_bKGD const png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} #define PNG_cHRM const png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} #define PNG_gAMA const png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} #define PNG_hIST const png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} #define PNG_iCCP const png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} #define PNG_iTXt const png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} #define PNG_oFFs const png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} #define PNG_pCAL const png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} #define PNG_sCAL const png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} #define PNG_pHYs const png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} #define PNG_sBIT const png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} #define PNG_sPLT const png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} #define PNG_sRGB const png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} #define PNG_tEXt const png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} #define PNG_tIME const png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} #define PNG_tRNS const png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} #define PNG_zTXt const png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} #ifdef PNG_USE_GLOBAL_ARRAYS PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_IDAT[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_IEND[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_PLTE[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_bKGD[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_cHRM[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_gAMA[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_hIST[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_iCCP[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_iTXt[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_oFFs[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_pCAL[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sCAL[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_pHYs[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sBIT[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sPLT[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_sRGB[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_tEXt[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5]; PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5]; #endif /* PNG_USE_GLOBAL_ARRAYS */ PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, png_size_t length)); #if defined(PNG_WRITE_FLUSH_SUPPORTED) PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); #endif PNG_EXTERN void png_save_uint_32 PNGARG((png_bytep buf, png_uint_32 i)); PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int compression_type, int filter_type, int interlace_type)); PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)); PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, png_size_t length)); PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); #if defined(PNG_WRITE_tRNS_SUPPORTED) PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, png_color_16p values, int number, int color_type)); #endif PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, png_row_infop row_info)); PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, png_bytep filtered_row)); #if defined(PNG_WRITE_PACK_SUPPORTED) PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)); #endif PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); #endif /* PNG_INTERNAL */ #endif /* _PNG_H */ #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngconf.h000066400000000000000000000177341406366436600173320ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifdef HAVE_GD #include #else #ifndef PNGCONF_H #define PNGCONF_H #ifndef PNG_ZBUF_SIZE #define PNG_ZBUF_SIZE 8192 #endif #if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) #define PNG_MAX_MALLOC_64K #endif # ifdef PNG_NO_STDIO # ifndef PNG_NO_CONSOLE_IO # define PNG_NO_CONSOLE_IO # endif # ifdef PNG_DEBUG # if (PNG_DEBUG > 0) # include # endif # endif # else # include # endif #ifndef PNGARG #ifdef OF #define PNGARG(arglist) OF(arglist) #else #ifdef _NO_PROTO #define PNGARG(arglist) () #else #define PNGARG(arglist) arglist #endif #endif /* OF */ #endif /* PNGARG */ #ifndef MACOS #if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) #define MACOS #endif #endif #if !defined(MACOS) && !defined(RISCOS) #include #endif #ifndef PNG_SETJMP_NOT_SUPPORTED # define PNG_SETJMP_SUPPORTED #endif #ifdef PNG_SETJMP_SUPPORTED # ifdef __linux__ # ifdef _BSD_SOURCE # define _PNG_SAVE_BSD_SOURCE # undef _BSD_SOURCE # endif # ifdef _SETJMP_H __png.h__ already includes setjmp.h __dont__ include it again # endif #endif /* __linux__ */ #include # ifdef __linux__ # ifdef _PNG_SAVE_BSD_SOURCE # define _BSD_SOURCE # undef _PNG_SAVE_BSD_SOURCE # endif # endif /* __linux__ */ #endif /* PNG_SETJMP_SUPPORTED */ #ifdef BSD #include #else #include #endif #ifdef PNG_INTERNAL #include #define PNG_EXTERN #if !defined(PNG_NO_FLOATING_POINT_SUPPORTED) #if defined(MACOS) #if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) #include #endif #else #include #endif #endif #if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) #define PNG_ALWAYS_EXTERN #endif #ifdef __TURBOC__ #include #include "alloc.h" #endif #ifdef _MSC_VER #include #endif #ifndef PNG_DITHER_RED_BITS #define PNG_DITHER_RED_BITS 5 #endif #ifndef PNG_DITHER_GREEN_BITS #define PNG_DITHER_GREEN_BITS 5 #endif #ifndef PNG_DITHER_BLUE_BITS #define PNG_DITHER_BLUE_BITS 5 #endif #ifndef PNG_MAX_GAMMA_8 #define PNG_MAX_GAMMA_8 11 #endif #ifndef PNG_GAMMA_THRESHOLD #define PNG_GAMMA_THRESHOLD 0.05 #endif #endif /* PNG_INTERNAL */ #ifndef PNG_NO_CONST # define PNG_CONST const #else # define PNG_CONST #endif #define PNG_WRITE_PACK_SUPPORTED #define PNG_tRNS_SUPPORTED #ifndef PNG_NO_WRITE_WEIGHTED_FILTER #define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED #endif #ifndef PNG_NO_WRITE_FLUSH #define PNG_WRITE_FLUSH_SUPPORTED #endif #ifndef PNG_NO_WRITE_EMPTY_PLTE #define PNG_WRITE_EMPTY_PLTE_SUPPORTED #endif #ifndef PNG_NO_STDIO #define PNG_TIME_RFC1123_SUPPORTED #endif #if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD) && \ !defined(PNG_NO_ASSEMBLER_CODE) #define PNG_ASSEMBLER_CODE_SUPPORTED #endif #ifndef PNG_NO_FLOATING_POINT_SUPPORTED #define PNG_FLOATING_POINT_SUPPORTED #endif #ifndef PNG_NO_FIXED_POINT_SUPPORTED #define PNG_FIXED_POINT_SUPPORTED #endif #ifdef PNG_NO_GLOBAL_ARRAYS # define PNG_USE_LOCAL_ARRAYS #else # if defined(__GNUC__) && defined(WIN32) # define PNG_NO_GLOBAL_ARRAYS # define PNG_USE_LOCAL_ARRAYS # else # define PNG_USE_GLOBAL_ARRAYS # endif #endif #ifndef PNG_NO_INFO_IMAGE # define PNG_INFO_IMAGE_SUPPORTED #endif #if defined(PNG_tIME_SUPPORTED) # include #endif typedef unsigned long png_uint_32; typedef long png_int_32; typedef unsigned short png_uint_16; typedef short png_int_16; typedef unsigned char png_byte; typedef size_t png_size_t; #ifdef __BORLANDC__ #if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) #define LDATA 1 #else #define LDATA 0 #endif #if !defined(__WIN32__) && !defined(__FLAT__) #define PNG_MAX_MALLOC_64K #if (LDATA != 1) #ifndef FAR #define FAR __far #endif #define USE_FAR_KEYWORD #endif /* LDATA != 1 */ #endif /* __WIN32__, __FLAT__ */ #endif /* __BORLANDC__ */ #if defined(FAR) # if defined(M_I86MM) # define USE_FAR_KEYWORD # define FARDATA FAR # include # endif #endif #ifndef FAR # define FAR #endif #ifndef FARDATA #define FARDATA #endif typedef png_int_32 png_fixed_point; typedef void FAR * png_voidp; typedef png_byte FAR * png_bytep; typedef png_uint_32 FAR * png_uint_32p; typedef png_int_32 FAR * png_int_32p; typedef png_uint_16 FAR * png_uint_16p; typedef png_int_16 FAR * png_int_16p; typedef PNG_CONST char FAR * png_const_charp; typedef char FAR * png_charp; typedef png_fixed_point FAR * png_fixed_point_p; #ifdef PNG_FLOATING_POINT_SUPPORTED typedef double FAR * png_doublep; #endif typedef png_byte FAR * FAR * png_bytepp; typedef png_uint_32 FAR * FAR * png_uint_32pp; typedef png_int_32 FAR * FAR * png_int_32pp; typedef png_uint_16 FAR * FAR * png_uint_16pp; typedef png_int_16 FAR * FAR * png_int_16pp; typedef PNG_CONST char FAR * FAR * png_const_charpp; typedef char FAR * FAR * png_charpp; typedef png_fixed_point FAR * FAR * png_fixed_point_pp; #ifdef PNG_FLOATING_POINT_SUPPORTED typedef double FAR * FAR * png_doublepp; #endif typedef char FAR * FAR * FAR * png_charppp; typedef charf * png_zcharp; typedef charf * FAR * png_zcharpp; typedef z_stream FAR * png_zstreamp; #ifndef PNG_EXPORT # if defined(_MSC_VER) && defined(_DLL) # define PNG_EXPORT(type,symbol) type __declspec(dllexport) symbol # endif # ifdef __WIN32DLL__ # define PNG_EXPORT(type,symbol) __declspec(dllexport) type symbol # endif # ifdef ALT_WIN32_DLL # define PNG_EXPORT(type,symbol) type __attribute__((dllexport)) symbol # endif # if defined(__BORLANDC__) && defined(_Windows) && defined(__DLL__) # define PNG_EXPORT(type,symbol) type _export symbol # endif # ifdef __BEOSDLL__ # define PNG_EXPORT(type,symbol) __declspec(export) type symbol # endif #endif #ifndef PNG_EXPORT # define PNG_EXPORT(type,symbol) type symbol #endif #if defined(__MINGW32__) || defined(__CYGWIN32__) # define PNG_ATTR_DLLIMP #endif #ifndef PNG_EXPORT_VAR # if defined(_MSC_VER) && defined(_DLL) # define PNG_EXPORT_VAR(type) extern type __declspec(dllexport) # endif # ifdef PNG_DECL_DLLEXP # define PNG_EXPORT_VAR(type) extern __declspec(dllexport) type # endif # ifdef PNG_ATTR_DLLEXP # define PNG_EXPORT_VAR(type) extern type __attribute__((dllexport)) # endif # ifdef PNG_DECL_DLLIMP # define PNG_EXPORT_VAR(type) extern __declspec(dllimport) type # endif # ifdef PNG_ATTR_DLLIMP # define PNG_EXPORT_VAR(type) extern type __attribute__((dllimport)) # endif #endif #ifndef PNG_EXPORT_VAR # define PNG_EXPORT_VAR(type) extern type #endif #ifndef PNG_ABORT # define PNG_ABORT() abort() #endif #ifdef PNG_SETJMP_SUPPORTED # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) #else # define png_jmpbuf(png_ptr) \ (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) #endif #if defined(USE_FAR_KEYWORD) # define CHECK 1 # define NOCHECK 0 # define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) # define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) # define png_strcpy _fstrcpy # define png_strlen _fstrlen # define png_memcmp _fmemcmp # define png_memcpy _fmemcpy # define png_memset _fmemset #else # define CVT_PTR(ptr) (ptr) # define CVT_PTR_NOCHECK(ptr) (ptr) # define png_strcpy strcpy # define png_strlen strlen # define png_memcmp memcmp # define png_memcpy memcpy # define png_memset memset #endif #if (PNG_ZBUF_SIZE > 65536) && defined(PNG_MAX_MALLOC_64K) #undef PNG_ZBUF_SIZE #define PNG_ZBUF_SIZE 65536 #endif #endif /* PNGCONF_H */ #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngerror.c000066400000000000000000000062431406366436600175220ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" static void png_default_error PNGARG((png_structp png_ptr, png_const_charp message)); static void png_default_warning PNGARG((png_structp png_ptr, png_const_charp message)); void png_error(png_structp png_ptr, png_const_charp message) { if (png_ptr->error_fn != NULL) (*(png_ptr->error_fn))(png_ptr, message); png_default_error(png_ptr, message); } void png_warning(png_structp png_ptr, png_const_charp message) { if (png_ptr->warning_fn != NULL) (*(png_ptr->warning_fn))(png_ptr, message); else png_default_warning(png_ptr, message); } #define isnonalpha(c) ((c) < 41 || (c) > 122 || ((c) > 90 && (c) < 97)) static PNG_CONST char png_digit[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static void png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp message) { int iout = 0, iin = 0; while (iin < 4) { int c = png_ptr->chunk_name[iin++]; if (isnonalpha(c)) { buffer[iout++] = '['; buffer[iout++] = png_digit[(c & 0xf0) >> 4]; buffer[iout++] = png_digit[c & 0x0f]; buffer[iout++] = ']'; } else { buffer[iout++] = (png_byte)c; } } if (message == NULL) buffer[iout] = 0; else { buffer[iout++] = ':'; buffer[iout++] = ' '; png_memcpy(buffer+iout, message, 64); buffer[iout+63] = 0; } } void png_chunk_error(png_structp png_ptr, png_const_charp message) { char msg[16+64]; png_format_buffer(png_ptr, msg, message); png_error(png_ptr, msg); } void png_chunk_warning(png_structp png_ptr, png_const_charp message) { char msg[16+64]; png_format_buffer(png_ptr, msg, message); png_warning(png_ptr, msg); } static void png_default_error(png_structp png_ptr, png_const_charp message) { #ifndef PNG_NO_CONSOLE_IO fprintf(stderr, "libpng error: %s\n", message); #endif #ifdef PNG_SETJMP_SUPPORTED # ifdef USE_FAR_KEYWORD { jmp_buf jmpbuf; png_memcpy(jmpbuf,png_ptr->jmpbuf,sizeof(jmp_buf)); longjmp(jmpbuf, 1); } # else longjmp(png_ptr->jmpbuf, 1); # endif #else if (png_ptr == NULL) PNG_ABORT(); #endif } static void png_default_warning(png_structp png_ptr, png_const_charp message) { #ifndef PNG_NO_CONSOLE_IO fprintf(stderr, "libpng warning: %s\n", message); #endif if (png_ptr == NULL) return; } void png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn) { png_ptr->error_ptr = error_ptr; png_ptr->error_fn = error_fn; png_ptr->warning_fn = warning_fn; } png_voidp png_get_error_ptr(png_structp png_ptr) { return ((png_voidp)png_ptr->error_ptr); } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngmem.c000066400000000000000000000151461406366436600171510ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" /* This paragraph added for analog by Jason Linhart */ #ifdef MACOS extern void *mac_png_malloc(unsigned long size); extern void mac_png_free(void *ptr); #define malloc(size) mac_png_malloc(size) #define free(ptr) mac_png_free(ptr) #endif #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) png_voidp png_create_struct(int type) { png_size_t size; png_voidp struct_ptr; if (type == PNG_STRUCT_INFO) size = sizeof(png_info); else if (type == PNG_STRUCT_PNG) size = sizeof(png_struct); else return ((png_voidp)NULL); if ((struct_ptr = (png_voidp)farmalloc(size)) != NULL) { png_memset(struct_ptr, 0, size); } return (struct_ptr); } void png_destroy_struct(png_voidp struct_ptr) { if (struct_ptr != NULL) { farfree (struct_ptr); } } png_voidp png_malloc(png_structp png_ptr, png_uint_32 size) { png_voidp ret; if (png_ptr == NULL || size == 0) return ((png_voidp)NULL); #ifdef PNG_MAX_MALLOC_64K if (size > (png_uint_32)65536L) png_error(png_ptr, "Cannot Allocate > 64K"); #endif if (size == (png_uint_32)65536L) { if (png_ptr->offset_table == NULL) { ret = farmalloc(size); if (ret == NULL || ((png_size_t)ret & 0xffff)) { int num_blocks; png_uint_32 total_size; png_bytep table; int i; png_byte huge * hptr; if (ret != NULL) { farfree(ret); ret = NULL; } if(png_ptr->zlib_window_bits > 14) num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14)); else num_blocks = 1; if (png_ptr->zlib_mem_level >= 7) num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7)); else num_blocks++; total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16; table = farmalloc(total_size); if (table == NULL) { png_error(png_ptr, "Out Of Memory."); } if ((png_size_t)table & 0xfff0) { png_error(png_ptr, "Farmalloc didn't return normalized pointer"); } png_ptr->offset_table = table; png_ptr->offset_table_ptr = farmalloc(num_blocks * sizeof (png_bytep)); if (png_ptr->offset_table_ptr == NULL) { png_error(png_ptr, "Out Of memory."); } hptr = (png_byte huge *)table; if ((png_size_t)hptr & 0xf) { hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L); hptr = hptr + 16L; } for (i = 0; i < num_blocks; i++) { png_ptr->offset_table_ptr[i] = (png_bytep)hptr; hptr = hptr + (png_uint_32)65536L; } png_ptr->offset_table_number = num_blocks; png_ptr->offset_table_count = 0; png_ptr->offset_table_count_free = 0; } } if (png_ptr->offset_table_count >= png_ptr->offset_table_number) png_error(png_ptr, "Out of Memory."); ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++]; } else ret = farmalloc(size); if (ret == NULL) { png_error(png_ptr, "Out of memory."); } return (ret); } void png_free(png_structp png_ptr, png_voidp ptr) { if (png_ptr == NULL || ptr == NULL) return; if (png_ptr->offset_table != NULL) { int i; for (i = 0; i < png_ptr->offset_table_count; i++) { if (ptr == png_ptr->offset_table_ptr[i]) { ptr = NULL; png_ptr->offset_table_count_free++; break; } } if (png_ptr->offset_table_count_free == png_ptr->offset_table_count) { farfree(png_ptr->offset_table); farfree(png_ptr->offset_table_ptr); png_ptr->offset_table = NULL; png_ptr->offset_table_ptr = NULL; } } if (ptr != NULL) { farfree(ptr); } } #else /* Not the Borland DOS special memory handler */ png_voidp png_create_struct(int type) { png_size_t size; png_voidp struct_ptr; if (type == PNG_STRUCT_INFO) size = sizeof(png_info); else if (type == PNG_STRUCT_PNG) size = sizeof(png_struct); else return ((png_voidp)NULL); #if defined(__TURBOC__) && !defined(__FLAT__) if ((struct_ptr = (png_voidp)farmalloc(size)) != NULL) #else # if defined(_MSC_VER) && defined(MAXSEG_64K) if ((struct_ptr = (png_voidp)halloc(size,1)) != NULL) # else if ((struct_ptr = (png_voidp)malloc(size)) != NULL) # endif #endif { png_memset(struct_ptr, 0, size); } return (struct_ptr); } void png_destroy_struct(png_voidp struct_ptr) { if (struct_ptr != NULL) { #if defined(__TURBOC__) && !defined(__FLAT__) farfree(struct_ptr); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) hfree(struct_ptr); # else free(struct_ptr); # endif #endif } } png_voidp png_malloc(png_structp png_ptr, png_uint_32 size) { png_voidp ret; if (png_ptr == NULL || size == 0) return ((png_voidp)NULL); #ifdef PNG_MAX_MALLOC_64K if (size > (png_uint_32)65536L) png_error(png_ptr, "Cannot Allocate > 64K"); #endif #if defined(__TURBOC__) && !defined(__FLAT__) ret = farmalloc(size); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) ret = halloc(size, 1); # else ret = malloc((size_t)size); # endif #endif if (ret == NULL) { png_error(png_ptr, "Out of Memory"); } return (ret); } void png_free(png_structp png_ptr, png_voidp ptr) { if (png_ptr == NULL || ptr == NULL) return; #if defined(__TURBOC__) && !defined(__FLAT__) farfree(ptr); #else # if defined(_MSC_VER) && defined(MAXSEG_64K) hfree(ptr); # else free(ptr); # endif #endif } #endif /* Not Borland DOS special memory handler */ png_voidp png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2, png_uint_32 length) { png_size_t size; size = (png_size_t)length; if ((png_uint_32)size != length) png_error(png_ptr,"Overflow in png_memcpy_check."); return(png_memcpy (s1, s2, size)); } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngset.c000066400000000000000000000052731406366436600171660ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" void png_set_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int interlace_type, int compression_type, int filter_type) { int rowbytes_per_pixel; png_debug1(1, "in %s storage function\n", "IHDR"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->width = width; info_ptr->height = height; info_ptr->bit_depth = (png_byte)bit_depth; info_ptr->color_type =(png_byte) color_type; info_ptr->compression_type = (png_byte)compression_type; info_ptr->filter_type = (png_byte)filter_type; info_ptr->interlace_type = (png_byte)interlace_type; if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) info_ptr->channels = 1; else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) info_ptr->channels = 3; else info_ptr->channels = 1; if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) info_ptr->channels++; info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth); rowbytes_per_pixel = (info_ptr->pixel_depth + 7) >> 3; if (( width > PNG_MAX_UINT/rowbytes_per_pixel)) { png_warning(png_ptr, "Width too large to process image data; rowbytes will overflow."); info_ptr->rowbytes = (png_size_t)0; } else info_ptr->rowbytes = (info_ptr->width * info_ptr->pixel_depth + 7) >> 3; } void png_set_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp palette, int num_palette) { png_debug1(1, "in %s storage function\n", "PLTE"); if (png_ptr == NULL || info_ptr == NULL) return; info_ptr->palette = palette; info_ptr->num_palette = (png_uint_16)num_palette; info_ptr->valid |= PNG_INFO_PLTE; } #if defined(PNG_tRNS_SUPPORTED) void png_set_tRNS(png_structp png_ptr, png_infop info_ptr, png_bytep trans, int num_trans, png_color_16p trans_values) { png_debug1(1, "in %s storage function\n", "tRNS"); if (png_ptr == NULL || info_ptr == NULL) return; if (trans != NULL) info_ptr->trans = trans; if (trans_values != NULL) { png_memcpy(&(info_ptr->trans_values), trans_values, sizeof(png_color_16)); if (num_trans == 0) num_trans = 1; } info_ptr->num_trans = (png_uint_16)num_trans; info_ptr->valid |= PNG_INFO_tRNS; } #endif #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngtrans.c000066400000000000000000000013121406366436600175100ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) void png_set_packing(png_structp png_ptr) { png_debug(1, "in png_set_packing\n"); if (png_ptr->bit_depth < 8) { png_ptr->transformations |= PNG_PACK; png_ptr->usr_bit_depth = 8; } } #endif #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngwio.c000066400000000000000000000075741406366436600171770ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" void png_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { if (png_ptr->write_data_fn != NULL ) (*(png_ptr->write_data_fn))(png_ptr, data, length); else png_error(png_ptr, "Call to NULL write function"); } #if !defined(PNG_NO_STDIO) #ifndef USE_FAR_KEYWORD static void png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { png_uint_32 check; check = fwrite(data, 1, length, (FILE *)(png_ptr->io_ptr)); if (check != length) { png_error(png_ptr, "Write Error"); } } #else #define NEAR_BUF_SIZE 1024 #define MIN(a,b) (a <= b ? a : b) static void png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { png_uint_32 check; png_byte *near_data; FILE *io_ptr; near_data = (png_byte *)CVT_PTR_NOCHECK(data); io_ptr = (FILE *)CVT_PTR(png_ptr->io_ptr); if ((png_bytep)near_data == data) { check = fwrite(near_data, 1, length, io_ptr); } else { png_byte buf[NEAR_BUF_SIZE]; png_size_t written, remaining, err; check = 0; remaining = length; do { written = MIN(NEAR_BUF_SIZE, remaining); png_memcpy(buf, data, written); err = fwrite(buf, 1, written, io_ptr); if (err != written) break; else check += err; data += written; remaining -= written; } while (remaining != 0); } if (check != length) { png_error(png_ptr, "Write Error"); } } #endif #endif #if defined(PNG_WRITE_FLUSH_SUPPORTED) void png_flush(png_structp png_ptr) { if (png_ptr->output_flush_fn != NULL) (*(png_ptr->output_flush_fn))(png_ptr); } #if !defined(PNG_NO_STDIO) static void png_default_flush(png_structp png_ptr) { FILE *io_ptr; io_ptr = (FILE *)CVT_PTR((png_ptr->io_ptr)); if (io_ptr != NULL) fflush(io_ptr); } #endif #endif void png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) { png_ptr->io_ptr = io_ptr; #if !defined(PNG_NO_STDIO) if (write_data_fn != NULL) png_ptr->write_data_fn = write_data_fn; else png_ptr->write_data_fn = png_default_write_data; #else png_ptr->write_data_fn = write_data_fn; #endif #if defined(PNG_WRITE_FLUSH_SUPPORTED) #if !defined(PNG_NO_STDIO) if (output_flush_fn != NULL) png_ptr->output_flush_fn = output_flush_fn; else png_ptr->output_flush_fn = png_default_flush; #else png_ptr->output_flush_fn = output_flush_fn; #endif #endif if (png_ptr->read_data_fn != NULL) { png_ptr->read_data_fn = NULL; png_warning(png_ptr, "Attempted to set both read_data_fn and write_data_fn in"); png_warning(png_ptr, "the same structure. Resetting read_data_fn to NULL."); } } #if defined(USE_FAR_KEYWORD) #if defined(_MSC_VER) void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) { void *near_ptr; void FAR *far_ptr; FP_OFF(near_ptr) = FP_OFF(ptr); far_ptr = (void FAR *)near_ptr; if(check != 0) if(FP_SEG(ptr) != FP_SEG(far_ptr)) png_error(png_ptr,"segment lost in conversion"); return(near_ptr); } #else void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) { void *near_ptr; void FAR *far_ptr; near_ptr = (void FAR *)ptr; far_ptr = (void FAR *)near_ptr; if(check != 0) if(far_ptr != ptr) png_error(png_ptr,"segment lost in conversion"); return(near_ptr); } #endif #endif #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngwrite.c000066400000000000000000000263331406366436600175250ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" void png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_write_info_before_PLTE\n"); if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE)) { png_write_sig(png_ptr); png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height, info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type, info_ptr->filter_type, 0); png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE; } } void png_write_info(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_write_info\n"); png_write_info_before_PLTE(png_ptr, info_ptr); if (info_ptr->valid & PNG_INFO_PLTE) png_write_PLTE(png_ptr, info_ptr->palette, (png_uint_32)info_ptr->num_palette); else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) png_error(png_ptr, "Valid palette required for paletted images\n"); #if defined(PNG_WRITE_tRNS_SUPPORTED) if (info_ptr->valid & PNG_INFO_tRNS) { png_write_tRNS(png_ptr, info_ptr->trans, &(info_ptr->trans_values), info_ptr->num_trans, info_ptr->color_type); } #endif } void png_write_end(png_structp png_ptr, png_infop info_ptr) { png_debug(1, "in png_write_end\n"); if (!(png_ptr->mode & PNG_HAVE_IDAT)) png_error(png_ptr, "No IDATs written into file"); png_ptr->mode |= PNG_AFTER_IDAT; png_write_IEND(png_ptr); } png_structp png_create_write_struct(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn) { png_structp png_ptr; #ifdef PNG_SETJMP_SUPPORTED #ifdef USE_FAR_KEYWORD jmp_buf jmpbuf; #endif #endif png_debug(1, "in png_create_write_struct\n"); if ((png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG)) == NULL) { return ((png_structp)NULL); } #ifdef PNG_SETJMP_SUPPORTED #ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf)) #else if (setjmp(png_ptr->jmpbuf)) #endif { png_free(png_ptr, png_ptr->zbuf); png_destroy_struct(png_ptr); return ((png_structp)NULL); } #ifdef USE_FAR_KEYWORD png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf)); #endif #endif png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn); if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] || (png_libpng_ver[0] == '0' && user_png_ver[2] < '9')) { png_error(png_ptr, "Incompatible libpng version in application and library"); } png_ptr->zbuf_size = PNG_ZBUF_SIZE; png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); png_set_write_fn(png_ptr, NULL, NULL, NULL); #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT, 1, NULL, NULL); #endif return ((png_structp)png_ptr); } void png_write_image(png_structp png_ptr, png_bytepp image) { png_uint_32 i; int pass, num_pass; png_bytepp rp; png_debug(1, "in png_write_image\n"); num_pass = 1; for (pass = 0; pass < num_pass; pass++) { for (i = 0, rp = image; i < png_ptr->height; i++, rp++) { png_write_row(png_ptr, *rp); } } } void png_write_row(png_structp png_ptr, png_bytep row) { png_debug2(1, "in png_write_row (row %ld, pass %d)\n", png_ptr->row_number, png_ptr->pass); if (png_ptr->row_number == 0 && png_ptr->pass == 0) { png_write_start_row(png_ptr); } png_ptr->row_info.color_type = png_ptr->color_type; png_ptr->row_info.width = png_ptr->usr_width; png_ptr->row_info.channels = png_ptr->usr_channels; png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth; png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth * png_ptr->row_info.channels); png_ptr->row_info.rowbytes = ((png_ptr->row_info.width * (png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3); png_debug1(3, "row_info->color_type = %d\n", png_ptr->row_info.color_type); png_debug1(3, "row_info->width = %d\n", png_ptr->row_info.width); png_debug1(3, "row_info->channels = %d\n", png_ptr->row_info.channels); png_debug1(3, "row_info->bit_depth = %d\n", png_ptr->row_info.bit_depth); png_debug1(3, "row_info->pixel_depth = %d\n", png_ptr->row_info.pixel_depth); png_debug1(3, "row_info->rowbytes = %d\n", png_ptr->row_info.rowbytes); png_memcpy_check(png_ptr, png_ptr->row_buf + 1, row, png_ptr->row_info.rowbytes); if (png_ptr->transformations) png_do_write_transformations(png_ptr); png_write_find_filter(png_ptr, &(png_ptr->row_info)); if (png_ptr->write_row_fn != NULL) (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass); } #if defined(PNG_WRITE_FLUSH_SUPPORTED) void png_write_flush(png_structp png_ptr) { int wrote_IDAT; png_debug(1, "in png_write_flush\n"); if (png_ptr->row_number >= png_ptr->num_rows) return; do { int ret; ret = deflate(&png_ptr->zstream, Z_SYNC_FLUSH); wrote_IDAT = 0; if (ret != Z_OK) { if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } if (!(png_ptr->zstream.avail_out)) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; wrote_IDAT = 1; } } while(wrote_IDAT == 1); if (png_ptr->zbuf_size != png_ptr->zstream.avail_out) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } png_ptr->flush_rows = 0; png_flush(png_ptr); } #endif /* PNG_WRITE_FLUSH_SUPPORTED */ void png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr) { png_structp png_ptr = NULL; png_infop info_ptr = NULL; png_debug(1, "in png_destroy_write_struct\n"); if (png_ptr_ptr != NULL) { png_ptr = *png_ptr_ptr; } if (info_ptr_ptr != NULL) info_ptr = *info_ptr_ptr; if (info_ptr != NULL) { png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); png_destroy_struct((png_voidp)info_ptr); *info_ptr_ptr = (png_infop)NULL; } if (png_ptr != NULL) { png_write_destroy(png_ptr); png_destroy_struct((png_voidp)png_ptr); *png_ptr_ptr = (png_structp)NULL; } } void png_write_destroy(png_structp png_ptr) { #ifdef PNG_SETJMP_SUPPORTED jmp_buf tmp_jmp; #endif png_error_ptr error_fn; png_error_ptr warning_fn; png_voidp error_ptr; png_debug(1, "in png_write_destroy\n"); deflateEnd(&png_ptr->zstream); png_free(png_ptr, png_ptr->zbuf); png_free(png_ptr, png_ptr->row_buf); png_free(png_ptr, png_ptr->prev_row); png_free(png_ptr, png_ptr->sub_row); png_free(png_ptr, png_ptr->up_row); png_free(png_ptr, png_ptr->avg_row); png_free(png_ptr, png_ptr->paeth_row); #if defined(PNG_TIME_RFC1123_SUPPORTED) png_free(png_ptr, png_ptr->time_buffer); #endif #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) png_free(png_ptr, png_ptr->prev_filters); png_free(png_ptr, png_ptr->filter_weights); png_free(png_ptr, png_ptr->inv_filter_weights); png_free(png_ptr, png_ptr->filter_costs); png_free(png_ptr, png_ptr->inv_filter_costs); #endif #ifdef PNG_SETJMP_SUPPORTED png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf)); #endif error_fn = png_ptr->error_fn; warning_fn = png_ptr->warning_fn; error_ptr = png_ptr->error_ptr; png_memset(png_ptr, 0, sizeof (png_struct)); png_ptr->error_fn = error_fn; png_ptr->warning_fn = warning_fn; png_ptr->error_ptr = error_ptr; #ifdef PNG_SETJMP_SUPPORTED png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf)); #endif } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) void png_set_filter_heuristics(png_structp png_ptr, int heuristic_method, int num_weights, png_doublep filter_weights, png_doublep filter_costs) { int i; png_debug(1, "in png_set_filter_heuristics\n"); if (heuristic_method >= PNG_FILTER_HEURISTIC_LAST) { png_warning(png_ptr, "Unknown filter heuristic method"); return; } if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT) { heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED; } if (num_weights < 0 || filter_weights == NULL || heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED) { num_weights = 0; } png_ptr->num_prev_filters = (png_byte)num_weights; png_ptr->heuristic_method = (png_byte)heuristic_method; if (num_weights > 0) { if (png_ptr->prev_filters == NULL) { png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr, (png_uint_32)(sizeof(png_byte) * num_weights)); for (i = 0; i < num_weights; i++) { png_ptr->prev_filters[i] = 255; } } if (png_ptr->filter_weights == NULL) { png_ptr->filter_weights = (png_uint_16p) png_malloc(png_ptr, (png_uint_32)(sizeof(png_uint_16) * num_weights)); png_ptr->inv_filter_weights = (png_uint_16p) png_malloc(png_ptr, (png_uint_32)(sizeof(png_uint_16) * num_weights)); for (i = 0; i < num_weights; i++) { png_ptr->inv_filter_weights[i] = png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR; } } for (i = 0; i < num_weights; i++) { if (filter_weights[i] < 0.0) { png_ptr->inv_filter_weights[i] = png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR; } else { png_ptr->inv_filter_weights[i] = (png_uint_16)((double)PNG_WEIGHT_FACTOR*filter_weights[i]+0.5); png_ptr->filter_weights[i] = (png_uint_16)((double)PNG_WEIGHT_FACTOR/filter_weights[i]+0.5); } } } if (png_ptr->filter_costs == NULL) { png_ptr->filter_costs = (png_uint_16p) png_malloc(png_ptr, (png_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST)); png_ptr->inv_filter_costs = (png_uint_16p) png_malloc(png_ptr, (png_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST)); for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) { png_ptr->inv_filter_costs[i] = png_ptr->filter_costs[i] = PNG_COST_FACTOR; } } for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) { if (filter_costs == NULL || filter_costs[i] < 0.0) { png_ptr->inv_filter_costs[i] = png_ptr->filter_costs[i] = PNG_COST_FACTOR; } else if (filter_costs[i] >= 1.0) { png_ptr->inv_filter_costs[i] = (png_uint_16)((double)PNG_COST_FACTOR / filter_costs[i] + 0.5); png_ptr->filter_costs[i] = (png_uint_16)((double)PNG_COST_FACTOR * filter_costs[i] + 0.5); } } } #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngwtran.c000066400000000000000000000071151406366436600175230ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" void png_do_write_transformations(png_structp png_ptr) { png_debug(1, "in png_do_write_transformations\n"); if (png_ptr == NULL) return; #if defined(PNG_WRITE_PACK_SUPPORTED) if (png_ptr->transformations & PNG_PACK) png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1, (png_uint_32)png_ptr->bit_depth); #endif } #if defined(PNG_WRITE_PACK_SUPPORTED) void png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth) { png_debug(1, "in png_do_pack\n"); if (row_info->bit_depth == 8 && #if defined(PNG_USELESS_TESTS_SUPPORTED) row != NULL && row_info != NULL && #endif row_info->channels == 1) { switch ((int)bit_depth) { case 1: { png_bytep sp, dp; int mask, v; png_uint_32 i; png_uint_32 row_width = row_info->width; sp = row; dp = row; mask = 0x80; v = 0; for (i = 0; i < row_width; i++) { if (*sp != 0) v |= mask; sp++; if (mask > 1) mask >>= 1; else { mask = 0x80; *dp = (png_byte)v; dp++; v = 0; } } if (mask != 0x80) *dp = (png_byte)v; break; } case 2: { png_bytep sp, dp; int shift, v; png_uint_32 i; png_uint_32 row_width = row_info->width; sp = row; dp = row; shift = 6; v = 0; for (i = 0; i < row_width; i++) { png_byte value; value = (png_byte)(*sp & 0x03); v |= (value << shift); if (shift == 0) { shift = 6; *dp = (png_byte)v; dp++; v = 0; } else shift -= 2; sp++; } if (shift != 6) *dp = (png_byte)v; break; } case 4: { png_bytep sp, dp; int shift, v; png_uint_32 i; png_uint_32 row_width = row_info->width; sp = row; dp = row; shift = 4; v = 0; for (i = 0; i < row_width; i++) { png_byte value; value = (png_byte)(*sp & 0x0f); v |= (value << shift); if (shift == 0) { shift = 4; *dp = (png_byte)v; dp++; v = 0; } else shift -= 4; sp++; } if (shift != 4) *dp = (png_byte)v; break; } } row_info->bit_depth = (png_byte)bit_depth; row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels); row_info->rowbytes = ((row_info->width * row_info->pixel_depth + 7) >> 3); } } #endif #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/libpng/pngwutil.c000066400000000000000000000661601406366436600175410ustar00rootroot00000000000000/********************************* * PNG Graphics Library * *********************************/ /* This file contains code from the PNG reference library, heavily modified by Stephen Turner for use in analog. See the file LICENSE in this directory for details and copyright statement. */ #ifndef NOGRAPHICS #ifndef HAVE_GD #define PNG_INTERNAL #include "png.h" void png_save_uint_32(png_bytep buf, png_uint_32 i) { buf[0] = (png_byte)((i >> 24) & 0xff); buf[1] = (png_byte)((i >> 16) & 0xff); buf[2] = (png_byte)((i >> 8) & 0xff); buf[3] = (png_byte)(i & 0xff); } void png_write_chunk(png_structp png_ptr, png_bytep chunk_name, png_bytep data, png_size_t length) { png_write_chunk_start(png_ptr, chunk_name, (png_uint_32)length); png_write_chunk_data(png_ptr, data, length); png_write_chunk_end(png_ptr); } void png_write_chunk_start(png_structp png_ptr, png_bytep chunk_name, png_uint_32 length) { png_byte buf[4]; png_debug2(0, "Writing %s chunk (%d bytes)\n", chunk_name, length); png_save_uint_32(buf, length); png_write_data(png_ptr, buf, (png_size_t)4); png_write_data(png_ptr, chunk_name, (png_size_t)4); png_reset_crc(png_ptr); png_calculate_crc(png_ptr, chunk_name, (png_size_t)4); } void png_write_chunk_data(png_structp png_ptr, png_bytep data, png_size_t length) { if (data != NULL && length > 0) { png_calculate_crc(png_ptr, data, length); png_write_data(png_ptr, data, length); } } void png_write_chunk_end(png_structp png_ptr) { png_byte buf[4]; png_save_uint_32(buf, png_ptr->crc); png_write_data(png_ptr, buf, (png_size_t)4); } void png_write_sig(png_structp png_ptr) { png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes], (png_size_t)8 - png_ptr->sig_bytes); } void png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, int color_type, int compression_type, int filter_type, int interlace_type) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IHDR; #endif png_byte buf[13]; png_debug(1, "in png_write_IHDR\n"); switch (color_type) { case PNG_COLOR_TYPE_GRAY: switch (bit_depth) { case 1: case 2: case 4: case 8: case 16: png_ptr->channels = 1; break; default: png_error(png_ptr,"Invalid bit depth for grayscale image"); } break; case PNG_COLOR_TYPE_RGB: if (bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth for RGB image"); png_ptr->channels = 3; break; case PNG_COLOR_TYPE_PALETTE: switch (bit_depth) { case 1: case 2: case 4: case 8: png_ptr->channels = 1; break; default: png_error(png_ptr, "Invalid bit depth for paletted image"); } break; case PNG_COLOR_TYPE_GRAY_ALPHA: if (bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth for grayscale+alpha image"); png_ptr->channels = 2; break; case PNG_COLOR_TYPE_RGB_ALPHA: if (bit_depth != 8 && bit_depth != 16) png_error(png_ptr, "Invalid bit depth for RGBA image"); png_ptr->channels = 4; break; default: png_error(png_ptr, "Invalid image color type specified"); } if (compression_type != PNG_COMPRESSION_TYPE_BASE) { png_warning(png_ptr, "Invalid compression type specified"); compression_type = PNG_COMPRESSION_TYPE_BASE; } if (filter_type != PNG_FILTER_TYPE_BASE) { png_warning(png_ptr, "Invalid filter type specified"); filter_type = PNG_FILTER_TYPE_BASE; } interlace_type=PNG_INTERLACE_NONE; png_ptr->bit_depth = (png_byte)bit_depth; png_ptr->color_type = (png_byte)color_type; png_ptr->interlaced = (png_byte)interlace_type; png_ptr->width = width; png_ptr->height = height; png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels); png_ptr->rowbytes = ((width * (png_size_t)png_ptr->pixel_depth + 7) >> 3); png_ptr->usr_width = png_ptr->width; png_ptr->usr_bit_depth = png_ptr->bit_depth; png_ptr->usr_channels = png_ptr->channels; png_save_uint_32(buf, width); png_save_uint_32(buf + 4, height); buf[8] = (png_byte)bit_depth; buf[9] = (png_byte)color_type; buf[10] = (png_byte)compression_type; buf[11] = (png_byte)filter_type; buf[12] = (png_byte)interlace_type; png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13); png_ptr->zstream.zalloc = png_zalloc; png_ptr->zstream.zfree = png_zfree; png_ptr->zstream.opaque = (voidpf)png_ptr; if (!(png_ptr->do_filter)) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE || png_ptr->bit_depth < 8) png_ptr->do_filter = PNG_FILTER_NONE; else png_ptr->do_filter = PNG_ALL_FILTERS; } if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_STRATEGY)) { if (png_ptr->do_filter != PNG_FILTER_NONE) png_ptr->zlib_strategy = Z_FILTERED; else png_ptr->zlib_strategy = Z_DEFAULT_STRATEGY; } if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_LEVEL)) png_ptr->zlib_level = Z_DEFAULT_COMPRESSION; if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL)) png_ptr->zlib_mem_level = 8; if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS)) png_ptr->zlib_window_bits = 15; if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_METHOD)) png_ptr->zlib_method = 8; deflateInit2(&png_ptr->zstream, png_ptr->zlib_level, png_ptr->zlib_method, png_ptr->zlib_window_bits, png_ptr->zlib_mem_level, png_ptr->zlib_strategy); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->mode = PNG_HAVE_IHDR; } void png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_PLTE; #endif png_uint_32 i; png_colorp pal_ptr; png_byte buf[3]; png_debug(1, "in png_write_PLTE\n"); if (( #ifdef PNG_WRITE_EMPTY_PLTE_SUPPORTED !png_ptr->empty_plte_permitted && #endif num_pal == 0) || num_pal > 256) { if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { png_error(png_ptr, "Invalid number of colors in palette"); } else { png_warning(png_ptr, "Invalid number of colors in palette"); return; } } png_ptr->num_palette = (png_uint_16)num_pal; png_debug1(3, "num_palette = %d\n", png_ptr->num_palette); png_write_chunk_start(png_ptr, (png_bytep)png_PLTE, num_pal * 3); for (i = 0, pal_ptr = palette; i < num_pal; i++, pal_ptr++) { buf[0] = pal_ptr->red; buf[1] = pal_ptr->green; buf[2] = pal_ptr->blue; png_write_chunk_data(png_ptr, buf, (png_size_t)3); } png_write_chunk_end(png_ptr); png_ptr->mode |= PNG_HAVE_PLTE; } void png_write_IDAT(png_structp png_ptr, png_bytep data, png_size_t length) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IDAT; #endif png_debug(1, "in png_write_IDAT\n"); png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length); png_ptr->mode |= PNG_HAVE_IDAT; } void png_write_IEND(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS PNG_IEND; #endif png_debug(1, "in png_write_IEND\n"); png_write_chunk(png_ptr, (png_bytep)png_IEND, NULL, (png_size_t)0); png_ptr->mode |= PNG_HAVE_IEND; } void png_write_start_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; #endif png_size_t buf_size; png_debug(1, "in png_write_start_row\n"); buf_size = (png_size_t)(((png_ptr->width * png_ptr->usr_channels * png_ptr->usr_bit_depth + 7) >> 3) + 1); png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size); png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE; if (png_ptr->do_filter & PNG_FILTER_SUB) { png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB; } if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH)) { png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size); png_memset(png_ptr->prev_row, 0, buf_size); if (png_ptr->do_filter & PNG_FILTER_UP) { png_ptr->up_row = (png_bytep )png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->up_row[0] = PNG_FILTER_VALUE_UP; } if (png_ptr->do_filter & PNG_FILTER_AVG) { png_ptr->avg_row = (png_bytep)png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG; } if (png_ptr->do_filter & PNG_FILTER_PAETH) { png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr, (png_ptr->rowbytes + 1)); png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH; } } { png_ptr->num_rows = png_ptr->height; png_ptr->usr_width = png_ptr->width; } png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->zstream.next_out = png_ptr->zbuf; } void png_write_finish_row(png_structp png_ptr) { #ifdef PNG_USE_LOCAL_ARRAYS int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; #endif int ret; png_debug(1, "in png_write_finish_row\n"); png_ptr->row_number++; if (png_ptr->row_number < png_ptr->num_rows) return; do { ret = deflate(&png_ptr->zstream, Z_FINISH); if (ret != Z_OK && ret != Z_STREAM_END) { if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } if (!(png_ptr->zstream.avail_out) && ret == Z_OK) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } } while (ret != Z_STREAM_END); if (png_ptr->zstream.avail_out < png_ptr->zbuf_size) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size - png_ptr->zstream.avail_out); } deflateReset(&png_ptr->zstream); } #define PNG_MAXSUM (~((png_uint_32)0) >> 1) #define PNG_HISHIFT 10 #define PNG_LOMASK ((png_uint_32)0xffffL) #define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT)) void png_write_find_filter(png_structp png_ptr, png_row_infop row_info) { png_bytep prev_row, best_row, row_buf; png_uint_32 mins, bpp; png_byte filter_to_do = png_ptr->do_filter; png_uint_32 row_bytes = row_info->rowbytes; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) int num_p_filters = (int)png_ptr->num_prev_filters; #endif png_debug(1, "in png_write_find_filter\n"); bpp = (row_info->pixel_depth + 7) / 8; prev_row = png_ptr->prev_row; best_row = row_buf = png_ptr->row_buf; mins = PNG_MAXSUM; if ((filter_to_do & PNG_FILTER_NONE) && filter_to_do != PNG_FILTER_NONE) { png_bytep rp; png_uint_32 sum = 0; png_uint_32 i; int v; for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++) { v = *rp; sum += (v < 128) ? v : 256 - v; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { png_uint_32 sumhi, sumlo; int j; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif mins = sum; } if (filter_to_do == PNG_FILTER_SUB) { png_bytep rp, lp, dp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp; i++, rp++, dp++) { *dp = *rp; } for (lp = row_buf + 1; i < row_bytes; i++, rp++, lp++, dp++) { *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff); } best_row = png_ptr->sub_row; } else if (filter_to_do & PNG_FILTER_SUB) { png_bytep rp, dp, lp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp; i++, rp++, dp++) { v = *dp = *rp; sum += (v < 128) ? v : 256 - v; } for (lp = row_buf + 1; i < row_info->rowbytes; i++, rp++, lp++, dp++) { v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB) { sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { mins = sum; best_row = png_ptr->sub_row; } } if (filter_to_do == PNG_FILTER_UP) { png_bytep rp, dp, pp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1, pp = prev_row + 1; i < row_bytes; i++, rp++, pp++, dp++) { *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff); } best_row = png_ptr->up_row; } else if (filter_to_do & PNG_FILTER_UP) { png_bytep rp, dp, pp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1, pp = prev_row + 1; i < row_bytes; i++) { v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { mins = sum; best_row = png_ptr->up_row; } } if (filter_to_do == PNG_FILTER_AVG) { png_bytep rp, dp, pp, lp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1, pp = prev_row + 1; i < bpp; i++) { *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff); } for (lp = row_buf + 1; i < row_bytes; i++) { *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff); } best_row = png_ptr->avg_row; } else if (filter_to_do & PNG_FILTER_AVG) { png_bytep rp, dp, pp, lp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1, pp = prev_row + 1; i < bpp; i++) { v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff); sum += (v < 128) ? v : 256 - v; } for (lp = row_buf + 1; i < row_bytes; i++) { v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { mins = sum; best_row = png_ptr->avg_row; } } if (filter_to_do == PNG_FILTER_PAETH) { png_bytep rp, dp, pp, cp, lp; png_uint_32 i; for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1, pp = prev_row + 1; i < bpp; i++) { *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); } for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++) { int a, b, c, pa, pb, pc, p; b = *pp++; c = *cp++; a = *lp++; p = b - c; pc = a - c; #ifdef PNG_USE_ABS pa = abs(p); pb = abs(pc); pc = abs(p + pc); #else pa = p < 0 ? -p : p; pb = pc < 0 ? -pc : pc; pc = (p + pc) < 0 ? -(p + pc) : p + pc; #endif p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; *dp++ = (png_byte)(((int)*rp++ - p) & 0xff); } best_row = png_ptr->paeth_row; } else if (filter_to_do & PNG_FILTER_PAETH) { png_bytep rp, dp, pp, cp, lp; png_uint_32 sum = 0, lmins = mins; png_uint_32 i; int v; #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 lmhi, lmlo; lmlo = lmins & PNG_LOMASK; lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH) { lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; if (lmhi > PNG_HIMASK) lmins = PNG_MAXSUM; else lmins = (lmhi << PNG_HISHIFT) + lmlo; } #endif for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1, pp = prev_row + 1; i < bpp; i++) { v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); sum += (v < 128) ? v : 256 - v; } for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++) { int a, b, c, pa, pb, pc, p; b = *pp++; c = *cp++; a = *lp++; #ifndef PNG_SLOW_PAETH p = b - c; pc = a - c; #ifdef PNG_USE_ABS pa = abs(p); pb = abs(pc); pc = abs(p + pc); #else pa = p < 0 ? -p : p; pb = pc < 0 ? -pc : pc; pc = (p + pc) < 0 ? -(p + pc) : p + pc; #endif p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; #else /* PNG_SLOW_PAETH */ p = a + b - c; pa = abs(p - a); pb = abs(p - b); pc = abs(p - c); if (pa <= pb && pa <= pc) p = a; else if (pb <= pc) p = b; else p = c; #endif /* PNG_SLOW_PAETH */ v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff); sum += (v < 128) ? v : 256 - v; if (sum > lmins) break; } #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) { int j; png_uint_32 sumhi, sumlo; sumlo = sum & PNG_LOMASK; sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; for (j = 0; j < num_p_filters; j++) { if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH) { sumlo = (sumlo * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; sumhi = (sumhi * png_ptr->filter_weights[j]) >> PNG_WEIGHT_SHIFT; } } sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >> PNG_COST_SHIFT; if (sumhi > PNG_HIMASK) sum = PNG_MAXSUM; else sum = (sumhi << PNG_HISHIFT) + sumlo; } #endif if (sum < mins) { best_row = png_ptr->paeth_row; } } png_write_filtered_row(png_ptr, best_row); #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) if (png_ptr->num_prev_filters > 0) { int j; for (j = 1; j < num_p_filters; j++) { png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1]; } png_ptr->prev_filters[j] = best_row[0]; } #endif } void png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row) { png_debug(1, "in png_write_filtered_row\n"); png_debug1(2, "filter = %d\n", filtered_row[0]); png_ptr->zstream.next_in = filtered_row; png_ptr->zstream.avail_in = (uInt)png_ptr->row_info.rowbytes + 1; do { int ret; ret = deflate(&png_ptr->zstream, Z_NO_FLUSH); if (ret != Z_OK) { if (png_ptr->zstream.msg != NULL) png_error(png_ptr, png_ptr->zstream.msg); else png_error(png_ptr, "zlib error"); } if (!(png_ptr->zstream.avail_out)) { png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; } } while (png_ptr->zstream.avail_in); if (png_ptr->prev_row != NULL) { png_bytep tptr; tptr = png_ptr->prev_row; png_ptr->prev_row = png_ptr->row_buf; png_ptr->row_buf = tptr; } png_write_finish_row(png_ptr); #if defined(PNG_WRITE_FLUSH_SUPPORTED) png_ptr->flush_rows++; if (png_ptr->flush_dist > 0 && png_ptr->flush_rows >= png_ptr->flush_dist) { png_write_flush(png_ptr); } #endif } #endif /* HAVE_GD */ #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/macdir.h000066400000000000000000000040621406366436600156520ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** The contents of this file is copyright (c) Jason Linhart 1997. ***/ /*** macdir.h * * Directory Operations for Mac based on BSD 4.3 * By Jason Linhart, January 1997 ***/ #ifndef _MACDIR_H #define _MACDIR_H 1 #include #define NAME_MAX 255 /* # chars in a file name */ struct dirent { #ifdef COMMENT long d_ino; off_t d_off; unsigned short d_reclen; #endif char d_name[NAME_MAX+1]; }; /* The internal is hidden from the user. */ typedef void DIR; /* Open a directory stream on NAME. Return a DIR stream on the directory, or NULL if it could not be opened. */extern DIR *opendir (const char *name); /* Close the directory stream DIRP. Return 0 if successful, -1 if not. */ extern int closedir (DIR * dirp); /* Read a directory entry from DIRP. Return a pointer to a `struct dirent' describing the entry, or NULL for EOF or error. The storage returned may be overwritten by a later readdir call on the same DIR stream. */ extern struct dirent *readdir (DIR * dirp); /* Rewind DIRP to the beginning of the directory. */ extern void rewinddir (DIR * dirp); /* Seek to position POS on DIRP. */ extern void seekdir (DIR * dirp, off_t pos); /* Return the current position of DIRP. */ extern off_t telldir (DIR * dirp); /* Fake stat to work with current directory entry */ #define stat(file_name,buf) dirstat(file_name,buf) extern int dirstat(const char *file_name, struct stat *buf); #endif /* macdir.h */ analog-ce-6.0.17/src/macinput.c000066400000000000000000000367411406366436600162370ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** The contents of this file is copyright (c) Jason Linhart 1998 - 2001. ***/ /*** macinput.c; input functions for Mac */ #define REAL_STDIO /* Define these to suppress defines in anlghea3.h */ /* #define DEBUG_VERSION */ #include "anlghea3.h" #ifdef MAC #ifdef USE_ZLIB #include #include #include #include "my_bzlib.h" #include "my_zlib.h" #include "unzip.jtl.h" #endif #ifdef LINE_PARSER /* Input file parsing */ #define LOC_BUFF_SIZE (16*1024) #ifndef USE_ZLIB typedef long gzFile; typedef long unzFile; typedef long BZFILE; #endif static FILE *in_fp = 0; static gzFile gz_fp; static unzFile zip_fp; static BZFILE *bz_fp; static int zip_eof; static int in_mode = 0; // 0-plain, 1-GZip, 2-PKZip, 3-BZip2 static long line_num; static int buff_cnt, buff_offset; static char *buff = nil; static void FillBuff(int drop_cnt) { buff_offset+=drop_cnt; buff_cnt-=drop_cnt; if (buff_cnt0) memmove(buff,buff+buff_offset,buff_cnt); buff_offset=0; switch (in_mode) { case 0: buff_cnt+=fread(buff+buff_cnt,1,LOC_BUFF_SIZE-buff_cnt,in_fp); break; #ifdef USE_ZLIB case 1: buff_cnt+=gzread(gz_fp,(voidp)(buff+buff_cnt),LOC_BUFF_SIZE-buff_cnt); break; case 2: while (buff_cntdataHandle) /* a reply is sought */ err=AEPutParamPtr(reply,'errs','TEXT',"Ignoring",8); return(err); } static pascal OSErr DoAEOpenDoc(const AppleEvent *theAppleEvent,AppleEvent *reply,long handlerRefcon) { #pragma unused ( reply ) #pragma unused ( handlerRefcon ) OSErr err; AEDescList docList; Size actualSize; AEKeyword keywd; DescType typeCode; long itemsInList; err=AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList); if (!err) { err=GotRequiredParams(theAppleEvent); if (!err) { err=AECountItems(&docList,&itemsInList); if (!err && itemsInList>0) { err=AEGetNthPtr(&docList,1,typeFSS,&keywd,&typeCode,(Ptr)&myFSS, sizeof(myFSS),&actualSize); if (!err) haveFSS=true; } } AEDisposeDesc(&docList); } return(err); } char mac_do_script[256] = ""; static pascal OSErr DoAEDo(const AppleEvent *theAppleEvent,AppleEvent *reply,long handlerRefcon) { #pragma unused ( reply ) #pragma unused ( handlerRefcon ) OSErr err; AEDesc desc; Size actualSize; DescType typeCode; err=AEGetParamDesc(theAppleEvent,keyDirectObject,typeChar,&desc); if (!err) { err=GotRequiredParams(theAppleEvent); if (!err) { err=AEGetParamPtr(theAppleEvent,keyDirectObject,typeChar, &typeCode,(Ptr)mac_do_script,256,&actualSize); if (err) mac_do_script[0]=0; else { mac_do_script[255]=0; if (actualSize>=0 && actualSize<256) mac_do_script[actualSize]=0; } } AEDisposeDesc(&desc); } return(err); } int mac_quit_now = 0; static pascal OSErr /* Used for Quit event */ DoAEQuit(const AppleEvent *theAppleEvent,AppleEvent *reply,long handlerRefcon) { #pragma unused ( handlerRefcon ) OSErr err; err=GotRequiredParams(theAppleEvent); if (!err && reply->dataHandle) /* a reply is sought */ err=AEPutParamPtr(reply,'errs','TEXT',"Ignoring",8); mac_quit_now=1; SIOUXQuitting=true; return(err); } #ifndef _MSL_USE_NEW_FILE_APIS // These are Pro 7 concepts!! #ifndef _MSL_USE_OLD_FILE_APIS // If neither is defined, this is Pro 6 #define _MSL_USE_OLD_FILE_APIS 1 // In Pro 6 do it the old way #endif #endif #if _MSL_USE_OLD_AND_NEW_FILE_APIS extern _MSL_IMP_EXP_C char __msl_system_has_new_file_apis(void); #endif static OSErr OpenFork(FSSpec *spec,char permission,short *refNum) { #if _MSL_USE_NEW_FILE_APIS FSRef theRef; #endif OSErr err; #if _MSL_USE_OLD_AND_NEW_FILE_APIS if (__msl_system_has_new_file_apis()) { #endif /* _MSL_USE_OLD_AND_NEW_FILE_APIS */ #if _MSL_USE_NEW_FILE_APIS err=FSpMakeFSRef(spec,&theRef); if (!err) err=FSOpenFork(&theRef,0,NULL,permission,refNum); #endif #if _MSL_USE_OLD_AND_NEW_FILE_APIS } else { #endif /* _MSL_USE_OLD_AND_NEW_FILE_APIS */ #if _MSL_USE_OLD_FILE_APIS err=FSpOpenDF(spec,permission,refNum); #endif #if _MSL_USE_OLD_AND_NEW_FILE_APIS } #endif return(err); } char TryAEOpen(void); char TryAEOpen(void) { AEEventHandlerUPP HandlerUPP; EventRecord myEvent; OSErr result; long lvalue; int cnt; short refNum; char c[2]; if (Gestalt(gestaltAppleEventsAttr,&lvalue)!=noErr) return(false); result=noErr; HandlerUPP=NewAEEventHandlerUPP(&DoAEOpenDoc); result=AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,HandlerUPP,0,false); if (result==noErr) { HandlerUPP=NewAEEventHandlerUPP(&DoAENoop); result=AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,HandlerUPP,0,false); } if (result==noErr) { HandlerUPP=NewAEEventHandlerUPP(&DoAENoop); result=AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,HandlerUPP,0,false); } if (result==noErr) { HandlerUPP=NewAEEventHandlerUPP(&DoAEQuit); result=AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,HandlerUPP,0,false); } if (result==noErr) { HandlerUPP=NewAEEventHandlerUPP(&DoAEDo); result=AEInstallEventHandler(kAEMiscStandards,kAEDoScript,HandlerUPP,0,false); } if (result==noErr) { for (cnt=0; cnt<40; ++cnt) { if (GetNextEvent(everyEvent,&myEvent)) { if (myEvent.what==kHighLevelEvent) AEProcessAppleEvent(&myEvent); else SIOUXHandleOneEvent(&myEvent); } } } if (haveFSS && !OpenFork(&myFSS,fsRdPerm,&refNum)) { read(refNum,c,2); close(refNum); return((c[0]=='#' && c[1]==' ')?'#':' '); } return(0); } #ifdef USE_ZLIB #define GZ_NUM_BLOCKS 16 static int gz_sizes[GZ_NUM_BLOCKS] = { 16, 24, 28, 64, 76, 100, 108, 140, 2048, 2048, 5816, 11520, 16*1024, 32*1024, 64*1024, 64*1024 }; static void *gz_blocks[GZ_NUM_BLOCKS] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static int gz_bflags[GZ_NUM_BLOCKS] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; static voidpf my_gz_alloc_func(voidpf opaque,uInt items,uInt size) { int indx; size*=items; if (size<512) { if (size<70) { if (size<=16) indx=0; else if (size==24) indx=1; else if (size==28) indx=2; else if (size==64) indx=3; else indx=GZ_NUM_BLOCKS; } else { if (size==76) indx=4; else if (size==100) indx=5; else if (size==108) indx=6; else if (size==140) indx=7; else indx=GZ_NUM_BLOCKS; } } else { if (size<=2048) indx=8; /* There are two sets of these, indx */ /* 8 and 9, special case in loop below */ else if (size==5816) indx=10; else if (size==11520) indx=11; else if (size==16*1024) indx=12; else if (size==32*1024) indx=13; else if (size==64*1024) indx=14; /* There are two sets of these, indx */ /* 14 and 15, special case in loop below */ else indx=GZ_NUM_BLOCKS; } if (indx>=GZ_NUM_BLOCKS) { #ifdef DEBUG_VERSION printf("gz alloc: unusual size, %d bytes\n",size); #endif return(malloc(size)); } while (true) { if (!gz_bflags[indx]) { gz_bflags[indx]=1; return(gz_blocks[indx]); } else if (gz_bflags[indx]==2) { gz_blocks[indx]=malloc(gz_sizes[indx]); gz_bflags[indx]=1; return(gz_blocks[indx]); } if (indx==8 || indx==14) ++indx; else break; } #ifdef DEBUG_VERSION printf("gz alloc: table in use already, %d bytes\n",size); #endif return(malloc(size)); } static void my_gz_free_func(voidpf opaque,voidpf address) { void **ptr; int indx; if (!address) return; ptr=gz_blocks; for (indx=0; indx1AY&SY" */ else if (buff[0]=='B' && buff[1]=='Z' && buff[2]=='h' && isdigit(buff[3]) && !memcmp("1AY&SY",buff+4,6)) { bzsetalloc(my_bz_alloc_func,my_bz_free_func,0); bz_fp=BZ2_bzfopen(in_fp,"rb"); in_mode=3; } /* ZIP files start with "PK\03\04" - we only read deflated and stored items (nothing else tends to occur) */ else in_mode=0; } else in_mode=0; #else in_mode=0; #endif FillBuff(0); return((FILE *)in_fp); } return(nil); } int mac_fclose(FILE *file) { int result; if ((gzFile)file==in_fp) { switch (in_mode) { case 0: result=fclose(in_fp); break; #ifdef USE_ZLIB case 1: result=gzclose(gz_fp); break; case 2: if (!zip_eof) unzCloseCurrentFile(zip_fp); unzClose(zip_fp); result=0; break; case 3: BZ2_bzclose(bz_fp); result=0; break; #endif } in_fp=nil; } else result=fclose(file); return(result); } size_t mac_fread(void *ptr,size_t size,size_t num,FILE *file) { size_t total; long len; if (in_fp!=(gzFile)file) return(fread(ptr,size,num,file)); num*=size; total=0; while (num>0) { if (buff_cnt<=0) return(total); len=buff_cnt; if (len>num) len=num; memcpy(ptr,buff+buff_offset,len); ((char *)ptr)+=len; FillBuff(len); num-=len; total+=len; } return(total/size); } int mac_getc(FILE *file) { int result; if (in_fp!=(gzFile)file) return(getc(file)); if (buff_cnt<=0) return(EOF); result = *((unsigned char *)buff+buff_offset); FillBuff(1); return(result); } int mac_feof(FILE *file) { if (in_fp!=(gzFile)file) return(feof(file)); return(buff_cnt<=0); } #endif #define PNG_NUM_BLOCKS 11 static int png_sizes[PNG_NUM_BLOCKS] = { 10, 10, 80, 560, 700, /* 80 used for 64, 700 used for 601 */ 5816, 8192, 65536, 65536, 65536, 65536 }; void *png_blocks[PNG_NUM_BLOCKS] = { 0, 0, 0, 0 ,0 ,0 ,0 ,0 ,0, 0, 0 }; /* address of the block */ int png_bflags[PNG_NUM_BLOCKS] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; /* 0-available, 1-in use, 2-not allocated */ extern void *mac_png_malloc(unsigned long size); extern void mac_png_free(void *ptr); void * /* Allocate memory - use cached block if size is right */ mac_png_malloc(unsigned long size) { int indx; #ifdef DEBUG_VERSION // printf("png alloc: %d bytes\n",size); #endif if (size<1000) { if (size==10) indx=0; /* There are two sets of these, indx */ /* 0 and 1, special case in loop below */ else if (size<=80) indx=2; else if (size==560) indx=3; else if (size<=700) indx=4; else indx=PNG_NUM_BLOCKS; } else { if (size==5816) indx=5; else if (size==8192) indx=6; else if (size==65536) indx=7; /* There are four sets of these, indx */ /* 7, 8, 9, and 10, special case in loop below */ else indx=PNG_NUM_BLOCKS; } if (indx=7 && indx<=9)) ++indx; else break; } #ifdef DEBUG_VERSION printf("png alloc: table in use already, %d bytes\n",size); #endif return(malloc(size)); } #ifdef DEBUG_VERSION printf("png alloc: unusual size, %d bytes\n",size); #endif return(malloc(size)); } void /* Free memory - put blocks back in the cache */ mac_png_free(void *address) { void **ptr; int indx; if (!address) return; ptr=png_blocks; for (indx=0; indx0 is open, 0 is closed, -1 is at end */ static unsigned char fname[257]; // The current file name static short dir_volume; // The open dir's volume static long dir_ID; // The open dir's dir ID static char last_attrib; // The attributes of the last entry read static void CToPCpy(unsigned char *pstr, const char *cstr) { /* Convert a C string to a Pascal string */ register char *dptr, len; len=0; dptr=(char *)pstr+1; while (len<255 && (*dptr++ = *cstr++)!=0) ++len; *pstr=len; } DIR * opendir (const char *name) /* Open a directory stream on NAME. */ /* Return a DIR stream on the directory, or NULL if it could not be opened. */ { CInfoPBRec cat_info; FSSpec spec; Boolean targetIsFolder, wasAliased; if (indx) { // We don't support more than one dir open at a time closedir((DIR *)1); // Fail hard return((DIR *)0); } dir_volume=0; // Default to the application directory dir_ID=0; while (name[0]=='.') ++name; // Don't allow leading '.', avoids device names CToPCpy(fname,name); if (!FSMakeFSSpec(0,0,fname,&spec)) { // Figure out where user is pointing ResolveAliasFile(&spec, true, &targetIsFolder, &wasAliased); cat_info.dirInfo.ioCompletion=(IOCompletionUPP)0; cat_info.dirInfo.ioNamePtr=spec.name; cat_info.dirInfo.ioVRefNum=spec.vRefNum; cat_info.dirInfo.ioFDirIndex = 0; // Use full spec cat_info.dirInfo.ioDrDirID=spec.parID; cat_info.dirInfo.ioFVersNum=0; if (!PBGetCatInfoSync(&cat_info) && (cat_info.dirInfo.ioFlAttrib&16)) spec.parID=cat_info.dirInfo.ioDrDirID; // Found it, save it's volume and dirID dir_volume=spec.vRefNum; dir_ID=spec.parID; } else return ((DIR *)0); indx=1; return((DIR *)1); } int closedir (DIR * dirp) /* Close the directory stream DIRP. Return 0 if successful, -1 if not. */ { if (indx) { indx=0; return(0); } return(-1); } struct dirent * readdir (DIR * dirp) /* Read a directory entry from DIRP. */ /* Return a pointer to a `struct dirent' describing the entry, or NULL for EOF or error. The storage returned may be overwritten by a later readdir call on the same DIR stream. */ { CInfoPBRec finfo; finfo.hFileInfo.ioCompletion=(IOCompletionUPP)0; // No completion routine finfo.hFileInfo.ioNamePtr=fname; // Where to return file names finfo.hFileInfo.ioVRefNum=dir_volume; // Saved volume and directory finfo.hFileInfo.ioDirID=dir_ID; finfo.hFileInfo.ioFDirIndex=indx; // Appropriate entry in dir if (indx>0 && !PBGetCatInfoSync(&finfo)) { // Get info about the next dir entry last_attrib=finfo.hFileInfo.ioFlAttrib; fname[fname[0]+1]=0; ++indx; return((struct dirent *)(fname+1)); } if (indx) indx = -1; // Must be at end of dir return((struct dirent *)0); } void rewinddir (DIR * dirp) /* Rewind DIRP to the beginning of the directory. */ { if (indx) indx=1; } void seekdir (DIR * dirp, off_t pos) /* Seek to position POS on DIRP. */ { if (indx && pos>0) indx=pos; } off_t telldir (DIR * dirp) /* Return the current position of DIRP. */ { return((indx>0)?indx:-1); } int dirstat(const char *file_name, struct stat *buf) /* Special version of stat that only works for most recent dir entry */ { if (indx) { if (last_attrib&0x10) buf->st_mode=S_IFDIR; else buf->st_mode=S_IFREG; return(0); } return(-1); } #endif #ifdef MAC #ifndef NODNS static long OpenNetwork(void); /* Takes a string of an IP address in *hostname, resolves it to a domain name, and returns the name in *hostname. Returns nil if unresolvable (or something else went wrong), otherwise returns 1. */ /* URL processing and host lookup */ static long slNetChecked = 0, slNetPresent = 0, slNetSvcOpen = 0; static OTNotifyUPP svcnotifyproc = 0; typedef struct { /* Open Transport Internet services provider info */ InetSvcRef ref; /* provider reference */ Boolean done; /* true when asynch operation has completed */ OTResult result; /* result code */ void *cookie; /* cookie */ } SvcInfo; static SvcInfo sSvcRef; #if !TARGET_API_MAC_CARBON static ResultUPP gMacTCPDNRResultProcUPP = 0; static pascal void MacTCPDNRResultProc (struct hostInfo *hInfoPtr, char *userDataPtr) { *(Boolean*)userDataPtr = true; } #endif int IpAddr2Name(char *hostname) { #if !TARGET_API_MAC_CARBON struct hostInfo hInfoMacTCP; OSErr err; int cnt, tmp; char *cptr; Boolean done; #endif OSStatus lStatus; InetHost lHostAddr; if (!slNetChecked) { slNetPresent = OpenNetwork(); slNetChecked = 1; } if (slNetPresent == 1) { /* turn ascii with periods into a long */ lStatus = OTInetStringToHost(hostname, &lHostAddr); if (lStatus != noErr) return 0; /* turn the long into a reverse-resolved name */ sSvcRef.done=false; lStatus=OTInetAddressToName(sSvcRef.ref,lHostAddr,hostname); if (!lStatus) { do { MacIdle(); } while (!sSvcRef.done); lStatus=sSvcRef.result; } if (!lStatus) { if (hostname[strlen(hostname)-1]=='.') hostname[strlen(hostname)-1]=0; return(1); } } #if !TARGET_API_MAC_CARBON else if (slNetPresent==2) { lHostAddr=0; cptr=hostname; for (cnt=0; cnt<4; ++cnt) { if (!ISDIGIT(*cptr)) return(0); tmp=atoi(cptr); if (tmp<0 || tmp>255) return(0); lHostAddr=(lHostAddr<<8)|tmp; while (ISDIGIT(*cptr)) ++cptr; if (cnt!=3 && *cptr!='.') return(0); ++cptr; } memset(&hInfoMacTCP, 0, sizeof(hInfoMacTCP)); done=false; err = AddrToName(lHostAddr, &hInfoMacTCP, gMacTCPDNRResultProcUPP, (char*)&done); if (err == cacheFault) { while (!done) MacIdle(); err = hInfoMacTCP.rtnCode; } if (err == noErr) { hInfoMacTCP.cname[254] = 0; (void)strcpy(hostname, hInfoMacTCP.cname); if (hostname[strlen(hostname)-1]=='.') hostname[strlen(hostname)-1]=0; return(1); } } #endif return 0; } /* end IpAddr2Name() */ /* Must call this before quitting app */ void ResolverCleanup(void) { if (slNetChecked && slNetSvcOpen) { if (slNetPresent==1) OTCloseProvider(sSvcRef.ref); #if !TARGET_API_MAC_CARBON else if (slNetPresent==2) CloseResolver(); #endif } } /* end ResolverCleanup() */ /* #pragma mark - */ /* Check for availbility of OT/TCP 1.1 or later, or MacTCP and open the service. Return nil if it isn't. */ static pascal void SvcNotifyProc(void *dataPtr,OTEventCode code,OTResult result,void *cookie) { register SvcInfo *svcInfo; svcInfo=(SvcInfo *)dataPtr; svcInfo->done=true; svcInfo->result=result; svcInfo->cookie=cookie; } static Boolean OpenInetServices(SvcInfo *svcInfo) { OSStatus result; svcInfo->done=false; if (!svcnotifyproc) svcnotifyproc=NewOTNotifyUPP(&SvcNotifyProc); #ifdef __CARBON__ result=OTAsyncOpenInternetServicesInContext(kDefaultInternetServicesPath, 0, svcnotifyproc, svcInfo, NULL); #else result=OTAsyncOpenInternetServices(kDefaultInternetServicesPath, 0, svcnotifyproc, svcInfo); #endif if (!result) { do { MacIdle(); } while (!svcInfo->done); result=svcInfo->result; } if (result) return(false); svcInfo->ref=(InetSvcRef)svcInfo->cookie; return(true); } static long OpenNetwork(void) { OSStatus lStatus; OSErr err; long lResponse, lCriteria; err = Gestalt(gestaltOpenTpt, &lResponse); if (err == noErr) { /* Older OpenTransport Headers require that thenext line read: lCriteria = gestaltOpenTptPresent + gestaltOpenTptTCPPresent; */ lCriteria = gestaltOpenTptPresentMask + gestaltOpenTptTCPPresentMask; lResponse = lCriteria & lResponse; if (lResponse == lCriteria) { #ifdef __CARBON__ lStatus=InitOpenTransportInContext(kInitOTForApplicationMask,NULL); #else lStatus = InitOpenTransport(); #endif if (lStatus == noErr) { if (OpenInetServices(&sSvcRef)) { slNetSvcOpen=1; return(1); } } return(0); /* OT present, but won't open */ } } #if !TARGET_API_MAC_CARBON else { gMacTCPDNRResultProcUPP = NewResultProc(&MacTCPDNRResultProc); err = OpenResolver(nil); if (err == noErr) { slNetSvcOpen=1; return(2); } } #endif return(0); } /* end OpenNetwork() */ #endif #endif #ifdef MAC #define MY_MAGIC_ONE 0x3748596A #define MY_MAGIC_TWO 0xA7958473 #define MY_BIG_SIZE (32*1024) #define MY_BLOCK_SIZE (4*(MY_BIG_SIZE+3*sizeof(long))) #if MY_BIG_SIZE!=BLOCKSIZE Look into this! They should be the same, but changes would require other adjustments. #endif static long my_cur_avail = 0; static char *my_cur_block; static struct my_block { struct my_block **next; char storage[MY_BLOCK_SIZE]; } **temp_mem_blocks = nil; static struct my_free { struct my_free *next; char storage[MY_BIG_SIZE-sizeof(struct my_free *)]; } *my_free_list = nil; void mac_temp_free(void); void mac_temp_free(void) { OSErr result; struct my_block **block, **next; block=temp_mem_blocks; while (block) { next=(*block)->next; TempDisposeHandle((Handle)block,&result); if (result) break; block=next; } } static void * my_temp_malloc(size_t size) { OSErr result; struct my_block **block; long version; char *ret_ptr; size=(size+3)&~3; if (Gestalt(gestaltSystemVersion,&version) || version<0x700) return(nil); if (size>MY_BLOCK_SIZE) { if (TempFreeMem()<1024*1024+size) return(nil); block=(struct my_block **)TempNewHandle(size+sizeof(struct my_block **),&result); if (!block || !*block || result) return(nil); TempHLock((Handle)block,&result); (*block)->next=temp_mem_blocks; temp_mem_blocks=block; return((void *)&(*block)->storage); } if (size>my_cur_avail) { if (TempFreeMem()<1024*1024+MY_BLOCK_SIZE) return(nil); block=(struct my_block **)TempNewHandle(sizeof(struct my_block),&result); if (!block || !*block || result) return(nil); TempHLock((Handle)block,&result); (*block)->next=temp_mem_blocks; temp_mem_blocks=block; my_cur_block=(*block)->storage; my_cur_avail=MY_BLOCK_SIZE; } ret_ptr=my_cur_block; my_cur_block+=size; my_cur_avail-=size; return((void *)ret_ptr); } #define MAC_LEAVE_FREE (64*1024) static void * sub_mac_malloc(size_t size) { char *ret_ptr; size=(size+3)&~3; if (size>=MY_BIG_SIZE) { if (MaxBlock()<=MAC_LEAVE_FREE+size) return(my_temp_malloc(size)); return(malloc(size)); } if (size>my_cur_avail) { if (MaxBlock()=MY_BIG_SIZE) { if (size==MY_BIG_SIZE && my_free_list) { ptr=(long *)my_free_list; my_free_list=my_free_list->next; } else { size+=(size/MY_BIG_SIZE)*3*sizeof(long); ptr=(long *)sub_mac_malloc(size); if (ptr) { *ptr++ = size; *ptr++ = MY_MAGIC_ONE; *ptr++ = MY_MAGIC_TWO; } } } else ptr=(long *)sub_mac_malloc(size); return((void *)ptr); } void * mac_calloc(size_t num,size_t size) { return(mac_malloc(num*size)); } void * mac_realloc(void *ptr,size_t size) { void *new_blk; if (!size || !(new_blk=mac_malloc(size))) return(nil); memcpy(new_blk,ptr,size); mac_free(ptr); return(new_blk); } void mac_free(void *ptr) { struct my_free *blk; long *lptr, size; lptr=(long *)ptr; if (lptr) { lptr-=3; if (lptr[1]==MY_MAGIC_ONE && lptr[2]==MY_MAGIC_TWO) { size = *lptr + 3*sizeof(long); while (size>=MY_BIG_SIZE+3*sizeof(long)) { blk=(struct my_free *)(lptr+3); blk->next=my_free_list; my_free_list=blk; *lptr=MY_BIG_SIZE+3*sizeof(long); lptr[1]=MY_MAGIC_ONE; lptr[2]=MY_MAGIC_TWO; lptr+=(MY_BIG_SIZE/sizeof(long))+3; size-=MY_BIG_SIZE+3*sizeof(long); } } } } #endif analog-ce-6.0.17/src/outcro.c000066400000000000000000000315161406366436600157250ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** outcro.c; computer-readable output ***/ #include "anlghea3.h" /* Page width -- unused in this output style */ unsigned int cro_pagewidth(Outchoices *od) { return 0; } /* The top of the output if we are in CGI mode */ void cro_cgihead(FILE *outf, Outchoices *od) { fprintf(outf, "Content-Type: text/plain\n\n"); } /* Stuff this output style needs in the page header */ void cro_stylehead(FILE *outf, Outchoices *od) { } /* The title of the page, plus the user's HEADERFILE */ void cro_pagetitle(FILE *outf, Outchoices *od) { if (!strcaseeq(od->headerfile, "none")) cro_includefile(outf, od, od->headerfile, 'h'); fprintf(outf, "x%sVE%sAnalog CE %s ( Analog CE | Update Check )\n", od->compsep, od->compsep, VNUMBER, ANALOGURL, CAMIERSSURL); fprintf(outf, "x%sHN%s%s\n", od->compsep, od->compsep, od->hostname); if (!strcaseeq(od->hosturl, "none")) fprintf(outf, "x%sHU%s%s\n", od->compsep, od->compsep, od->hosturl); } /* Program start time, and logfile start and end times */ void cro_timings(FILE *outf, Outchoices *od, Dateman *dman) { extern timecode_t starttimec; char *compsep = od->compsep; if (od->runtime) fprintf(outf, "x%sPS%s%s\n", compsep, compsep, timesprintf(od, od->lngstr[datefmt2_], starttimec, UNSET)); if (dman->firsttime <= dman->lasttime) { fprintf(outf, "x%sFR%s%s\n", compsep, compsep, timesprintf(od, od->lngstr[datefmt2_], dman->firsttime, UNSET)); fprintf(outf, "x%sLR%s%s\n", compsep, compsep, timesprintf(od, od->lngstr[datefmt2_], dman->lasttime, UNSET)); } } /* Finishing the top of the page */ void cro_closehead(FILE *outf, Outchoices *od) { } /* Starting the bottom of the page */ void cro_pagebotstart(FILE *outf, Outchoices *od) { } /* The credit line at the bottom of the page */ void cro_credit(FILE *outf, Outchoices *od) { /* Already printed at the top of the page in cro_pagehead() */ } /* The program run time */ void cro_runtime(FILE *outf, Outchoices *od, long secs) { } /* The page footer, including the user's FOOTERFILE */ void cro_pagefoot(FILE *outf, Outchoices *od) { if (!strcaseeq(od->footerfile, "none")) cro_includefile(outf, od, od->footerfile, 'f'); } /* Footer material for this output style */ void cro_stylefoot(FILE *outf, Outchoices *od) { } /* Report title */ void cro_reporttitle(FILE *outf, Outchoices *od, choice rep) { } /* Report footer */ void cro_reportfooter(FILE *outf, Outchoices *od, choice rep) { } /* Report description */ void cro_reportdesc(FILE *outf, Outchoices *od, choice rep) { } /* The time period spanned by the report */ void cro_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind) { extern char repcodes[]; fprintf(outf, "%c%s*FR%s%s\n", repcodes[rep], od->compsep, od->compsep, timesprintf(od, od->lngstr[datefmt2_], mind, UNSET)); fprintf(outf, "%c%s*LR%s%s\n", repcodes[rep], od->compsep, od->compsep, timesprintf(od, od->lngstr[datefmt2_], maxd, UNSET)); } /* General Summary header */ void cro_gensumhead(FILE *outf, Outchoices *od) { } /* General Summary footer */ void cro_gensumfoot(FILE *outf, Outchoices *od) { } /* Single General Summary line, long data */ void cro_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage) { char *compsep = od->compsep; char *name = od->lngstr[namecode]; if (isaverage) return; /* CRO doesn't display averages */ fprintf(outf, "x%s%c%c%s%lu", compsep, name[0], name[1], compsep, x); if (x7 != (unsigned long)UNSET) fprintf(outf, "\nx%s%c%c%s%lu", compsep, name[2], name[3], compsep, x7); putc('\n', outf); } /* Single General Summary line, bytes data */ void cro_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage) { char *compsep = od->compsep; char *name = od->lngstr[namecode]; if (isaverage) return; /* CRO doesn't display averages */ fprintf(outf, "x%s%c%c%s%.0f", compsep, name[0], name[1], compsep, x); if (x7 != UNSET) fprintf(outf, "\nx%s%c%c%s%.0f", compsep, name[2], name[3], compsep, x7); putc('\n', outf); } /* "Last seven" explanation line */ void cro_lastseven(FILE *outf, Outchoices *od, timecode_t last7to) { fprintf(outf, "x%sE7%s%s\n", od->compsep, od->compsep, timesprintf(od, od->lngstr[datefmt1_], last7to, UNSET)); } /* Start of a
 section */
void cro_prestart(FILE *outf, Outchoices *od) {
}

/* End of a 
 section */
void cro_preend(FILE *outf, Outchoices *od) {
}

/* A horizontal rule */
void cro_hrule(FILE *outf, Outchoices *od) {
}

/* An en dash */
char *cro_endash(void) {
  return "-";
}

/* putc with special characters escaped */
void cro_putch(FILE *outf, char c) {
  putc(c, outf);
}

/* strlen */
size_t cro_strlength(const char *s) {
  return strlen(s);
}

/* Allow month in dates? DO NOT enable for human-readable text because of
   i18n problems. */
logical cro_allowmonth(void) {
  return TRUE;
}

/* Calculate column widths */
void cro_calcwidths(Outchoices *od, choice rep, unsigned int width[],
		      unsigned int *bmult, unsigned int *bmult7, double *unit,
		      unsigned long maxr, unsigned long maxr7,
		      unsigned long maxp, unsigned long maxp7, double maxb,
		      double maxb7, unsigned long howmany) {
  unsigned int i;

  for (i = 0; i < COL_NUMBER; i++)
    width[i] = 0;

  *bmult = 0;
  *bmult7 = 0;
}

/* "Each unit represents" line */
void cro_declareunit(FILE *outf, Outchoices *od, char graphby, double unit,
		     unsigned int bmult) {
}

/* Start of column header line */
void cro_colheadstart(FILE *outf, Outchoices *od, choice rep) {
}

/* Column header line: individual column */
void cro_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col,
		    unsigned int width, char *colname, logical unterminated) {
}

/* End of column header line */
void cro_colheadend(FILE *outf, Outchoices *od, choice rep) {
}

/* Start of column header underlining line */
void cro_colheadustart(FILE *outf, Outchoices *od, choice rep) {
}

/* Underlining of one column header */
void cro_colheadunderline(FILE *ouf, Outchoices *od, choice rep, choice col,
			  unsigned int width, char *name) {
}

/* End of column header underlining line */
void cro_colheaduend(FILE *outf, Outchoices *od, choice rep) {
}

/* Start of a table row */
void cro_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols,
		  int level, char *name, char *datefmt, char *timefmt) {
  extern char repcodes[];
  extern char colcodes[];

  unsigned int c;

  fprintf(outf, "%c%s", repcodes[rep], od->compsep);
  if (level >= 1)
    putc('l', outf);
  for (c = 0; cols[c] != COL_NUMBER; c++)
    putc(colcodes[cols[c]], outf);
  fputs(od->compsep, outf);
}

/* Print level in hierarchy represented by this row */
void cro_levelcell(FILE *outf, Outchoices *od, choice rep, int level) {
  if (level >= 1)
        fprintf(outf, "%d%s", level, od->compsep);
}

/* Name column */
void cro_namecell(FILE *outf, Outchoices *od, choice rep, char *name,
		  choice source, unsigned int width, logical name1st,
		  logical isfirst, logical rightalign, Alias *aliashead,
		  Include *linkhead, logical ispage, unsigned int spaces,
		  char *baseurl) {
  extern char *workspace;

  if (isfirst)
    return;

  strcpy(workspace, name);
  do_aliasx(workspace, aliashead);
  fputs(workspace, outf);
}

/* Single cell, unsigned long argument */
void cro_ulcell(FILE *outf, Outchoices *od, choice rep, choice col,
		unsigned long x, unsigned int width) {
  fprintf(outf, "%lu%s", x, od->compsep);
}

/* Single cell, TRUSTED string argument */
void cro_strcell(FILE *outf, Outchoices *od, choice rep, choice col,
		 char *s, unsigned int width) {
  fprintf(outf, "%s%s", s, od->compsep);
}

/* Single cell, listing bytes */
void cro_bytescell(FILE *outf, Outchoices *od, choice rep, choice col,
		   double b, double bmult, unsigned int width) {
  fprintf(outf, "%.0f%s", b, od->compsep);
}

/* Single cell, listing percentage */
void cro_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n,
		double tot, unsigned int width) {
  fprintf(outf, "%.3f", (tot == 0)?0.0:(n * 100.0 / tot));
  fputs(od->compsep, outf);
}

/* Single cell, index */
void cro_indexcell(FILE *outf, Outchoices *od, choice rep, choice col,
		   long index, unsigned int width) {
  /* If index is 0 (i.e. sub-item), don't print anything */
  if (index > 0)
    fprintf(outf, "%ld", index);
  fputs(od->compsep, outf);
}

/* End of a table row */
void cro_rowend(FILE *outf, Outchoices *od, choice rep) {
  putc('\n', outf);
}

/* Blank line in time reports */
void cro_blankline(FILE *outf, Outchoices *od, choice *cols) {
}

/* Barchart in time reports */
void cro_barchart(FILE *outf, Outchoices *od, int y, char graphby) {
}

/* "Busiest time period" line */
void cro_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt,
		    unsigned long reqs, unsigned long pages, double bys,
		    datecode_t date, unsigned int hr, unsigned int min,
		    datecode_t newdate, unsigned int newhr,
		    unsigned int newmin, char graphby) {
  extern char repcodes[];

  char *compsep = od->compsep;

  putc(repcodes[rep], outf);
  if (TOLOWER(graphby) == 'r')
    fprintf(outf, "%s*BT%sR%s%lu", compsep, compsep, compsep, reqs);
  else if (TOLOWER(graphby) == 'p')
    fprintf(outf, "%s*BT%sP%s%lu", compsep, compsep, compsep, pages);
  else /* TOLOWER(graphby) == 'b' */
    fprintf(outf, "%.0f", bys);
  fprintf(outf, "%s%s\n", compsep,
	  datesprintf(od, datefmt, date, hr, min, newdate, newhr, newmin,
		      TRUE, UNSET));
}

/* End of "Not listed" line. */
void cro_notlistedstr(FILE *outf, Outchoices *od, choice rep,
		      unsigned long badn) {
  extern unsigned int *rep2lng;

  char **lngstr = od->lngstr;
  char gender = lngstr[rep2lng[rep] + 3][0];

  char *notlistedstr;

  if (gender == 'm')
    notlistedstr = lngstr[notlistedm_];
  else if (gender == 'f')
    notlistedstr = lngstr[notlistedf_];
  else
    notlistedstr = lngstr[notlistedn_];

  fprintf(outf, "[%s: %lu]", notlistedstr, badn);
}

/* The line declaring the floor and sort for a report */
void cro_whatincluded(FILE *outf, Outchoices *od, choice rep,
		      unsigned long n, Dateman *dman) {
  extern char repcodes[];

  choice sortby = od->sortby[G(rep)];
  double floormin = od->floor[G(rep)].min;
  char floorqual = od->floor[G(rep)].qual;
  choice floorby = od->floor[G(rep)].floorby;

  timecode_t tempd;

  fprintf(outf, "%c%s*f%s", repcodes[rep], od->compsep, od->compsep);
  if (floormin < 0)
    fprintf(outf, "-%lu", (unsigned long)(-floormin + EPSILON));
  else if (floorby == DATESORT || floorby == FIRSTDATE) {
    tempd = (timecode_t)(floormin + EPSILON);
    fputs(timesprintf(od, "%Y%M%D:%H%n", tempd, UNSET), outf);
  }
  else if (floorqual == '\0')
    fprintf(outf, "%lu", (unsigned long)(floormin + EPSILON));
  else
    fprintf(outf, "%f", floormin);
  if (floorqual != '\0')
    putc(floorqual, outf);
  if (floorby == REQUESTS)
    putc('R', outf);
  else if (floorby == REQUESTS7)
    putc('S', outf);
  else if (floorby == PAGES)
    putc('P', outf);
  else if (floorby == PAGES7)
    putc('Q', outf);
  else if (floorby == BYTES)
    putc('B', outf);
  else if (floorby == BYTES7)
    putc('C', outf);
  else if (floorby == DATESORT)
    putc('D', outf);
  else /* floorby == FIRSTDATE */
    putc('E', outf);

  /* now the sortby */
  if (floormin < 0 && sortby == RANDOM)
    sortby = floorby;
  fprintf(outf, "%s", od->compsep);
  if (sortby == ALPHABETICAL)
    putc('a', outf);
  else if (sortby == BYTES)
    putc('b', outf);
  else if (sortby == BYTES7)
    putc('c', outf);
  else if (sortby == DATESORT)
    putc('d', outf);
  else if (sortby == FIRSTDATE)
    putc('e', outf);
  else if (sortby == PAGES)
    putc('p', outf);
  else if (sortby == PAGES7)
    putc('q', outf);
  else if (sortby == REQUESTS)
    putc('r', outf);
  else if (sortby == REQUESTS7)
    putc('s', outf);
  else /* sortby == RANDOM */
    putc('x', outf);
  putc('\n', outf);
}

/* Include a header file or footer file */
void cro_includefile(FILE *outf, Outchoices *od, char *name, char type) {
  FILE *inf;
  char buffer[BLOCKSIZE];
  size_t n;

  if ((inf = my_fopen(name, (type == 'h')?"header file":"footer file")) !=
      NULL) {
    while ((n = fread(buffer, 1, BLOCKSIZE, inf)))  /* single equals */
      fwrite((void *)buffer, 1, n, outf);
    (void)my_fclose(inf, name, (type == 'h')?"header file":"footer file");
  }
}

/* Filetype for RISC OS */
unsigned int cro_riscosfiletype(void) {
  return 0xfff;
}
analog-ce-6.0.17/src/outhtml.c000066400000000000000000001312201406366436600160770ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** outhtml.c; HTML output ***/

#include "anlghea3.h"

/* Page width */
unsigned int html_pagewidth(Outchoices *od) {
  return od->htmlpagewidth;
}

/* The top of the output if we are in CGI mode */
void html_cgihead(FILE *outf, Outchoices *od) {
  fprintf(outf, "Content-Type: text/html; charset=%s\n\n",
	  od->lngstr[charset_]);
}

/* Stuff this output style needs in the page header */
void html_stylehead(FILE *outf, Outchoices *od) {
  fputs("\n", outf);
  fputs("\n\n", outf);
  fprintf(outf, "\n", od->lngstr[charset_]);
  if (od->norobots)
    fputs("\n", outf);
  fprintf(outf, "\n", VERSION);
  fputs("", outf);
  htmlputs(outf, od, od->hostname, FROM_CFG);
  fprintf(outf, " %s", od->lngstr[webstatsfor_]);
  fputs("\n", outf);
  if (!strcaseeq(od->stylesheet, "none")) {
    fputs("stylesheet, IN_HREF);
    fputs("\" rel=\"stylesheet\">\n", outf);
  }
  fputs("\n", outf);
  fputs("\n", outf);
}

/* The title of the page, plus the user's HEADERFILE */
void html_pagetitle(FILE *outf, Outchoices *od) {
  fputs("

", outf); if (!strcaseeq(od->logo, "none")) { fputs("logo[0] != '/' && strstr(od->logo, "://") == NULL) htmlputs(outf, od, od->imagedir, IN_HREF); htmlputs(outf, od, od->logo, IN_HREF); if (STREQ(od->logo, "analogo")) fprintf(outf, ".%s", od->pngimages?"png":"gif"); /* Above: '.' not EXTSEP even on RISC OS */ fputs("\" alt=\"\"> ", outf); } if (strcaseeq(od->hosturl, "none")) { fprintf(outf, "%s ", od->lngstr[webstatsfor_]); htmlputs(outf, od, od->hostname, FROM_CFG); } else { fprintf(outf, "%s lngstr[webstatsfor_]); htmlputs(outf, od, od->hosturl, IN_HREF); fputs("\">", outf); htmlputs(outf, od, od->hostname, FROM_CFG); fputs("", outf); } fputs("

\n\n", outf); if (!strcaseeq(od->headerfile, "none")) html_includefile(outf, od, od->headerfile, 'h'); } /* Program start time, and logfile start and end times */ void html_timings(FILE *outf, Outchoices *od, Dateman *dman) { extern timecode_t starttimec; char **lngstr = od->lngstr; double t0; int t1, t2; if (od->runtime) fprintf(outf, "%s %s.\n
", lngstr[progstart_], timesprintf(od, lngstr[datefmt2_], starttimec, UNSET)); if (dman->firsttime <= dman->lasttime) { fprintf(outf, "%s %s ", lngstr[reqstart_], timesprintf(od, lngstr[datefmt2_], dman->firsttime, UNSET)); fprintf(outf, "%s %s", lngstr[to_], timesprintf(od, lngstr[datefmt2_], dman->lasttime, UNSET)); t0 = (dman->lasttime - dman->firsttime) / 1440.0 + 0.005; t1 = (int)t0; t2 = (int)(100 * (t0 - (double)t1)); fprintf(outf, " (%d", t1); html_putch(outf, od->decpt); fprintf(outf, "%02d %s).\n", t2, lngstr[days_]); } } /* Finishing the top of the page */ void html_closehead(FILE *outf, Outchoices *od) { if (od->gotos == FEW) html_gotos(outf, od, -1); html_hrule(outf, od); } /* Starting the bottom of the page */ void html_pagebotstart(FILE *outf, Outchoices *od) { } /* The credit line at the bottom of the page */ void html_credit(FILE *outf, Outchoices *od) { fprintf(outf, "%s Analog CE %s.\n", od->lngstr[credit_], ANALOGURL, VNUMBER); } /* The program run time */ void html_runtime(FILE *outf, Outchoices *od, long secs) { char **lngstr = od->lngstr; fprintf(outf, "
%s: ", lngstr[runtime_]); if (secs == 0) fprintf(outf, "%s %s.\n", lngstr[lessone_], lngstr[second_]); else if (secs < 60) fprintf(outf, "%ld %s.\n", secs, (secs == 1)?lngstr[second_]:lngstr[seconds_]); else fprintf(outf, "%ld %s, %ld %s.\n", secs / 60, (secs < 120)?lngstr[minute_]:lngstr[minutes_], secs % 60, (secs % 60 == 1)?lngstr[second_]:lngstr[seconds_]); } /* The page footer, including the user's FOOTERFILE */ void html_pagefoot(FILE *outf, Outchoices *od) { fputs("
\n", outf); if (od->gotos != FALSE) html_gotos(outf, od, -1); if (!strcaseeq(od->footerfile, "none")) html_includefile(outf, od, od->footerfile, 'f'); fputs("

\n", outf); fputs("imagedir, IN_HREF); fprintf(outf, "html2.%s\"\n", od->pngimages?"png":"gif"); /* Above: '.' not EXTSEP even on RISC OS */ fputs("alt=\"HTML 2.0 Conformant!\">\n", outf); } /* Footer material for this output style */ void html_stylefoot(FILE *outf, Outchoices *od) { fputs("\n\n", outf); } /* Report title */ void html_reporttitle(FILE *outf, Outchoices *od, choice rep) { extern char *anchorname[]; extern unsigned int *rep2lng; fprintf(outf, "

%s

\n", anchorname[rep], od->lngstr[rep2lng[rep]]); if (od->gotos == TRUE) html_gotos(outf, od, rep); } /* Report footer */ void html_reportfooter(FILE *outf, Outchoices *od, choice rep) { } /* Report description */ void html_reportdesc(FILE *outf, Outchoices *od, choice rep) { fprintf(outf, "

%s\n", od->descstr[rep]); } /* The time period spanned by the report */ void html_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind) { /* NB Can't combine next two lines because timesprintf uses static buffer. */ fprintf(outf, "

%s %s ", od->lngstr[repspan_], timesprintf(od, od->lngstr[datefmt2_], mind, UNSET)); fprintf(outf, "%s %s.\n", od->lngstr[to_], timesprintf(od, od->lngstr[datefmt2_], maxd, UNSET)); } /* General Summary header */ void html_gensumhead(FILE *outf, Outchoices *od) { } /* General Summary footer */ void html_gensumfoot(FILE *outf, Outchoices *od) { } /* Single General Summary line, long data */ void html_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage) { /* If this is the first Gen Sum line, and there is no seven-day data, then start a new paragraph. Otherwise the new paragraph has already been started in html_lastseven(). */ if (namecode == succreqs_ && x7 == (unsigned long)UNSET) fprintf(outf, "

%s%s ", od->lngstr[namecode], od->lngstr[colon_]); else fprintf(outf, "
%s%s ", od->lngstr[namecode], od->lngstr[colon_]); f3printf(outf, od, (double)x, 0, od->sepchar); if (x7 != (unsigned long)UNSET) { fputs(" (", outf); f3printf(outf, od, (double)x7, 0, od->sepchar); putc(')', outf); } putc('\n', outf); } /* Single General Summary line, bytes data */ void html_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage) { char **lngstr = od->lngstr; unsigned int bm; char *c; fprintf(outf, "
%s%s ", lngstr[namecode], lngstr[colon_]); bm = (od->rawbytes)?0:findbmult(x, od->bytesdp); printbytes(outf, od, x, bm, 0, od->sepchar); if (bm > 0) { c = strchr(lngstr[xbytes_], '?'); *c = '\0'; fprintf(outf, " %s%s%s", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1); *c = '?'; } else fprintf(outf, " %s", lngstr[bytes_]); if (x7 != UNSET) { fputs(" (", outf); bm = (od->rawbytes)?0:findbmult(x7, od->bytesdp); printbytes(outf, od, x7, bm, 0, od->sepchar); if (bm > 0) { c = strchr(lngstr[xbytes_], '?'); *c = '\0'; fprintf(outf, " %s%s%s)", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1); *c = '?'; } else fprintf(outf, " %s)", lngstr[bytes_]); } putc('\n', outf); } /* "Last seven" explanation line */ void html_lastseven(FILE *outf, Outchoices *od, timecode_t last7to) { fputs("

", outf); fprintf(outf, "(%s %s %s).\n", od->lngstr[brackets_], od->lngstr[sevendaysto_], timesprintf(od, od->lngstr[datefmt1_], last7to, UNSET)); } /* Start of a

 section */
void html_prestart(FILE *outf, Outchoices *od) {
  fputs("
", outf);
}

/* End of a 
 section */
void html_preend(FILE *outf, Outchoices *od) {
  fputs("
\n", outf); } /* A horizontal rule */ void html_hrule(FILE *outf, Outchoices *od) { fputs("
\n", outf); } /* An en dash */ char *html_endash(void) { return "-"; /* Should be – but not all browsers implement –, and when they do it's usually just a regular dash. */ } /* putc with special characters escaped */ void html_putch(FILE *outf, char c) { if (c == '<') fputs("<", outf); else if (c == '>') fputs(">", outf); else if (c == '&') fputs("&", outf); else if (c == '"') fputs(""", outf); else putc(c, outf); } /* strlen for HTML strings. Assume string contains no &'s except as markup. */ /* NB This may not work well for multibyte charsets, but it's hard to know whether an & is markup or just a byte of a multibyte character. Special cases for particular charsets are given below and selected in init.c. */ /* NOTE html_strlengthgth_utf8 and _jis in outhtml only. Other outputters just have _strlengthgth */ size_t html_strlength(const char *s) { const char *t; logical f; size_t i; for (t = s, f = TRUE, i = 0; *t != '\0'; t++) { if (*t == '&') f = FALSE; else if (*t == ';') f = TRUE; if (f) i++; } return(f?i:strlen(s)); /* If !f, something went wrong (eg multibyte). Maybe the & wasn't markup. */ } size_t html_strlength_utf8(const char *s) { /* This only knows about jp chars in the range 1110xxxx 10xxxxxx 10xxxxxx. Other languages using UTF-8 would need new code. */ const unsigned char *t; size_t i; for (i = 0, t = (const unsigned char *)s; *t != '\0'; t++) { if ((*t & 0xf0) == 0xe0 && (*(t + 1) & 0xc0) == 0x80 && (*(t + 2) & 0xc0) == 0x80) { t += 2; /* plus 1 in loop */ i += 2; /* three-character jp sequence = one jp char = length 2 wrt ASCII */ } else i++; } return(i); } size_t html_strlength_jis(const char *s) { size_t i; for (i = 0; *s != '\0'; s++) { if (*s == 0x1B && (*(s + 1) == '$' || *(s + 1) == '(') && *(s + 2) == 'B') s += 2; /* plus 1 in loop */ /* ignore ESC $ B and ESC ( B switches */ else i++; } return(i); /* returns length in bytes, because one jp char = two bytes and width of one jp char = width of two ASCII chars */ } /* Allow month in dates? DO NOT enable for human-readable text because of i18n problems. */ logical html_allowmonth(void) { return FALSE; } /* Calculate column widths */ void html_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany) { calcwidths(od, rep, width, bmult, bmult7, unit, maxr, maxr7, maxp, maxp7, maxb, maxb7, howmany); } /* "Each unit represents" line */ void html_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult) { char **lngstr = od->lngstr; char *s; fputs("

\n", outf); fprintf(outf, "%s (", lngstr[eachunit_]); if (ISLOWER(graphby)) fprintf(outf, "%c", od->markchar); else { fprintf(outf, "imagedir, IN_HREF); fprintf(outf, "bar%c1.%s\" alt=\"%c\">", od->barstyle, od->pngimages?"png":"gif", od->markchar); /* Above: '.' not EXTSEP even on RISC OS */ } fprintf(outf, ") %s ", lngstr[represents_]); if (graphby == 'R' || graphby == 'r') { f3printf(outf, od, unit, 0, od->sepchar); if (unit == 1.) fprintf(outf, " %s.", lngstr[request_]); else fprintf(outf, " %s %s.", lngstr[requests_], lngstr[partof_]); } else if (graphby == 'P' || graphby == 'p') { f3printf(outf, od, unit, 0, od->sepchar); if (unit == 1.) fprintf(outf, " %s.", lngstr[pagereq_]); else fprintf(outf, " %s %s.", lngstr[pagereqs_], lngstr[partof_]); } else { if (bmult > 0) { html_printdouble(outf, od, unit); s = strchr(lngstr[xbytes_], '?'); /* checked in initialisation */ *s = '\0'; fprintf(outf, " %s%s%s %s.", lngstr[xbytes_], lngstr[byteprefix_ + bmult], s + 1, lngstr[partof_]); *s = '?'; } else { f3printf(outf, od, unit, 0, od->sepchar); fprintf(outf, " %s %s.", lngstr[bytes_], lngstr[partof_]); } } putc('\n', outf); } /* Start of column header line */ void html_colheadstart(FILE *outf, Outchoices *od, choice rep) { } /* Column header line: individual column */ void html_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated) { if (unterminated) fputs(colname, outf); else fprintf(outf, "%*s: ", width + strlen(colname) - od->outputter->strlength(colname), colname); } /* End of column header line */ void html_colheadend(FILE *outf, Outchoices *od, choice rep) { putc('\n', outf); } /* Start of column header underlining line */ void html_colheadustart(FILE *outf, Outchoices *od, choice rep) { } /* Underlining of one column header. */ /* If column is terminated, set width and leave name blank; and conversely. */ void html_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name) { if (width > 0) { matchlengthn(outf, od, (size_t)width, '-'); fputs(": ", outf); } else matchlength(outf, od, name, '-'); } /* End of column header underlining line */ void html_colheaduend(FILE *outf, Outchoices *od, choice rep) { putc('\n', outf); } /* Start of a table row */ void html_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt) { } /* Print level in hierarchy represented by this row */ void html_levelcell(FILE *outf, Outchoices *od, choice rep, int level) { } /* Name column */ void html_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl) { extern char *workspace; choice savemultibyte; logical linked; int i; if (name1st != isfirst) return; if (isfirst) matchlengthn(outf, od, width - od->outputter->strlength(name), ' '); savemultibyte = od->multibyte; if (rep == REP_SIZE || rep == REP_PROCTIME) /* Kludge: for these two reports, we know the texts are things like "< 1" and we want to convert > and < */ od->multibyte = FALSE; strcpy(workspace, name); do_aliasx(workspace, aliashead); if (!isfirst) { if (rightalign) i = (int)width - (int)od->outputter->strlength(workspace) - (int)spaces; else i = (int)spaces; matchlengthn(outf, od, i, ' '); } linked = (linkhead != NULL && included(name, ispage, linkhead)); if (linked) { /* We link to the unaliased name, because the OUTPUTALIAS is usually in the nature of an annotation. */ /* If the config file has a defined anonymization service provider [ANONYMIZERURL], prefix with the provided string */ if (strcaseeq(od->anonymizerurl, "none")) { fputs("anonymizerurl, IN_HREF); } if (baseurl != NULL) htmlputs(outf, od, baseurl, IN_HREF); html_escfprintf(outf, name); /* If set, add rel="nofollow" */ if (od->linknofollow) { fputs("\" rel=\"nofollow\">", outf); } else { fputs("\">", outf); } } htmlputs(outf, od, workspace, source); if (linked) fputs("", outf); if (isfirst) fputs(": ", outf); od->multibyte = savemultibyte; /* restore multibyte */ } /* Single cell, unsigned long argument */ void html_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width) { f3printf(outf, od, (double)x, width, od->repsepchar); fputs(": ", outf); } /* Single cell, TRUSTED string argument */ void html_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width) { matchlengthn(outf, od, width - od->outputter->strlength(s), ' '); htmlputs(outf, od, s, TRUSTED); fputs(": ", outf); } /* Single cell, listing bytes */ void html_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width) { printbytes(outf, od, b, bmult, width, od->repsepchar); fputs(": ", outf); } /* Single cell, listing percentage */ void html_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width) { double pc; unsigned int pc1, pc2; matchlengthn(outf, od, width - 6, ' '); if (tot == 0) pc = 0.0; else pc = n * 10000.0 / tot; if (pc >= 9999.5) fputs(" 100%", outf); else if (pc < 0.5) fputs(" ", outf); else { pc1 = ((int)(pc + 0.5)) / 100; pc2 = ((int)(pc + 0.5)) % 100; fprintf(outf, "%2d", pc1); html_putch(outf, od->decpt); fprintf(outf, "%02d%%", pc2); } fputs(": ", outf); } /* Single cell, index */ void html_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width) { /* If index is 0 (i.e. sub-item), just print spaces */ if (index <= 0) matchlengthn(outf, od, width, ' '); else f3printf(outf, od, (double)index, width, od->repsepchar); fputs(": ", outf); } /* End of a table row */ void html_rowend(FILE *outf, Outchoices *od, choice rep) { putc('\n', outf); } /* Blank line in time reports */ void html_blankline(FILE *outf, Outchoices *od, choice *cols) { putc('\n', outf); } /* Barchart in time reports */ void html_barchart(FILE *outf, Outchoices *od, int y, char graphby) { int i, j; logical first = TRUE; if (ISLOWER(graphby)) { for (i = 0; i < y; i++) html_putch(outf, od->markchar); return; } for (j = 32; j >= 1; j /= 2) { while (y >= j) { fputs("imagedir, IN_HREF); fprintf(outf, "bar%c%d.%s\" alt=\"", od->barstyle, j, od->pngimages?"png":"gif"); /* '.' not EXTSEP even on RISC OS */ if (first) { for (i = 0; i < y; i++) html_putch(outf, od->markchar); first = FALSE; } fputs("\">", outf); y -= j; } } } /* "Busiest time period" line */ void html_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby) { extern unsigned int *rep2busystr; char **lngstr = od->lngstr; char sepchar = od->sepchar; unsigned int bmult; char *s; fprintf(outf, "%s %s (", lngstr[rep2busystr[rep]], datesprintf(od, datefmt, date, hr, min, newdate, newhr, newmin, TRUE, UNSET)); if (TOLOWER(graphby) == 'r') { f3printf(outf, od, (double)reqs, 0, sepchar); fprintf(outf, " %s).\n", (reqs == 1)?lngstr[request_]:lngstr[requests_]); } else if (TOLOWER(graphby) == 'p') { f3printf(outf, od, (double)pages, 0, sepchar); fprintf(outf, " %s).\n", (pages == 1)?lngstr[pagereq_]:lngstr[pagereqs_]); } else /* TOLOWER(graphby) == 'b' */ { if (od->rawbytes) bmult = 0; else bmult = findbmult(bys, od->bytesdp); printbytes(outf, od, bys, bmult, 0, sepchar); putc(' ', outf); if (bmult >= 1) { s = strchr(lngstr[xbytes_], '?'); /* checked in initialisation */ *s = '\0'; fprintf(outf, "%s%s%s).\n", lngstr[xbytes_], lngstr[byteprefix_ + bmult], s + 1); *s = '?'; } else fprintf(outf, "%s).\n", lngstr[bytes_]); } } /* End of "Not listed" line. */ void html_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn) { extern unsigned int *rep2lng, *rep2colhead; char **lngstr = od->lngstr; char *colhead = lngstr[rep2colhead[rep]]; char *colheadp = lngstr[rep2colhead[rep] + 1]; char gender = lngstr[rep2lng[rep] + 3][0]; char *notlistedstr; if (gender == 'm') notlistedstr = lngstr[notlistedm_]; else if (gender == 'f') notlistedstr = lngstr[notlistedf_]; else notlistedstr = lngstr[notlistedn_]; fprintf(outf, "[%s: ", notlistedstr); f3printf(outf, od, (double)badn, 0, od->sepchar); fprintf(outf, " %s]", (badn == 1)?colhead:colheadp); } /* The line declaring the floor and sort for a report */ void html_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman) { whatincluded(outf, od, rep, n, dman); } /* Spacing at the start of the whatincluded line */ void html_whatinchead(FILE *outf, Outchoices *od) { fputs("

\n", outf); } /* Finishing the whatincluded line */ void html_whatincfoot(FILE *outf, Outchoices *od) { putc('\n', outf); } /* Printing part of the whatincluded line */ void html_whatincprintstr(FILE *outf, Outchoices *od, char *s) { htmlputs(outf, od, s, TRUSTED); } /* Print a double to a nice number of decimal places */ void html_printdouble(FILE *outf, Outchoices *od, double x) { unsigned int prec; double d; /* first calculate how many decimal places we need */ for (prec = 0, d = x - (double)((int)(x)); d - (double)((int)(d + 0.000005)) > 0.00001; d *= 10) prec++; /* now print it */ if (prec > 0) { fprintf(outf, "%d", (int)x); html_putch(outf, od->decpt); fprintf(outf, "%0*d", prec, (int)(d + EPSILON)); } else fprintf(outf, "%d", (int)(x + EPSILON)); } /* Include a header file or footer file */ void html_includefile(FILE *outf, Outchoices *od, char *name, char type) { FILE *inf; char buffer[BLOCKSIZE]; size_t n; if ((inf = my_fopen(name, (type == 'h')?"header file":"footer file")) != NULL) { od->html = FALSE; html_hrule(outf, od); while ((n = fread(buffer, 1, BLOCKSIZE, inf))) /* single equals */ fwrite((void *)buffer, 1, n, outf); if (type == 'h') html_hrule(outf, od); (void)my_fclose(inf, name, (type == 'h')?"header file":"footer file"); } } /* Filetype for RISC OS */ unsigned int html_riscosfiletype(void) { return 0xfaf; } /* ======================================================================= */ /* Supporting functions for HTML */ /* Print "goto"s. Assume we've checked that we want gotos here. */ void html_gotos(FILE *outf, Outchoices *od, choice rep) { extern unsigned int *rep2lng; extern char *anchorname[]; choice *reporder = od->reporder; char **lngstr = od->lngstr; int i; fprintf(outf, "

(%s", lngstr[goto_]); fprintf(outf, "%s %s", lngstr[colon_], lngstr[top_]); for (i = 0; reporder[i] != -1; i++) { if (reporder[i] == rep) fprintf(outf, "%s %s", lngstr[colon_], lngstr[rep2lng[reporder[i]]]); else if (od->repq[reporder[i]]) fprintf(outf, "%s %s", lngstr[colon_], anchorname[reporder[i]], lngstr[rep2lng[reporder[i]]]); } fputs(")\n", outf); } /* Escape names for use in hyperlinks. As with htmlputs(), don't try and print character by character. */ void html_escfprintf(FILE *outf, char *name) { #ifdef EBCDIC extern unsigned char os_toascii[]; #endif char w1[64]; char *w = w1; int len = 0; for ( ; *name != '\0'; name++) { if (ISALNUM(*name) || *name == '/' || *name == '.' || *name == ':' || *name == '-' || *name == '~' || *name == '_' || *name == '?' || *name == '%' || *name == '=' || *name == '+' || *name == ';' || *name == '@' || *name == '$' || *name == ',') { /* All reserved and some unreserved chars from RFC 2396 Sec 2. */ /* Reserved chars are not escaped because if they are in the logfile they must have their special meanings (path delimiters etc.), and escaping them would change the semantics of the URL. */ PUTc(w, *name); len += 1; } else if (*name == '&') { PUTs(w, "&", 0); len += 5; } else { #ifdef EBCDIC sprintf(w, "%%%.2X", os_toascii[*name]); #else sprintf(w, "%%%.2X", (unsigned char)(*name)); #endif w += 3; len += 3; } if (len > 58) { *w = '\0'; fputs(w1, outf); w = w1; len = 0; } } *w = '\0'; fputs(w1, outf); } /* htmlputs(): print a string with an appropriate amount of HTML encoding. Much quicker than using html_putch(). */ /** What to convert has SECURITY IMPLICATIONS. An attacker must not be allowed ** to insert abitrary data in the output. ** ** So data is categorised according to its source, via an enum in anlghea3.h. ** In the following descriptions of the security levels, "convert" means ** converting e.g. < to < and "escape" means using \< to prevent this ** happening. "unprintable" means characters set as unprintable in init.c: ** note that this is only known unprintable characters 0x00 - 0x1F, 0x7F, ** and in ISO-8859-* also 0x80-0x9F. ** ** 1) AS_IS: Completely trusted string. Output as-is. ** 2) TRUSTED: E.g. a string from a language file. Also completely trusted. In ** single-byte mode, convert characters (for convenience not security), but ** allow any of the special characters to be escaped, even \< . ** In multibyte mode, output the string as-is. ** 3) FROM_CFG: An item read in from configuration. Unless we're in CGI mode, ** treat as case 2. In CGI mode, the input could have come from the form, ** so be more cautious to avoid cross-site scripting attacks. Specifically, ** convert all characters, allow only \& and \\ escapes, and use '?' in ** place of unprintable characters. ** 4) UNTRUSTED: E.g. data from the logfile. Do all conversions, don't allow ** any escapes, and use '?' in place of all unprintable characters. ** 5) IN_HREF: Special case for data from the config file which is being put ** inside an or . As 3), but use %nm in place of ** unprintable characters. (NB data from the logfile which is put inside ** an href uses escfprintf() instead of this function.) **/ void htmlputs(FILE *outf, Outchoices *od, char *s, choice source) { #ifdef EBCDIC extern unsigned char os_toascii[]; #endif extern logical cgi; extern logical unprintable[256]; char w1[64]; char *c; char *w = w1; int len = 0; if (source == FROM_CFG && !cgi) source = TRUSTED; if (source == TRUSTED && od->multibyte) source = AS_IS; if (source == AS_IS) { fputs(s, outf); return; } for (c = s; *c != '\0'; c++) { if (*c == '<') { PUTs(w, "<", 0); len += 4; } else if (*c == '>') { PUTs(w, ">", 0); len += 4; } else if (*c == '&') { PUTs(w, "&", 0); len += 5; } else if (*c == '"') { PUTs(w, """, 0); len += 6; } else if (*c == '\\' && /* escape these chars in these circumstances: */ ((source == TRUSTED && (*(c + 1) == '<' || *(c + 1) == '>' || *(c + 1) == '&' || *(c + 1) == '"' || *(c + 1) == '\\')) || (source == FROM_CFG && (*(c + 1) == '&' || *(c + 1) == '\\')))) { od->html = FALSE; PUTc(w, *(++c)); len += 1; } else if (unprintable[(unsigned char)(*c)] && source != TRUSTED) { /* unprintable chars */ if (source == IN_HREF) { #ifdef EBCDIC sprintf(w, "%%%.2X", os_toascii[*c]); #else sprintf(w, "%%%.2X", (unsigned char)(*c)); #endif w += 3; len += 3; } else { /* source == FROM_CFG or UNTRUSTED */ PUTc(w, '?'); len += 1; } } else { /* output non-special characters as-is */ PUTc(w, *c); len += 1; } if (len > 56) { *w = '\0'; fputs(w1, outf); w = w1; len = 0; } } *w = '\0'; fputs(w1, outf); } /* ======================================================================= */ /* Pie charts */ /* Shared by HTML and XHTML */ #ifndef NOGRAPHICS /* First some #defines and globals */ #define XSIZE (600) /* Size of whole graphic */ #define YSIZE (270) #define SHORTXSIZE (2 * (XCENTRE)) /* Size if no text on picture */ #define SHORTYSIZE (2 * (YCENTRE)) #define XCENTRE (125) /* Centre of pie */ #define YCENTRE (125) #define DIAMETER (200) /* Diameter of pie */ #define BORDER (4) /* Size of border */ #define BOXESLEFT (XCENTRE + DIAMETER / 2 + 25) /* The coloured boxes */ #define BOXESTOP (YCENTRE - DIAMETER / 2 + 16) #define BOXESSIZE (10) #define TEXTLEFT ((BOXESLEFT) + 2 * (BOXESSIZE)) /* The labels */ #define TEXTOFFSET (-1) #define TEXTGAP (16) /* Vertical period between successive boxes/labels */ #define CAPTIONLEFT (XCENTRE - DIAMETER / 2) /* Bottom caption */ #define CAPTIONTOP (YCENTRE + DIAMETER / 2 + 12) #define NO_COLOURS (10) /* Number of text strings, excluding "Other" */ #define MAXCHARS (54) /* Max length of a label, INCLUDING \0. */ #define TWOPI (6.283185) #define MINANGLE (0.01) /* Min fraction of circle we are prepared to plot */ #define PIE_EPSILON (0.0001) gdImagePtr im; gdFontPtr font; logical normalchart; int white, black, grey, lightgrey, colours[NO_COLOURS], col, boxesy; double totangle; FILE *piechart_init(char *filename) { FILE *pieoutf; int xsize, ysize, b1, b2; if ((pieoutf = FOPENWB(filename)) == NULL) { warn('F', TRUE, "Failed to open pie chart file %s for writing: " "ignoring it", filename); return(pieoutf); } debug('F', "Opening %s as pie chart file", filename); #ifdef RISCOS _swix(OS_File, _INR(0,2), 18, filename, 0xb60); /* set PNG filetype */ #endif xsize = normalchart?XSIZE:SHORTXSIZE; ysize = normalchart?YSIZE:SHORTYSIZE; im = gdImageCreate(xsize, ysize); /* The first colour allocated in a new image is the background colour. */ white = gdImageColorAllocate(im, 255, 255, 255); /* white */ black = gdImageColorAllocate(im, 0, 0, 0); /* black */ grey = gdImageColorAllocate(im, 128, 128, 128); /* grey */ lightgrey = gdImageColorAllocate(im, 217, 217, 217); /* light grey */ col = 0; /* Wedge colours. If these change, so must images/sq*. */ colours[col++] = gdImageColorAllocate(im, 255, 0, 0); /* red */ colours[col++] = gdImageColorAllocate(im, 0, 0, 255); /* mid blue */ colours[col++] = gdImageColorAllocate(im, 0, 128, 0); /* green */ colours[col++] = gdImageColorAllocate(im, 255, 128, 0); /* orange */ colours[col++] = gdImageColorAllocate(im, 0, 0, 128); /* navy blue */ colours[col++] = gdImageColorAllocate(im, 0, 255, 0); /* pale green */ colours[col++] = gdImageColorAllocate(im, 255, 128, 128); /* pink */ colours[col++] = gdImageColorAllocate(im, 0, 255, 255); /* cyan */ colours[col++] = gdImageColorAllocate(im, 128, 0, 128); /* purple */ colours[col++] = gdImageColorAllocate(im, 255, 255, 0); /* yellow */ col = 0; totangle = 0.75; /* starting at the top */ boxesy = BOXESTOP; b1 = xsize - 1 - BORDER; b2 = ysize - 1 - BORDER; /* Plot outline of pie, and border of image */ gdImageArc(im, XCENTRE, YCENTRE, DIAMETER + 2, DIAMETER + 2, 0, 360, black); gdImageRectangle(im, BORDER, BORDER, b1, b2, black); gdImageLine(im, xsize - 1, 0, b1, BORDER, black); gdImageLine(im, 0, ysize - 1, BORDER, b2, black); gdImageFill(im, 0, 0, lightgrey); gdImageFill(im, xsize - 1, ysize - 1, grey); gdImageLine(im, 0, 0, BORDER, BORDER, black); gdImageLine(im, xsize - 1, ysize - 1, b1, b2, black); return(pieoutf); } void findwedges(Wedge wedge[NO_COLOURS], choice rep, Hashindex *items, choice chartby, Strlist *expandlist, unsigned int level, Strlist *partname, unsigned long tot, double totb, double totb7) { /* Calculate which wedges we actually want, i.e. the ten with the biggest angles. But we also preserve the sort order of the "items" list. (Be careful between > and >= so as to use that order for breaking ties). Construction of name same as in printtree(). */ static double smallestangle; static int smallestwedge; char *name; double angle; Strlist *pn, s; size_t need = (size_t)level + 3; Hashindex *p; int i; if (level == 0) { /* not recursing: initialise wedges to 0 */ for (i = 0; i < NO_COLOURS; i++) { wedge[i].angle = 0.0; wedge[i].name = NULL; } smallestangle = 0.0; smallestwedge = NO_COLOURS - 1; } for (pn = partname; pn != NULL; TO_NEXT(pn)) need += strlen(pn->name); for (p = items; p != NULL; TO_NEXT(p)) { name = maketreename(partname, p, &pn, &s, need, rep, TRUE); if (incstrlist(name, expandlist) && p->other != NULL && ((Hashtable *)(p->other))->head[0] != NULL) /* then find wedges in lower level of tree instead. ->head[0] != NULL must come after p->other != NULL; o/wise it may not be a treerep */ findwedges(wedge, rep, ((Hashtable *)(p->other))->head[0], chartby, expandlist, level + 1, pn, tot, totb, totb7); else { if (chartby == BYTES) angle = p->own->bytes / totb; else if (chartby == BYTES7) angle = p->own->bytes7 / totb7; else angle = ((double)(p->own->data[chartby])) / ((double)tot); if (angle > smallestangle) {/* remove smallest, move along, put p last */ /* We probably don't do this very often so we don't bother with keeping hold of the memory and reusing it later. */ free(wedge[smallestwedge].name); for (i = smallestwedge; i < NO_COLOURS - 1; i++) { wedge[i].name = wedge[i + 1].name; wedge[i].angle = wedge[i + 1].angle; } COPYSTR(wedge[NO_COLOURS - 1].name, name); /* malloc's necessary space. Needed because next call to maketreename() will overwrite name. */ wedge[NO_COLOURS - 1].angle = angle; smallestangle = wedge[0].angle; /* Recalculate smallest */ smallestwedge = 0; for (i = 1; i < NO_COLOURS; i++) { if (wedge[i].angle <= smallestangle) { smallestangle = wedge[i].angle; smallestwedge = i; } } } } } } void piechart_caption(FILE *outf, choice rep, choice chartby, char **lngstr) { extern choice *rep2reqs, *rep2reqs7; extern unsigned int *method2sort; static char *caption = NULL; static size_t len = 0; choice requests = rep2reqs[G(rep)]; choice requests7 = rep2reqs7[G(rep)]; ENSURE_LEN(caption, len, strlen(lngstr[chartby_]) + strlen(lngstr[method2sort[requests]]) + strlen(lngstr[method2sort[requests7]]) + strlen(lngstr[method2sort[chartby]]) + 3); /* More than we need, but that's OK. */ strcpy(caption, lngstr[chartby_]); strcat(caption, " "); if (chartby == REQUESTS) strcat(caption, lngstr[method2sort[requests]]); else if (chartby == REQUESTS7) strcat(caption, lngstr[method2sort[requests7]]); else strcat(caption, lngstr[method2sort[chartby]]); strcat(caption, "."); if (normalchart) { #ifdef EBCDIC (void)strtoascii(caption); #endif gdImageString(im, font, CAPTIONLEFT, CAPTIONTOP, (unsigned char *)caption, black); } else fprintf(outf, "

%s

\n", caption); } int piechart_wedge(FILE *outf, Outchoices *od, double angle, char *s) { /* The angle is expressed between 0 and 1. Returns col if wedge was big enough to be coloured in, NO_COLOURS for grey, else -1. */ double x, y, newangle, medangle; int colour = black, rc = -1; char t[MAXCHARS]; size_t len; if (angle < 0) { angle = 1.75 - totangle; /* rest of the circle because started at 0.75 */ colour = grey; } else if (col >= NO_COLOURS) angle = 0; /* As a signal not to make a wedge. Can this happen? */ else if (angle >= MINANGLE) colour = colours[col]; if (angle >= MINANGLE || (colour == grey && angle > EPSILON)) { /* plot one edge of wedge */ x = (double)XCENTRE + (double)DIAMETER * cos(totangle * TWOPI) / 2. + PIE_EPSILON; y = (double)YCENTRE + (double)DIAMETER * sin(totangle * TWOPI) / 2. + PIE_EPSILON; gdImageLine(im, XCENTRE, YCENTRE, (int)x, (int)y, black); /* plot other edge of wedge */ newangle = totangle + angle; x = (double)XCENTRE + (double)DIAMETER * cos(newangle * TWOPI) / 2. + PIE_EPSILON; y = (double)YCENTRE + (double)DIAMETER * sin(newangle * TWOPI) / 2. + PIE_EPSILON; gdImageLine(im, XCENTRE, YCENTRE, (int)x, (int)y, black); /* Fill wedge */ medangle = totangle + angle / 2.; x = (double)XCENTRE + (double)DIAMETER * cos(medangle * TWOPI) / 2.5; y = (double)YCENTRE + (double)DIAMETER * sin(medangle * TWOPI) / 2.5; if (gdImageGetPixel(im, (int)x, (int)y) == white) { /* room to colour */ gdImageFill(im, (int)x, (int)y, colour); /* Make label for wedge. If !normalchart, this is done in piechart_key() below instead. (See long comment near bottom of piechart().) */ if (normalchart) { gdImageFilledRectangle(im, BOXESLEFT, boxesy, BOXESLEFT + BOXESSIZE, boxesy + BOXESSIZE, colour); if ((len = strlen(s)) <= MAXCHARS - 1) strcpy(t, s); else { strncpy(t, s, (MAXCHARS - 3) / 2); strcpy(t + (MAXCHARS - 3) / 2, "..."); strncpy(t + (MAXCHARS + 3) / 2, s + len - (MAXCHARS - 4) / 2, (MAXCHARS - 4) / 2); t[MAXCHARS - 1] = '\0'; } #ifdef EBCDIC strtoascii(t); #endif gdImageString(im, font, TEXTLEFT, boxesy + TEXTOFFSET, (unsigned char *)t, black); boxesy += TEXTGAP; } rc = (colour == grey)?NO_COLOURS:col; } /* end if (room to colour) */ totangle = newangle; col++; } return(rc); } void piechart_key(FILE *outf, Outchoices *od, int col, char *name, char *extension, Alias *aliashead) { extern char *workspace; /* Only called if !normalchart and wedge was included on chart */ if (od->outstyle == HTML) fputs("
outstyle == XHTML */ fputs("
imagedir, IN_HREF); if (col == NO_COLOURS) fprintf(outf, "sqg.%s", extension); else /* Above and below: '.' not EXTSEP even on RISC OS */ fprintf(outf, "sq%d.%s", col, extension); if (od->outstyle == HTML) fputs("\" alt=\"\"> ", outf); else /* od->outstyle == XHTML */ fputs("\" alt=\"\" /> ", outf); strcpy(workspace, name); do_aliasx(workspace, aliashead); htmlputs(outf, od, workspace, UNTRUSTED); fputs("\n", outf); } void piechart_write(FILE *pieoutf, char *filename, logical jpegcharts) { #ifdef HAVE_GD if (jpegcharts) gdImageJpeg(im, pieoutf, 100); else #endif gdImagePng(im, pieoutf); debug('F', "Closing %s", filename); fclose(pieoutf); gdImageDestroy(im); } void piechart_cleanup(Wedge wedge[NO_COLOURS]) { int i; /* free the wedge names allocated in findwedges() */ for (i = 0; i < NO_COLOURS; i++) free(wedge[i].name); } void piechart(FILE *outf, Outchoices *od, choice rep, Hashindex *items, choice requests, choice requests7, choice pages, choice pages7, unsigned long totr, unsigned long totr7, unsigned long totp, unsigned long totp7, double totb, double totb7) { extern unsigned int *rep2lng; extern char *repname[]; extern char *workspace; extern char *anchorname[]; static char *filename = NULL; char **lngstr = od->lngstr; choice chartby = od->chartby[G(rep)]; Strlist *expandlist = od->expandhead[G(rep)]; char gender = lngstr[rep2lng[rep] + 3][0]; char *extension = (od->jpegcharts)?"jpg":"png"; Wedge wedge[NO_COLOURS]; FILE *pieoutf; int key[NO_COLOURS], keyg; double largestangle; unsigned long tot = 1; char *otherstr; int i; /* Sort out what the chartby really means */ if (chartby == CHART_NONE) return; /* We didn't want a pie chart after all */ if (chartby == REQUESTS) { chartby = requests; tot = totr; } else if (chartby == REQUESTS7) { chartby = requests7; tot = totr7; } else if (chartby == PAGES) { chartby = pages; tot = totp; } else if (chartby == PAGES7) { chartby = pages7; tot = totp7; } if (tot == 0 || (chartby == BYTES && totb < 0.5) || (chartby == BYTES7 && totb7 < 0.5)) { warn('R', TRUE, "In %s, turning off empty pie chart", repname[rep]); return; } /* Calculate which wedges to include */ findwedges(wedge, rep, items, chartby, expandlist, 0, NULL, tot, totb, totb7); /* Check whether we still want a chart */ largestangle = wedge[0].angle; for (i = 1; i < NO_COLOURS; i++) largestangle = MAX(wedge[i].angle, largestangle); if (largestangle >= 1 - EPSILON) { warn('R', TRUE, "In %s, turning off pie chart of only one wedge", repname[rep]); return; } if (largestangle == 0.) { warn('R', TRUE, "In %s, turning off pie chart with no wedges", repname[rep]); return; } if (largestangle < MINANGLE) { warn('R', TRUE, "In %s, turning off pie chart because no wedge " "large enough", repname[rep]); return; } /* font and normalchart are the same for every chart, but calculating them here allows us to keep the variables only in this file */ normalchart = TRUE; if (strcaseeq(lngstr[charset_], "ISO-8859-2")) font = gdFontSmall; else { font = gdFontFixed; if (!strcaseeq(lngstr[charset_], "ISO-8859-1") && !strcaseeq(lngstr[charset_], "US-ASCII")) normalchart = FALSE; } if (filename == NULL) filename = (char *)xmalloc(strlen(od->localchartdir) + 13); /* max poss length = localchartdir + anchorname ( <= 8 ) + ".png\0" */ sprintf(filename, "%s%s%c%s", od->localchartdir, anchorname[rep], EXTSEP, extension); if ((pieoutf = piechart_init(filename)) == NULL) return; /* Warning message is given in piechart_init() */ /* Now we can finally get round to plotting the chart */ for (i = 0; i < NO_COLOURS; i++) { key[i] = -1; if (wedge[i].name != NULL) { strcpy(workspace, wedge[i].name); do_aliasx(workspace, od->aliashead[G(rep)]); key[i] = piechart_wedge(outf, od, wedge[i].angle, workspace); /* retain i -> colour mapping for calling piechart_key() below */ } } if (normalchart) piechart_caption(outf, rep, od->chartby[G(rep)], lngstr); /* Plot the catch-all wedge and close the file */ if (gender == 'm') otherstr = lngstr[otherm_]; else if (gender == 'f') otherstr = lngstr[otherf_]; else otherstr = lngstr[othern_]; keyg = piechart_wedge(outf, od, -1., otherstr); piechart_write(pieoutf, filename, od->jpegcharts); /* Now the text on the page. In CGI mode, this must be done _after_ the image is closed, or the browser may fail to find the image. This is why printing the caption and key must be done twice; above here if normalchart, below here otherwise. */ if (od->outstyle == HTML) fprintf(outf, "

\"\"\n", od->chartdir, anchorname[rep], extension); /* '.' not EXTSEP even on RISC OS */ else /* od->outstyle == XHTML */ fprintf(outf, "

\"\"

\n", od->chartdir, anchorname[rep], extension); if (!normalchart) { piechart_caption(outf, rep, od->chartby[G(rep)], lngstr); for (i = 0; i < NO_COLOURS; i++) { if (key[i] != -1) piechart_key(outf, od, key[i], wedge[i].name, extension, od->aliashead[G(rep)]); } if (keyg != -1) piechart_key(outf, od, keyg, otherstr, extension, NULL); } piechart_cleanup(wedge); } #endif /* NOGRAPHICS */ analog-ce-6.0.17/src/outlatex.c000066400000000000000000000540771406366436600162660ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ /*** outlatex.c; LaTeX output ***/ #include "anlghea3.h" /* Supporting global variable for LaTeX */ char verbchar; /* Page width */ unsigned int latex_pagewidth(Outchoices *od) { return od->latexpagewidth; } /* The top of the output if we are in CGI mode */ void latex_cgihead(FILE *outf, Outchoices *od) { fprintf(outf, "Content-Type: text/plain\n\n"); } /* Stuff this output style needs in the page header */ void latex_stylehead(FILE *outf, Outchoices *od) { fputs("\\documentclass{article}\n", outf); if (!strcaseeq(od->lngstr[charset_], "US-ASCII")) { /* Charset US-ASCII or ISO-8859-[12] enforced in init.c */ fprintf(outf, "\\usepackage[latin%c]{inputenc}\n", od->lngstr[charset_][9]); fputs("\\usepackage[T1]{fontenc}\n", outf); } if (od->pdflatex) fputs("\\usepackage[pdftex]{color}\n", outf); else fputs("\\usepackage[dvips]{color}\n", outf); fputs("\\definecolor{barcolour}{rgb}{0.75,0.2,0.2}\n", outf); fputs("\\newsavebox{\\ttchar}\n", outf); fputs("\\sbox{\\ttchar}{\\mbox{\\tt -}}\n", outf); fputs("\\newlength{\\ttwidth}\n", outf); fputs("\\setlength{\\ttwidth}{\\wd\\ttchar}\n", outf); fputs("\\newcommand{\\barchart}[1]{{\\tt\\color{barcolour}\\rule[0.2ex]{#1\\ttwidth}{0.5ex}}}\n", outf); fputs("\\makeatletter\n", outf); fputs("\\def\\@maketitle{\\begin{center}{\\Large\\bf\\@title}\\end{center}}\n", outf); fputs("\\makeatother\n", outf); fputs("\\pagestyle{empty}\n", outf); fputs("\\setlength{\\parindent}{0pt}\n\n", outf); fputs("\\begin{document}\n", outf); } /* The title of the page, plus the user's HEADERFILE */ void latex_pagetitle(FILE *outf, Outchoices *od) { fprintf(outf, "\\title{%s ", od->lngstr[webstatsfor_]); latexputs(outf, od->hostname); fputs("}\n\\maketitle\\thispagestyle{empty}\n", outf); if (!strcaseeq(od->headerfile, "none")) latex_includefile(outf, od, od->headerfile, 'h'); } /* Program start time, and logfile start and end times */ void latex_timings(FILE *outf, Outchoices *od, Dateman *dman) { extern timecode_t starttimec; char **lngstr = od->lngstr; double t0; int t1, t2; if (od->runtime) fprintf(outf, "%s %s.\n\n", lngstr[progstart_], timesprintf(od, lngstr[datefmt2_], starttimec, UNSET)); if (dman->firsttime <= dman->lasttime) { fprintf(outf, "%s %s ", lngstr[reqstart_], timesprintf(od, lngstr[datefmt2_], dman->firsttime, UNSET)); fprintf(outf, "%s %s", lngstr[to_], timesprintf(od, lngstr[datefmt2_], dman->lasttime, UNSET)); t0 = (dman->lasttime - dman->firsttime) / 1440.0 + 0.005; t1 = (int)t0; t2 = (int)(100 * (t0 - (double)t1)); fprintf(outf, " (%d", t1); latex_putch(outf, od->decpt); fprintf(outf, "%02d %s).\n", t2, lngstr[days_]); } } /* Finishing the top of the page */ void latex_closehead(FILE *outf, Outchoices *od) { latex_hrule(outf, od); } /* Starting the bottom of the page */ void latex_pagebotstart(FILE *outf, Outchoices *od) { } /* The credit line at the bottom of the page */ void latex_credit(FILE *outf, Outchoices *od) { fprintf(outf, "\\smallskip\n%s analog %s.\n", od->lngstr[credit_], VNUMBER); } /* The program run time */ void latex_runtime(FILE *outf, Outchoices *od, long secs) { char **lngstr = od->lngstr; fprintf(outf, "\n{\\bf %s:} ", lngstr[runtime_]); if (secs == 0) fprintf(outf, "%s %s.\n", lngstr[lessone_], lngstr[second_]); else if (secs < 60) fprintf(outf, "%ld %s.\n", secs, (secs == 1)?lngstr[second_]:lngstr[seconds_]); else fprintf(outf, "%ld %s, %ld %s.\n", secs / 60, (secs < 120)?lngstr[minute_]:lngstr[minutes_], secs % 60, (secs % 60 == 1)?lngstr[second_]:lngstr[seconds_]); } /* The page footer, including the user's FOOTERFILE */ void latex_pagefoot(FILE *outf, Outchoices *od) { if (!strcaseeq(od->footerfile, "none")) latex_includefile(outf, od, od->footerfile, 'f'); } /* Footer material for this output style */ void latex_stylefoot(FILE *outf, Outchoices *od) { fputs("\\end{document}\n", outf); } /* Report title */ void latex_reporttitle(FILE *outf, Outchoices *od, choice rep) { extern unsigned int *rep2lng; fprintf(outf, "\\section*{%s}\n", od->lngstr[rep2lng[rep]]); } /* Report footer */ void latex_reportfooter(FILE *outf, Outchoices *od, choice rep) { } /* Report description */ void latex_reportdesc(FILE *outf, Outchoices *od, choice rep) { fprintf(outf, "{\\em %s}\n\n", od->descstr[rep]); if (rep != REP_SIZE && rep != REP_PROCTIME) fprintf(outf, "\\smallskip\n"); /* These two reports probably have no further header text. If this is wrong, it's corrected in latex_reportspan() later. */ } /* The time period spanned by the report */ void latex_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind) { if ((rep == REP_SIZE || rep == REP_PROCTIME) && od->descriptions && od->descstr[rep] != NULL) fputs("\\smallskip\n", outf); /* We were wrong when we assumed in latex_reportdesc() that these reports had no further header text. So correct for it now. */ /* NB Can't combine next two lines because timesprintf uses static buffer. */ fprintf(outf, "{\\em %s %s ", od->lngstr[repspan_], timesprintf(od, od->lngstr[datefmt2_], mind, UNSET)); fprintf(outf, "%s %s.}\n\n", od->lngstr[to_], timesprintf(od, od->lngstr[datefmt2_], maxd, UNSET)); if (rep != REP_SIZE && rep != REP_PROCTIME) fprintf(outf, "\\smallskip\n"); /* This time these reports really do have no further header text. */ } /* General Summary header */ void latex_gensumhead(FILE *outf, Outchoices *od) { fputs("\\begin{obeylines}\n", outf); } /* General Summary footer */ void latex_gensumfoot(FILE *outf, Outchoices *od) { fputs("\\end{obeylines}\n", outf); } /* Single General Summary line, long data */ void latex_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage) { fprintf(outf, "{\\bf %s%s} ", od->lngstr[namecode], od->lngstr[colon_]); f3printf(outf, od, (double)x, 0, od->sepchar); if (x7 != (unsigned long)UNSET) { fputs(" (", outf); f3printf(outf, od, (double)x7, 0, od->sepchar); putc(')', outf); } putc('\n', outf); } /* Single General Summary line, bytes data */ void latex_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage) { char **lngstr = od->lngstr; unsigned int bm; char *c; fprintf(outf, "{\\bf %s%s} ", lngstr[namecode], lngstr[colon_]); bm = (od->rawbytes)?0:findbmult(x, od->bytesdp); printbytes(outf, od, x, bm, 0, od->sepchar); if (bm > 0) { c = strchr(lngstr[xbytes_], '?'); *c = '\0'; fprintf(outf, " %s%s%s", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1); *c = '?'; } else fprintf(outf, " %s", lngstr[bytes_]); if (x7 != UNSET) { fputs(" (", outf); bm = (od->rawbytes)?0:findbmult(x7, od->bytesdp); printbytes(outf, od, x7, bm, 0, od->sepchar); if (bm > 0) { c = strchr(lngstr[xbytes_], '?'); *c = '\0'; fprintf(outf, " %s%s%s)", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1); *c = '?'; } else fprintf(outf, " %s)", lngstr[bytes_]); } putc('\n', outf); } /* "Last seven" explanation line */ void latex_lastseven(FILE *outf, Outchoices *od, timecode_t last7to) { fprintf(outf, "(%s %s %s).\n", od->lngstr[brackets_], od->lngstr[sevendaysto_], timesprintf(od, od->lngstr[datefmt1_], last7to, UNSET)); } /* Start of a
 section */
void latex_prestart(FILE *outf, Outchoices *od) {
  fputs("\\smallskip\n\\begin{obeylines}\n", outf);
}

/* End of a 
 section */
void latex_preend(FILE *outf, Outchoices *od) {
  fputs("\\end{obeylines}\n", outf);
}

/* A horizontal rule */
void latex_hrule(FILE *outf, Outchoices *od) {
  fputs("\\medskip\\hrule\n", outf);
}

/* An en dash */
char *latex_endash(void) {
  return "--";
}

/* putc with special characters escaped */
void latex_putch(FILE *outf, char c) {
  if (c == '&' || c == '$' || c == '%' || c == '&' || c == '#' || c == '_')
    fprintf(outf, "\\%c", c);
  else if (c == '|')
    fputs("$|$", outf);
  else if (c == '\\')
    fputs("$\\backslash$", outf);
  else if (c == '{' || c == '}')
    fprintf(outf, "$\\%c$", c);
  else if (c == '^' || c == '~')
    fprintf(outf, "\\%c{}", c);
  else
    putc(c, outf);
}

/* strlen */
size_t latex_strlength(const char *s) {
  return strlen(s);
}

/* Allow month in dates? DO NOT enable for human-readable text because of
   i18n problems. */
logical latex_allowmonth(void) {
  return FALSE;
}

/* Calculate column widths */
void latex_calcwidths(Outchoices *od, choice rep, unsigned int width[],
		      unsigned int *bmult, unsigned int *bmult7, double *unit,
		      unsigned long maxr, unsigned long maxr7,
		      unsigned long maxp, unsigned long maxp7, double maxb,
		      double maxb7, unsigned long howmany) {
  calcwidths(od, rep, width, bmult, bmult7, unit, maxr, maxr7, maxp, maxp7,
	     maxb, maxb7, howmany);
}

/* "Each unit represents" line */
void latex_declareunit(FILE *outf, Outchoices *od, char graphby, double unit,
		       unsigned int bmult) {
  char **lngstr = od->lngstr;

  char *s;

  fprintf(outf, "%s (", lngstr[eachunit_]);
  if (ISLOWER(graphby)) {
    if (od->markchar == '|')
      fprintf(outf, "\\verb+%c+", od->markchar);
    else
      fprintf(outf, "\\verb|%c|", od->markchar);
  }
  else
    fprintf(outf, "\\barchart{1}");
  fprintf(outf, ") %s ", lngstr[represents_]);

  if (graphby == 'R' || graphby == 'r') {
    f3printf(outf, od, unit, 0, od->sepchar);
    if (unit == 1.)
      fprintf(outf, " %s.", lngstr[request_]);
    else
      fprintf(outf, " %s %s.", lngstr[requests_], lngstr[partof_]);
  }
  else if (graphby == 'P' || graphby == 'p') {
    f3printf(outf, od, unit, 0, od->sepchar);
    if (unit == 1.)
      fprintf(outf, " %s.", lngstr[pagereq_]);
    else
      fprintf(outf, " %s %s.", lngstr[pagereqs_], lngstr[partof_]);
  }
  else {
    if (bmult > 0) {
      latex_printdouble(outf, od, unit);
      s = strchr(lngstr[xbytes_], '?');  /* checked in initialisation */
      *s = '\0';
      fprintf(outf, " %s%s%s %s.", lngstr[xbytes_],
	      lngstr[byteprefix_ + bmult], s + 1, lngstr[partof_]);
      *s = '?';
    }
    else {
      f3printf(outf, od, unit, 0, od->sepchar);
      fprintf(outf, " %s %s.", lngstr[bytes_], lngstr[partof_]);
    }
  }
  putc('\n', outf);
}

/* Start of column header line */
void latex_colheadstart(FILE *outf, Outchoices *od, choice rep) {
  verbchar = '|';  /* assume this never occurs in a column heading */
  /* Note no multibyte problem with this assignment of verbchar because
     LATEX output doesn't work in multibyte anyway. */
  fprintf(outf, "\\verb%c", verbchar);
}

/* Column header line: individual column */
void latex_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col,
		      unsigned int width, char *colname,
		      logical unterminated) {
  if (unterminated)
    fputs(colname, outf);
  else
    fprintf(outf, "%*s: ", width, colname);
}

/* End of column header line */
void latex_colheadend(FILE *outf, Outchoices *od, choice rep) {
  /* verbchar was set in latex_colheadstart */
  fprintf(outf, "%c\n", verbchar);
}

/* Start of column header underlining line */
void latex_colheadustart(FILE *outf, Outchoices *od, choice rep) {
  /* verbchar was set in latex_colheadstart */
  fprintf(outf, "\\verb%c", verbchar);
}

/* Underlining of one column header. */
/* If column is terminated, set width and leave name blank; and conversely. */
void latex_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col,
			    unsigned int width, char *name) {
  if (width > 0) {
    matchlengthn(outf, od, (size_t)width, '-');
    fputs(": ", outf);
  }
  else
    matchlength(outf, od, name, '-');
}

/* End of column header underlining line */
void latex_colheaduend(FILE *outf, Outchoices *od, choice rep) {
  /* verbchar was set in latex_colheadstart */
  fprintf(outf, "%c\n", verbchar);
}

/* Start of a table row */
void latex_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols,
		    int level, char *name, char *datefmt, char *timefmt) {
  /* Choice of a verbchar: can't be number, letter, colon, space, percent
     (LaTeX special characters are OK though); or the markchar, the decpt,
     or any character in a compiled date or in the name. Also we try only to
     use ASCII printable characters (32-127) for legible LaTeX code. That
     leaves the following choices, in order of preference. We return the
     verbchar at the end for the cases in which calling functions need to
     terminate the \verb */
  char *verbchars = "|+/!^#-=?_\\~'$\"()<>[]{}.,&;";
  char lastditch[] = {(char)(0xF7)};   /* the division sign in ISO-8859-[12] */
  
  for ( ;
       (*verbchars == od->markchar || *verbchars == od->decpt ||
	(name != NULL && strchr(name, *verbchars) != NULL) ||
	(datefmt != NULL && strchr(datefmt, *verbchars) != NULL) ||
	(timefmt != NULL && strchr(timefmt, *verbchars) != NULL))
	 && *verbchars != '\0';
       verbchars++)
    ;  /* Run to suitable verbchar */
  if (*verbchars == '\0')   /* no suitable char: last guess */
    verbchars = lastditch;
  verbchar = *verbchars;
  fprintf(outf, "\\verb%c", verbchar);

  /* Set the putc to plain_putch temporarily, because we are now in \verb. */
  od->outputter->putch = &plain_putch;
  od->outputter->endash = &plain_endash;
}

/* Print level in hierarchy represented by this row */
void latex_levelcell(FILE *outf, Outchoices *od, choice rep, int level) {
}

/* Name column */
void latex_namecell(FILE *outf, Outchoices *od, choice rep, char *name,
		    choice source, unsigned int width, logical name1st,
		    logical isfirst, logical rightalign, Alias *aliashead,
		    Include *linkhead, logical ispage, unsigned int spaces,
		    char *baseurl) {
  extern char *workspace;

  int i;

  if (name1st != isfirst)
    return;

  if (isfirst)
    matchlengthn(outf, od, width - strlen(name), ' ');
  /* plain strlen because in \verb */

  strcpy(workspace, name);
  do_aliasx(workspace, aliashead);

  if (!isfirst) {
    if (rightalign)
      i = (int)width - (int)strlen(workspace) - (int)spaces;
    else
      i = (int)spaces;
    matchlengthn(outf, od, i, ' ');
  }

  fputs(workspace, outf);   /* and plain puts because in \verb */

  if (isfirst)
    fputs(": ", outf);
}

/* Single cell, unsigned long argument */
void latex_ulcell(FILE *outf, Outchoices *od, choice rep, choice col,
		  unsigned long x, unsigned int width) {
  f3printf(outf, od, (double)x, width, od->repsepchar);
  fputs(": ", outf);
}

/* Single cell, TRUSTED string argument */
void latex_strcell(FILE *outf, Outchoices *od, choice rep, choice col,
		   char *s, unsigned int width) {
  matchlengthn(outf, od, width - strlen(s), ' ');  /* plain strlen: in \verb */
  fputs(s, outf);
  fputs(": ", outf);
}

/* Single cell, listing bytes */
void latex_bytescell(FILE *outf, Outchoices *od, choice rep, choice col,
		     double b, double bmult, unsigned int width) {
  printbytes(outf, od, b, bmult, width, od->repsepchar);
  fputs(": ", outf);
}

/* Single cell, listing percentage */
void latex_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n,
		  double tot, unsigned int width) {
  double pc;
  unsigned int pc1, pc2;

  matchlengthn(outf, od, width - 6, ' ');
  if (tot == 0)
    pc = 0.0;
  else
    pc = n * 10000.0 / tot;
  if (pc >= 9999.5)
    fputs("  100%", outf);
  else if (pc < 0.5)
    fputs("      ", outf);
  else {
    pc1 = ((int)(pc + 0.5)) / 100;
    pc2 = ((int)(pc + 0.5)) % 100;
    fprintf(outf, "%2d", pc1);
    putc(od->decpt, outf);       /* plain putc, because we are in \verb */
    fprintf(outf, "%02d%%", pc2);
  }
  fputs(": ", outf);
}

/* Single cell, index */
void latex_indexcell(FILE *outf, Outchoices *od, choice rep, choice col,
		    long index, unsigned int width) {
  /* If index is 0 (i.e. sub-item), just print spaces */
  if (index <= 0)
    matchlengthn(outf, od, width, ' ');
  else
    f3printf(outf, od, (double)index, width, od->repsepchar);
  fputs(": ", outf);
}

/* End of a table row */
void latex_rowend(FILE *outf, Outchoices *od, choice rep) {
  if (rep >= DATEREP_NUMBER || ISLOWER(od->graph[rep]))
    /* if timerep and u.c. graphby, closed \verb earlier */
    putc(verbchar, outf);
  putc('\n', outf);

  /* Undo temporary allocation of putc in _rowstart */
  od->outputter->putch = &latex_putch;
  od->outputter->endash = &latex_endash;
}

/* Blank line in time reports */
void latex_blankline(FILE *outf, Outchoices *od, choice *cols) {
  fputs("\\verb||\n", outf);
}

/* Barchart in time reports */
void latex_barchart(FILE *outf, Outchoices *od, int y, char graphby) {
  int i;

  if (ISLOWER(graphby)) {
    for (i = 0; i < y; i++)
      putc(od->markchar, outf);  /* plain putc, because we are in \verb */
  }
  else {
    putc(verbchar, outf);
    od->outputter->putch = &latex_putch;  /* now out of verb */
    od->outputter->endash = &latex_endash;
    fprintf(outf, "\\barchart{%d}", y);
  }
}

/* "Busiest time period" line */
void latex_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt,
		      unsigned long reqs, unsigned long pages, double bys,
		      datecode_t date, unsigned int hr, unsigned int min,
		      datecode_t newdate, unsigned int newhr,
		      unsigned int newmin, char graphby) {
  extern unsigned int *rep2busystr;

  char **lngstr = od->lngstr;
  char sepchar = od->sepchar;

  unsigned int bmult;
  char *s;

  fprintf(outf, "%s %s (", lngstr[rep2busystr[rep]],
	  datesprintf(od, datefmt, date, hr, min, newdate, newhr, newmin,
		      TRUE, UNSET));
  if (TOLOWER(graphby) == 'r') {
    f3printf(outf, od, (double)reqs, 0, sepchar);
    fprintf(outf, " %s).\n", (reqs == 1)?lngstr[request_]:lngstr[requests_]);
  }
  else if (TOLOWER(graphby) == 'p') {
    f3printf(outf, od, (double)pages, 0, sepchar);
    fprintf(outf, " %s).\n",
	    (pages == 1)?lngstr[pagereq_]:lngstr[pagereqs_]);
  }
  else /* TOLOWER(graphby) == 'b' */ {
    if (od->rawbytes)
      bmult = 0;
    else
      bmult = findbmult(bys, od->bytesdp);
    printbytes(outf, od, bys, bmult, 0, sepchar);
    putc(' ', outf);
    if (bmult >= 1) {
      s = strchr(lngstr[xbytes_], '?');  /* checked in initialisation */
      *s = '\0';
      fprintf(outf, "%s%s%s).\n", lngstr[xbytes_],
	      lngstr[byteprefix_ + bmult], s + 1);
      *s = '?';
    }
    else
      fprintf(outf, "%s).\n", lngstr[bytes_]);
  }
}

/* End of "Not listed" line. */
void latex_notlistedstr(FILE *outf, Outchoices *od, choice rep,
			unsigned long badn) {
  extern unsigned int *rep2lng, *rep2colhead;

  char **lngstr = od->lngstr;
  char *colhead = lngstr[rep2colhead[rep]];
  char *colheadp = lngstr[rep2colhead[rep] + 1];
  char gender = lngstr[rep2lng[rep] + 3][0];

  char *notlistedstr;

  if (gender == 'm')
    notlistedstr = lngstr[notlistedm_];
  else if (gender == 'f')
    notlistedstr = lngstr[notlistedf_];
  else
    notlistedstr = lngstr[notlistedn_];

  fprintf(outf, "[%s: ", notlistedstr);
  f3printf(outf, od, (double)badn, 0, od->sepchar);
  fprintf(outf, " %s]%c", (badn == 1)?colhead:colheadp, verbchar);
}

/* The line declaring the floor and sort for a report */
void latex_whatincluded(FILE *outf, Outchoices *od, choice rep,
			unsigned long n, Dateman *dman) {
  whatincluded(outf, od, rep, n, dman);
}

/* Spacing at the start of the whatincluded line */
void latex_whatinchead(FILE *outf, Outchoices *od) {
}

/* Finishing the whatincluded line */
void latex_whatincfoot(FILE *outf, Outchoices *od) {
  putc('\n', outf);
}

/* Printing part of the whatincluded line */
void latex_whatincprintstr(FILE *outf, Outchoices *od, char *s) {
  latexputs(outf, s);
}

/* Print a double to a nice number of decimal places */
void latex_printdouble(FILE *outf, Outchoices *od, double x) {
  unsigned int prec;
  double d;

  /* first calculate how many decimal places we need */

  for (prec = 0, d = x - (double)((int)(x));
       d - (double)((int)(d + 0.000005)) > 0.00001; d *= 10)
    prec++;

  /* now print it */

  if (prec > 0) {
    fprintf(outf, "%d", (int)x);
    latex_putch(outf, od->decpt);
    fprintf(outf, "%0*d", prec, (int)(d + EPSILON));
  }
  else
    fprintf(outf, "%d", (int)(x + EPSILON));
}

/* Include a header file or footer file */
void latex_includefile(FILE *outf, Outchoices *od, char *name, char type) {
  FILE *inf;
  char buffer[BLOCKSIZE];
  size_t n;

  if ((inf = my_fopen(name, (type == 'h')?"header file":"footer file")) !=
      NULL) {
    if (type == 'f') {
      latex_hrule(outf, od);
      fputs("\\smallskip\n", outf);
    }
    while ((n = fread(buffer, 1, BLOCKSIZE, inf)))  /* single equals */
      fwrite((void *)buffer, 1, n, outf);
    if (type == 'h') {
      latex_hrule(outf, od);
      fputs("\\smallskip\n", outf);
    }
    (void)my_fclose(inf, name, (type == 'h')?"header file":"footer file");
  }
}

/* Filetype for RISC OS */
unsigned int latex_riscosfiletype(void) {
  return 0xaca;
}

/* ======================================================================= */
/* Supporting functions for LaTeX */

void latexputs(FILE *outf, char *s) {
  char w1[64];
  char *c;
  char *w = w1;
  int len = 0;

  for (c = s; *c != '\0'; c++) {
    if (*c == '&' || *c == '$' || *c == '%' || *c == '&' || *c == '#' ||
	*c == '_') {
      PUTc(w, '\\');
      PUTc(w, *c);
      len += 2;
    }
    else if (*c == '|') {
      PUTs(w, "$|$", 0);
      len += 3;
    }
    else if (*c == '\\') {
      PUTs(w, "$\\backslash$", 0);
      len += 12;
    }
    else if (*c == '{' || *c == '}') {
      PUTs(w, "$\\", 0);
      PUTc(w, *c);
      PUTc(w, '$');
      len += 4;
    }
    else if (*c == '^' || *c == '~') {
      PUTc(w, '\\');
      PUTc(w, *c);
      PUTs(w, "{}", 0);
      len += 4;
    }
    else {
      PUTc(w, *c);
      len += 1;
    }
    if (len > 50) {
      *w = '\0';
      fputs(w1, outf);
      w = w1;
      len = 0;
    }
  }
  *w = '\0';
  fputs(w1, outf);
}
analog-ce-6.0.17/src/outplain.c000066400000000000000000000433401406366436600162430ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** outplain.c; plain text output ***/

#include "anlghea3.h"

/* Page width */
unsigned int plain_pagewidth(Outchoices *od) {
  return od->plainpagewidth;
}

/* The top of the output if we are in CGI mode */
void plain_cgihead(FILE *outf, Outchoices *od) {
  fprintf(outf, "Content-Type: text/plain\n\n");
}

/* Stuff this output style needs in the page header */
void plain_stylehead(FILE *outf, Outchoices *od) {
}

/* The title of the page, plus the user's HEADERFILE */
void plain_pagetitle(FILE *outf, Outchoices *od) {
  fprintf(outf, "%s %s\n", od->lngstr[webstatsfor_], od->hostname);
  matchlength(outf, od, od->hostname, '=');
  matchlength(outf, od, od->lngstr[webstatsfor_], '=');
  fputs("=\n\n", outf);

  if (!strcaseeq(od->headerfile, "none"))
    plain_includefile(outf, od, od->headerfile, 'h');
}

/* Program start time, and logfile start and end times */
void plain_timings(FILE *outf, Outchoices *od, Dateman *dman) {
  extern timecode_t starttimec;

  char **lngstr = od->lngstr;

  double t0;
  int t1, t2;

  if (od->runtime)
    fprintf(outf, "%s %s.\n", lngstr[progstart_],
	    timesprintf(od, lngstr[datefmt2_], starttimec, UNSET));

  if (dman->firsttime <= dman->lasttime) {
    mprintf(outf, od->plainpagewidth, "%s %s ", lngstr[reqstart_],
	    timesprintf(od, lngstr[datefmt2_], dman->firsttime, UNSET));
    mprintf(outf, od->plainpagewidth, "%s %s", lngstr[to_],
	    timesprintf(od, lngstr[datefmt2_], dman->lasttime, UNSET));
    t0 = (dman->lasttime - dman->firsttime) / 1440.0 + 0.005;
    t1 = (int)t0;
    t2 = (int)(100 * (t0 - (double)t1));
    mprintf(outf, od->plainpagewidth, " (%d", t1);
    putc(od->decpt, outf);
    mprintf(outf, od->plainpagewidth, "%02d %s).", t2, od->lngstr[days_]);
    mprintf(outf, 0, NULL);
  }
}

/* Finishing the top of the page */
void plain_closehead(FILE *outf, Outchoices *od) {
  plain_hrule(outf, od);
}

/* Starting the bottom of the page */
void plain_pagebotstart(FILE *outf, Outchoices *od) {
}

/* The credit line at the bottom of the page */
void plain_credit(FILE *outf, Outchoices *od) {
  fprintf(outf, "%s analog %s.\n", od->lngstr[credit_], VNUMBER);
}

/* The program run time */
void plain_runtime(FILE *outf, Outchoices *od, long secs) {
  char **lngstr = od->lngstr;

  fprintf(outf, "%s: ", lngstr[runtime_]);

  if (secs == 0)
    fprintf(outf, "%s %s.\n", lngstr[lessone_], lngstr[second_]);
  else if (secs < 60)
    fprintf(outf, "%ld %s.\n", secs, 
	    (secs == 1)?lngstr[second_]:lngstr[seconds_]);
  else
    fprintf(outf, "%ld %s, %ld %s.\n", secs / 60,
	    (secs < 120)?lngstr[minute_]:lngstr[minutes_], secs % 60,
	    (secs % 60 == 1)?lngstr[second_]:lngstr[seconds_]);
}

/* The page footer, including the user's FOOTERFILE */
void plain_pagefoot(FILE *outf, Outchoices *od) {
  if (!strcaseeq(od->footerfile, "none"))
    plain_includefile(outf, od, od->footerfile, 'f');
}

/* Footer material for this output style */
void plain_stylefoot(FILE *outf, Outchoices *od) {
}

/* Report title */
void plain_reporttitle(FILE *outf, Outchoices *od, choice rep) {
  extern unsigned int *rep2lng;

  fprintf(outf, "%s\n", od->lngstr[rep2lng[rep]]);
  matchlength(outf, od, od->lngstr[rep2lng[rep]], '-');
  putc('\n', outf);
}

/* Report footer */
void plain_reportfooter(FILE *outf, Outchoices *od, choice rep) {
}

/* Report description */
void plain_reportdesc(FILE *outf, Outchoices *od, choice rep) {
  mprintf(outf, od->plainpagewidth, "%s", od->descstr[rep]);
  mprintf(outf, 0, NULL);
  if (rep != REP_SIZE && rep != REP_PROCTIME)
    putc('\n', outf);
  /* These two reports probably have no further header text.
      If this is wrong, it's corrected in plain_reportspan() later. */
}

/* The time period spanned by the report */
void plain_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd,
		      timecode_t mind) {
  if ((rep == REP_SIZE || rep == REP_PROCTIME) && od->descriptions &&
      od->descstr[rep] != NULL)
    putc('\n', outf);
  /* We were wrong when we assumed in plain_reportdesc() that these reports
     had no further header text. So correct for it now. */

  /* NB Can't combine next two lines because timesprintf uses static buffer. */
  mprintf(outf, od->plainpagewidth, "%s %s ", od->lngstr[repspan_],
	  timesprintf(od, od->lngstr[datefmt2_], mind, UNSET));
  mprintf(outf, od->plainpagewidth, "%s %s.", od->lngstr[to_],
	  timesprintf(od, od->lngstr[datefmt2_], maxd, UNSET));
  mprintf(outf, 0, NULL);

  if (rep != REP_SIZE && rep != REP_PROCTIME)
    putc('\n', outf);
  /* This time these reports really do have no further header text. */
}

/* General Summary header */
void plain_gensumhead(FILE *outf, Outchoices *od) {
}

/* General Summary footer */
void plain_gensumfoot(FILE *outf, Outchoices *od) {
}

/* Single General Summary line, long data */
void plain_gensumline(FILE *outf, Outchoices *od, int namecode,
		      unsigned long x, unsigned long x7, logical isaverage) {

  fprintf(outf, "%s%s ",  od->lngstr[namecode], od->lngstr[colon_]);

  f3printf(outf, od, (double)x, 0, od->sepchar);

  if (x7 != (unsigned long)UNSET) {
    fputs(" (", outf);
    f3printf(outf, od, (double)x7, 0, od->sepchar);
    putc(')', outf);
  }
  putc('\n', outf);
}

/* Single General Summary line, bytes data */
void plain_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x,
		       double x7, logical isaverage) {
  char **lngstr = od->lngstr;

  unsigned int bm;
  char *c;

  fprintf(outf, "%s%s ",  lngstr[namecode], lngstr[colon_]);

  bm = (od->rawbytes)?0:findbmult(x, od->bytesdp);
  printbytes(outf, od, x, bm, 0, od->sepchar);

  if (bm > 0) {
    c = strchr(lngstr[xbytes_], '?');
    *c = '\0';
    fprintf(outf, " %s%s%s", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1);
    *c = '?';
  }
  else
    fprintf(outf, " %s", lngstr[bytes_]);

  if (x7 != UNSET) {
    fputs(" (", outf);
    bm = (od->rawbytes)?0:findbmult(x7, od->bytesdp);
    printbytes(outf, od, x7, bm, 0, od->sepchar);
    if (bm > 0) {
      c = strchr(lngstr[xbytes_], '?');
      *c = '\0';
      fprintf(outf, " %s%s%s)", lngstr[xbytes_], lngstr[byteprefix_ + bm],
	      c + 1);
      *c = '?';
    }
    else
      fprintf(outf, " %s)", lngstr[bytes_]);
  }

  putc('\n', outf);
}

/* "Last seven" explanation line */
void plain_lastseven(FILE *outf, Outchoices *od, timecode_t last7to) {
  mprintf(outf, od->plainpagewidth, "(%s %s %s).\n", od->lngstr[brackets_],
	  od->lngstr[sevendaysto_],
	  timesprintf(od, od->lngstr[datefmt1_], last7to, UNSET));
  mprintf(outf, 0, NULL);
}

/* Start of a 
 section */
void plain_prestart(FILE *outf, Outchoices *od) {
  putc('\n', outf);
}

/* End of a 
 section */
void plain_preend(FILE *outf, Outchoices *od) {
}

/* A horizontal rule */
void plain_hrule(FILE *outf, Outchoices *od) {
  unsigned int i;

  for (i = 0; i < od->plainpagewidth; i++)
    putc('-', outf);
  fputs("\n\n", outf);
}

/* An en dash */
char *plain_endash(void) {
  return "-";
}

/* putc with special characters escaped */
void plain_putch(FILE *outf, char c) {
  putc(c, outf);
}

/* strlen */
size_t plain_strlength(const char *s) {
  return strlen(s);
}

/* Allow month in dates? DO NOT enable for human-readable text because of
   i18n problems. */
logical plain_allowmonth(void) {
  return FALSE;
}

/* Calculate column widths */
void plain_calcwidths(Outchoices *od, choice rep, unsigned int width[],
		      unsigned int *bmult, unsigned int *bmult7, double *unit,
		      unsigned long maxr, unsigned long maxr7,
		      unsigned long maxp, unsigned long maxp7, double maxb,
		      double maxb7, unsigned long howmany) {
  calcwidths(od, rep, width, bmult, bmult7, unit, maxr, maxr7, maxp, maxp7,
	     maxb, maxb7, howmany);
}

/* "Each unit represents" line */
void plain_declareunit(FILE *outf, Outchoices *od, char graphby, double unit,
		       unsigned int bmult) {
  /* NB Number can still overflow pagewidth, but only if pagewidth is small,
     & will wrap straight afterwards. pagewidth is never guaranteed anyway. */
  extern unsigned int ppcol;
  char **lngstr = od->lngstr;
  unsigned int pagewidth = od->plainpagewidth;

  char *s;

  mprintf(outf, pagewidth, "%s (%c) %s ", lngstr[eachunit_], od->markchar,
	  lngstr[represents_]);

  if (graphby == 'R' || graphby == 'r') {
    ppcol += f3printf(outf, od, unit, 0, od->sepchar);
    if (unit == 1.)
      mprintf(outf, pagewidth, " %s.", lngstr[request_]);
    else
      mprintf(outf, pagewidth, " %s %s.", lngstr[requests_],
	      lngstr[partof_]);
  }
  else if (graphby == 'P' || graphby == 'p') {
    ppcol += f3printf(outf, od, unit, 0, od->sepchar);
    if (unit == 1.)
      mprintf(outf, pagewidth, " %s.", lngstr[pagereq_]);
    else
      mprintf(outf, pagewidth, " %s %s.", lngstr[pagereqs_],
	      lngstr[partof_]);
  }
  else {
    if (bmult > 0) {
      plain_printdouble(outf, od, unit);
      s = strchr(lngstr[xbytes_], '?');  /* checked in initialisation */
      *s = '\0';
      mprintf(outf, pagewidth, " %s%s%s %s.", lngstr[xbytes_],
	      lngstr[byteprefix_ + bmult], s + 1, lngstr[partof_]);
      *s = '?';
    }
    else {
      ppcol += f3printf(outf, od, unit, 0, od->sepchar);
      mprintf(outf, pagewidth, " %s %s.", lngstr[bytes_], lngstr[partof_]);
    }
  }
  mprintf(outf, 0, NULL);
}

/* Start of column header line */
void plain_colheadstart(FILE *outf, Outchoices *od, choice rep) {
}

/* Column header line: individual column */
void plain_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col,
		      unsigned int width, char *colname,
		      logical unterminated) {
  if (unterminated)
    fputs(colname, outf);
  else
    fprintf(outf, "%*s: ", width, colname);
}

/* End of column header line */
void plain_colheadend(FILE *outf, Outchoices *od, choice rep) {
  putc('\n', outf);
}

/* Start of column header underlining line */
void plain_colheadustart(FILE *outf, Outchoices *od, choice rep) {
}

/* Underlining of one column header. */
/* If column is terminated, set width and leave name blank; and conversely. */
void plain_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col,
			    unsigned int width, char *name) {
  if (width > 0) {
    matchlengthn(outf, od, (size_t)width, '-');
    fputs(": ", outf);
  }
  else
    matchlength(outf, od, name, '-');
}

/* End of column header underlining line */
void plain_colheaduend(FILE *outf, Outchoices *od, choice rep) {
  putc('\n', outf);
}

/* Start of a table row */
void plain_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols,
		    int level, char *name, char *datefmt, char *timefmt) {
}

/* Print level in hierarchy represented by this row */
void plain_levelcell(FILE *outf, Outchoices *od, choice rep, int level) {
}

/* Name column */
void plain_namecell(FILE *outf, Outchoices *od, choice rep, char *name,
		    choice source, unsigned int width, logical name1st,
		    logical isfirst, logical rightalign, Alias *aliashead,
		    Include *linkhead, logical ispage, unsigned int spaces,
		    char *baseurl) {
  extern char *workspace;

  int i;

  if (name1st != isfirst)
    return;

  if (isfirst)
    matchlengthn(outf, od, width - strlen(name), ' ');

  strcpy(workspace, name);
  do_aliasx(workspace, aliashead);

  if (!isfirst) {
    if (rightalign)
      i = (int)width - (int)strlen(workspace) - (int)spaces;
    else
      i = (int)spaces;
    matchlengthn(outf, od, i, ' ');
  }
    
  fputs(workspace, outf);

  if (isfirst)
    fputs(": ", outf);
}

/* Single cell, unsigned long argument */
void plain_ulcell(FILE *outf, Outchoices *od, choice rep, choice col,
		  unsigned long x, unsigned int width) {
  f3printf(outf, od, (double)x, width, od->repsepchar);
  fputs(": ", outf);
}

/* Single cell, TRUSTED string argument */
void plain_strcell(FILE *outf, Outchoices *od, choice rep, choice col,
		   char *s, unsigned int width) {
  matchlengthn(outf, od, width - strlen(s), ' ');
  fputs(s, outf);
  fputs(": ", outf);
}

/* Single cell, listing bytes */
void plain_bytescell(FILE *outf, Outchoices *od, choice rep, choice col,
		     double b, double bmult, unsigned int width) {
  printbytes(outf, od, b, bmult, width, od->repsepchar);
  fputs(": ", outf);
}

/* Single cell, listing percentage */
void plain_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n,
		  double tot, unsigned int width) {
  double pc;
  unsigned int pc1, pc2;

  matchlengthn(outf, od, width - 6, ' ');
  if (tot == 0)
    pc = 0.0;
  else
    pc = n * 10000.0 / tot;
  if (pc >= 9999.5)
    fputs("  100%", outf);
  else if (pc < 0.5)
    fputs("      ", outf);
  else {
    pc1 = ((int)(pc + 0.5)) / 100;
    pc2 = ((int)(pc + 0.5)) % 100;
    fprintf(outf, "%2d", pc1);
    putc(od->decpt, outf);
    fprintf(outf, "%02d%%", pc2);
  }
  fputs(": ", outf);
}

/* Single cell, index */
void plain_indexcell(FILE *outf, Outchoices *od, choice rep, choice col,
		    long index, unsigned int width) {
  /* If index is 0 (i.e. sub-item), just print spaces */
  if (index <= 0)
    matchlengthn(outf, od, width, ' ');
  else
    f3printf(outf, od, (double)index, width, od->repsepchar);
  fputs(": ", outf);
}

/* End of a table row */
void plain_rowend(FILE *outf, Outchoices *od, choice rep) {
  putc('\n', outf);
}

/* Blank line in time reports */
void plain_blankline(FILE *outf, Outchoices *od, choice *cols) {
  putc('\n', outf);
}

/* Barchart in time reports */
void plain_barchart(FILE *outf, Outchoices *od, int y, char graphby) {
  int i;

  for (i = 0; i < y; i++)
    putc(od->markchar, outf);
}

/* "Busiest time period" line */
void plain_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt,
		      unsigned long reqs, unsigned long pages, double bys,
		      datecode_t date, unsigned int hr, unsigned int min,
		      datecode_t newdate, unsigned int newhr,
		      unsigned int newmin, char graphby) {
  extern unsigned int *rep2busystr;

  char **lngstr = od->lngstr;
  char sepchar = od->sepchar;

  unsigned int bmult;
  char *s;

  fprintf(outf, "\n%s %s (", lngstr[rep2busystr[rep]],
	  datesprintf(od, datefmt, date, hr, min, newdate, newhr, newmin,
		      TRUE, UNSET));
  if (TOLOWER(graphby) == 'r') {
    f3printf(outf, od, (double)reqs, 0, sepchar);
    fprintf(outf, " %s).\n", (reqs == 1)?lngstr[request_]:lngstr[requests_]);
  }
  else if (TOLOWER(graphby) == 'p') {
    f3printf(outf, od, (double)pages, 0, sepchar);
    fprintf(outf, " %s).\n",
	    (pages == 1)?lngstr[pagereq_]:lngstr[pagereqs_]);
  }
  else /* TOLOWER(graphby) == 'b' */ {
    if (od->rawbytes)
      bmult = 0;
    else
      bmult = findbmult(bys, od->bytesdp);
    printbytes(outf, od, bys, bmult, 0, sepchar);
    putc(' ', outf);
    if (bmult >= 1) {
      s = strchr(lngstr[xbytes_], '?');  /* checked in initialisation */
      *s = '\0';
      fprintf(outf, "%s%s%s).\n", lngstr[xbytes_],
	      lngstr[byteprefix_ + bmult], s + 1);
      *s = '?';
    }
    else
      fprintf(outf, "%s).\n", lngstr[bytes_]);
  }
}

/* End of "Not listed" line. */
void plain_notlistedstr(FILE *outf, Outchoices *od, choice rep,
			unsigned long badn) {
  extern unsigned int *rep2lng, *rep2colhead;

  char **lngstr = od->lngstr;
  char *colhead = lngstr[rep2colhead[rep]];
  char *colheadp = lngstr[rep2colhead[rep] + 1];
  char gender = lngstr[rep2lng[rep] + 3][0];

  char *notlistedstr;

  if (gender == 'm')
    notlistedstr = lngstr[notlistedm_];
  else if (gender == 'f')
    notlistedstr = lngstr[notlistedf_];
  else
    notlistedstr = lngstr[notlistedn_];

  fprintf(outf, "[%s: ", notlistedstr);
  f3printf(outf, od, (double)badn, 0, od->sepchar);
  fprintf(outf, " %s]", (badn == 1)?colhead:colheadp);
}

/* The line declaring the floor and sort for a report */
void plain_whatincluded(FILE *outf, Outchoices *od, choice rep,
			unsigned long n, Dateman *dman) {
  whatincluded(outf, od, rep, n, dman);
}

/* Spacing at the start of the whatincluded line */
void plain_whatinchead(FILE *outf, Outchoices *od) {
}

/* Finishing the whatincluded line */
void plain_whatincfoot(FILE *outf, Outchoices *od) {
  mprintf(outf, 0, NULL);
}

/* Printing part of the whatincluded line */
void plain_whatincprintstr(FILE *outf, Outchoices *od, char *s) {
  mprintf(outf, od->plainpagewidth, "%s", s);
}

/* Print a double to a nice number of decimal places */
/* plain_printdouble always uses mprintf */
void plain_printdouble(FILE *outf, Outchoices *od, double x) {
  unsigned int pagewidth;
  char decpt;
  unsigned int prec;
  double d;

  if (od == NULL) {
    pagewidth = 1;
    decpt = '.';
  }
  else {
    pagewidth = od->plainpagewidth;
    decpt = od->decpt;
  }

  /* first calculate how many decimal places we need */

  for (prec = 0, d = x - (double)((int)(x));
       d - (double)((int)(d + 0.000005)) > 0.00001; d *= 10)
    prec++;

  /* now print it */

  if (prec > 0)
    mprintf(outf, pagewidth, "%d%c%0*d", (int)x, decpt, prec,
	    (int)(d + EPSILON));
  else
    mprintf(outf, pagewidth, "%d", (int)(x + EPSILON));
}

/* Include a header file or footer file */
void plain_includefile(FILE *outf, Outchoices *od, char *name, char type) {
  FILE *inf;
  char buffer[BLOCKSIZE];
  size_t n;

  if ((inf = my_fopen(name, (type == 'h')?"header file":"footer file")) !=
      NULL) {
    if (type == 'f')
      plain_hrule(outf, od);
    while ((n = fread(buffer, 1, BLOCKSIZE, inf)))  /* single equals */
      fwrite((void *)buffer, 1, n, outf);
    if (type == 'h')
      plain_hrule(outf, od);
    (void)my_fclose(inf, name, (type == 'h')?"header file":"footer file");
  }
}

/* Filetype for RISC OS */
unsigned int plain_riscosfiletype(void) {
  return 0xfff;
}
analog-ce-6.0.17/src/output.c000066400000000000000000000707141406366436600157550ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** output.c; controls the output, mostly calling fns from output2.c ***/

#include "anlghea3.h"

extern choice *rep2type, *rep2reqs, *rep2reqs7, *rep2date, *rep2firstd;
extern unsigned int *rep2colhead, *rep2gran, *rep2datefmt;

void pagetop(FILE *outf, Outchoices *od, Dateman *dman) {
  extern logical cgi;

  /* CGI header */
  if (cgi)
    od->outputter->cgihead(outf, od);

  /* Header material for this output style */
  od->outputter->stylehead(outf, od);

  /* The page title, plus the user's HEADERFILE */
  od->outputter->pagetitle(outf, od);

  /* Program start time, and logfile start and end times */
  od->outputter->timings(outf, od, dman);

  /* The bottom of the top of the page */
  od->outputter->closehead(outf, od);
}

void pagebot(FILE *outf, Outchoices *od) {
  extern time_t origstarttime;

  long secs;

  /* Start of the bottom of the page */
  od->outputter->pagebotstart(outf, od);

  /* The credit line */
  od->outputter->credit(outf, od);

  /* The program run time */
  if (od->runtime) {
    secs = (long)difftime(time((time_t *)NULL), origstarttime);
    od->outputter->runtime(outf, od, secs);
  }

  /* The page footer, including the user's FOOTERFILE */
  od->outputter->pagefoot(outf, od);

  /* Footer material for this output style */
  od->outputter->stylefoot(outf, od);
}

#define GENSUM_RATE(x, m) (((m) < 30 || (x) <= 1)?((unsigned long)UNSET):\
  ((unsigned long)(((double)((x) - 1) * 1440.0) / (double)(m))))
void gensum(FILE *outf, Outchoices *od,
	    unsigned long *data, double bys, double bys7,
	    Hashindex **gooditems, Hashindex **baditems, Dateman *dman,
	    choice data2cols[ITEM_NUMBER][DATA_NUMBER]) {
  timecode_t totmins, totmins7;
  logical q7 = (od->last7 && dman->firsttime < dman->last7from &&
		dman->last7from < dman->lasttime);
  unsigned long tot, tot7;

  od->outputter->gensumhead(outf, od);

  totmins = dman->lasttime - dman->firsttime;
  totmins7 = q7?MINS_IN_WEEK:0;
  if (q7)
    od->outputter->lastseven(outf, od, dman->last7to);
  gensumline(outf, od, '\0', succreqs_, data[LOGDATA_SUCC],
	     q7?data[LOGDATA_SUCC7]:(unsigned long)UNSET, FALSE);
  /* \0 above means always printed */
  gensumline(outf, od, 'B', avereqs_,
	     GENSUM_RATE(data[LOGDATA_SUCC], totmins),
	     GENSUM_RATE(data[LOGDATA_SUCC7], totmins7), TRUE);
  gensumline(outf, od, 'C', totunknown_, data[LOGDATA_UNKNOWN],
	     q7?data[LOGDATA_UNKNOWN7]:(unsigned long)UNSET, FALSE);
  gensumline(outf, od, 'D', totpages_, data[LOGDATA_PAGES],
	     q7?data[LOGDATA_PAGES7]:(unsigned long)UNSET, FALSE);
  gensumline(outf, od, 'E', avepages_,
	     GENSUM_RATE(data[LOGDATA_PAGES], totmins),
	     GENSUM_RATE(data[LOGDATA_PAGES7], totmins7), TRUE);
  gensumline(outf, od, 'F', totfails_, data[LOGDATA_FAIL],
	     q7?data[LOGDATA_FAIL7]:(unsigned long)UNSET, FALSE);
  gensumline(outf, od, 'G', totredirs_, data[LOGDATA_REDIR],
	     q7?data[LOGDATA_REDIR7]:(unsigned long)UNSET, FALSE);
  gensumline(outf, od, 'H', inforeqs_, data[LOGDATA_INFO],
	     q7?data[LOGDATA_INFO7]:(unsigned long)UNSET, FALSE);
  distcount(gooditems[ITEM_FILE], baditems[ITEM_FILE],
	    data2cols[ITEM_FILE][REQUESTS], data2cols[ITEM_FILE][REQUESTS7],
	    &tot, &tot7);
  gensumline(outf, od, 'I', distfiles_, tot, q7?tot7:(unsigned long)UNSET,
	     FALSE);
  distcount(gooditems[ITEM_HOST], baditems[ITEM_HOST],
	    data2cols[ITEM_HOST][REQUESTS], data2cols[ITEM_HOST][REQUESTS7],
	    &tot, &tot7);
  gensumline(outf, od, 'J', disthosts_, tot, q7?tot7:(unsigned long)UNSET,
	     FALSE);
  gensumline(outf, od, 'K', corrupt_, data[LOGDATA_CORRUPT],
	     (unsigned long)UNSET, FALSE);
  gensumline(outf, od, 'L', unwanted_, data[LOGDATA_UNWANTED],
	     (unsigned long)UNSET, FALSE);
  gensumlineb(outf, od, 'M', totdata_, bys, q7?bys7:UNSET, FALSE);
  gensumlineb(outf, od, 'N', avedata_,
	      (totmins < 30)?UNSET:((bys * 1440.0) / (double)totmins),
	      (q7 && totmins7 >= 30)?\
	      ((bys7 * 1440.0) / (double)totmins7):UNSET, TRUE);

  od->outputter->gensumfoot(outf, od);
}

void timerep(FILE *outf, Outchoices *od, choice rep, Dateman *dman,
	     unsigned int granularity) {
  extern unsigned int daysbefore[12];

  char **lngstr = od->lngstr;
  logical back = od->back[rep];
  unsigned int rows = od->rows[rep];
  char graphby = od->graph[rep];
  unsigned int repgran = rep2gran[rep];
  char *datefmt = od->lngstr[rep2datefmt[rep]];

  Daysdata *dp;
  Timerep *trhead, *trp, *oldtrp;
  unsigned int hr, min, newhr, newmin = 59, busytime = 0;
  datecode_t busydate = 0, i;
  int j, firsttime, lasttime;
  unsigned int k;
  unsigned int relgran = granularity / repgran; /* guaranteed to be integer */
  unsigned long reqs = 0, pages = 0, totr = 0, totp = 0;
  unsigned long maxr = 0, maxp = 0, busyr = 0, busyp = 0;
  double bys = 0.0, totb = 0.0, maxb = 0.0, busyb = 0.0, unit = 0.0;
  unsigned int width[COL_NUMBER], bmult, bmult7, date, month, year;
  unsigned int accum = 0, intlength = 0, rowsdone = 0;
  logical save, first = TRUE, leavegap;

  /* First work out what will be listed and shove them in an array */

  if (rows == 0)
    rows = INT_MAX;
  if (rep == REP_YEAR) {
    accum = 12;
    intlength = 364;
    /* The intlength is for calculating the date at the end of a time interval.
       Of course years, quarters and months differ in length, and we don't
       bother to calculate the date exactly. We assume that the language file
       only asks for the month at the end, not the precise date. */
  }
  else if (rep == REP_QUARTERLY) {
    accum = 3;
    intlength = 89;
  }
  else if (rep == REP_MONTH)
    accum = 1;
  else if (rep == REP_WEEK)
    intlength = 6;

  trhead = (Timerep *)xmalloc(sizeof(Timerep));
  trp = trhead;
  for (firsttime = 0; firsttime < (int)granularity &&
	 dman->firstdp->reqs[firsttime] == 0; firsttime++)
    ;    /* run to first time */
  for (lasttime = granularity - 1;
       lasttime >= 0 && dman->lastdp->reqs[lasttime] == 0; lasttime--)
    ;
  for (i = dman->lastdate, dp = dman->lastdp; i >= dman->firstdate;
       i--, dp = dp->prev) {
    for (j = (int)(granularity - relgran); j >= 0; j -= relgran) {
      for (k = 0; k < relgran; k++) {
	reqs += dp->reqs[j + k];
	pages += dp->pages[j + k];
	bys += dp->bytes[j + k];
      }
      if (accum > 0) {  /* REP_YEAR, REP_QUARTERLY, REP_MONTH */
	code2date(i, &date, &month, &year);
	save = (date == 1 && month % accum == 0) || (i == dman->firstdate);
      }
      else if (rep == REP_WEEK)
	save = (DAYOFWEEK(i) == od->weekbeginson) || (i == dman->firstdate);
      else  /* REP_DAYREP or below */
	save = ((dp != dman->lastdp || j <= lasttime) &&
		(dp != dman->firstdp || j + (int)relgran > firsttime));
      if (save) {
	while (rep == REP_WEEK && DAYOFWEEK(i) != od->weekbeginson && i > 1)
	  i--;  /* earliest week: account under first day of week */
	/* (i > 1 above stops us crashing by going back further than 1/1/70) */
	if (rep == REP_QUARTERLY && i == dman->firstdate)
	  i = DATE2CODE(year, (month / 3) * 3, 1);
	/* sim. first date of quarter: month, year were calculated above */
	totr += reqs;
	totp += pages;
	totb += bys;
	if (((graphby == 'R' || graphby == 'r') && reqs >= busyr) ||
	    ((graphby == 'P' || graphby == 'p') && pages >= busyp) ||
	    ((graphby == 'B' || graphby == 'b') && bys >= busyb)) {
	  busyr = reqs;
	  busyp = pages;
	  busyb = bys;
	  busydate = i;   /* busydate always set coz busyr was init. to 0 */
	  busytime = (1440 * j) / granularity;
	}
	if (rowsdone < rows) {
	  maxr = MAX(maxr, reqs);
	  maxp = MAX(maxp, pages);
	  maxb = MAX(maxb, bys);
	  trp->prev = (Timerep *)xmalloc(sizeof(Timerep));
	  trp->prev->next = trp;
	  trp = trp->prev;
	  trp->reqs = reqs;
	  trp->pages = pages;
	  trp->bytes = bys;
	  trp->date = i;
	  trp->time = (1440 * j) / granularity;
	  trp->prev = NULL;
	  rowsdone++;
	}
	reqs = 0;
	pages = 0;
	bys = 0.0;
      }
    }
  }

  /* Now print the stuff we've saved */

  width[COL_TITLE] = MAX(datefmtlen(od, datefmt),
			 od->outputter->strlength(lngstr[rep2colhead[rep]]));
  od->outputter->calcwidths(od, rep, width, &bmult, &bmult7, &unit,
			maxr, 0, maxp, 0, maxb, 0, 0);
  od->outputter->declareunit(outf, od, graphby, unit, bmult);
  od->outputter->prestart(outf, od);
  colheads(outf, od, rep, width, bmult, bmult7, TRUE);
  for (trp = back?(trhead->prev):trp; trp != (back?NULL:trhead); ) {
    hr = trp->time / 60;
    min = trp->time % 60;
    if (rep == REP_QUARTERLY || rep == REP_MONTH) {
      code2date(trp->date, &date, &month, &year);
      leavegap = (month == (unsigned int)(back?(12 - accum):0));
    }
    else if (rep == REP_DAYREP)
      leavegap = (DAYOFWEEK(trp->date) ==
		  (back?((od->weekbeginson + 6) % 7):(od->weekbeginson)));
    else if (rep == REP_HOURREP)
      leavegap = (hr == (unsigned int)(back?23:0));
    else if (rep == REP_QUARTERREP)
      leavegap = (min == (unsigned int)(back?45:0) &&
		  (hr % 4) == (unsigned int)(back?3:0));
    else if (rep == REP_FIVEREP)
      leavegap = (min == (unsigned int)(back?55:0));
    else /* REP_YEAR or REP_WEEK */
      leavegap = FALSE;
    if (leavegap && !first)
      od->outputter->blankline(outf, od, od->cols[rep]);
    first = FALSE;
    if (rep == REP_QUARTERREP)
      newmin = (min + 15) % 60;
    else if (rep == REP_FIVEREP)
      newmin = (min + 5) % 60;
    else if (rep == REP_HOURREP)
      newmin = 0;
    if (newmin == 59)  /* REP_DAYREP or above */
      newhr = 23;
    else
      newhr = (newmin == 0)?(hr + 1):(hr);
    printcols(outf, od, rep, trp->reqs, 0, trp->pages, 0, trp->bytes, 0., -1,
	      -1, totr, 0, totp, 0, totb, 0, width, bmult, bmult7, unit, TRUE,
	      FALSE, NULL, FALSE, 0, NULL, NULL, datefmt, NULL, trp->date, hr,
	      min, trp->date + intlength, newhr, newmin);
    oldtrp = trp;
    trp = back?(trp->prev):(trp->next);
    free((void *)oldtrp);
  }
  od->outputter->preend(outf, od);
  hr = busytime / 60;
  min = busytime % 60;
  if (rep == REP_QUARTERREP)
    newmin = (min + 15) % 60;
  else if (rep == REP_FIVEREP)
    newmin = (min + 5) % 60;
  else if (rep == REP_HOURREP)
    newmin = 0;
  if (newmin == 59)  /* REP_DAYREP or above */
    newhr = 23;
  else
    newhr = (newmin == 0)?(hr + 1):(hr);
  od->outputter->busyprintf(outf, od, rep, datefmt, busyr, busyp, busyb,
			    busydate, hr, min, busydate + intlength, newhr,
			    newmin, graphby);
}

void timesum(FILE *outf, Outchoices *od, choice rep, Dateman *dman,
	     unsigned int granularity) {
  unsigned int repgran = rep2gran[rep];
  unsigned int repspan = (rep == REP_DAYSUM || rep == REP_WEEKHOUR)?7:1;
  char *datefmt = od->lngstr[rep2datefmt[rep]];

  Daysdata *dp;
  unsigned int relgran = granularity / repgran; /* guaranteed to be integer */
  unsigned int bins = repspan * repgran;
  unsigned long *reqs, *pages, totr = 0, totp = 0;
  double *bys, totb = 0.0, unit = 0.0;
  unsigned int width[COL_NUMBER], bmult, bmult7;
  logical first = TRUE;
  datecode_t date;
  unsigned int weekday, offset, entry, hr, min, newmin, i, j;

  reqs = (unsigned long *)xmalloc(bins * sizeof(unsigned long));
  pages = (unsigned long *)xmalloc(bins * sizeof(unsigned long));
  bys = (double *)xmalloc(bins * sizeof(double));
  for (i = 0; i < bins; i++) {
    reqs[i] = 0;
    pages[i] = 0;
    bys[i] = 0.0;
  }
  
  for (date = dman->firstdate, dp = dman->firstdp; date <= dman->lastdate;
       date++, TO_NEXT(dp)) {
    offset = (repspan == 1)?0:(DAYOFWEEK(date) * repgran);
    for (i = 0; i < granularity; i++) {
      entry = offset + i / relgran;
      reqs[entry] += dp->reqs[i];
      totr += dp->reqs[i];
      pages[entry] += dp->pages[i];
      totp += dp->pages[i];
      bys[entry] += dp->bytes[i];
      totb += dp->bytes[i];
    }
  }

  width[COL_TITLE] = MAX(datefmtlen(od, datefmt),
			 od->outputter->strlength(od->lngstr[rep2colhead[rep]]));
  od->outputter->calcwidths(od, rep, width, &bmult, &bmult7, &unit,
			arraymaxl(reqs, bins), 0, arraymaxl(pages, bins), 0,
			arraymaxd(bys, bins), 0, 0);
  od->outputter->declareunit(outf, od, od->graph[rep], unit, bmult);
  od->outputter->prestart(outf, od);
  colheads(outf, od, rep, width, bmult, bmult7, TRUE);
  for (i = 0; i < repspan; i++) {
    weekday = ((od->weekbeginson + i) % 7); 
    offset = (repspan == 1)?0:(weekday * repgran);
    for (j = 0; j < repgran; j++) {
      entry = offset + j;
      hr = j * 24 / repgran;
      min = (j * 1440 / repgran) % 60;
      newmin = ((j + 1) * 1440 / repgran) % 60;
      if (!first && min == 0 &&
	  ((repgran == 24 && hr == 0) || (repgran == 96 && hr % 4 == 0) ||
	   repgran == 288))
	od->outputter->blankline(outf, od, od->cols[rep]);
      printcols(outf, od, rep, reqs[entry], 0, pages[entry], 0, bys[entry], 0.,
		-1, -1, totr, 0, totp, 0, totb, 0, width, bmult, bmult7, unit,
		TRUE, FALSE, NULL, FALSE, 0, NULL, NULL, datefmt, NULL,
		weekday + 4, hr, min, weekday + 4, (newmin == 0)?(hr + 1):(hr),
		newmin);
      /* weekday + 4 is an arbitrary (internal) date that is that weekday. */
      first = FALSE;
    }
  }
  od->outputter->preend(outf, od);
}

void printtree(FILE *outf, Outchoices *od, choice rep, Hashtable *tree,
	       choice requests, choice requests7, choice pages, choice pages7,
	       choice date, choice firstd, unsigned int level,
	       Strlist *partname, unsigned long totr, unsigned long totr7,
	       unsigned long totp, unsigned long totp7, double totb,
	       double totb7, unsigned int width[], logical possrightalign,
	       unsigned int bmult, unsigned int bmult7, double unit) {
  /* level is 0 at the top level in this function */
  char **lngstr = od->lngstr;
  Include *linkhead = od->link[G(rep)];
  char *baseurl = (rep2type[rep] == ITEM_FILE)?(od->baseurl):NULL;

  char *name;
  size_t need = (size_t)level + 3;
  logical rightalign;
  unsigned long datar, datar7, datap, datap7, datad, datafd;
  Hashindex *p;
  Strlist *pn, s;
  unsigned long goodn = 0;

  if (tree != NULL) {
    for (pn = partname; pn != NULL; TO_NEXT(pn))
      need += strlen(pn->name);
    for (p = tree->head[0]; p != NULL; TO_NEXT(p)) {
      name = maketreename(partname, p, &pn, &s, need, rep, TRUE);
      /* name construction also in findwedges() */
      if (STREQ(name, LNGSTR_NODOMAIN) || STREQ(name, LNGSTR_UNKDOMAIN) ||
	  ISDIGIT(name[strlen(name) - 1]))
	rightalign = FALSE;
      else
	rightalign = possrightalign;
      datar = p->own->data[requests];
      datar7 = (requests7 >= 0)?(p->own->data[requests7]):0;
      datap = (pages >= 0)?(p->own->data[pages]):0;
      datap7 = (pages7 >= 0)?(p->own->data[pages7]):0;
      datad = (date >= 0)?(p->own->data[date]):0;
      datafd = (firstd >= 0)?(p->own->data[firstd]):0;
      printcols(outf, od, rep, datar, datar7, datap, datap7, p->own->bytes,
		p->own->bytes7, (level == 0)?((long)(++goodn)):(-1),
		(int)level + 1, totr, totr7, totp, totp7, totb, totb7, width,
		bmult, bmult7, unit, FALSE, rightalign, name,
		(logical)(p->own->ispage), 2 * level, linkhead, baseurl,
		lngstr[genrepdate_], lngstr[genreptime_],
		(datecode_t)(datad / 1440),
		(unsigned int)((datad % 1440) / 60),
		(unsigned int)(datad % 60), (datecode_t)(datafd / 1440),
		(unsigned int)((datafd % 1440) / 60),
		(unsigned int)(datafd % 60));
      printtree(outf, od, rep, (Hashtable *)(p->other), requests, requests7,
		pages, pages7, date, firstd, level + 1, pn, totr, totr7, totp,
		totp7, totb, totb7, width, possrightalign, bmult, bmult7,
		unit);
    }
  }
}

void genrep(FILE *outf, Outchoices *od, choice rep, Hashindex **gooditems,
	    Hashindex **baditems,
	    choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2],
	    choice *data2cols, unsigned int data_number, Dateman *dman) {
  extern logical *repistree;
  extern char *workspace;

  logical istree = repistree[G(rep)];
  char **lngstr = od->lngstr;
  char *colhead = lngstr[rep2colhead[rep]];
  logical alphaback = (logical)(rep == REP_ORG || rep == REP_HOST ||
				rep == REP_VHOST);
  Tree *treex = od->tree[G(rep)];
  /* data2cols == NULL for arrayreps */
  choice requests = (data2cols == NULL)?REQUESTS:data2cols[rep2reqs[G(rep)]];
  choice requests7 =
    (data2cols == NULL)?REQUESTS7:data2cols[rep2reqs7[G(rep)]];
  choice pages = (data2cols == NULL)?PAGES:data2cols[PAGES];
  choice pages7 = (data2cols == NULL)?PAGES7:data2cols[PAGES7];
  choice date = (data2cols == NULL)?SUCCDATE:data2cols[rep2date[G(rep)]];
  choice firstd = (data2cols == NULL)?SUCCFIRSTD:data2cols[rep2firstd[G(rep)]];

  Hashtable *tree = NULL;  /* Just to keep compiler happy */
  Hashindex *p;
  Hashentry *badp;
  unsigned long datar, datar7, datap, datap7, datad, datafd;
  unsigned long totr, totr7, totp, totp7, i = 0;
  unsigned long maxr, maxr7, maxp, maxp7, goodn, badn;
  double totb, totb7, maxb, maxb7, unit = 1.0;
  timecode_t maxd, mind;
  unsigned int width[COL_NUMBER], bmult, bmult7, tw = 0;
  logical possrightalign = FALSE, rightalign, templ = FALSE;

  /* If istree, construct the tree. (Otherwise we shall use *gooditems.)
     (These two cases used to be separate functions, and it may still help to
     think of them that way.) */
  if (istree) {
    for (i = 0; od->alltrees[i] != REP_NUMBER; i++)
      if (rep == od->alltrees[i])
	templ = TRUE;   /* tree already constructed */
    if (!templ)
      maketree(treex, *gooditems, *baditems, datacols, data_number);
    tree = treex->tree;

  /* Apply the sort. This also sets tot*, max* and bad*. */
    tree->head[0] = sorttree(od, tree, rep, &(od->floor[G(rep)]),
			     od->sortby[G(rep)], &(od->subfloor[G(rep)]),
			     od->subsortby[G(rep)], alphaback, 0, NULL,
			     (rep == REP_DOM)?(od->aliashead[G(rep)]):NULL,
			     requests, requests7, pages, pages7, date, firstd,
			     &totr, &totr7, &totp, &totp7, &totb, &totb7,
			     &maxr, &maxr7, &maxp, &maxp7, &maxb, &maxb7,
			     &maxd, &mind, &badp, &badn, treex->space,
			     datacols);
  }  /* istree */
  else
    my_sort(gooditems, baditems, NULL, NULL, NULL, 0, -1, &(od->floor[G(rep)]),
	    od->sortby[G(rep)], alphaback, od->wanthead[G(rep)], requests,
	    requests7, pages, pages7, date, firstd, &totr, &totr7, &totp,
	    &totp7, &totb, &totb7, &maxr, &maxr7, &maxp, &maxp7, &maxb, &maxb7,
	    &maxd, &mind, FALSE, &badp, &badn,
	    (logical)(rep == REP_SIZE || rep == REP_PROCTIME));
  if (rep == REP_SIZE || rep == REP_PROCTIME) {
    /* These not sorted so as not to get rid of 0's and to preserve order */
    badp = newhashentry(DATA_NUMBER, FALSE);
    badn = 0;
  }

  /* Now calculate column sizes */
  for (p = istree?(tree->head[0]):(*gooditems), goodn = 0; p != NULL;
       TO_NEXT(p))
    goodn++;
  if (rep == REP_SIZE || rep == REP_PROCTIME) {
    width[COL_TITLE] = od->outputter->strlength(colhead);
    for (p = *gooditems; p != NULL; TO_NEXT(p))
      width[COL_TITLE] = MAX(strlen(p->name), /* no HTML codes used */
			     width[COL_TITLE]);
  }
  else
    width[COL_TITLE] = 0;
  od->outputter->calcwidths(od, rep, width, &bmult, &bmult7, &unit, maxr,
			    maxr7, maxp, maxp7, maxb, maxb7, goodn);
  if (alphaback && od->sortby[G(rep)] == ALPHABETICAL) {
    if (istree)
      tw = alphatreewidth(od, rep, tree, 0, NULL);
    else for (p = *gooditems; p != NULL; TO_NEXT(p)) {
      strcpy(workspace, p->name);
      do_aliasx(workspace, od->aliashead[G(rep)]);
      tw = MAX(tw, od->outputter->strlength(workspace));
    }
    width[COL_TITLE] = MIN(tw, width[COL_TITLE]);
    possrightalign = TRUE;
  }

  /* Print header material */
  if (od->repspan)
    reportspan(outf, od, rep, maxd, mind, dman);
#ifndef NOGRAPHICS
  if (od->outstyle == HTML || od->outstyle == XHTML)
    piechart(outf, od, rep, istree?(tree->head[0]):(*gooditems), requests,
	     requests7, pages, pages7, totr, totr7, totp, totp7, totb, totb7);
#endif
  if (rep != REP_SIZE && rep != REP_PROCTIME)
    od->outputter->whatincluded(outf, od, rep, goodn, dman);
  od->outputter->prestart(outf, od);
  colheads(outf, od, rep, width, bmult, bmult7,
	   (logical)(rep == REP_SIZE || rep == REP_PROCTIME));

  /* Print the items. Reuse goodn here. */
  if (istree)
    printtree(outf, od, rep, tree, requests, requests7, pages, pages7, date,
	      firstd, 0, NULL, totr, totr7, totp, totp7,
	      totb, totb7, width, possrightalign, bmult, bmult7, unit);
  else {
    for (goodn = 0, p = *gooditems; p != NULL; TO_NEXT(p)) {
      if (possrightalign &&
	  (!ISDIGIT(p->name[0]) || !ISDIGIT(p->name[strlen(p->name) - 1])))
	rightalign = TRUE;
      else
	rightalign = FALSE;
      datar = p->own->data[requests];
      datar7 = (requests7 >= 0)?(p->own->data[requests7]):0;
      datap = (pages >= 0)?(p->own->data[pages]):0;
      datap7 = (pages7 >= 0)?(p->own->data[pages7]):0;
      datad = (date >= 0)?(p->own->data[date]):0;
      datafd = (firstd >= 0)?(p->own->data[firstd]):0;
      printcols(outf, od, rep, datar, datar7, datap, datap7, p->own->bytes,
		p->own->bytes7, (long)(++goodn), 0, totr, totr7, totp, totp7,
		totb, totb7, width, bmult, bmult7, unit,
		(logical)(rep == REP_SIZE || rep == REP_PROCTIME),
		rightalign, p->name, p->own->ispage, 0, NULL, NULL,
		lngstr[genrepdate_], lngstr[genreptime_],
		(datecode_t)(datad / 1440),
		(unsigned int)((datad % 1440) / 60),
		(unsigned int)(datad % 60), (datecode_t)(datafd / 1440),
		(unsigned int)((datafd % 1440) / 60),
		(unsigned int)(datafd % 60));
    }
  }

  /* Print the "not listed" line and wind up. */
  if (badn > 0) {
    datar = badp->data[requests];
    datar7 = (requests7 >= 0)?(badp->data[requests7]):0;
    datap = (pages >= 0)?(badp->data[pages]):0;
    datap7 = (pages7 >= 0)?(badp->data[pages7]):0;
    datad = (date >= 0)?(badp->data[date]):0;
    datafd = (firstd >= 0)?(badp->data[firstd]):0;
    printcols(outf, od, rep, datar, datar7, datap, datap7, badp->bytes,
	      badp->bytes7, -1, istree, totr, totr7, totp, totp7, totb, totb7,
	      width, bmult, bmult7, unit,
	      (logical)(rep == REP_SIZE || rep == REP_PROCTIME), FALSE, NULL,
	      FALSE, 0, NULL, NULL, lngstr[genrepdate_], lngstr[genreptime_],
	      (datecode_t)(datad / 1440), (unsigned int)((datad % 1440) / 60),
	      (unsigned int)(datad % 60), (datecode_t)(datafd / 1440),
	      (unsigned int)((datafd % 1440) / 60),
	      (unsigned int)(datafd % 60));
    od->outputter->notlistedstr(outf, od, rep, badn);
    od->outputter->rowend(outf, od, rep);
  }
  od->outputter->preend(outf, od);
  if (istree)
    freemm(treex->space);
}

void dervrep(FILE *outf, Outchoices *od, choice rep, Hashindex *gooditems,
	     Hashindex *baditems,
	     choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2],
	     choice *data2cols, unsigned int data_number, Dateman *dman) {
  Derv *derv = od->derv[rep - FIRST_DERVREP];

  Hashindex *good = NULL, *bad = NULL;
  choice i;
  logical templ = FALSE;
  /* strategy: build list of items then hand off to genrep() */

  for(i = 0; od->alldervs[i] != REP_NUMBER; i++)
    if (rep == od->alldervs[i])
      templ = TRUE;
  if (!templ)
    makederived(derv, gooditems, baditems, od->convfloor, od->multibyte, rep,
		datacols, data_number);
  unhash(derv->table, &good, &bad);
  genrep(outf, od, rep, &good, &bad, datacols, data2cols, data_number, dman);
}

/* names for each bucket in arrayrep: see thresholds at top of defaults()...
   in globals.c. (Names for status codes and file sizes are in the language
   files). */

char *ptnames1[] =
{"0", "<= 0.01", "0.01-0.02", "0.02-0.05", "0.05-0.1 ", "0.1 -0.2 ",
 "0.2 -0.5 ", "0.5 -1   ", "1-  2 ", "2-  5 ", "5- 10 ", "10- 20 ",
 "20- 60 ", "60-120 ", "120-300 ", "300-600 ", "> 600 "};

char *ptnames2[] =
{"0", "", "", "", "", "", "", "1", "2", "3-  5", "5- 10", "10- 20", "20- 60",
 "60-120", "120-300", "300-600", "> 600"};
/* empty string signifies don't use */

void arrayrep(FILE *outf, Outchoices *od, choice rep, Arraydata *array,
	      Dateman *dman) {
  extern Memman *xmemman;

  Hashindex *good = NULL, *bad = NULL, *gp = NULL;
  char **names;
  choice i, lasti;
  logical done;
  /* strategy: construct list of (Hashindex *), and pass to genrep() */

  if (rep == REP_CODE)
    names = &(od->lngstr[code100_]);
  else if (rep == REP_SIZE)
    names = &(od->lngstr[filesize0_]);
  else if (array[1].reqs + array[2].reqs + array[3].reqs + array[4].reqs +
	   array[5].reqs + array[6].reqs == 0)  /* assume %t not %T */
    names = ptnames2;
  else
    names = ptnames1;

  /* calculate lasti */
  for (lasti = 0; array[lasti].threshold >= -0.5; lasti++)
    ;
  if (rep != REP_CODE) {
    for ( ; array[lasti].reqs == 0; lasti--)
      ;
  }
  for (i = 0, done = FALSE; !done; i++) {
    if (array[i].reqs > 0 || (rep != REP_CODE && !IS_EMPTY_STRING(names[i]))) {
      if (good == NULL) {
	gp = (Hashindex *)submalloc(xmemman, sizeof(Hashindex));
	good = gp;
      }
      else {
	gp->next = (Hashindex *)submalloc(xmemman, sizeof(Hashindex));
	TO_NEXT(gp);
      }
      gp->name = names[i];
      gp->own = newhashentry(DATA_NUMBER, FALSE);
      gp->own->data[REQUESTS] = array[i].reqs;
      gp->own->data[REQUESTS7] = array[i].reqs7;
      gp->own->data[PAGES] = array[i].pages;
      gp->own->data[PAGES7] = array[i].pages7;
      gp->own->data[SUCCDATE] = array[i].lastdate;
      gp->own->data[SUCCFIRSTD] = array[i].firstdate;
      gp->own->bytes = array[i].bytes;
      gp->own->bytes7 = array[i].bytes7;
      gp->next = NULL;
    }
    if (i == lasti)
      done = TRUE;
  }
  genrep(outf, od, rep, &good, &bad, NULL, NULL, 0, dman);
}

void output(Outchoices *od, Hashindex **gooditems, Hashindex **baditems,
	    Dateman *dman, Arraydata **arraydata, unsigned long *sumdata,
	    double totbytes, double totbytes7,
	    choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2],
	    choice data2cols[ITEM_NUMBER][DATA_NUMBER], unsigned int *no_cols,
	    unsigned int granularity) {
  char *outfile = od->outfile;

  FILE *outf;
  int ro;
  choice rep;

  /* first open output file */
  
  if (IS_STDOUT(outfile)) {
    outf = stdout;
    debug('F', "Opening stdout as output file");
  }
  else {
    if ((outf = FOPENW(outfile)) == NULL)
      error("failed to open output file %s for writing", outfile);
    else {
      debug('F', "Opening %s as output file", outfile);
#ifdef RISCOS
      _swix(OS_File, _INR(0,2), 18, outfile, od->outputter->riscosfiletype());
      /* set filetype */
#endif
    }
  }

  /* remove any reports not wanted */

  checkreps(od, dman, gooditems, arraydata, data2cols);

  /* page header */

  pagetop(outf, od, dman);
    
  /* Now the main reports */

  for (ro = 0; od->reporder[ro] != -1; ro++) {
    rep = od->reporder[ro];

    if (od->repq[rep]) {
      report_title(outf, od, rep);
      switch(rep) {
      case (REP_GENSUM):
	gensum(outf, od, sumdata, totbytes, totbytes7, gooditems, baditems,
	       dman, data2cols);
	break;
      case (REP_YEAR):
      case (REP_QUARTERLY):
      case (REP_MONTH):
      case (REP_WEEK):
      case (REP_DAYREP):
      case (REP_HOURREP):
      case (REP_QUARTERREP):
      case (REP_FIVEREP):
	timerep(outf, od, rep, dman, granularity);
	break;
      case (REP_DAYSUM):
      case (REP_HOURSUM):
      case (REP_WEEKHOUR):
      case (REP_QUARTERSUM):
      case (REP_FIVESUM):
	timesum(outf, od, rep, dman, granularity);
	break;
      case (REP_HOST):
      case (REP_REDIRHOST):
      case (REP_FAILHOST):
      case (REP_BROWREP):
      case (REP_VHOST):
      case (REP_REDIRVHOST):
      case (REP_FAILVHOST):
      case (REP_USER):
      case (REP_REDIRUSER):
      case (REP_FAILUSER):
      case (REP_REQ):
      case (REP_REDIR):
      case (REP_FAIL):
      case (REP_REF):
      case (REP_REDIRREF):
      case (REP_FAILREF):
      case (REP_TYPE):
      case (REP_DIR):
      case (REP_DOM):
      case (REP_ORG):
      case (REP_REFSITE):
	genrep(outf, od, rep, &(gooditems[rep2type[rep]]),
	       &(baditems[rep2type[rep]]), datacols[rep2type[rep]],
	       data2cols[rep2type[rep]], no_cols[rep2type[rep]], dman);
	break;
      case (REP_SEARCHREP):
      case (REP_SEARCHSUM):
      case (REP_INTSEARCHREP):
      case (REP_INTSEARCHSUM):
      case (REP_BROWSUM):
      case (REP_OS):
	dervrep(outf, od, rep, gooditems[rep2type[rep]],
		baditems[rep2type[rep]], datacols[rep2type[rep]],
		data2cols[rep2type[rep]], no_cols[rep2type[rep]], dman);
	break;
      case (REP_SIZE):
      case (REP_CODE):
      case (REP_PROCTIME):
	arrayrep(outf, od, rep, arraydata[rep - FIRST_ARRAYREP], dman);
	break;
      }  /* end switch rep */
      report_footer(outf, od, rep);
    }    /* end if rep wanted */
  }      /* end for ro */

  /*** Bit at the bottom of the page ***/

  pagebot(outf, od);
  if (!IS_STDOUT(outfile)) {
    debug('F', "Closing %s", outfile);
    fclose(outf);
  }
}
analog-ce-6.0.17/src/output2.c000066400000000000000000001076451406366436600160430ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** output2.c; subsiduary output functions ***/

#include "anlghea3.h"

extern unsigned int *rep2lng;
extern choice *rep2type, *rep2reqs, *rep2reqs7, *rep2date, *rep2firstd;
extern char *repname[];

void report_title(FILE *outf, Outchoices *od, choice rep) {

  /* The actual report title */
  od->outputter->reporttitle(outf, od, rep);

  /* The report description text */
  if (od->descriptions && od->descstr[rep] != NULL)
    od->outputter->reportdesc(outf, od, rep);
}

void report_footer(FILE *outf, Outchoices *od, choice rep) {
  od->outputter->reportfooter(outf, od, rep);
  od->outputter->hrule(outf, od);
}

/* The period represented by the report. At the moment, this is a function of
   the report, not the underlying item type. Either choice makes some sense,
   though, and it would just be a matter of changing the calculation of maxd &
   min before passing them into this function. */
/* Assume od->repspan already tested. */
void reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd,
		timecode_t mind, Dateman *dman) {
  if (maxd == FIRST_TIME || mind == LAST_TIME ||
      (mind - dman->firsttime < od->rsthresh && 
       dman->lasttime - maxd < od->rsthresh))
    return;

  od->outputter->reportspan(outf, od, rep, maxd, mind);
}

void matchlength(FILE *outf, Outchoices *od, char *s, char c) {
  size_t i;

  for (i = od->outputter->strlength(s); i > 0; i--)
    od->outputter->putch(outf, c);
}

void matchlengthn(FILE *outf, Outchoices *od, int width, char c) {
  for ( ; width > 0; width--)
    od->outputter->putch(outf, c);
}

/*** Date printing routine ***/

size_t datefmtlen(Outchoices *od, char *fmt) {
  /* Page width required for formatted date. All dates should be the same,
     so just format an arbitrary one and measure it. */
  return(od->outputter->strlength(datesprintf(od, fmt, 1, 23, 59, 1, 23, 59,
					   FALSE, UNSET)));
}

char *datesprintf(Outchoices *od, char *fmt, datecode_t date, unsigned int hr,
		  unsigned int min, datecode_t newdate, unsigned int newhr,
		  unsigned int newmin, logical running, choice allowmonth) {
  /* Formats date. Allocates space as necessary, but 2nd call will overwrite */
  /* If od is NULL, must have running == TRUE and allowmonth != UNSET.
     Otherwise, if allowmonth is UNSET, follow what the od->outputter says. */
  extern char *engmonths[], *engshortdays[];
  static char *ans = NULL;
  static size_t len = 0;

  size_t (*strlenp)(const char *);
  char * (*endashp)(void);
  char **monthname, **dayname, *compsep;
  size_t monthlen, daylen, ampmlen, plainmonthlen, plaindaylen, plainampmlen;
  size_t current, increment;
  unsigned int d, m, y, d2, m2, y2, n, i;
  char *s, *c, *am, *pm;

  if (od == NULL) {   /* Not in output routine */
    strlenp = &strlen;
    endashp = &plain_endash;
    monthname = engmonths;
    dayname = engshortdays;
    compsep = NULL;
    am = "am";
    pm = "pm";
    plainmonthlen = ENGMONTHLEN;
    plaindaylen = ENGSHORTDAYLEN;
    plainampmlen = 2;
  }
  else {
    strlenp = od->outputter->strlength;
    endashp = od->outputter->endash;
    monthname = od->monthname;
    dayname = od->dayname;
    compsep = od->compsep;
    am = od->lngstr[am_];
    pm = od->lngstr[pm_];
    plainmonthlen = od->plainmonthlen;
    plaindaylen = od->plaindaylen;
    plainampmlen = od->plainampmlen;
    if (allowmonth == UNSET)
      allowmonth = od->outputter->allowmonth();
  }
  if (running) {    /* Running text: no extra spacing to line things up */
    monthlen = 0;
    daylen = 0;
    ampmlen = 0;
  }
  else {
    monthlen = od->monthlen;
    daylen = od->daylen;
    ampmlen = od->ampmlen;
  }
  increment = monthlen + plainmonthlen + daylen + plaindaylen + ampmlen +
    plainampmlen + ((compsep == NULL)?0:strlen(compsep)) + 5;
  /* A (naive) upper bound on the amount by which the length of the answer
     might grow in one step; cf comment under plainmonthlen in init.c. */

  if (date == 0 || date == LAST_DATE) {
    n = chrn(fmt, '\b');
    ENSURE_LEN(ans, len, n * ((compsep == NULL)?0:strlen(compsep)) + 1);
    s = ans;
    if (compsep != NULL) {
      for (i = 0; i < n; i++)
	PUTs(s, compsep, 0);
    }
    *s = '\0';
    return(ans);
  }
  code2date(date, &d, &m, &y);
  code2date(newdate, &d2, &m2, &y2);
  ENSURE_LEN(ans, len, 1);  /* in case fmt is "" */
  for (c = fmt, s = ans; *c != '\0'; c++) {
    current = (ans == NULL)?0:(size_t)(s - ans);
    ENSURE_LEN(ans, len, current + increment);
    s = ans + current;   /* in case ans was moved when realloc'ed */
    if (*c == '%' && *(c + 1) != '\0') {
      c++;
      switch (*c) {
      case '%':
	PUTc(s, '%');
	break;
      case 'd':
	PUT2d(s, d);
	break;
      case 'D':
	PUT02d(s, d);
	break;
      case 'e':
	PUT2d(s, d2);
	break;
      case 'E':
	PUT02d(s, d2);
	break;
      case 'l':
	if (monthname != NULL)
	  PUTs(s, monthname[m2],
	       (int)monthlen - (int)strlenp(monthname[m2]));
	break;
      case 'L':
	if (allowmonth)
	  PUT02d(s, m2 + 1);
	break;
      case 'm':
	if (monthname != NULL)
	  PUTs(s, monthname[m],
	       (int)monthlen - (int)strlenp(monthname[m]));
	break;
      case 'M':
	if (allowmonth)
	  PUT02d(s, m + 1);
	break;
      case 'q':
	PUT1d(s, (m / 3) + 1);
	break;
      case '\b':  /* \b only used internally */
	if (compsep != NULL)
	  PUTs(s, compsep, 0);
	break;
      case 'y':
	PUT02d(s, y % 100);
	break;
      case 'Y':
	PUT04d(s, y);
	break;
      case 'z':
	PUT02d(s, y2 % 100);
	break;
      case 'Z':
	PUT04d(s, y2);
	break;
      case 'X':
	PUT04d(s, y);
	PUTc(s, '-');
	PUT02d(s, m + 1);
	PUTc(s, '-');
	PUT02d(s, d);
	break;
      case 'h':
	PUT2d(s, hr);
	break;
      case 'H':
	PUT02d(s, hr);
	break;
      case 'j':
	i = hr % 12;
	if (i == 0)
	  i = 12;
	PUT2d(s, i);
	break;
      case 'a':
	if (hr < 12 || hr == 24)
	  PUTs(s, am, (int)ampmlen - (int)strlenp(am))
	else       /* no semicolon above because of definition of PUTs */
	  PUTs(s, pm, (int)ampmlen - (int)strlenp(pm));
	break;
      case 'i':
	PUT2d(s, newhr);
	break;
      case 'I':
	PUT02d(s, newhr);
	break;
      case 'k':
	i = newhr % 12;
	if (i == 0)
	  i = 12;
	PUT2d(s, i);
	break;
      case 'b':
	if (newhr < 12 || newhr == 24)
	  PUTs(s, am, (int)ampmlen - (int)strlenp(am))
	else       /* no semicolon above because of definition of PUTs */
	  PUTs(s, pm, (int)ampmlen - (int)strlenp(pm));
	break;
      case 'n':
	PUT02d(s, min);
	break;
      case 'o':
	PUT02d(s, newmin);
	break;
      case 'w':
	if (dayname != NULL)
	  PUTs(s, dayname[DAYOFWEEK(date)],
	       (int)daylen - (int)strlenp(dayname[DAYOFWEEK(date)]));
	break;
      case 'x':
	PUTs(s, endashp(), 0);
	break;
      }  /* switch *c */
    }    /* if *c == '%' */
    else
      PUTc(s, *c);
  }  /* for c */
  *s = '\0';
  return(ans);
}

char *timesprintf(Outchoices *od, char *fmt, timecode_t t, choice allowmonth) {
  /* Just a wrapper for the most common case of datesprintf(). */
  return(datesprintf(od, fmt, t / 1440, (t % 1440) / 60, t % 60, 0, 0, 0, TRUE,
		     allowmonth));
}

int f3printf(FILE *outf, Outchoices *od, double x, unsigned int width,
	     char sepchar) {
  /* Return number of characters printed, but counting e.g. & as 1. */
  /* NB The sepchar is sometimes repsepchar */
  int ans, i;

  x += EPSILON;   /* just to make sure rounding down works OK */
  if (sepchar == '\0')
    return(fprintf(outf, "%*.0f", width, x));

  for (i = 0; x >= 1000; i++)
    x /= 1000;  /* find out how big x is to get number of leading spaces */
  ans = fprintf(outf, "%*d", MAX((int)width - 4 * i, 0), (int)x);
  ans += 4 * i;
  /* now run down again, printing each clump */
  for ( ; i > 0; i--) {
    od->outputter->putch(outf, sepchar);
    x -= (int)x;
    x *= 1000;
    fprintf(outf, "%03d", (int)x);
  }
  return(ans);
}

void printbytes(FILE *outf, Outchoices *od, double bytes, unsigned int bmult,
		unsigned int width, char sepchar) {

  unsigned int dp = od->bytesdp;

  int by1;
  double by2, rounder;
  unsigned int j;

  if (bmult == 0)
    (void)f3printf(outf, od, bytes, width, sepchar);
  else {
    for (j = 0; j < bmult; j++)
      bytes /= 1024; /* divide bytes to get kilobytes, megabytes or whatever */

    /* Add some amount in order to round to the correct number of decimal
       places accurately: 0.5 for 0 d.p.s, 0.05 for 1 d.p. etc. */
    rounder = 0.5;
    for (j = 0; j < dp; j++)
      rounder /= 10.0;
    bytes += rounder;

    if (dp == 0) {  /* fractional part not wanted */
      fprintf(outf, "%*d", width, (int)bytes);
    }
    else {
      by1 = (int)bytes;    /* whole number of kilo/mega/etc. bytes */
      width -= MIN(width, dp + 1);  /* leave room for fractional part */
      fprintf(outf, "%*d", width, by1);
      by2 = (bytes - (double)by1);  /* fractional part */
      for (j = 0; j < dp; j++)
	by2 *= 10;
      od->outputter->putch(outf, od->decpt);
      fprintf(outf, "%0*d", dp, (int)by2);
    }
  }
}

double findunit(Outchoices *od, double n, unsigned int width[], choice *cols) {
  int w;
  double unit;
  int c;
  int i, j;

  w = (int)(od->outputter->pagewidth(od)) - (int)width[COL_TITLE] - 2;
  for (c = 0; cols[c] != COL_NUMBER; c++)
    w -= (int)width[cols[c]] + 2;
  w = MAX(w, (int)(od->mingraphwidth));
  /* unit must be nice amount: i.e., {1, 1.5, 2, 2.5, 3, 4, 5, 6, 8} * 10^n */
  unit = ((n - 1) / (double)w);
  j = 0;
  while (unit > 24.) {
    unit /= 10.;
    j++;
  }
  unit = (double)((int)unit);
  if (unit == 6.)
    unit = 7.;
  else if (unit == 8.)
      unit = 9.;
  else if (unit >= 20.)
    unit = 24.;
  else if (unit >= 15.)
    unit = 19.;
  else if (unit >= 10.)
    unit = 14.;
  unit += 1.;
  for (i = 0; i < j; i++) {
    unit *= 10.;
  }
  return(unit);
}

/* The widths which columns want to take. The od->outputters have their own
   version of this function, but usually they just call this one */
void calcwidths(Outchoices *od, choice rep, unsigned int width[],
		unsigned int *bmult, unsigned int *bmult7, double *unit,
		unsigned long maxr, unsigned long maxr7, unsigned long maxp,
		unsigned long maxp7, double maxb, double maxb7,
		unsigned long howmany) {
  /* width[COL_TITLE] should be set before calling this function. */
  /* width[COL_TITLE] == 0 signifies that the title is last and this function
     should calculate the remaining width. */
  /* *unit == 0 for timegraphs (and it's then set here); non-zero otherwise. */
  extern unsigned int *col2colhead;

  char repsepchar = od->repsepchar;
  char graphby = od->graph[rep];
  choice *cols = od->cols[rep];
  char **lngstr = od->lngstr;

  int w;
  unsigned int i;

  width[COL_REQS] = MAX(LEN3(log10i(maxr) + 1, repsepchar),
			od->outputter->strlength(lngstr[col2colhead[COL_REQS]]));
  width[COL_REQS7] = MAX(LEN3(log10i(maxr7) + 1, repsepchar),
			 od->outputter->strlength(lngstr[col2colhead[COL_REQS7]]));
  width[COL_PAGES] = MAX(LEN3(log10i(maxp) + 1, repsepchar),
			 od->outputter->strlength(lngstr[col2colhead[COL_PAGES]]));
  width[COL_PAGES7] = MAX(LEN3(log10i(maxp7) + 1, repsepchar),
			  od->outputter->strlength(lngstr[col2colhead[COL_PAGES7]]));
  if (od->rawbytes || maxb < 1024.0) {
    width[COL_BYTES] = MAX(LEN3(log10x(maxb) + 1, repsepchar),
			   od->outputter->strlength(lngstr[col2colhead[COL_BYTES]]));
    *bmult = 0;
  }
  else {
    *bmult = findbmult(maxb, od->bytesdp);
    width[COL_BYTES] =
      MAX(3 + od->bytesdp + (od->bytesdp != 0),
	  od->outputter->strlength(lngstr[col2colhead[COL_BYTES] + 1])
	  + od->outputter->strlength(lngstr[byteprefixabbr_ + *bmult]) - 1);
  }
  /* I have some misgivings about allowing the bmult7 to be different from
     the bmult. It's less immediately readable. But I think it's necessary,
     because maxb and maxb7 are quite often different orders of magnitude. */
  if (od->rawbytes || maxb7 < 1024.0) {
    width[COL_BYTES7] =
      MAX(LEN3(log10x(maxb7) + 1, repsepchar),
	  od->outputter->strlength(lngstr[col2colhead[COL_BYTES7]]));
    *bmult7 = 0;
  }
  else {
    *bmult7 = findbmult(maxb7, od->bytesdp);
    width[COL_BYTES7] =
      MAX(3 + od->bytesdp + (od->bytesdp != 0),
	  od->outputter->strlength(lngstr[col2colhead[COL_BYTES7] + 1])
	  + od->outputter->strlength(lngstr[byteprefixabbr_ + *bmult7]) - 1);
  }
  width[COL_PREQS] = MAX(6, od->outputter->strlength(lngstr[col2colhead[COL_PREQS]]));
  width[COL_PREQS7] =
    MAX(6, od->outputter->strlength(lngstr[col2colhead[COL_PREQS7]]));
  width[COL_PPAGES] =
    MAX(6, od->outputter->strlength(lngstr[col2colhead[COL_PPAGES]]));
  width[COL_PPAGES7] =
    MAX(6, od->outputter->strlength(lngstr[col2colhead[COL_PPAGES7]]));
  width[COL_PBYTES] =
    MAX(6, od->outputter->strlength(lngstr[col2colhead[COL_PBYTES]]));
  width[COL_PBYTES7] =
    MAX(6, od->outputter->strlength(lngstr[col2colhead[COL_PBYTES7]]));
  width[COL_DATE] = MAX(datefmtlen(od, lngstr[genrepdate_]),
			od->outputter->strlength(lngstr[col2colhead[COL_DATE]]));
  width[COL_TIME] = MAX(datefmtlen(od, lngstr[genreptime_]),
			od->outputter->strlength(lngstr[col2colhead[COL_TIME]]));
  width[COL_FIRSTD] = MAX(datefmtlen(od, lngstr[genrepdate_]),
			  od->outputter->strlength(lngstr[col2colhead[COL_FIRSTD]]));
  width[COL_FIRSTT] = MAX(datefmtlen(od, lngstr[genreptime_]),
			  od->outputter->strlength(lngstr[col2colhead[COL_FIRSTT]]));
  width[COL_INDEX] = MAX(LEN3(log10i(howmany) + 1, repsepchar),
			 od->outputter->strlength(lngstr[col2colhead[COL_INDEX]]));
  if (*unit == 0) { /* i.e. a timegraph */
    if (graphby == 'R' || graphby == 'r')
      *unit = findunit(od, (double)maxr, width, cols);
    else if (graphby == 'P' || graphby == 'p')
      *unit = findunit(od, (double)maxp, width, cols);
    else {
      for (i = 0; i < *bmult; i++)
	maxb /= 1024;
      if (*bmult > 0)
	maxb *= 1000;
      *unit = findunit(od, maxb, width, cols);
      if (*bmult > 0)
	*unit /= 1000;
    }
  }
  if (width[COL_TITLE] == 0) {
    w = (int)(od->outputter->pagewidth(od));
    for (i = 0; cols[i] != COL_NUMBER; i++)
      w -= (int)width[cols[i]] + 2;
    width[COL_TITLE] = (unsigned int)MAX(0, w);
  }

}

unsigned int alphatreewidth(Outchoices *od, choice rep, Hashtable *tree,
			    unsigned int level, Strlist *partname) {
  /* Calculate width needed for Organisation Report.
     Constructing the name is basically the same code as printtree(). */
  extern char *workspace;

  char *name;
  size_t need = (size_t)level + 3;
  Strlist *pn, s;
  Hashindex *p;
  unsigned int tw = 0, tmp;

  if (tree == NULL || tree->head[0] == NULL)
    return(0);
  for (p = tree->head[0]; p != NULL; TO_NEXT(p)) {
    name = maketreename(partname, p, &pn, &s, need, rep, TRUE);
    if (!STREQ(name, LNGSTR_NODOMAIN) && !STREQ(name, LNGSTR_UNKDOMAIN) &&
	!ISDIGIT(name[strlen(name) - 1])) { /* ignore left-aligned ones */
      strcpy(workspace, name);
      do_aliasx(workspace, od->aliashead[G(rep)]);
      tmp = od->outputter->strlength(workspace) + 2 * level;
                       /* will be printed with 2 trailing spaces per level */
      tw = MAX(tw, tmp);
      tmp = alphatreewidth(od, rep, (Hashtable *)(p->other), level + 1, pn);
      tw = MAX(tw, tmp);
      /* The second tmp will of course be bigger unless there are aliases
	 (if there are any children at all). */
    }
  }
  return(tw);
}

/* Declare the floor and sortby for a report. The od->outputters have their own
   version of this function, but most of them just call this one to sort out
   all the language strings. */
void whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n,
		  Dateman *dman) {
  extern char *byteprefix;
  extern unsigned int *method2sing, *method2pl, *method2date, *method2pc;
  extern unsigned int *method2relpc, *method2sort;

  char **lngstr = od->lngstr;
  choice sortby = od->sortby[G(rep)];
  double floormin = od->floor[G(rep)].min;
  char floorqual = od->floor[G(rep)].qual;
  choice floorby = od->floor[G(rep)].floorby;
  char *gens = lngstr[rep2lng[rep] + 1];
  char *genp = lngstr[rep2lng[rep] + 2];
  char gender = lngstr[rep2lng[rep] + 3][0];
  choice requests = rep2reqs[G(rep)];
  choice requests7 = rep2reqs7[G(rep)];
  choice date = rep2date[G(rep)];
  choice firstd = rep2firstd[G(rep)];

  int firsts, firstds, alls, sorted, alphsort, unsort, bmult;
  char *lngs, *c;
  static char *t = NULL;
  static size_t tlen = 0;
  unsigned long temp = 0;
  unsigned long temp2;
  int i;
  timecode_t tempd;

  if (gender == 'm') {
    firsts = firstsm_;
    firstds = firstdsm_;
    alls = allsm_;
    sorted = sortedm_;
    alphsort = STREQ(gens, lngstr[codegs_])?numsortm_:alphasortm_;
    unsort = unsortedm_;            /* quickest kludge for only one report */
  }
  else if (gender == 'f') {
    firsts = firstsf_;
    firstds = firstdsf_;
    alls = allsf_;
    sorted = sortedf_;
    alphsort = STREQ(gens, lngstr[codegs_])?numsortf_:alphasortf_;
    unsort = unsortedf_;
  }
  else { /* gender == 'n' */
    firsts = firstsn_;
    firstds = firstdsn_;
    alls = allsn_;
    sorted = sortedn_;
    alphsort = STREQ(gens, lngstr[codegs_])?numsortn_:alphasortn_;
    unsort = unsortedn_;
  }

  /* see also report_floor() in settings.c */
  od->outputter->whatinchead(outf, od);
  if (floormin < 0 && n < (unsigned long)(-floormin + EPSILON))
    floormin = 1;  /* not enough items for requested -ve floor */
  /* floormin = 1 will work even for date sort because it will be before
     dman->firsttime. With very high probability. :) */
  if (floormin < 0) {
    temp = (unsigned long)(-floormin + EPSILON);
    if (temp == 1) {
      ENSURE_LEN(t, tlen, strlen(lngstr[firsts]) + strlen(gens) + 1);
      sprintf(t, lngstr[firsts], gens);
      od->outputter->whatincprintstr(outf, od, t);
    }
    else {
      for (temp2 = temp, i = 1; temp2 >= 10; temp2 /= 10)
	i++;
      ENSURE_LEN(t, tlen, strlen(lngstr[firstds]) + strlen(genp) + i + 1);
      sprintf(t, lngstr[firstds], temp, genp);
      od->outputter->whatincprintstr(outf, od, t);
    }
    od->outputter->whatincprintstr(outf, od, " ");
    od->outputter->whatincprintstr(outf, od, lngstr[floorby_]);
    od->outputter->whatincprintstr(outf, od, " ");
    if (floorby == REQUESTS)
      od->outputter->whatincprintstr(outf, od, lngstr[method2sort[requests]]);
    else if (floorby == REQUESTS7)
      od->outputter->whatincprintstr(outf, od, lngstr[method2sort[requests7]]);
    else if (floorby == DATESORT)
      od->outputter->whatincprintstr(outf, od, lngstr[method2sort[date]]);
    else if (floorby == FIRSTDATE)
      od->outputter->whatincprintstr(outf, od, lngstr[method2sort[firstd]]);
    else
      od->outputter->whatincprintstr(outf, od, lngstr[method2sort[floorby]]);
  }
  else {   /* floormin >= 0 */
    ENSURE_LEN(t, tlen, strlen(lngstr[alls]) + strlen(genp) + 1);
    sprintf(t, lngstr[alls], genp);
    od->outputter->whatincprintstr(outf, od, t);
    if (floormin < 2 - EPSILON && floorqual == '\0' && floorby == REQUESTS)
      floormin = 0;  /* Report 1r as 0r */
    if (floorby == DATESORT || floorby == FIRSTDATE) {
      tempd = (timecode_t)(floormin + EPSILON);
      if (tempd > dman->firsttime) {
	od->outputter->whatincprintstr(outf, od, " ");
	od->outputter->whatincprintstr(outf, od,
		   lngstr[method2date[(floorby == DATESORT)?date:firstd]]);
	od->outputter->whatincprintstr(outf, od, " ");
	od->outputter->whatincprintstr(outf, od, timesprintf(od, lngstr[whatincfmt_],
						     tempd, UNSET));
      }
    }
    else if (floormin > EPSILON) {
      od->outputter->whatincprintstr(outf, od, " ");
      od->outputter->whatincprintstr(outf, od, lngstr[atleast_]);
      od->outputter->whatincprintstr(outf, od, " ");
      if (floorqual == '\0') {
	temp = (unsigned long)(floormin + EPSILON);
	for (temp2 = temp, i = 1; temp2 >= 10; temp2 /= 10)
	  i++;
	ENSURE_LEN(t, tlen, i + 1);
	sprintf(t, "%lu", temp);
	od->outputter->whatincprintstr(outf, od, t);
	od->outputter->whatincprintstr(outf, od, " ");
	if (floorby == REQUESTS)
	  od->outputter->whatincprintstr(outf, od, (temp == 1)?\
		  lngstr[method2sing[requests]]:lngstr[method2pl[requests]]);
	else if (floorby == REQUESTS7)
	  od->outputter->whatincprintstr(outf, od, (temp == 1)?\
		  lngstr[method2sing[requests7]]:\
		  lngstr[method2pl[requests7]]);
	else
	  od->outputter->whatincprintstr(outf, od, (temp == 1)?\
		  lngstr[method2sing[floorby]]:lngstr[method2pl[floorby]]);
      }
      else {  /* floorqual != '\0' */
	od->outputter->printdouble(outf, od, floormin);
	if (floorqual == '%') {
	  if (floorby == REQUESTS)
	    c = lngstr[method2pc[requests]];
	  else if (floorby == REQUESTS7)
	    c = lngstr[method2pc[requests7]];
	  else
	    c = lngstr[method2pc[floorby]];
	  od->outputter->whatincprintstr(outf, od, c);
	}
	else if (floorqual == ':') {
	  if (floorby == REQUESTS)
	    c = lngstr[method2relpc[requests]];
	  else if (floorby == REQUESTS7)
	    c = lngstr[method2relpc[requests7]];
	  else
	    c = lngstr[method2relpc[floorby]];
	  od->outputter->whatincprintstr(outf, od, c);
	}
	else { /* if qual is anything else, must be (k|M|G|T|etc.)bytes */
	  lngs = (floorby == BYTES)?lngstr[xbytestraffic_]:\
	    lngstr[xbytestraffic7_];
	  if (strchr(byteprefix, floorqual) == NULL)  /* shouldn't happen */
	    bmult = 1;
	  else
	    bmult = strchr(byteprefix, floorqual) - byteprefix;
	  c = strchr(lngs, '?');  /* checked during initialisation */
	  *c = '\0';
	  od->outputter->whatincprintstr(outf, od, " ");
	  od->outputter->whatincprintstr(outf, od, lngs);
	  od->outputter->whatincprintstr(outf, od,
					 lngstr[byteprefix_ + bmult]);
	  od->outputter->whatincprintstr(outf, od, c + 1);
	  *c = '?';
	}
      }   /* end floorqual != '\0' */
    }     /* end floormin > EPSILON */
  }       /* end floormin > 0 */
  /* That completes the floor; now we are just left with the sortby */
  if (floormin >= 0 || temp != 1) { /* else only one item, so no sort */
    if (floormin < 0 && sortby == RANDOM)
      sortby = floorby;
    od->outputter->whatincprintstr(outf, od, ", ");
    if (sortby == ALPHABETICAL)
      od->outputter->whatincprintstr(outf, od, lngstr[alphsort]);
    else if (sortby == RANDOM)
      od->outputter->whatincprintstr(outf, od, lngstr[unsort]);
    else {
      od->outputter->whatincprintstr(outf, od, lngstr[sorted]);
      od->outputter->whatincprintstr(outf, od, " ");
      if (sortby == REQUESTS)
	od->outputter->whatincprintstr(outf, od,
				       lngstr[method2sort[requests]]);
      else if (sortby == REQUESTS7)
	od->outputter->whatincprintstr(outf, od,
				       lngstr[method2sort[requests7]]);
      else if (sortby == DATESORT)
	od->outputter->whatincprintstr(outf, od, lngstr[method2sort[date]]);
      else if (sortby == FIRSTDATE)
	od->outputter->whatincprintstr(outf, od, lngstr[method2sort[firstd]]);
      else
	od->outputter->whatincprintstr(outf, od, lngstr[method2sort[sortby]]);
    }
  }
  od->outputter->whatincprintstr(outf, od, ".");
  od->outputter->whatincfoot(outf, od);
}

void barchart(FILE *outf, Outchoices *od, char graphby, unsigned long reqs,
	      unsigned long pages, double bys, double unit) {
  double x;
  int y;

  if (graphby == 'P' || graphby == 'p')
    x = (double)pages - 0.5;
  else if (graphby == 'R' || graphby == 'r')
    x = (double)reqs - 0.5;
  else
    x = bys;
  x /= unit;
  x += 1;
  y = (int)x;

  od->outputter->barchart(outf, od, y, graphby);
}

void colheads(FILE *outf, Outchoices *od, choice rep, unsigned int width[],
	      unsigned int bmult, unsigned int bmult7, logical name1st) {
  extern unsigned int *col2colhead, *rep2colhead;
  static char *bcolname = NULL;
  static size_t bcolnamelen = 0;

  char **lngstr = od->lngstr;
  choice *cols = od->cols[rep];

  char *colname, *d;
  unsigned int c, bm;

  /* Column headers */

  od->outputter->colheadstart(outf, od, rep);

  if (name1st)
    od->outputter->colheadcol(outf, od, rep, COL_TITLE, width[COL_TITLE],
			      lngstr[rep2colhead[rep]], FALSE);
  for (c = 0; cols[c] != COL_NUMBER; c++) {
    if (cols[c] == COL_BYTES)
      bm = bmult;
    else if (cols[c] == COL_BYTES7)
      bm = bmult7;
    else
      bm = 0;

    if (bm == 0)
      colname = lngstr[col2colhead[cols[c]]];
    else {  /* special case for bytes: insert kilo, mega, etc. */
      colname = lngstr[col2colhead[cols[c]] + 1];
      d = strchr(colname, '?');  /* checked during initialisation */
      *d = '\0';
      ENSURE_LEN(bcolname, bcolnamelen,
		 strlen(colname) + strlen(lngstr[byteprefixabbr_ + bm]) +
		 strlen(d + 1) + 1);
      sprintf(bcolname, "%s%s%s", colname, lngstr[byteprefixabbr_ + bm],
	      d + 1);
      *d = '?';
      colname = bcolname;
    }
    od->outputter->colheadcol(outf, od, rep, cols[c], width[cols[c]], colname,
			      FALSE);
  }  /* for (c = 0) */
  if (!name1st)
    od->outputter->colheadcol(outf, od, rep, COL_TITLE, width[COL_TITLE],
			      lngstr[rep2colhead[rep]], TRUE);
      
  od->outputter->colheadend(outf, od, rep);

  /* Underlinings */

  od->outputter->colheadustart(outf, od, rep);
 
  if (name1st)
    od->outputter->colheadunderline(outf, od, rep, COL_TITLE,
				width[COL_TITLE], ""); 
  for (c = 0; cols[c] != COL_NUMBER; c++)
    od->outputter->colheadunderline(outf, od, rep, cols[c], width[cols[c]],
				    ""); 
  if (!name1st)
    od->outputter->colheadunderline(outf, od, rep, COL_TITLE, 0,
				lngstr[rep2colhead[rep]]); 

  od->outputter->colheaduend(outf, od, rep);
}

void printcols(FILE *outf, Outchoices *od, choice rep, unsigned long reqs,
	       unsigned long reqs7, unsigned long pages, unsigned long pages7,
	       double bys, double bys7, long index, int level,
	       unsigned long totr, unsigned long totr7, unsigned long totp,
	       unsigned long totp7, double totb, double totb7,
	       unsigned int width[], unsigned int bmult, unsigned int bmult7,
	       double unit, logical name1st, logical rightalign, char *name,
	       logical ispage, unsigned int spaces, Include *linkhead,
	       char *baseurl, char *datefmt, char *timefmt, datecode_t date,
	       unsigned int hr, unsigned int min, datecode_t date2,
	       unsigned int hr2, unsigned int min2) {
  /* 'level' is -1 for time reports, 0 for other non-hierarchical reports,
     and starts at 1 for hierarchical reports. */
  /* For time reps, date2, hr2 & min2 carry the end of the interval; for
     genreps, date2, hr2 & min2 carry the time of first request. */

  choice *cols = od->cols[rep];
  logical timerep = (rep < DATEREP_NUMBER);
  char graphby = timerep?(od->graph[rep]):'\0';

  choice source;
  char *datestr;
  unsigned int c, i;

  od->outputter->rowstart(outf, od, rep, cols, level, name, datefmt, timefmt);

  if (timerep) {
    name = datesprintf(od, datefmt, date, hr, min, date2, hr2, min2, FALSE,
		       UNSET);
    source = AS_IS;
  }
  else if (rep == REP_SIZE || rep == REP_PROCTIME)
    source = TRUSTED;
  else 
    source = UNTRUSTED;

  od->outputter->namecell(outf, od, rep, name, source, width[COL_TITLE],
			  name1st, TRUE, FALSE, NULL, NULL, FALSE, 0, NULL);

  od->outputter->levelcell(outf, od, rep, level);

  for (c = 0; cols[c] != COL_NUMBER; c++) {
    switch(cols[c]) {
    case COL_REQS:
      od->outputter->ulcell(outf, od, rep, cols[c], reqs, width[cols[c]]);
      break;
    case COL_REQS7:
      od->outputter->ulcell(outf, od, rep, cols[c], reqs7, width[cols[c]]);
      break;
    case COL_PREQS:
      od->outputter->pccell(outf, od, rep, cols[c], (double)reqs, (double)totr,
			width[cols[c]]);
      break;
    case COL_PREQS7:
      od->outputter->pccell(outf, od, rep, cols[c], (double)reqs7,
			    (double)totr7, width[cols[c]]);
      break;
    case COL_PAGES:
      od->outputter->ulcell(outf, od, rep, cols[c], pages, width[cols[c]]);
      break;
    case COL_PAGES7: 
      od->outputter->ulcell(outf, od, rep, cols[c], pages7, width[cols[c]]);
      break;
    case COL_PPAGES:
      od->outputter->pccell(outf, od, rep, cols[c], (double)pages,
			    (double)totp, width[cols[c]]);
      break;
    case COL_PPAGES7:
      od->outputter->pccell(outf, od, rep, cols[c], (double)pages7,
			    (double)totp7, width[cols[c]]);
      break;
    case COL_BYTES:
      od->outputter->bytescell(outf, od, rep, cols[c], bys, bmult,
			       width[cols[c]]);
      break;
    case COL_BYTES7:
      od->outputter->bytescell(outf, od, rep, cols[c], bys7, bmult7,
			   width[cols[c]]);
      break;
    case COL_PBYTES:
      od->outputter->pccell(outf, od, rep, cols[c], bys, totb, width[cols[c]]);
      break;
    case COL_PBYTES7:
      od->outputter->pccell(outf, od, rep, cols[c], bys7, totb7,
			    width[cols[c]]);
      break;
    case COL_DATE:
    case COL_TIME:
    case COL_FIRSTD:
    case COL_FIRSTT:
      if (cols[c] == COL_DATE || cols[c] == COL_TIME)
	datestr = datesprintf(od, (cols[c] == COL_DATE)?datefmt:timefmt,
			      date, hr, min, 0, 0, 0, FALSE, UNSET);
      else
	datestr = datesprintf(od, (cols[c] == COL_FIRSTD)?datefmt:timefmt,
			      date2, hr2, min2, 0, 0, 0, FALSE, UNSET);
      od->outputter->strcell(outf, od, rep, cols[c], datestr, width[cols[c]]);
      break;
    case COL_INDEX:
      od->outputter->indexcell(outf, od, rep, cols[c], index, width[cols[c]]);
      break;
    }
  }

  if (timerep) {
    for (i = 0; i < (int)bmult; i++)
      bys /= 1024;
    barchart(outf, od, graphby, reqs, pages, bys, unit);
  }

  if (name == NULL)
     return;   /* calling function supplies name and newline */

  if (rep == REP_CODE)
    source = TRUSTED;
  else 
    source = UNTRUSTED;
  od->outputter->namecell(outf, od, rep, name, source, width[COL_TITLE],
			  name1st, FALSE, rightalign,
			  G(rep)>=0?od->aliashead[G(rep)]:NULL, linkhead,
			  ispage, spaces, baseurl);

  od->outputter->rowend(outf, od, rep);
}

/*** Now some stuff for the General Summary ***/

void distcount(Hashindex *gooditems, Hashindex *baditems, choice requests,
	       choice requests7, unsigned long *tot, unsigned long *tot7) {
  Hashindex *p;

  for (p = gooditems, *tot = 0, *tot7 = 0; p != NULL; TO_NEXT(p)) {
    if (p->own != NULL) {
      if (p->own->data[requests] > 0)
	(*tot)++;
      if (p->own->data[requests7] > 0)
	(*tot7)++;
    }
  }
  for (p = baditems; p != NULL; TO_NEXT(p)) {
    if (p->own != NULL) {
      if (p->own->data[requests] > 0)
	(*tot)++;
      if (p->own->data[requests7] > 0)
	(*tot7)++;
    }
  }
}

void gensumline(FILE *outf, Outchoices *od, char codeletter, int namecode,
		unsigned long x, unsigned long x7, logical isaverage) {
  if (strchr(od->gensumlines, codeletter) == NULL)
    return;

  if (x == (unsigned long)UNSET)
    return;

  if (x == 0 && namecode != succreqs_)
    return;

  od->outputter->gensumline(outf, od, namecode, x, x7, isaverage);
}

void gensumlineb(FILE *outf, Outchoices *od, char codeletter, int namecode,
		 double x, double x7, logical isaverage) {
  /* same as gensumline() but for bytes */

  if (strchr(od->gensumlines, codeletter) == NULL)
    return;

  if (x <= 0)
    return;

  od->outputter->gensumlineb(outf, od, namecode, x, x7, isaverage);
}

logical checkonerep(Outchoices *od, Hashindex *gp, choice rep, choice requests,
		    cutfnp cutfn, dcutfnp dcutfn, void *darg) {
  extern Memman *amemman;

  static char *newname = NULL, *dnewname = NULL;
  static size_t len = 0, dlen = 0;

  char *namestart, *nameend, *name;
  choice rc;

  /* Procedure: go through all the entries. If the report will use that entry
     (it has any requests, and the name is included()) turn the report on.
     To calculate the name, we have to call cutfn if the report is a tree
     report, and/or (dcutfn and alias) if it is a dervrep. */
  for ( ; gp != NULL; TO_NEXT(gp)) {
    if (gp->own != NULL && gp->own->data[requests] > 0) {
      name = gp->name;
      if (cutfn == NULL && dcutfn != NULL) {
	/* The search reports. Here dcutfn can produce zero or multiple answers
	   for each name, and we have to check them all. */
	namestart = NULL;
	for (dcutfn(&namestart, &nameend, name, darg); namestart != NULL;
	     dcutfn(&namestart, &nameend, name, darg)) {
	  ENSURE_LEN(dnewname, dlen, (size_t)(nameend - namestart + 1));
	  memcpy((void *)dnewname, (void *)namestart,
		 (size_t)(nameend - namestart));
	  dnewname[nameend - namestart] = '\0';
	  if ((rc = do_alias(dnewname, amemman, NULL, NULL, 0, FALSE,
			     od->convfloor, od->multibyte, rep)) != ERR) {
	    name = rc?((char *)(amemman->curr_pos)):dnewname;
	    if (included(name, FALSE, od->wanthead[G(rep)]))
	      return(TRUE);
	  }
	}
      }
      else {
	/* otherwise each name produces just one answer to check; the name
	   itself, or if a tree report the name at the top level of the tree */
	if (cutfn != NULL) {  /* if it's a tree report */
	  if (dcutfn != NULL) {  /* if it's also a derv report */
	    /* Here we rely on the fact that if it's both a tree rep and a derv
	       rep, then dcutfn will produce exactly one name. (See comment on
	       dcutfnp in tree.c). */
	    namestart = NULL;
	    dcutfn(&namestart, &nameend, name, darg);
	    ENSURE_LEN(dnewname, dlen, (size_t)(nameend - namestart + 1));
	    memcpy((void *)dnewname, (void *)namestart,
		   (size_t)(nameend - namestart));
	    dnewname[nameend - namestart] = '\0';
	    if ((rc = do_alias(dnewname, amemman, NULL, NULL, 0, FALSE,
			       od->convfloor, od->multibyte, rep)) == ERR)
	      name = NULL;
	    else
	      name = rc?((char *)(amemman->curr_pos)):dnewname;
	  }
	  if (name != NULL) {
	    namestart = NULL;
	    cutfn(&namestart, &nameend, name, FALSE);
	    ENSURE_LEN(newname, len, (size_t)(nameend - namestart + 1));
	    memcpy((void *)newname, (void *)namestart,
		   (size_t)(nameend - namestart));
	    newname[nameend - namestart] = '\0';
	    name = newname;
	  }
	}
	if (name != NULL &&
	    included(name, gp->own->ispage, od->wanthead[G(rep)]))
	  return(TRUE);
      }
    }
  }
  return(FALSE);  /* nothing matched, so turn the report off */
}

logical checktreerep(Outchoices *od, Hashtable *tp, choice rep,
		     choice requests, cutfnp cutfn) {
  unsigned long i;

  for (i = 0; i < tp->size; i++) {
    if (checkonerep(od, tp->head[i], rep, requests, cutfn, NULL, NULL))
      return(TRUE);
  }
  return(FALSE);
}

logical checkarrayrep(Arraydata *array) {
  choice i;

  for (i = 0; ; i++) {
    if (array[i].reqs > 0)
      return(TRUE);
    if (array[i].threshold < -0.5)
      return(FALSE);
  }
}

void checkreps(Outchoices *od, Dateman *dman, Hashindex **gooditems,
	       Arraydata **arraydata,
	       choice data2cols[ITEM_NUMBER][DATA_NUMBER]) {
  extern logical *repistree;

  logical *repq = od->repq;

  cutfnp cutfn;
  dcutfnp dcutfn;
  void *darg;
  choice rep;
  int j;
  choice ok;

  if (dman->currdp == NULL) {
    for (rep = 0; rep < DATEREP_NUMBER; rep++) {
      if (repq[rep]) {
	warn('R', TRUE, "Turning off empty time reports");
	for ( ; rep < DATEREP_NUMBER; rep++)
	  repq[rep] = FALSE;
      }
    }
  }
  for (rep = FIRST_GENREP; rep <= LAST_NORMALREP; rep++) {
    cutfn = repistree[G(rep)]?(od->tree[G(rep)]->cutfn):NULL;
    dcutfn = (rep >= FIRST_DERVREP)?(od->derv[rep - FIRST_DERVREP]->cutfn):\
      NULL;
    darg = (rep >= FIRST_DERVREP)?(od->derv[rep - FIRST_DERVREP]->arg):NULL;
    for (ok = 0, j = 0; od->alltrees[j] != REP_NUMBER; j++) {
      if (rep == od->alltrees[j])
	ok = 1;
    }
    for (j = 0; od->alldervs[j] != REP_NUMBER; j++) {
      if (rep == od->alldervs[j])
	ok = 2;
    }
    if (ok) {
      if (!checktreerep(od, (ok == 1)?(od->tree[G(rep)]->tree):\
			(od->derv[rep - FIRST_DERVREP]->table), rep,
			data2cols[rep2type[rep]][rep2reqs[G(rep)]],
			(ok == 1)?NULL:cutfn)) {
	/* If ok == 1, tree made, so done cutfn already; if ok == 2, made derv
	   but not tree, so still need cutfn. NB i in alltrees or alldervs
	   implies repq so don't have to check that. */
	warn('R', TRUE, "Turning off empty %s", repname[rep]);
	repq[rep] = FALSE;
      }
    }
    else if (repq[rep]) {
      if (!checkonerep(od, gooditems[rep2type[rep]], rep,
		       data2cols[rep2type[rep]][rep2reqs[G(rep)]], cutfn,
		       dcutfn, darg)) {
	warn('R', TRUE, "Turning off empty %s", repname[rep]);
	repq[rep] = FALSE;
      }
    }
  }
  for ( ; rep < REP_NUMBER; rep++) {
    if (repq[rep] && !checkarrayrep(arraydata[rep - FIRST_ARRAYREP])) {
      warn('R', TRUE, "Turning off empty %s", repname[rep]);
      repq[rep] = FALSE;
    }
  }
}
analog-ce-6.0.17/src/outxhtml.c000066400000000000000000000711521406366436600162760ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** outxhtml.c; XHTML output ***/

#include "anlghea3.h"

/* Page width */
unsigned int xhtml_pagewidth(Outchoices *od) {
  return od->htmlpagewidth;  /* only used to guide the bar chart width */
}

/* The top of the output if we are in CGI mode */
void xhtml_cgihead(FILE *outf, Outchoices *od) {
  fprintf(outf, "Content-Type: application/xhtml+xml; charset=%s\n\n",
	  od->lngstr[charset_]);
}

/* Stuff this output style needs in the page header */
void xhtml_stylehead(FILE *outf, Outchoices *od) {
  fprintf(outf, "\n",
	  od->lngstr[charset_]);
  if (strcaseeq(od->stylesheet, "none"))
    fputs("\n",
	  outf);
  else {
    fputs("stylesheet, IN_HREF);
    fputs("\" type=\"text/css\"?>\n", outf);
  }
  fputs("\n", outf);
  fputs("\n", outf);
  fputs("\n", outf);
  fputs("", outf);
  xhtmlputs(outf, od, od->hostname, FROM_CFG);
  fprintf(outf, " %s", od->lngstr[webstatsfor_]);
    fputs("\n", outf);
  fprintf(outf, "\n", od->lngstr[charset_]);
  if (od->norobots)
    fputs("\n", outf);
  fprintf(outf, "\n",
	  VERSION);
  if (!strcaseeq(od->stylesheet, "none")) {
    fputs("stylesheet, IN_HREF);
    fputs("\" rel=\"stylesheet\" />\n", outf);
  }
  else { /* default style sheet inline if no external style sheet specified */
    fprintf(outf, "\n");
  }  /* end of style sheet */
  fputs("\n", outf);
  fputs("\n", outf);
}

/* The title of the page, plus the user's HEADERFILE */
void xhtml_pagetitle(FILE *outf, Outchoices *od) {
  fprintf(outf, "
", od->cssprefix); fputs("

logourl, "none")) { fputs(" href=\"", outf); xhtmlputs(outf, od, od->logourl, IN_HREF); fputs("\"", outf); } fputs(">", outf); if (!strcaseeq(od->logo, "none")) { fputs("logo[0] != '/' && strstr(od->logo, "://") == NULL) xhtmlputs(outf, od, od->imagedir, IN_HREF); xhtmlputs(outf, od, od->logo, IN_HREF); if (STREQ(od->logo, "analogo")) fprintf(outf, ".%s", od->pngimages?"png":"gif"); /* Above: '.' not EXTSEP even on RISC OS */ fputs("\" alt=\"\" /> ", outf); /* close here if logo */ } if (strcaseeq(od->hosturl, "none")) { fprintf(outf, "%s ", od->lngstr[webstatsfor_]); xhtmlputs(outf, od, od->hostname, FROM_CFG); if (strcaseeq(od->logo, "none")) fputs("", outf); /* close here if no logo */ } else { fputs(od->lngstr[webstatsfor_], outf); if (strcaseeq(od->logo, "none")) fputs("", outf); /* close here if no logo */ fputs(" hosturl, IN_HREF); fputs("\">", outf); xhtmlputs(outf, od, od->hostname, FROM_CFG); fputs("", outf); } fputs("

\n\n", outf); if (!strcaseeq(od->headerfile, "none")) xhtml_includefile(outf, od, od->headerfile, 'h'); } /* Program start time, and logfile start and end times */ void xhtml_timings(FILE *outf, Outchoices *od, Dateman *dman) { extern timecode_t starttimec; char **lngstr = od->lngstr; double t0; int t1, t2; if (!od->runtime && dman->firsttime > dman->lasttime) return; /* Nothing to show, avoid printing

*/ fprintf(outf, "

", od->cssprefix); if (od->runtime) fprintf(outf, "%s %s.", lngstr[progstart_], timesprintf(od, lngstr[datefmt2_], starttimec, UNSET)); if (dman->firsttime <= dman->lasttime) { if (od->runtime) fputs("\n
", outf); fprintf(outf, "%s %s ", lngstr[reqstart_], timesprintf(od, lngstr[datefmt2_], dman->firsttime, UNSET)); fprintf(outf, "%s %s", lngstr[to_], timesprintf(od, lngstr[datefmt2_], dman->lasttime, UNSET)); t0 = (dman->lasttime - dman->firsttime) / 1440.0 + 0.005; t1 = (int)t0; t2 = (int)(100 * (t0 - (double)t1)); fprintf(outf, " (%d", t1); xhtml_putch(outf, od->decpt); fprintf(outf, "%02d %s).

\n", t2, lngstr[days_]); } else fputs("

\n", outf); } /* Finishing the top of the page */ void xhtml_closehead(FILE *outf, Outchoices *od) { fputs("
\n", outf); if (od->gotos == FEW) xhtml_gotos(outf, od, -1); } /* Starting the bottom of the page */ void xhtml_pagebotstart(FILE *outf, Outchoices *od) { fprintf(outf, "
", od->cssprefix); } /* The credit line at the bottom of the page */ void xhtml_credit(FILE *outf, Outchoices *od) { fprintf(outf, "

%s CE %s.\n", od->cssprefix, od->lngstr[credit_], ANALOGURL, VNUMBER); } /* The program run time */ void xhtml_runtime(FILE *outf, Outchoices *od, long secs) { char **lngstr = od->lngstr; fprintf(outf, "
%s: ", od->cssprefix, lngstr[runtime_]); if (secs == 0) fprintf(outf, "%s %s.\n", lngstr[lessone_], lngstr[second_]); else if (secs < 60) fprintf(outf, "%ld %s.\n", secs, (secs == 1)?lngstr[second_]:lngstr[seconds_]); else fprintf(outf, "%ld %s, %ld %s.\n", secs / 60, (secs < 120)?lngstr[minute_]:lngstr[minutes_], secs % 60, (secs % 60 == 1)?lngstr[second_]:lngstr[seconds_]); } /* The page footer, including the user's FOOTERFILE */ void xhtml_pagefoot(FILE *outf, Outchoices *od) { fputs("

\n", outf); if (od->gotos != FALSE) xhtml_gotos(outf, od, -1); fputs("
\n", outf); if (!strcaseeq(od->footerfile, "none")) xhtml_includefile(outf, od, od->footerfile, 'f'); } /* Footer material for this output style */ void xhtml_stylefoot(FILE *outf, Outchoices *od) { fputs("\n\n", outf); } /* Report title */ void xhtml_reporttitle(FILE *outf, Outchoices *od, choice rep) { extern char *anchorname[]; extern unsigned int *rep2lng; fprintf(outf, "
", od->cssprefix, anchorname[rep]); fprintf(outf, "

%s

\n", anchorname[rep], anchorname[rep], od->lngstr[rep2lng[rep]]); if (od->gotos == TRUE) xhtml_gotos(outf, od, rep); } /* Report footer */ void xhtml_reportfooter(FILE *outf, Outchoices *od, choice rep) { fputs("
", outf); } /* Report description */ void xhtml_reportdesc(FILE *outf, Outchoices *od, choice rep) { fprintf(outf, "

%s

\n", od->cssprefix, od->descstr[rep]); } /* The time period spanned by the report */ void xhtml_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind) { /* NB Can't combine next two lines because timesprintf uses static buffer. */ fprintf(outf, "

%s %s ", od->cssprefix, od->lngstr[repspan_], timesprintf(od, od->lngstr[datefmt2_], mind, UNSET)); fprintf(outf, "%s %s.

\n", od->lngstr[to_], timesprintf(od, od->lngstr[datefmt2_], maxd, UNSET)); } /* General Summary header */ void xhtml_gensumhead(FILE *outf, Outchoices *od) { } /* General Summary footer */ void xhtml_gensumfoot(FILE *outf, Outchoices *od) { fputs("

\n", outf); } /* Single General Summary line, long data */ void xhtml_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage) { /* If this is the first Gen Sum line, open the paragraph. (succreqs_ is always printed, and is always first). */ if (namecode == succreqs_) fprintf(outf, "

\n", od->cssprefix); /* If it isn't, then put a line break. */ else fputs("
", outf); fprintf(outf, "%s%s ", od->cssprefix, od->lngstr[namecode], od->lngstr[colon_]); f3printf(outf, od, (double)x, 0, od->sepchar); if (x7 != (unsigned long)UNSET) { fputs(" (", outf); f3printf(outf, od, (double)x7, 0, od->sepchar); putc(')', outf); } putc('\n', outf); } /* Single General Summary line, bytes data */ void xhtml_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage) { char **lngstr = od->lngstr; unsigned int bm; char *c; fprintf(outf, "
%s%s ", od->cssprefix, lngstr[namecode], lngstr[colon_]); bm = (od->rawbytes)?0:findbmult(x, od->bytesdp); printbytes(outf, od, x, bm, 0, od->sepchar); if (bm > 0) { c = strchr(lngstr[xbytes_], '?'); *c = '\0'; fprintf(outf, " %s%s%s", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1); *c = '?'; } else fprintf(outf, " %s", lngstr[bytes_]); if (x7 != UNSET) { fputs(" (", outf); bm = (od->rawbytes)?0:findbmult(x7, od->bytesdp); printbytes(outf, od, x7, bm, 0, od->sepchar); if (bm > 0) { c = strchr(lngstr[xbytes_], '?'); *c = '\0'; fprintf(outf, " %s%s%s)", lngstr[xbytes_], lngstr[byteprefix_ + bm], c + 1); *c = '?'; } else fprintf(outf, " %s)", lngstr[bytes_]); } putc('\n', outf); } /* "Last seven" explanation line */ void xhtml_lastseven(FILE *outf, Outchoices *od, timecode_t last7to) { fprintf(outf, "

", od->cssprefix); fprintf(outf, "%s %s %s.

\n", od->lngstr[brackets_], od->lngstr[sevendaysto_], timesprintf(od, od->lngstr[datefmt1_], last7to, UNSET)); } /* Start of a
 section */
void xhtml_prestart(FILE *outf, Outchoices *od) {
  fputs("\n", outf);
}

/* End of a 
 section */
void xhtml_preend(FILE *outf, Outchoices *od) {
  fputs("
\n", outf); } /* A horizontal rule */ void xhtml_hrule(FILE *outf, Outchoices *od) { } /* An en dash */ char *xhtml_endash(void) { return "–"; } /* putc with special characters escaped */ void xhtml_putch(FILE *outf, char c) { if (c == '<') fputs("<", outf); else if (c == '>') fputs(">", outf); else if (c == '&') fputs("&", outf); else if (c == '"') fputs(""", outf); else putc(c, outf); } /* strlen for XHTML strings. Assume string contains no &'s except as markup. May be switched to html_strlength_utf8 or html_strlength_jis in outhtml.c, depending on the output character set. */ size_t xhtml_strlength(const char *s) { const char *t; logical f; size_t i; for (t = s, f = TRUE, i = 0; *t != '\0'; t++) { if (*t == '&') f = FALSE; else if (*t == ';') f = TRUE; if (f) i++; } return(f?i:strlen(s)); /* If !f, something went wrong (eg multibyte). Maybe the & wasn't markup. */ } /* Allow month in dates? DO NOT enable for human-readable text because of i18n problems. */ logical xhtml_allowmonth(void) { return FALSE; } /* Calculate column widths */ void xhtml_calcwidths(Outchoices *od, choice rep, unsigned int width[], unsigned int *bmult, unsigned int *bmult7, double *unit, unsigned long maxr, unsigned long maxr7, unsigned long maxp, unsigned long maxp7, double maxb, double maxb7, unsigned long howmany) { /* widths don't really have much meaning, but they will still be used for the bar charts, and it's easier just to call the existing function. */ calcwidths(od, rep, width, bmult, bmult7, unit, maxr, maxr7, maxp, maxp7, maxb, maxb7, howmany); } /* "Each unit represents" line */ void xhtml_declareunit(FILE *outf, Outchoices *od, char graphby, double unit, unsigned int bmult) { char **lngstr = od->lngstr; char *s; fprintf(outf, "

", od->cssprefix); fprintf(outf, "%s (", lngstr[eachunit_]); if (ISLOWER(graphby)) fprintf(outf, "%c", od->markchar); else { fprintf(outf, "imagedir, IN_HREF); fprintf(outf, "bar%c1.%s\" alt=\"%c\" />", od->barstyle, od->pngimages?"png":"gif", od->markchar); /* Above: '.' not EXTSEP even on RISC OS */ } fprintf(outf, ") %s ", lngstr[represents_]); if (graphby == 'R' || graphby == 'r') { f3printf(outf, od, unit, 0, od->sepchar); if (unit == 1.) fprintf(outf, " %s.", lngstr[request_]); else fprintf(outf, " %s %s.", lngstr[requests_], lngstr[partof_]); } else if (graphby == 'P' || graphby == 'p') { f3printf(outf, od, unit, 0, od->sepchar); if (unit == 1.) fprintf(outf, " %s.", lngstr[pagereq_]); else fprintf(outf, " %s %s.", lngstr[pagereqs_], lngstr[partof_]); } else { if (bmult > 0) { xhtml_printdouble(outf, od, unit); s = strchr(lngstr[xbytes_], '?'); /* checked in initialisation */ *s = '\0'; fprintf(outf, " %s%s%s %s.", lngstr[xbytes_], lngstr[byteprefix_ + bmult], s + 1, lngstr[partof_]); *s = '?'; } else { f3printf(outf, od, unit, 0, od->sepchar); fprintf(outf, " %s %s.", lngstr[bytes_], lngstr[partof_]); } } fputs("

\n", outf); } /* Start of column header line */ void xhtml_colheadstart(FILE *outf, Outchoices *od, choice rep) { fputs("", outf); } /* Column header line: individual column */ void xhtml_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated) { extern char colcodes[]; char code[3]; code[0] = colcodes[col]; if (unterminated) { code[1] = 'l'; /* i.e. "xl" */ code[2] = '\0'; } else code[1] = '\0'; fprintf(outf, "%s", od->cssprefix, code, colname); } /* End of column header line */ void xhtml_colheadend(FILE *outf, Outchoices *od, choice rep) { if (rep < DATEREP_NUMBER) /* time report: extra col for bar chart */ fprintf(outf, " ", od->cssprefix); fputs("\n", outf); } /* Start of column header underlining line */ void xhtml_colheadustart(FILE *outf, Outchoices *od, choice rep) { } /* Underlining of one column header. */ void xhtml_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name) { } /* End of column header underlining line */ void xhtml_colheaduend(FILE *outf, Outchoices *od, choice rep) { fputs("", outf); } /* Start of a table row */ void xhtml_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols, int level, char *name, char *datefmt, char *timefmt) { if (level >= 2) fprintf(outf, "", od->cssprefix, od->cssprefix, level); else fprintf(outf, ""); } /* Print level in hierarchy represented by this row */ void xhtml_levelcell(FILE *outf, Outchoices *od, choice rep, int level) { } /* Name column */ void xhtml_namecell(FILE *outf, Outchoices *od, choice rep, char *name, choice source, unsigned int width, logical name1st, logical isfirst, logical rightalign, Alias *aliashead, Include *linkhead, logical ispage, unsigned int spaces, char *baseurl) { extern char *workspace; choice savemultibyte; logical linked; int i; if (name1st != isfirst) return; savemultibyte = od->multibyte; if (rep == REP_SIZE || rep == REP_PROCTIME) /* Kludge: for these two reports, we know the texts are things like "< 1" and we want to convert > and < */ od->multibyte = FALSE; if (isfirst) fprintf(outf, "", od->cssprefix); else if (rightalign) fprintf(outf, "", od->cssprefix); else fprintf(outf, "", od->cssprefix); strcpy(workspace, name); do_aliasx(workspace, aliashead); if (!isfirst && !rightalign) { for (i = 0; i < spaces; i++) fputs(" ", outf); } linked = (linkhead != NULL && included(name, ispage, linkhead)); if (linked) { /* We link to the unaliased name, because the OUTPUTALIAS is usually in the nature of an annotation. */ /* If the config file has a defined anonymization service provider [ANONYMIZERURL], prefix with the provided string */ if (strcaseeq(od->anonymizerurl, "none")) { fputs("anonymizerurl, IN_HREF); } if (baseurl != NULL) xhtmlputs(outf, od, baseurl, IN_HREF); xhtml_escfprintf(outf, name); /* If set, add rel="nofollow" */ if (od->linknofollow) { fputs("\" rel=\"nofollow\">", outf); } else { fputs("\">", outf); } } xhtmlputs(outf, od, workspace, source); if (linked) fputs("", outf); if (!isfirst && rightalign) { for (i = 0; i < spaces; i++) fputs(" ", outf); } fputs("", outf); od->multibyte = savemultibyte; /* restore multibyte */ } /* Single cell, unsigned long argument */ void xhtml_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width) { extern char colcodes[]; fprintf(outf, "", od->cssprefix, colcodes[col]); f3printf(outf, od, (double)x, 0, od->repsepchar); fprintf(outf, ""); } /* Single cell, TRUSTED string argument */ void xhtml_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width) { extern char colcodes[]; fprintf(outf, "", od->cssprefix, colcodes[col]); xhtmlputs(outf, od, s, TRUSTED); fprintf(outf, ""); } /* Single cell, listing bytes */ void xhtml_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width) { extern char colcodes[]; fprintf(outf, "", od->cssprefix, colcodes[col]); printbytes(outf, od, b, bmult, 0, od->repsepchar); fprintf(outf, ""); } /* Single cell, listing percentage */ void xhtml_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width) { double pc; unsigned int pc1, pc2; extern char colcodes[]; fprintf(outf, "", od->cssprefix, colcodes[col]); if (tot == 0) pc = 0.0; else pc = n * 10000.0 / tot; if (pc >= 9999.5) fputs("100%", outf); else if (pc < 0.5) fputs(" ", outf); else { pc1 = ((int)(pc + 0.5)) / 100; pc2 = ((int)(pc + 0.5)) % 100; fprintf(outf, "%2d", pc1); xhtml_putch(outf, od->decpt); fprintf(outf, "%02d%%", pc2); } fputs("", outf); } /* Single cell, index */ void xhtml_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width) { extern char colcodes[]; fprintf(outf, "", od->cssprefix, colcodes[col]); /* If index is 0 (i.e. sub-item), just print space */ if (index <= 0) fputs(" ", outf); else f3printf(outf, od, (double)index, 0, od->repsepchar); fputs("", outf); } /* End of a table row */ void xhtml_rowend(FILE *outf, Outchoices *od, choice rep) { fputs("\n", outf); } /* Blank line in time reports */ void xhtml_blankline(FILE *outf, Outchoices *od, choice *cols) { extern char colcodes[]; unsigned int c; fputs("", outf); fprintf(outf, " ", od->cssprefix); for (c = 0; cols[c] != COL_NUMBER; c++) fprintf(outf, " ", od->cssprefix, colcodes[cols[c]]); fprintf(outf, " ", od->cssprefix); fputs("\n", outf); } /* Barchart in time reports */ void xhtml_barchart(FILE *outf, Outchoices *od, int y, char graphby) { int i, j; logical first = TRUE; fprintf(outf, "", od->cssprefix); if (ISLOWER(graphby)) { for (i = 0; i < y; i++) xhtml_putch(outf, od->markchar); } else { for (j = 32; j >= 1; j /= 2) { while (y >= j) { fputs("imagedir, IN_HREF); fprintf(outf, "bar%c%d.%s\" alt=\"", od->barstyle, j, od->pngimages?"png":"gif");/* '.' not EXTSEP even on RISC OS */ if (first) { for (i = 0; i < y; i++) xhtml_putch(outf, od->markchar); first = FALSE; } fputs("\" />", outf); y -= j; } } } fputs("", outf); } /* "Busiest time period" line */ void xhtml_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt, unsigned long reqs, unsigned long pages, double bys, datecode_t date, unsigned int hr, unsigned int min, datecode_t newdate, unsigned int newhr, unsigned int newmin, char graphby) { extern unsigned int *rep2busystr; char **lngstr = od->lngstr; char sepchar = od->sepchar; unsigned int bmult; char *s; fprintf(outf, "

%s %s (", od->cssprefix, lngstr[rep2busystr[rep]], datesprintf(od, datefmt, date, hr, min, newdate, newhr, newmin, TRUE, UNSET)); if (TOLOWER(graphby) == 'r') { f3printf(outf, od, (double)reqs, 0, sepchar); fprintf(outf, " %s", (reqs == 1)?lngstr[request_]:lngstr[requests_]); } else if (TOLOWER(graphby) == 'p') { f3printf(outf, od, (double)pages, 0, sepchar); fprintf(outf, " %s", (pages == 1)?lngstr[pagereq_]:lngstr[pagereqs_]); } else /* TOLOWER(graphby) == 'b' */ { if (od->rawbytes) bmult = 0; else bmult = findbmult(bys, od->bytesdp); printbytes(outf, od, bys, bmult, 0, sepchar); putc(' ', outf); if (bmult >= 1) { s = strchr(lngstr[xbytes_], '?'); /* checked in initialisation */ *s = '\0'; fprintf(outf, "%s%s%s", lngstr[xbytes_], lngstr[byteprefix_ + bmult], s + 1); *s = '?'; } else fprintf(outf, "%s", lngstr[bytes_]); } fputs(").

\n", outf); } /* End of "Not listed" line. */ void xhtml_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn) { extern unsigned int *rep2lng, *rep2colhead; char **lngstr = od->lngstr; char *colhead = lngstr[rep2colhead[rep]]; char *colheadp = lngstr[rep2colhead[rep] + 1]; char gender = lngstr[rep2lng[rep] + 3][0]; char *notlistedstr; if (gender == 'm') notlistedstr = lngstr[notlistedm_]; else if (gender == 'f') notlistedstr = lngstr[notlistedf_]; else notlistedstr = lngstr[notlistedn_]; fprintf(outf, "[%s: ", od->cssprefix, notlistedstr); f3printf(outf, od, (double)badn, 0, od->sepchar); fprintf(outf, " %s]", (badn == 1)?colhead:colheadp); } /* The line declaring the floor and sort for a report */ void xhtml_whatincluded(FILE *outf, Outchoices *od, choice rep, unsigned long n, Dateman *dman) { whatincluded(outf, od, rep, n, dman); } /* Spacing at the start of the whatincluded line */ void xhtml_whatinchead(FILE *outf, Outchoices *od) { fprintf(outf, "

\n", od->cssprefix); } /* Finishing the whatincluded line */ void xhtml_whatincfoot(FILE *outf, Outchoices *od) { fputs("

\n", outf); } /* Printing part of the whatincluded line */ void xhtml_whatincprintstr(FILE *outf, Outchoices *od, char *s) { xhtmlputs(outf, od, s, TRUSTED); } /* Print a double to a nice number of decimal places */ void xhtml_printdouble(FILE *outf, Outchoices *od, double x) { unsigned int prec; double d; /* first calculate how many decimal places we need */ for (prec = 0, d = x - (double)((int)(x)); d - (double)((int)(d + 0.000005)) > 0.00001; d *= 10) prec++; /* now print it */ if (prec > 0) { fprintf(outf, "%d", (int)x); xhtml_putch(outf, od->decpt); fprintf(outf, "%0*d", prec, (int)(d + EPSILON)); } else fprintf(outf, "%d", (int)(x + EPSILON)); } /* Include a header file or footer file */ void xhtml_includefile(FILE *outf, Outchoices *od, char *name, char type) { FILE *inf; char buffer[BLOCKSIZE]; size_t n; if ((inf = my_fopen(name, (type == 'h')?"header file":"footer file")) != NULL) { while ((n = fread(buffer, 1, BLOCKSIZE, inf))) /* single equals */ fwrite((void *)buffer, 1, n, outf); (void)my_fclose(inf, name, (type == 'h')?"header file":"footer file"); } } /* Filetype for RISC OS */ unsigned int xhtml_riscosfiletype(void) { return 0xfaf; } /* ======================================================================= */ /* Supporting functions for XHTML */ /* Print "goto"s. Assume we've checked that we want gotos here. */ void xhtml_gotos(FILE *outf, Outchoices *od, choice rep) { extern unsigned int *rep2lng; extern char *anchorname[]; choice *reporder = od->reporder; char **lngstr = od->lngstr; int i; fprintf(outf, "

(%s", od->cssprefix, od->cssprefix, lngstr[goto_]); fprintf(outf, "%s %s", lngstr[colon_], lngstr[top_]); for (i = 0; reporder[i] != -1; i++) { if (reporder[i] == rep) fprintf(outf, " | %s", lngstr[rep2lng[reporder[i]]]); else if (od->repq[reporder[i]]) fprintf(outf, " | %s", anchorname[reporder[i]], lngstr[rep2lng[reporder[i]]]); } fputs(")

\n", outf); } /* Escape names for use in hyperlinks. */ void xhtml_escfprintf(FILE *outf, char *name) { html_escfprintf(outf, name); } /* Print a string with an appropriate amount of HTML encoding. */ void xhtmlputs(FILE *outf, Outchoices *od, char *s, choice source) { htmlputs(outf, od, s, source); } analog-ce-6.0.17/src/outxml.c000066400000000000000000000734241406366436600157460ustar00rootroot00000000000000/*** analog 6.0 http://www.analog.cx/ ***/ /*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as *** stated otherwise. *** *** This program is free software. You can redistribute it and/or modify it *** under the terms of version 2 of the GNU General Public License, which you *** should have received with it. *** *** This program is distributed in the hope that it will be useful, but *** without any warranty, expressed or implied. ***/ // outxml.c - XML output module for analog (http://www.analog.cx) // written by and copyright Per Jessen, per@computer.org, February 2003. #define _GNU_SOURCE #define NDEBUG #include #include #include #include #include #include #include "anlghea3.h" #include "outxml.h" // we use this to borrow a copy of 'outf' such that function that // don't have an 'outf' argument can use XML_TRACE() anyway. static FILE *outf = 0; static FILE **outfp = &outf; static choice this_report; static Options *opts; static int array_index; // ================================================================================== /* Page width */ unsigned int xml_pagewidth(Outchoices *od) { XML_TRACE(0); return 0; } /* The top of the output if we are in CGI mode */ void xml_cgihead(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* Stuff this output style needs in the page header */ void xml_stylehead(FILE *outf, Outchoices *od) { extern timecode_t starttimec; unsigned int year, month, day, i; struct tm temptime; char *xmlversion = "1.0"; char *encoding = "UTF-8"; time_t t; char buffer[256]; // borrow a copy of the outfile handle *outfp=outf; // KLUDGE!!!! opts=(Options*)((int)od-offsetof(Options,outopts)); t=time(0); strftime( buffer, 256, "%Y%m%d%H%M%S", gmtime(&t) ); XML_OUT("" XMLDBG "" XMLDBG "" XMLDBG "", xmlversion, encoding, od->xmldtd, VNUMBER, // VERSION instead? VERSION includes platform it was built. buffer ); // set up appropriate defaults for XML output. xml_defaults( opts ); // extract a build timestamp from __DATE__ and __TIME__ -- locale dependent?! need to force "C" locale ? strptime( __DATE__" "__TIME__, "%b%n%d%n%Y%n%T", &temptime ); sprintf( buffer, "%04d%02d%02d%02d%02d", temptime.tm_year+1900, temptime.tm_mon+1, temptime.tm_mday, temptime.tm_hour, temptime.tm_min ); code2date( starttimec/1440, &day, &month, &year); XML_OUT( XMLDBG "", VERSION ); XML_OUT( XMLDBG "", buffer ); XML_OUT( XMLDBG " ", year, month+1, day, (int)((starttimec%1440)/60), (int)(starttimec%60) ); // XML_OUT( XMLDBG "", opts.succ304?"yes":"no" ); // XML_OUT( XMLDBG "", stz ); i=i; // mustn't upset the compiler :-) } /* The title of the page, plus the user's HEADERFILE */ void xml_pagetitle(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* Program start time, and logfile start and end times */ void xml_timings(FILE *outf, Outchoices *od, Dateman *dman) { unsigned int year, month, day; XML_TRACE(0); code2date( dman->firsttime/1440, &day, &month, &year); XML_OUT( XMLDBG"firsttime%1440)/60), (int)(dman->firsttime%60) ); code2date( dman->lasttime/1440, &day, &month, &year); XML_OUT( "to=\"%04d%02d%02d%02d%02d\" days=\"%f\"/>", year, month+1, day, (int)((dman->lasttime%1440)/60), (int)(dman->lasttime%60), (dman->lasttime-dman->firsttime)/1440.0+0.005 ); } /* Finishing the top of the page */ void xml_closehead(FILE *outf, Outchoices *od) { XML_TRACE(0); XML_OUT(XMLDBG""); } /* Starting the bottom of the page */ void xml_pagebotstart(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* The credit line at the bottom of the page */ void xml_credit(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* The program run time */ void xml_runtime(FILE *outf, Outchoices *od, long secs) { XML_TRACE(0); // XML_OUT( XMLDBG"", // "processingtime", secs); } /* The page footer, including the user's FOOTERFILE */ void xml_pagefoot(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* Footer material for this output style */ void xml_stylefoot(FILE *outf, Outchoices *od) { XML_TRACE(0); XML_OUT( XMLDBG"" ); } /* Report title */ void xml_reporttitle(FILE *outf, Outchoices *od, choice rep) { char *dir; XML_TRACE(0); assert( ((char*)od-(char*)opts)==offsetof(Options,outopts) ); array_index=0; XML_OUT( XMLDBG"", strtolower(report_name[rep]) ); this_report=rep; switch (rep) { case REP_GENSUM: break; case REP_YEAR: case REP_QUARTERLY: case REP_MONTH: case REP_WEEK: case REP_DAYREP: case REP_HOURREP: case REP_QUARTERREP: case REP_FIVEREP: XML_OUT( XMLDBG "", opts->outopts.rows[rep] ); case REP_DAYSUM: case REP_HOURSUM: case REP_WEEKHOUR: case REP_QUARTERSUM: case REP_FIVESUM: // only time reports (for the time being) have a 'back' setting to set their sort-order. XML_OUT( XMLDBG "", od->back[rep]? "descending" : "ascending" ); break; case REP_SIZE: case REP_PROCTIME: case REP_HOST: case REP_REDIRHOST: case REP_FAILHOST: case REP_VHOST: case REP_REDIRVHOST: case REP_FAILVHOST: case REP_USER: case REP_REDIRUSER: case REP_FAILUSER: case REP_SEARCHREP: case REP_SEARCHSUM: case REP_INTSEARCHREP: case REP_INTSEARCHSUM: case REP_BROWSUM: case REP_CODE: od->subsortby[rep]= od->subfloor[rep].floorby=UNSET; case REP_TYPE: // the following reports can also have subfloor/sort setting case REP_DIR: case REP_REQ: case REP_REDIR: case REP_FAIL: case REP_DOM: case REP_REF: case REP_BROWREP: case REP_OS: case REP_REDIRREF: case REP_FAILREF: case REP_ORG: case REP_REFSITE: dir="ascending"; // analog will sort all of these in ascending order. XML_OUT( XMLDBG "", dir, od->sortby[rep]==UNSET?"":criteria[od->sortby[rep]] ); // 5.90b1 there's something funky going on with subsortby // 5.90b2 ? assert( od->subsortby[rep]==UNSET || (od->subsortby[rep]>=REQUESTS && od->subsortby[rep]<=METHOD_NUMBER) ); if ( od->sortby[rep]!=UNSET ) if ( od->subsortby[rep]!=UNSET ) // is this dependable ?? // XML_OUT( XMLDBG "", dir, criteria[od->subsortby[rep]] ); XML_OUT( XMLDBG "", dir, od->subsortby[rep] ); // the *FLOOR setting XML_OUT( XMLDBG "floor[rep].min ); if ( od->floor[rep].qual ) XML_OUT( "qual=\"%c\" ", od->floor[rep].qual ); XML_OUT( "by=\"%s\"/>", od->floor[rep].floorby==UNSET?"":criteria[od->floor[rep].floorby] ); if ( od->subfloor[rep].floorby!=UNSET ) { XML_OUT( XMLDBG "subfloor[rep].min ); // if ( od->subfloor[rep].qual ) XML_OUT( "qual=\"%c\" ", od->subfloor[rep].qual ) XML_OUT( "by=\"%s\"/>", criteria[od->floor[rep].floorby] ); } break; default: puts(report_name[rep]); assert(0); break; } } /* Report footer */ void xml_reportfooter(FILE *outf, Outchoices *od, choice rep) { XML_TRACE(0); } /* Report description */ void xml_reportdesc(FILE *outf, Outchoices *od, choice rep) { XML_TRACE(0); } /* The time period spanned by the report */ void xml_reportspan(FILE *outf, Outchoices *od, choice rep, timecode_t maxd, timecode_t mind) { unsigned int year, month, day; XML_TRACE(0); code2date( mind/1440, &day, &month, &year); XML_OUT( XMLDBG"", year, month+1, day, (int)((maxd%1440)/60), (int)(maxd%60), (maxd-mind)/1440.0+0.005 ); } /* General Summary header */ void xml_gensumhead(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* General Summary footer */ void xml_gensumfoot(FILE *outf, Outchoices *od) { XML_TRACE(0); } /* Single General Summary line, long data */ void xml_gensumline(FILE *outf, Outchoices *od, int namecode, unsigned long x, unsigned long x7, logical isaverage) { if ( x7==(unsigned long)UNSET ) x7=0; xml_gensumlineb(outf,od,namecode,(double)x,(double)x7,isaverage); } /* Single General Summary line, bytes data */ void xml_gensumlineb(FILE *outf, Outchoices *od, int namecode, double x, double x7, logical isaverage) { char *name; switch( namecode ) { case succreqs_: name="succreqs_"; break; case avereqs_: name="avereqs_"; break; case totpages_: name="totpages_"; break; case avepages_: name="avepages_"; break; case totunknown_: name="totunknown_"; break; case totfails_: name="totfails_"; break; case totredirs_: name="totredirs_"; break; case inforeqs_: name="inforeqs_"; break; case distfiles_: name="distfiles_"; break; case disthosts_: name="disthosts_"; break; case corrupt_: name="corrupt_"; break; case unwanted_: name="unwanted_"; break; case totdata_: name="totdata_"; break; case avedata_: name="avedata_"; break; default: name="__unknown__"; break; } XML_OUT( XMLDBG"" "", name ); XML_OUT( XMLDBG"%f", strtolower(column_name[COL_REQS]), x ); XML_OUT( XMLDBG"%f", strtolower(column_name[COL_REQS7]), x7 ); XML_OUT( XMLDBG"" ); } /* "Last seven" explanation line */ void xml_lastseven(FILE *outf, Outchoices *od, timecode_t last7to) { unsigned int year, month, day; XML_TRACE(0); code2date( last7to/1440, &day, &month, &year); XML_OUT( XMLDBG "", year, month+1, day, (int)((last7to%1440)/60), (int)(last7to%60) ); } /* Start of a
 section */
void xml_prestart(FILE *outf, Outchoices *od) { XML_TRACE(0); }

/* strlen */
size_t xml_strlength(const char *s) { XML_TRACE(0); return strlen(s); }

/* End of a 
 section */
void xml_preend(FILE *outf, Outchoices *od) { XML_TRACE(0); }

/* A horizontal rule */
void xml_hrule(FILE *outf, Outchoices *od)
{
	// an odd place to place this, but the only option.
	XML_OUT( XMLDBG"", strtolower(report_name[this_report]) );
}

/* An en dash */
char *xml_endash(void) { XML_TRACE(0); return "-"; }

/* putc with special characters escaped */
void xml_putch(FILE *outf, char c) { XML_TRACE(0); }

/* Allow month in dates? DO NOT enable for human-readable text because of
   i18n problems. */
logical xml_allowmonth(void) { XML_TRACE(0); return TRUE; }

/* Calculate column widths */
void xml_calcwidths(Outchoices *od, choice rep, unsigned int width[],
		     unsigned int *bmult, unsigned int *bmult7, double *unit,
		     unsigned long maxr, unsigned long maxr7,
		     unsigned long maxp, unsigned long maxp7, double maxb,
		     double maxb7, unsigned long howmany)
{
	XML_TRACE(0);
	// outxml has no need to do this, but analog will segfault otherwise.
	calcwidths(od, rep, width, bmult, bmult7, unit, maxr, maxr7, maxp, maxp7,
		maxb, maxb7, howmany);
}

/* "Each unit represents" line */
void xml_declareunit(FILE *outf, Outchoices *od, char graphby, double unit,
		      unsigned int bmult) { XML_TRACE(0); }

/* Start of column header line */
void xml_colheadstart(FILE *outf, Outchoices *od, choice rep) { XML_TRACE(0); }


/* Column header line: individual column */
void xml_colheadcol(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *colname, logical unterminated) {XML_TRACE(0);}

/* End of column header line */
void xml_colheadend(FILE *outf, Outchoices *od, choice rep) {XML_TRACE(0);}

/* Start of column header underlining line */
void xml_colheadustart(FILE *outf, Outchoices *od, choice rep) {XML_TRACE(0);}

/* Underlining of one column header. */
/* If column is terminated, set width and leave name blank; and conversely. */
void xml_colheadunderline(FILE *outf, Outchoices *od, choice rep, choice col, unsigned int width, char *name) {XML_TRACE(0);}

/* End of column header underlining line */
void xml_colheaduend(FILE *outf, Outchoices *od, choice rep) { XML_TRACE(0); }

/* Start of a table row */
void xml_rowstart(FILE *outf, Outchoices *od, choice rep, choice *cols,
		   int level, char *name, char *datefmt, char *timefmt)
{
	XML_TRACE(0);

	if ( level!=UNSET )
	XML_OUT( XMLDBG"", level );
	else
	XML_OUT( XMLDBG"" );
}

/* Print level in hierarchy represented by this row */
void xml_levelcell(FILE *outf, Outchoices *od, choice rep, int level)
{
	XML_TRACE(0);

//	XML_OUT( XMLDBG"%d", level );
}

/* Name column */
void xml_namecell(FILE *outf, Outchoices *od, choice rep, char *name,
  choice source, unsigned int width, logical name1st, logical isfirst,
  logical rightalign, Alias *aliashead, Include *linkhead, logical ispage,
  unsigned int spaces, char *baseurl)
{
	char *p, *q;
	int n;

	XML_TRACE(0); 

	// no output aliasing is done yet. not sure it will be done either.


	// we don't care, but by testing it we avoid printing the column twice.
	if ( !isfirst && name )
	{
		XML_OUT( XMLDBG "" );

		switch( rep) {
		case REP_MONTH:
		case REP_YEAR:
		case REP_WEEK:
		case REP_QUARTERLY:
		case REP_DAYREP:
		case REP_HOURREP:
		case REP_QUARTERREP:
		case REP_FIVEREP:
		case REP_DAYSUM:
		case REP_HOURSUM:
		case REP_QUARTERSUM:
		case REP_FIVESUM:
		case REP_WEEKHOUR:	
			// this is split because strtok needs to be called in the right order.
			XML_OUT( "", strtok( NULL," ") );
				break;
			case REP_HOURSUM:
				XML_OUT( "hour=\"%s\" />", strtok( NULL," ") );
				break;
			case REP_QUARTERSUM:
				XML_OUT( "minute=\"%s\" />", strtok( NULL," ") );
				break;
			case REP_FIVESUM:
				XML_OUT( "minute=\"%s\" />", strtok( NULL," ") );
				break;
			case REP_WEEKHOUR:
				XML_OUT( "dayofweek=\"%s\" ", strtok( NULL," ") );
				XML_OUT( "hour=\"%s\" />", strtok( NULL," ") );
				break;
			default:
				XML_OUT( "/>" );
			}
			break;
		case REP_CODE:
			strtok(name, " ");	// assumption: name = "nnn text"
			XML_OUT( name );
			break;
//			n=array_index++;
//			XML_OUT( "%d", (int)(opts->arraydata[rep-FIRST_ARRAYREP][n].threshold) );
//			break;
		case REP_OS:
			// kludge: the hardcoded OS names from tree.c are turned into i18n
			// keys - hardly a well thought out interface, but the best we can do
			// for the moment.
			p=strtolower(name);			// all lowercase
			while ( (q=strchr(p,' ')) ) *q='-';	// replace ' ' with '-'
			while ( (q=strchr(p,'/')) ) *q='-';
			
			XML_OUT( "", p );
			break;
		case REP_SIZE:
		case REP_PROCTIME:
			n=array_index++;
			XML_OUT( "%f", opts->arraydata[rep-FIRST_ARRAYREP][n].threshold );
			break; 
		case REP_DOM:
		case REP_TYPE:
			// kludge: if the string supplied is delimited by square brackets, 
			// we turn it into an i18n key.
			if ( *name=='[' && *(name+strlen(name)-1)==']' )
			{
				p=strtolower(name+1); 
				*(p+strlen(p)-1)=0;
				while ( (q=strchr(p,' ')) ) *q='-';
				XML_OUT( "", rep==REP_DOM?"domain":"type", p );
				break;
			}
			// this is a delibrate fall-thru.
		default:
			XML_OUT( "", cleanprint(name) );
			break;
		}
		XML_OUT( "" );
	}

#if 0
extern char *workspace;

  choice savemultibyte;
  logical linked;
  int i;

  if (name1st != isfirst)
    return;

  if (isfirst)
    matchlengthn(outf, od, width - od->outputter->strlen(name), ' ');
  savemultibyte = od->multibyte;
  if (rep == REP_SIZE || rep == REP_PROCTIME)
    /* Kludge: for these two reports, we know the texts are things like
       "< 1" and we want to convert > and < */
    od->multibyte = FALSE;

  strcpy(workspace, name);
  do_aliasx(workspace, aliashead);

  if (!isfirst) {
    if (rightalign)
      i = (int)width - (int)od->outputter->strlen(workspace) - (int)spaces;
    else
      i = (int)spaces;
    matchlengthn(outf, od, i, ' ');
  }

  linked = (linkhead != NULL && included(name, ispage, linkhead));
  if (linked) {
    /* We link to the unaliased name, because the OUTPUTALIAS is usually in
       the nature of an annotation. */
    fputs("", outf);
  }

  htmlputs(outf, od, workspace, UNTRUSTED);

  if (linked)
    fputs("", outf);

  if (isfirst)
    fputs(": ", outf);

  od->multibyte = savemultibyte;  /* restore multibyte */
#endif
}


/* Single cell, unsigned long argument */
void xml_ulcell(FILE *outf, Outchoices *od, choice rep, choice col, unsigned long x, unsigned int width)
{
	XML_TRACE(0);
	XML_OUT( XMLDBG"%lu", strtolower(column_name[col]), x ); 
}

/* Single cell, TRUSTED string argument */
void xml_strcell(FILE *outf, Outchoices *od, choice rep, choice col, char *s, unsigned int width)
{
	XML_TRACE(0);

	XML_OUT( XMLDBG "", strtolower(column_name[col]) );
	switch( col )
	{
	case COL_TIME:
	case COL_FIRSTT:
	case COL_DATE:
	case COL_FIRSTD:
		if ( strlen(s) )
		XML_OUT( "", strtok(s, " ") );	
		break;
	default:
		XML_OUT( s );
		break;
	}
	XML_OUT( "" );

}

/* Single cell, listing bytes */
void xml_bytescell(FILE *outf, Outchoices *od, choice rep, choice col, double b, double bmult, unsigned int width)
{
	XML_TRACE(0);
	XML_OUT( XMLDBG"%f", strtolower(column_name[col]), b );
}

/* Single cell, listing percentage */
void xml_pccell(FILE *outf, Outchoices *od, choice rep, choice col, double n, double tot, unsigned int width)
{
	XML_TRACE(0);
	XML_OUT( XMLDBG"%f", strtolower(column_name[col]),
	tot>0 ? 100*n/tot : 0.0 );
}

/* Single cell, index */
void xml_indexcell(FILE *outf, Outchoices *od, choice rep, choice col, long index, unsigned int width)
{
	XML_TRACE(0);
	XML_OUT( XMLDBG"%ld", strtolower(column_name[col]), index );
}

/* End of a table row */
void xml_rowend(FILE *outf, Outchoices *od, choice rep) { XML_TRACE(0); XML_OUT(XMLDBG""); }

/* Blank line in time reports */
void xml_blankline(FILE *outf, Outchoices *od, choice *cols) { XML_TRACE(0); }

/* Barchart in time reports */
void xml_barchart(FILE *outf, Outchoices *od, int y, char graphby) { XML_TRACE(0); }

/* "Busiest time period" line */
void xml_busyprintf(FILE *outf, Outchoices *od, choice rep, char *datefmt,
		     unsigned long reqs, unsigned long pages, double bys,
		     datecode_t date, unsigned int hr, unsigned int min,
		     datecode_t newdate, unsigned int newhr,
		     unsigned int newmin, char graphby)
{
	unsigned int year, month, day;

	XML_TRACE(0);

	code2date( date, &day, &month, &year);
	XML_OUT( XMLDBG"" );

#if 0
  extern unsigned int *rep2busystr;

  char **lngstr = od->lngstr;
  char sepchar = od->sepchar;

  unsigned int bmult;
  char *s;

  fprintf(outf, "%s %s (", lngstr[rep2busystr[rep]],
	  datesprintf(od, datefmt, date, hr, min, newdate, newhr, newmin,
		      TRUE, UNSET));

  if (TOLOWER(graphby) == 'r') {
    f3printf(outf, od, (double)reqs, 0, sepchar);
    fprintf(outf, " %s).\n", (reqs == 1)?lngstr[request_]:lngstr[requests_]);
  }
  else if (TOLOWER(graphby) == 'p') {
    f3printf(outf, od, (double)pages, 0, sepchar);
    fprintf(outf, " %s).\n",
	    (pages == 1)?lngstr[pagereq_]:lngstr[pagereqs_]);
  }
  else /* TOLOWER(graphby) == 'b' */ {
    if (od->rawbytes)
      bmult = 0;
    else
      bmult = findbmult(bys, od->bytesdp);
    printbytes(outf, od, bys, bmult, 0, sepchar);
    putc(' ', outf);
    if (bmult >= 1) {
      s = strchr(lngstr[xbytes_], '?');  /* checked in initialisation */
      *s = '\0';
      fprintf(outf, "%s%s%s).\n", lngstr[xbytes_],
	      lngstr[byteprefix_ + bmult], s + 1);
      *s = '?';
    }
    else
      fprintf(outf, "%s).\n", lngstr[bytes_]);
  }
#endif
}

/* End of "Not listed" line. */
void xml_notlistedstr(FILE *outf, Outchoices *od, choice rep, unsigned long badn)
{
	XML_TRACE(0);
	XML_OUT( XMLDBG "", strtolower(report_name[rep]), badn );
#if 0
  extern unsigned int *rep2lng, *rep2colhead;

  char **lngstr = od->lngstr;
  char *colhead = lngstr[rep2colhead[rep]];
  char *colheadp = lngstr[rep2colhead[rep] + 1];
  char gender = lngstr[rep2lng[rep] + 3][0];

  char *notlistedstr;

  if (gender == 'm')
    notlistedstr = lngstr[notlistedm_];
  else if (gender == 'f')
    notlistedstr = lngstr[notlistedf_];
  else
    notlistedstr = lngstr[notlistedn_];

  fprintf(outf, "[%s: ", notlistedstr);
  f3printf(outf, od, (double)badn, 0, od->sepchar);
  fprintf(outf, " %s]\n", (badn == 1)?colhead:colheadp);
#endif
}

/* The line declaring the floor and sort for a report */
void xml_whatincluded(FILE *outf, Outchoices *od, choice rep,
		       unsigned long n, Dateman *dman) { 
	XML_TRACE(0);

//	floor_element( outf, od, rep );

	#ifndef NDEBUG
	XML_OUT( XMLDBG "" );
	whatincluded(outf, od, rep, n, dman);
	#endif
}

/* Spacing at the start of the whatincluded line */
void xml_whatinchead(FILE *outf, Outchoices *od)
{
	XML_TRACE(0); XML_OUT( "\n" );
}

/* Printing part of the whatincluded line */
void xml_whatincprintstr(FILE *outf, Outchoices *od, char *s)
{ 
	XML_TRACE(0); XML_OUT( s );
}

/* Print a double */
void xml_printdouble(FILE *outf, Outchoices *od, double x)
{
	XML_OUT( "%g", x );
}

/* Include a header file or footer file */
void xml_includefile(FILE *outf, Outchoices *od, char *name, char type) { XML_TRACE(0); }

/* Filetype for RISC OS */
unsigned int xml_riscosfiletype(void) {
  return 0xf80;
}

// ======= miscellaneous helper functions ===============================================

#ifdef _NEED_XML_PRINTF
static int xml_printf( char *format, ... )
{
	va_list v;
	int r;

	va_start( v, format );

	r=vfprintf( outf, format, v );

	va_end( v );

	return r;
}
#endif

static char* strtolower( const char *s )
{
        static char *buffer=0;
        char *p;

        // buffer is freed upon program termination.
        buffer=realloc(buffer, max(strlen(s)+1,1024));

        for( p=buffer; *s; p++, s++ )
        {
                *p=tolower(*s);
        }
        *p=0;

        return buffer;
}

// converts a null-terminated array of null-terminated strings to lower case.
static void all2lower( char** strings )
{
	char *p;

	while( *strings )
	{
		for ( p=*strings; *p; p++ )
		{
			*p=tolower(*p);
		}
		strings++;
	}
}

// this function sets the output options as they are required for XML output. 
// it's a bit of a kludge, but will have to do till Stephen implements a method for
// letting an output module set its own defaults. 
static void xml_defaults( Options *op)
{
	extern logical cgi;
	Outchoices *od=&(opts->outopts);

	choice timerepcols[] = { COL_REQS, COL_PREQS, COL_PAGES, COL_PPAGES, COL_BYTES, COL_PBYTES, COL_NUMBER };
	choice genrepcols[] = { COL_REQS, COL_PREQS, COL_REQS7, COL_PREQS7, 
				COL_PAGES, COL_PPAGES, COL_PAGES7, COL_PPAGES7, 
				COL_BYTES, COL_PBYTES, COL_BYTES7, COL_PBYTES7,
				COL_TIME, COL_FIRSTT, 
				COL_INDEX, COL_NUMBER };
	int i;
	static char *numbers[]={"0","1","2","3","4","5","6","7","8","9","10","11","12",0};


	od->rawbytes=TRUE;				// we always want bytes listed as raw numbers.
	od->gensumlines="BCDEFGHIJKLMN";		// we always want all the general summary lines
							// always select english as output language ??

	for( i=REP_YEAR; icols[i], timerepcols, sizeof(timerepcols) );


	for( i=REP_REQ; icols[i], genrepcols, sizeof(genrepcols) );

	for( i=0; i<7; i++ )				// ignore i18n daynames, just use 0..6
	od->dayname[i]=numbers[i];	

        od->lngstr[genreptime_]=
        od->lngstr[genrepdate_]=
        od->lngstr[datefmt1_]=
        od->lngstr[datefmt2_]=
        od->lngstr[weekfmt_]=
        od->lngstr[yearfmt_]=
        od->lngstr[dayrepfmt_]=
        od->lngstr[quarterlyfmt_]=
        od->lngstr[hourrepfmt_]=
        od->lngstr[quarterrepfmt_]=
        od->lngstr[monthfmt_]="%Y%M%D%H%n %Z%L%E%I%o";

	od->lngstr[quartersumfmt_]="%Y%M%D%H%n %Z%L%E%I%o %n";
	od->lngstr[hoursumfmt_]="%Y%M%D%H%n %Z%L%E%I%o %h";
        od->lngstr[daysumfmt_]="%Y%M%D%H%n %Z%L%E%I%o %w";
	od->lngstr[weekhoursumfmt_]="%Y%M%D%H%n %Z%L%E%I%o %w %h";

	for( i=0; i<11; i++ )
	od->lngstr[filesize0_+i]=numbers[i];


	cgi=FALSE;					// not possible 

	for( i=0; ireporder[i]=i;			// (depends on ALL ON in analog.cfg)


        // override reports settings ??
//	opts.outopts.repspan=
//	od->repspan=TRUE;				// analogs manual says this could be memory consuming?
//	opts.outopts.rsthresh=-1;			// list reportspan on all reports

	od->last7=TRUE;

}

#if 0
static char* utf8( char* in )
{
        static char *out=NULL;
        static size_t outsz=4;

        size_t inlen, outlen; 
	char *inptr, *outptr;
	int rc, i;


	if ( out==NULL ) out=malloc(outsz);		// initial output buffer
	iconv( cd, NULL, NULL, NULL, NULL);		// reset conversion state

	outlen=outsz;					// initial outbuffer size
	inlen=strlen(in);				// input buffer length
	inptr=in;
	outptr=out;

	while( inlen )
	{
//		fprintf(stderr, "inlen=%d, string=\"%s\"\n", inlen, in);
		rc=iconv( cd, &inptr, &inlen, &outptr, &outlen );
		if ( rc==-1 )
		switch( errno ) {
		case E2BIG:	// buffer not big enough?
			outlen+=outsz;			// adding this much space to output buffer
			out=realloc( out, outsz+=outsz );	// allocate bigger buffer
//			fprintf(stderr, "outsz=%d, inlen=%d, outlen=%d\n", outsz, inlen, outlen);
			break;
		case EILSEQ:	// An  invalid  multibyte  sequence is encountered in the input.
//			fprintf( stderr, "%s:%d: error %d: %s\n", __FILE__, __LINE__, errno, strerror(errno) );
//			inptr++; inlen--;               // try just skipping one input char
//			break;
		case EINVAL:	// An incomplete multibyte sequence is encountered in the input.
			fprintf( stderr, "%s:%d: error %d: %s\n", __FILE__, __LINE__, errno, strerror(errno) );
			fprintf( stderr, "%s:%d: string=\"%s\"\n", __FILE__, __LINE__, in, strerror(errno) );
			inlen=0;			//terminate conversion here.
			break;
		default:
			fprintf( stderr, "%s:%d: error %d: %s\n", __FILE__, __LINE__, errno, strerror(errno) );
			my_exit(8);
		}
	}
	// the majority of conversions will be one-to-one, so don't bother telling us about them
	if ( strlen(in)!=(outptr-out) )
	fprintf( stderr, "%d chars in converted to %d chars out\n", strlen(in), outptr-out );

	*outptr=0;		// terminate output buffer

	return out;
}
#endif

char *cleanprint( char *name )
{
	static char *out=NULL;
	static size_t outsz=4;
	char *outptr, c; 


	if ( out==NULL ) out=malloc(outsz);
	outptr=out;

	// cleanprint: printable characters are printed straight, unprintable as hexadecimal codes.

	while( (c=*name++) )
	{
		if ( (outsz-(int)(outptr-out))<6 )
		{
			outptr=(char*)(outptr-out);	// save old
			out=realloc(out, outsz*=2); 	// reallocate buffer
			outptr=out+(int)outptr;		// repoint		
		}
		if ( isprint( c ) ) *outptr++=c;
		else outptr+=sprintf( outptr, "[0x%02X]", (unsigned char)c );
	}
	*outptr=0;

	return out;
}

// I am keeping the name constants below in upper case to make comparison with anlghea3.h easier.
// Before they're used in the output, they're converted to lower case.
// It would be better to convert them prior to use, but this will do for now.


// this is text representation of the column name enumeration from anlghea3.h
static const char *column_name[] = {
"COL_TITLE",
"COL_REQS",
"COL_REQS7",
"COL_PAGES",
"COL_PAGES7",
"COL_BYTES",
"COL_BYTES7",
"COL_PREQS",
"COL_PREQS7",
"COL_PPAGES",
"COL_PPAGES7",
"COL_PBYTES",
"COL_PBYTES7",
"COL_DATE",
"COL_TIME",
"COL_FIRSTD",
"COL_FIRSTT",
"COL_INDEX" };

// this is a text representation of the report name enumeration from anlghea3.h
static const char *report_name[] = {
"REP_YEAR",
"REP_QUARTERLY",
"REP_MONTH",
"REP_WEEK",
"REP_DAYREP",
"REP_HOURREP",
"REP_QUARTERREP",
"REP_FIVEREP",
"REP_DAYSUM",
"REP_HOURSUM",
"REP_WEEKHOUR",
"REP_QUARTERSUM",
"REP_FIVESUM",
"REP_GENSUM",
"REP_REQ",
"REP_REDIR",
"REP_FAIL",
"REP_TYPE",
"REP_DIR",
"REP_HOST",
"REP_REDIRHOST",
"REP_FAILHOST",
"REP_DOMAIN",		// "REP_DOM",
"REP_REF",
"REP_REFSITE",
"REP_REDIRREF",
"REP_FAILREF",
"REP_BROWREP",
"REP_VHOST",
"REP_REDIRVHOST",
"REP_FAILVHOST",
"REP_USER",
"REP_REDIRUSER",
"REP_FAILUSER",
"REP_ORG",
"REP_SEARCHREP",
"REP_SEARCHSUM",
"REP_INTSEARCHREP",
"REP_INTSEARCHSUM",
"REP_BROWSUM",
"REP_OS",
"REP_SIZE",
"REP_CODE",
"REP_PROCTIME" };

// this is a text representation of floor and sort settings .....
static const char *criteria[] = {
"REQUESTS", "REQUESTS7", "PAGES", "PAGES7", "REDIR", "REDIR7", "FAIL", "FAIL7", "SUCCDATE",
"REDIRDATE", "FAILDATE", "SUCCFIRSTD", "REDIRFIRSTD", "FAILFIRSTD", "BYTES", "BYTES7",
"ALPHABETICAL", "RANDOM" };


analog-ce-6.0.17/src/outxml.h000066400000000000000000000036161406366436600157470ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

// outxml.h - XML output module for analog (http://www.analog.cx)
// written by and copyright Per Jessen, per@computer.org, February 2003. 


// leave this to build nicely readable xml output.
#define XMLDBG "\n"


#define max(a,b) ((a)>(b)?(a):(b))

//#ifdef __USE_ISOC99
#if 0
	#define XML_OUT( f... )	fprintf( outf, f )
#else
	#define XML_OUT	xml_printf
	#define _NEED_XML_PRINTF
	#define __func__ ""
	static int xml_printf( char*, ... );
#endif


#define XML_TRACE(x) if ( x ) if ( outf ) XML_OUT( XMLDBG "", __FILE__, __LINE__, __func__ )


// we only need this when we don't have strptime().
#ifndef __USE_GNU
extern char *engmonths[12];

// note: when defined like this, strptime() provides no return value. 
// also, this is obviously not! a complete replacement for strptime()  
#define strptime( bfr, format, tm ) 								\
        sscanf( (bfr), "%s %d %d %d:%d:%*d", 							\
	buffer, &((tm)->tm_mday), &((tm)->tm_year), &((tm)->tm_hour), &((tm)->tm_min) );	\
        (tm)->tm_year-=1900;									\
        for( i=0; i<12 && strcmp(engmonths[i],buffer); i++) ;		\
        (tm)->tm_mon=i;	
#endif


static void all2lower( char** );
static char* strtolower( const char* );

static void xml_defaults( Options *opts );
static char* cleanprint( char* );

//#define OFFSET(s,m) (int)(&(((s*)0)->m))

static const char *column_name[COL_NUMBER], *report_name[REP_NUMBER], *criteria[METHOD_NUMBER];

analog-ce-6.0.17/src/pcre/000077500000000000000000000000001406366436600151715ustar00rootroot00000000000000analog-ce-6.0.17/src/pcre/LICENSE000066400000000000000000000031701406366436600161770ustar00rootroot00000000000000The files in this directory are from version 3.4 of Philip Hazel's PCRE
library, but have been heavily modified by Stephen Turner for use in analog.
In particular:
  * All filenames now begin with "pcre";
  * Only functions I use in analog have been retained;
  * All debugging code has been removed;
  * Most source comments have been removed.
Therefore these routines are NOT SUITABLE for use in your own program.
Get the latest version of PCRE from http://www.pcre.org/ instead.

Many thanks to Philip Hazel for his excellent routines and generous licence.

=== AUTHOR'S COPYRIGHT AND LICENCE START HERE ===

Written by: Philip Hazel 

           Copyright (c) 1997-2000 University of Cambridge

-----------------------------------------------------------------------------
Permission is granted to anyone to use this software for any purpose on any
computer system, and to redistribute it freely, subject to the following
restrictions:

1. This software is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2. The origin of this software must not be misrepresented, either by
   explicit claim or by omission.

3. Altered versions must be plainly marked as such, and must not be
   misrepresented as being the original software.

4. If PCRE is embedded in any software that is released under the GNU
   General Purpose Licence (GPL), then the terms of that licence shall
   supersede any condition above with which it is incompatible.
-----------------------------------------------------------------------------


analog-ce-6.0.17/src/pcre/Makefile000066400000000000000000000004021406366436600166250ustar00rootroot00000000000000# Makefile for analog 6.0, pcre subdirectory
# Please read docs/Readme.html, or http://www.analog.cx/

HEADERS = pcre.h pcrechar.h pcreintl.h
OBJS = pcre.o

all: $(OBJS)

pcre.o: pcre.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c pcre.c

clean:
	rm -f *.o *~
analog-ce-6.0.17/src/pcre/pcre.c000066400000000000000000002227431406366436600163000ustar00rootroot00000000000000/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* This file contains code from Philip Hazel's PCRE library, heavily modified
   by Stephen Turner for use in analog. See the file LICENSE in this directory
   for details. */

/* Copyright (c) 1997-2000 University of Cambridge */

#ifndef HAVE_PCRE
#include "pcreintl.h"

#ifdef __cplusplus
#define class pcre_class
#endif

#define BRASTACK_SIZE 200

#ifdef SUPPORT_UTF8
#define MAXLIT 250
#else
#define MAXLIT 255
#endif

static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };

static const short int escapes[] = {
    0,      0,      0,      0,      0,      0,      0,      0,
    0,      0,    ':',    ';',    '<',    '=',    '>',    '?',
  '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,
    0,      0,      0,      0,      0,      0,      0,      0,
    0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,
    0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',
  '`',      7, -ESC_b,      0, -ESC_d,     27,   '\f',      0,
    0,      0,      0,      0,      0,      0,   '\n',      0,
    0,      0,   '\r', -ESC_s,   '\t',      0,      0, -ESC_w,
    0,      0, -ESC_z
};

static const char *posix_names[] = {
  "alpha", "lower", "upper",
  "alnum", "ascii", "cntrl", "digit", "graph",
  "print", "punct", "space", "word",  "xdigit" };

static const uschar posix_name_lengths[] = {
  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };

static const int posix_class_maps[] = {
  cbit_lower, cbit_upper, -1,
  cbit_lower, -1,         -1,
  cbit_upper, -1,         -1,
  cbit_digit, cbit_lower, cbit_upper,
  cbit_print, cbit_cntrl, -1,
  cbit_cntrl, -1,         -1,
  cbit_digit, -1,         -1,
  cbit_graph, -1,         -1,
  cbit_print, -1,         -1,
  cbit_punct, -1,         -1,
  cbit_space, -1,         -1,
  cbit_word,  -1,         -1,
  cbit_xdigit,-1,         -1
};


static BOOL
  compile_regex(int, int, int *, uschar **, const uschar **, const char **,
    BOOL, int, int *, int *, compile_data *);

typedef struct eptrblock {
  struct eptrblock *prev;
  const uschar *saved_eptr;
} eptrblock;

#define match_condassert   0x01
#define match_isgroup      0x02

void *(*pcre_malloc)(size_t) = malloc;
void  (*pcre_free)(void *) = free;

#ifndef SUPPORT_UTF8
#define GETCHARINC(c, eptr) c = *eptr++;
#define GETCHARLEN(c, eptr, len) c = *eptr;
#define BACKCHAR(eptr)

#else   /* SUPPORT_UTF8 */

#define GETCHARINC(c, eptr) \
  c = *eptr++; \
  if (md->utf8 && (c & 0xc0) == 0xc0) \
    { \
    int a = utf8_table4[c & 0x3f]; \
    int s = 6 - a; \
    c &= utf8_table3[a]; \
    while (a-- > 0) \
      { \
      c |= (*eptr++ & 0x3f) << s; \
      s += 6; \
      } \
    }

#define GETCHARLEN(c, eptr, len) \
  c = *eptr; \
  len = 1; \
  if (md->utf8 && (c & 0xc0) == 0xc0) \
    { \
    int i; \
    int a = utf8_table4[c & 0x3f]; \
    int s = 6 - a; \
    c &= utf8_table3[a]; \
    for (i = 1; i <= a; i++) \
      { \
      c |= (eptr[i] & 0x3f) << s; \
      s += 6; \
      } \
    len += a; \
    }

#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;

#endif

#include "pcrechar.h"


#ifdef SUPPORT_UTF8

static int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};

static int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
static int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};

static uschar utf8_table4[] = {
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };

static int
ord2utf8(int cvalue, uschar *buffer)
{
register int i, j;
for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
  if (cvalue <= utf8_table1[i]) break;
*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);
cvalue >>= 6 - i;
for (j = 0; j < i; j++)
  {
  *buffer++ = 0x80 | (cvalue & 0x3f);
  cvalue >>= 6;
  }
return i + 1;
}
#endif

int
pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
  void *where)
{
const real_pcre *re = (const real_pcre *)external_re;
const real_pcre_extra *study = (const real_pcre_extra *)study_data;

if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;

switch (what)
  {
  case PCRE_INFO_OPTIONS:
  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
  break;

  case PCRE_INFO_SIZE:
  *((size_t *)where) = re->size;
  break;

  case PCRE_INFO_CAPTURECOUNT:
  *((int *)where) = re->top_bracket;
  break;

  case PCRE_INFO_BACKREFMAX:
  *((int *)where) = re->top_backref;
  break;

  case PCRE_INFO_FIRSTCHAR:
  *((int *)where) =
    ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
  break;

  case PCRE_INFO_FIRSTTABLE:
  *((const uschar **)where) =
    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
      study->start_bits : NULL;
  break;

  case PCRE_INFO_LASTLITERAL:
  *((int *)where) =
    ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
  break;

  default: return PCRE_ERROR_BADOPTION;
  }

return 0;
}

static int
check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
  int options, BOOL isclass, compile_data *cd)
{
const uschar *ptr = *ptrptr;
int c, i;

c = *(++ptr);
if (c == 0) *errorptr = ERR1;

else if (c < '0' || c > 'z') {}

else if ((i = escapes[c - '0']) != 0) c = i;

else
  {
  const uschar *oldptr;
  switch (c)
    {

    case '1': case '2': case '3': case '4': case '5':
    case '6': case '7': case '8': case '9':

    if (!isclass)
      {
      oldptr = ptr;
      c -= '0';
      while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
        c = c * 10 + *(++ptr) - '0';
      if (c < 10 || c <= bracount)
        {
        c = -(ESC_REF + c);
        break;
        }
      ptr = oldptr;
      }

    if ((c = *ptr) >= '8')
      {
      ptr--;
      c = 0;
      break;
      }

    case '0':
    c -= '0';
    while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
      ptr[1] != '8' && ptr[1] != '9')
        c = c * 8 + *(++ptr) - '0';
    c &= 255;
    break;

    case 'x':
#ifdef SUPPORT_UTF8
    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
      {
      const uschar *pt = ptr + 2;
      register int count = 0;
      c = 0;
      while ((cd->ctypes[*pt] & ctype_xdigit) != 0)
        {
        count++;
        c = c * 16 + cd->lcc[*pt] -
          (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');
        pt++;
        }
      if (*pt == '}')
        {
        if (c < 0 || count > 8) *errorptr = ERR34;
        ptr = pt;
        break;
        }
      }
#endif

    c = 0;
    while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
      {
      ptr++;
      c = c * 16 + cd->lcc[*ptr] -
        (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
      }
    break;

    case 'c':
    c = *(++ptr);
    if (c == 0)
      {
      *errorptr = ERR2;
      return 0;
      }

    if (c >= 'a' && c <= 'z') c = cd->fcc[c];
    c ^= 0x40;
    break;

    default:
    if ((options & PCRE_EXTRA) != 0) switch(c)
      {
      default:
      *errorptr = ERR3;
      break;
      }
    break;
    }
  }

*ptrptr = ptr;
return c;
}

static BOOL
is_counted_repeat(const uschar *p, compile_data *cd)
{
if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
if (*p == '}') return TRUE;

if (*p++ != ',') return FALSE;
if (*p == '}') return TRUE;

if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
return (*p == '}');
}

static const uschar *
read_repeat_counts(const uschar *p, int *minp, int *maxp,
  const char **errorptr, compile_data *cd)
{
int min = 0;
int max = -1;

while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';

if (*p == '}') max = min; else
  {
  if (*(++p) != '}')
    {
    max = 0;
    while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
    if (max < min)
      {
      *errorptr = ERR4;
      return p;
      }
    }
  }

if (min > 65535 || max > 65535)
  *errorptr = ERR5;
else
  {
  *minp = min;
  *maxp = max;
  }
return p;
}

static int
find_fixedlength(uschar *code, int options)
{
int length = -1;

register int branchlength = 0;
register uschar *cc = code + 3;

for (;;)
  {
  int d;
  register int op = *cc;
  if (op >= OP_BRA) op = OP_BRA;

  switch (op)
    {
    case OP_BRA:
    case OP_ONCE:
    case OP_COND:
    d = find_fixedlength(cc, options);
    if (d < 0) return -1;
    branchlength += d;
    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
    cc += 3;
    break;

    case OP_ALT:
    case OP_KET:
    case OP_KETRMAX:
    case OP_KETRMIN:
    case OP_END:
    if (length < 0) length = branchlength;
      else if (length != branchlength) return -1;
    if (*cc != OP_ALT) return length;
    cc += 3;
    branchlength = 0;
    break;

    case OP_ASSERT:
    case OP_ASSERT_NOT:
    case OP_ASSERTBACK:
    case OP_ASSERTBACK_NOT:
    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
    cc += 3;
    break;

    case OP_REVERSE:
    cc++;
    /* Fall through */

    case OP_CREF:
    case OP_OPT:
    cc++;
    /* Fall through */

    case OP_SOD:
    case OP_EOD:
    case OP_EODN:
    case OP_CIRC:
    case OP_DOLL:
    case OP_NOT_WORD_BOUNDARY:
    case OP_WORD_BOUNDARY:
    cc++;
    break;

    case OP_CHARS:
    branchlength += *(++cc);
#ifdef SUPPORT_UTF8
    for (d = 1; d <= *cc; d++)
      if ((cc[d] & 0xc0) == 0x80) branchlength--;
#endif
    cc += *cc + 1;
    break;

    case OP_EXACT:
    case OP_TYPEEXACT:
    branchlength += (cc[1] << 8) + cc[2];
    cc += 4;
    break;

    case OP_NOT_DIGIT:
    case OP_DIGIT:
    case OP_NOT_WHITESPACE:
    case OP_WHITESPACE:
    case OP_NOT_WORDCHAR:
    case OP_WORDCHAR:
    case OP_ANY:
    branchlength++;
    cc++;
    break;

    case OP_CLASS:
    cc += (*cc == OP_REF)? 2 : 33;

    switch (*cc)
      {
      case OP_CRSTAR:
      case OP_CRMINSTAR:
      case OP_CRQUERY:
      case OP_CRMINQUERY:
      return -1;

      case OP_CRRANGE:
      case OP_CRMINRANGE:
      if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
      branchlength += (cc[1] << 8) + cc[2];
      cc += 5;
      break;

      default:
      branchlength++;
      }
    break;

    default:
    return -1;
    }
  }
}

static BOOL
check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
{
int terminator;
terminator = *(++ptr);
if (*(++ptr) == '^') ptr++;
while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
if (*ptr == terminator && ptr[1] == ']')
  {
  *endptr = ptr;
  return TRUE;
  }
return FALSE;
}

static int
check_posix_name(const uschar *ptr, int len)
{
register int yield = 0;
while (posix_name_lengths[yield] != 0)
  {
  if (len == posix_name_lengths[yield] &&
    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
  yield++;
  }
return -1;
}

static BOOL
compile_branch(int options, int *brackets, uschar **codeptr,
  const uschar **ptrptr, const char **errorptr, int *optchanged,
  int *reqchar, int *countlits, compile_data *cd)
{
int repeat_type, op_type;
int repeat_min, repeat_max;
int bravalue, length;
int greedy_default, greedy_non_default;
int prevreqchar;
int condcount = 0;
int subcountlits = 0;
register int c;
register uschar *code = *codeptr;
uschar *tempcode;
const uschar *ptr = *ptrptr;
const uschar *tempptr;
uschar *previous = NULL;
uschar class[32];

greedy_default = ((options & PCRE_UNGREEDY) != 0);
greedy_non_default = greedy_default ^ 1;

*reqchar = prevreqchar = -1;
*countlits = 0;

for (;; ptr++)
  {
  BOOL negate_class;
  int class_charcount;
  int class_lastchar;
  int newoptions;
  int condref;
  int subreqchar;

  c = *ptr;
  if ((options & PCRE_EXTENDED) != 0)
    {
    if ((cd->ctypes[c] & ctype_space) != 0) continue;
    if (c == '#')
      {
      while ((c = *(++ptr)) != 0 && c != '\n') ;
      continue;
      }
    }

  switch(c)
    {

    case 0:
    case '|':
    case ')':
    *codeptr = code;
    *ptrptr = ptr;
    return TRUE;

    case '^':
    previous = NULL;
    *code++ = OP_CIRC;
    break;

    case '$':
    previous = NULL;
    *code++ = OP_DOLL;
    break;

    case '.':
    previous = code;
    *code++ = OP_ANY;
    break;

    case '[':
    previous = code;
    *code++ = OP_CLASS;

    if ((c = *(++ptr)) == '^')
      {
      negate_class = TRUE;
      c = *(++ptr);
      }
    else negate_class = FALSE;

    class_charcount = 0;
    class_lastchar = -1;

    memset(class, 0, 32 * sizeof(uschar));

    do
      {
      if (c == 0)
        {
        *errorptr = ERR6;
        goto FAILED;
        }

      if (c == '[' &&
          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
          check_posix_syntax(ptr, &tempptr, cd))
        {
        BOOL local_negate = FALSE;
        int posix_class, i;
        register const uschar *cbits = cd->cbits;

        if (ptr[1] != ':')
          {
          *errorptr = ERR31;
          goto FAILED;
          }

        ptr += 2;
        if (*ptr == '^')
          {
          local_negate = TRUE;
          ptr++;
          }

        posix_class = check_posix_name(ptr, tempptr - ptr);
        if (posix_class < 0)
          {
          *errorptr = ERR30;
          goto FAILED;
          }

        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
          posix_class = 0;

        posix_class *= 3;
        for (i = 0; i < 3; i++)
          {
          int taboffset = posix_class_maps[posix_class + i];
          if (taboffset < 0) break;
          if (local_negate)
            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
          else
            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
          }

        ptr = tempptr + 1;
        class_charcount = 10;
        continue;
        }

      if (c == '\\')
        {
        c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
        if (-c == ESC_b) c = '\b';
        else if (c < 0)
          {
          register const uschar *cbits = cd->cbits;
          class_charcount = 10;
          switch (-c)
            {
            case ESC_d:
            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
            continue;

            case ESC_D:
            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
            continue;

            case ESC_w:
            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
            continue;

            case ESC_W:
            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
            continue;

            case ESC_s:
            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
            continue;

            case ESC_S:
            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
            continue;

            default:
            *errorptr = ERR7;
            goto FAILED;
            }
          }

#ifdef SUPPORT_UTF8
        if (c > 255)
          {
          *errorptr = ERR33;
          goto FAILED;
          }
#endif
        }

      if (ptr[1] == '-' && ptr[2] != ']')
        {
        int d;
        ptr += 2;
        d = *ptr;

        if (d == 0)
          {
          *errorptr = ERR6;
          goto FAILED;
          }

        if (d == '\\')
          {
          const uschar *oldptr = ptr;
          d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);

#ifdef SUPPORT_UTF8
          if (d > 255)
            {
            *errorptr = ERR33;
            goto FAILED;
            }
#endif
          if (d < 0)
            {
            if (d == -ESC_b) d = '\b'; else
              {
              ptr = oldptr - 2;
              goto SINGLE_CHARACTER;
              }
            }
          }

        if (d < c)
          {
          *errorptr = ERR8;
          goto FAILED;
          }

        for (; c <= d; c++)
          {
          class[c/8] |= (1 << (c&7));
          if ((options & PCRE_CASELESS) != 0)
            {
            int uc = cd->fcc[c];
            class[uc/8] |= (1 << (uc&7));
            }
          class_charcount++;
          class_lastchar = c;
          }
        continue;
        }

      SINGLE_CHARACTER:

      class [c/8] |= (1 << (c&7));
      if ((options & PCRE_CASELESS) != 0)
        {
        c = cd->fcc[c];
        class[c/8] |= (1 << (c&7));
        }
      class_charcount++;
      class_lastchar = c;
      }

    while ((c = *(++ptr)) != ']');

    if (class_charcount == 1 && class_lastchar >= 0)
      {
      if (negate_class)
        {
        code[-1] = OP_NOT;
        }
      else
        {
        code[-1] = OP_CHARS;
        *code++ = 1;
        }
      *code++ = class_lastchar;
      }

    else
      {
      if (negate_class)
        for (c = 0; c < 32; c++) code[c] = ~class[c];
      else
        memcpy(code, class, 32);
      code += 32;
      }
    break;

    case '{':
    if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
    if (*errorptr != NULL) goto FAILED;
    goto REPEAT;

    case '*':
    repeat_min = 0;
    repeat_max = -1;
    goto REPEAT;

    case '+':
    repeat_min = 1;
    repeat_max = -1;
    goto REPEAT;

    case '?':
    repeat_min = 0;
    repeat_max = 1;

    REPEAT:
    if (previous == NULL)
      {
      *errorptr = ERR9;
      goto FAILED;
      }

    if (ptr[1] == '?')
      { repeat_type = greedy_non_default; ptr++; }
    else repeat_type = greedy_default;

    if (*previous == OP_CHARS)
      {
      int len = previous[1];

      if (repeat_min == 0) *reqchar = prevreqchar;
      *countlits += repeat_min - 1;

      if (len == 1)
        {
        c = previous[2];
        code = previous;
        }
      else
        {
        c = previous[len+1];
        previous[1]--;
        code--;
        }
      op_type = 0;
      goto OUTPUT_SINGLE_REPEAT;
      }

    else if ((int)*previous == OP_NOT)
      {
      op_type = OP_NOTSTAR - OP_STAR;
      c = previous[1];
      code = previous;
      goto OUTPUT_SINGLE_REPEAT;
      }

    else if ((int)*previous < OP_EODN || *previous == OP_ANY)
      {
      op_type = OP_TYPESTAR - OP_STAR;
      c = *previous;
      code = previous;

      OUTPUT_SINGLE_REPEAT:

      if (repeat_max == 0) goto END_REPEAT;

      repeat_type += op_type;

      if (repeat_min == 0)
        {
        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
        else
          {
          *code++ = OP_UPTO + repeat_type;
          *code++ = repeat_max >> 8;
          *code++ = (repeat_max & 255);
          }
        }

      else if (repeat_min == 1 && repeat_max == -1)
        *code++ = OP_PLUS + repeat_type;

      else
        {
        if (repeat_min != 1)
          {
          *code++ = OP_EXACT + op_type;
          *code++ = repeat_min >> 8;
          *code++ = (repeat_min & 255);
          }

        else if (*previous == OP_CHARS)
          {
          if (code == previous) code += 2; else previous[1]++;
          }

        else if (*previous == OP_NOT) code++;

        if (repeat_max < 0)
          {
          *code++ = c;
          *code++ = OP_STAR + repeat_type;
          }

        else if (repeat_max != repeat_min)
          {
          *code++ = c;
          repeat_max -= repeat_min;
          *code++ = OP_UPTO + repeat_type;
          *code++ = repeat_max >> 8;
          *code++ = (repeat_max & 255);
          }
        }

      *code++ = c;
      }

    else if (*previous == OP_CLASS || *previous == OP_REF)
      {
      if (repeat_max == 0)
        {
        code = previous;
        goto END_REPEAT;
        }
      if (repeat_min == 0 && repeat_max == -1)
        *code++ = OP_CRSTAR + repeat_type;
      else if (repeat_min == 1 && repeat_max == -1)
        *code++ = OP_CRPLUS + repeat_type;
      else if (repeat_min == 0 && repeat_max == 1)
        *code++ = OP_CRQUERY + repeat_type;
      else
        {
        *code++ = OP_CRRANGE + repeat_type;
        *code++ = repeat_min >> 8;
        *code++ = repeat_min & 255;
        if (repeat_max == -1) repeat_max = 0;
        *code++ = repeat_max >> 8;
        *code++ = repeat_max & 255;
        }
      }

    else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
             (int)*previous == OP_COND)
      {
      register int i;
      int ketoffset = 0;
      int len = code - previous;
      uschar *bralink = NULL;

      if (repeat_max == -1)
        {
        register uschar *ket = previous;
        do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
        ketoffset = code - ket;
        }

      if (repeat_min == 0)
        {

        if (subcountlits > 0)
          {
          *reqchar = prevreqchar;
          *countlits -= subcountlits;
          }

        if (repeat_max == 0)
          {
          code = previous;
          goto END_REPEAT;
          }

        if (repeat_max <= 1)
          {
          memmove(previous+1, previous, len);
          code++;
          *previous++ = OP_BRAZERO + repeat_type;
          }

        else
          {
          int offset;
          memmove(previous+4, previous, len);
          code += 4;
          *previous++ = OP_BRAZERO + repeat_type;
          *previous++ = OP_BRA;

          offset = (bralink == NULL)? 0 : previous - bralink;
          bralink = previous;
          *previous++ = offset >> 8;
          *previous++ = offset & 255;
          }

        repeat_max--;
        }

      else
        {
        for (i = 1; i < repeat_min; i++)
          {
          memcpy(code, previous, len);
          code += len;
          }
        if (repeat_max > 0) repeat_max -= repeat_min;
        }

      if (repeat_max >= 0)
        {
        for (i = repeat_max - 1; i >= 0; i--)
          {
          *code++ = OP_BRAZERO + repeat_type;

          if (i != 0)
            {
            int offset;
            *code++ = OP_BRA;
            offset = (bralink == NULL)? 0 : code - bralink;
            bralink = code;
            *code++ = offset >> 8;
            *code++ = offset & 255;
            }

          memcpy(code, previous, len);
          code += len;
          }

        while (bralink != NULL)
          {
          int oldlinkoffset;
          int offset = code - bralink + 1;
          uschar *bra = code - offset;
          oldlinkoffset = (bra[1] << 8) + bra[2];
          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
          *code++ = OP_KET;
          *code++ = bra[1] = offset >> 8;
          *code++ = bra[2] = (offset & 255);
          }
        }

      else code[-ketoffset] = OP_KETRMAX + repeat_type;
      }

    else
      {
      *errorptr = ERR11;
      goto FAILED;
      }

    END_REPEAT:
    previous = NULL;
    break;

    case '(':
    newoptions = options;
    condref = -1;

    if (*(++ptr) == '?')
      {
      int set, unset;
      int *optset;

      switch (*(++ptr))
        {
        case '#':
        ptr++;
        while (*ptr != ')') ptr++;
        continue;

        case ':':
        bravalue = OP_BRA;
        ptr++;
        break;

        case '(':
        bravalue = OP_COND;
        if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
          {
          condref = *ptr - '0';
          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
          if (condref == 0)
            {
            *errorptr = ERR35;
            goto FAILED;
            }
          ptr++;
          }
        else ptr--;
        break;

        case '=':
        bravalue = OP_ASSERT;
        ptr++;
        break;

        case '!':
        bravalue = OP_ASSERT_NOT;
        ptr++;
        break;

        case '<':
        switch (*(++ptr))
          {
          case '=':
          bravalue = OP_ASSERTBACK;
          ptr++;
          break;

          case '!':
          bravalue = OP_ASSERTBACK_NOT;
          ptr++;
          break;

          default:
          *errorptr = ERR24;
          goto FAILED;
          }
        break;

        case '>':
        bravalue = OP_ONCE;
        ptr++;
        break;

        case 'R':
        *code++ = OP_RECURSE;
        ptr++;
        continue;

        default:
        set = unset = 0;
        optset = &set;

        while (*ptr != ')' && *ptr != ':')
          {
          switch (*ptr++)
            {
            case '-': optset = &unset; break;

            case 'i': *optset |= PCRE_CASELESS; break;
            case 'm': *optset |= PCRE_MULTILINE; break;
            case 's': *optset |= PCRE_DOTALL; break;
            case 'x': *optset |= PCRE_EXTENDED; break;
            case 'U': *optset |= PCRE_UNGREEDY; break;
            case 'X': *optset |= PCRE_EXTRA; break;

            default:
            *errorptr = ERR12;
            goto FAILED;
            }
          }

        newoptions = (options | set) & (~unset);

        if (*ptr == ')')
          {
          if ((options & PCRE_INGROUP) != 0 &&
              (options & PCRE_IMS) != (newoptions & PCRE_IMS))
            {
            *code++ = OP_OPT;
            *code++ = *optchanged = newoptions & PCRE_IMS;
            }
          options = newoptions;
          previous = NULL;
          continue;
          }

        bravalue = OP_BRA;
        ptr++;
        }
      }

    else
      {
      if (++(*brackets) > EXTRACT_MAX)
        {
        *errorptr = ERR13;
        goto FAILED;
        }
      bravalue = OP_BRA + *brackets;
      }

    previous = (bravalue >= OP_ONCE)? code : NULL;
    *code = bravalue;
    tempcode = code;

    if (!compile_regex(
         options | PCRE_INGROUP,
         ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
           newoptions & PCRE_IMS : -1,
         brackets,
         &tempcode,
         &ptr,
         errorptr,
         (bravalue == OP_ASSERTBACK ||
          bravalue == OP_ASSERTBACK_NOT),
         condref,
         &subreqchar,
         &subcountlits,
         cd))
      goto FAILED;

    if (bravalue == OP_COND)
      {
      uschar *tc = code;
      condcount = 0;

      do {
         condcount++;
         tc += (tc[1] << 8) | tc[2];
         }
      while (*tc != OP_KET);

      if (condcount > 2)
        {
        *errorptr = ERR27;
        goto FAILED;
        }
      }

    if (subreqchar > 0 &&
         (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
         (bravalue == OP_COND && condcount == 2)))
      {
      prevreqchar = *reqchar;
      *reqchar = subreqchar;
      if (bravalue != OP_ASSERT) *countlits += subcountlits;
      }

    code = tempcode;

    if (*ptr != ')')
      {
      *errorptr = ERR14;
      goto FAILED;
      }
    break;

    case '\\':
    tempptr = ptr;
    c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);

    if (c < 0)
      {
      if (-c >= ESC_REF)
        {
        previous = code;
        *code++ = OP_REF;
        *code++ = -c - ESC_REF;
        }
      else
        {
        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
        *code++ = -c;
        }
      continue;
      }

    ptr = tempptr;
    c = '\\';

    NORMAL_CHAR:
    default:
    previous = code;
    *code = OP_CHARS;
    code += 2;
    length = 0;

    do
      {
      if ((options & PCRE_EXTENDED) != 0)
        {
        if ((cd->ctypes[c] & ctype_space) != 0) continue;
        if (c == '#')
          {
          while ((c = *(++ptr)) != 0 && c != '\n') ;
          if (c == 0) break;
          continue;
          }
        }

      if (c == '\\')
        {
        tempptr = ptr;
        c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
        if (c < 0) { ptr = tempptr; break; }

#ifdef SUPPORT_UTF8
        if (c > 127 && (options & PCRE_UTF8) != 0)
          {
          uschar buffer[8];
          int len = ord2utf8(c, buffer);
          for (c = 0; c < len; c++) *code++ = buffer[c];
          length += len;
          continue;
          }
#endif
        }

      *code++ = c;
      length++;
      }

    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);

    prevreqchar = (length > 1)? code[-2] : *reqchar;
    *reqchar = code[-1];
    *countlits += length;

    previous[1] = length;
    if (length < MAXLIT) ptr--;
    break;
    }
  }

FAILED:
*ptrptr = ptr;
return FALSE;
}

static BOOL
compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int condref,
  int *reqchar, int *countlits, compile_data *cd)
{
const uschar *ptr = *ptrptr;
uschar *code = *codeptr;
uschar *last_branch = code;
uschar *start_bracket = code;
uschar *reverse_count = NULL;
int oldoptions = options & PCRE_IMS;
int branchreqchar, branchcountlits;

*reqchar = -1;
*countlits = INT_MAX;
code += 3;

if (condref >= 0)
  {
  *code++ = OP_CREF;
  *code++ = condref;
  }

for (;;)
  {
  int length;

  if (optchanged >= 0)
    {
    *code++ = OP_OPT;
    *code++ = optchanged;
    options = (options & ~PCRE_IMS) | optchanged;
    }

  if (lookbehind)
    {
    *code++ = OP_REVERSE;
    reverse_count = code;
    *code++ = 0;
    *code++ = 0;
    }

  if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
      &branchreqchar, &branchcountlits, cd))
    {
    *ptrptr = ptr;
    return FALSE;
    }

  length = code - last_branch;
  last_branch[1] = length >> 8;
  last_branch[2] = length & 255;

  if (*reqchar != -2)
    {
    if (branchreqchar >= 0)
      {
      if (*reqchar == -1) *reqchar = branchreqchar;
      else if (*reqchar != branchreqchar) *reqchar = -2;
      }
    else *reqchar = -2;
    }

  if (branchcountlits < *countlits) *countlits = branchcountlits;

  if (lookbehind)
    {
    *code = OP_END;
    length = find_fixedlength(last_branch, options);
    if (length < 0)
      {
      *errorptr = ERR25;
      *ptrptr = ptr;
      return FALSE;
      }
    reverse_count[0] = (length >> 8);
    reverse_count[1] = length & 255;
    }

  if (*ptr != '|')
    {
    length = code - start_bracket;
    *code++ = OP_KET;
    *code++ = length >> 8;
    *code++ = length & 255;
    if (optchanged >= 0)
      {
      *code++ = OP_OPT;
      *code++ = oldoptions;
      }
    *codeptr = code;
    *ptrptr = ptr;
    return TRUE;
    }

  *code = OP_ALT;
  last_branch = code;
  code += 3;
  ptr++;
  }
}

static const uschar*
first_significant_code(const uschar *code, int *options, int optbit,
  BOOL optstop)
{
for (;;)
  {
  switch ((int)*code)
    {
    case OP_OPT:
    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
      {
      if (optstop) return code;
      *options = (int)code[1];
      }
    code += 2;
    break;

    case OP_CREF:
    code += 2;
    break;

    case OP_WORD_BOUNDARY:
    case OP_NOT_WORD_BOUNDARY:
    code++;
    break;

    case OP_ASSERT_NOT:
    case OP_ASSERTBACK:
    case OP_ASSERTBACK_NOT:
    do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
    code += 3;
    break;

    default:
    return code;
    }
  }
}

static BOOL
is_anchored(register const uschar *code, int *options)
{
do {
   const uschar *scode = first_significant_code(code + 3, options,
     PCRE_MULTILINE, FALSE);
   register int op = *scode;
   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
     { if (!is_anchored(scode, options)) return FALSE; }
   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
            (*options & PCRE_DOTALL) != 0)
     { if (scode[1] != OP_ANY) return FALSE; }
   else if (op != OP_SOD &&
           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
     return FALSE;
   code += (code[1] << 8) + code[2];
   }
while (*code == OP_ALT);
return TRUE;
}

static BOOL
is_startline(const uschar *code)
{
do {
   const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
   register int op = *scode;
   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
     { if (!is_startline(scode)) return FALSE; }
   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
     { if (scode[1] != OP_ANY) return FALSE; }
   else if (op != OP_CIRC) return FALSE;
   code += (code[1] << 8) + code[2];
   }
while (*code == OP_ALT);
return TRUE;
}

static int
find_firstchar(const uschar *code, int *options)
{
register int c = -1;
do {
   int d;
   const uschar *scode = first_significant_code(code + 3, options,
     PCRE_CASELESS, TRUE);
   register int op = *scode;

   if (op >= OP_BRA) op = OP_BRA;

   switch(op)
     {
     default:
     return -1;

     case OP_BRA:
     case OP_ASSERT:
     case OP_ONCE:
     case OP_COND:
     if ((d = find_firstchar(scode, options)) < 0) return -1;
     if (c < 0) c = d; else if (c != d) return -1;
     break;

     case OP_EXACT:       /* Fall through */
     scode++;

     case OP_CHARS:       /* Fall through */
     scode++;

     case OP_PLUS:
     case OP_MINPLUS:
     if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
     break;
     }

   code += (code[1] << 8) + code[2];
   }
while (*code == OP_ALT);
return c;
}

pcre *
pcre_compile(const char *pattern, int options, const char **errorptr,
  int *erroroffset, const unsigned char *tables)
{
real_pcre *re;
int length = 3;
int runlength;
int c, reqchar, countlits;
int bracount = 0;
int top_backref = 0;
int branch_extra = 0;
int branch_newextra;
unsigned int brastackptr = 0;
size_t size;
uschar *code;
const uschar *ptr;
compile_data compile_block;
int brastack[BRASTACK_SIZE];
uschar bralenstack[BRASTACK_SIZE];

#ifndef SUPPORT_UTF8
if ((options & PCRE_UTF8) != 0)
  {
  *errorptr = ERR32;
  return NULL;
  }
#endif

if (errorptr == NULL) return NULL;
*errorptr = NULL;

if (erroroffset == NULL)
  {
  *errorptr = ERR16;
  return NULL;
  }
*erroroffset = 0;

if ((options & ~PUBLIC_OPTIONS) != 0)
  {
  *errorptr = ERR17;
  return NULL;
  }

if (tables == NULL) tables = pcre_default_tables;
compile_block.lcc = tables + lcc_offset;
compile_block.fcc = tables + fcc_offset;
compile_block.cbits = tables + cbits_offset;
compile_block.ctypes = tables + ctypes_offset;

ptr = (const uschar *)(pattern - 1);
while ((c = *(++ptr)) != 0)
  {
  int min, max;
  int class_charcount;

  if ((options & PCRE_EXTENDED) != 0)
    {
    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
    if (c == '#')
      {
      while ((c = *(++ptr)) != 0 && c != '\n') ;
      continue;
      }
    }

  switch(c)
    {
    case '\\':
      {
      const uschar *save_ptr = ptr;
      c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
      if (c >= 0)
        {
        ptr = save_ptr;
        c = '\\';
        goto NORMAL_CHAR;
        }
      }
    length++;

    if (c <= -ESC_REF)
      {
      int refnum = -c - ESC_REF;
      if (refnum > top_backref) top_backref = refnum;
      length++;
      if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
        {
        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
        if ((min == 0 && (max == 1 || max == -1)) ||
          (min == 1 && max == -1))
            length++;
        else length += 5;
        if (ptr[1] == '?') ptr++;
        }
      }
    continue;

    case '^':
    case '.':
    case '$':
    case '*':
    case '+':
    case '?':
    length++;
    continue;

    case '{':
    if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
    ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
    if ((min == 0 && (max == 1 || max == -1)) ||
      (min == 1 && max == -1))
        length++;
    else
      {
      length--;
      if (min == 1) length++; else if (min > 0) length += 4;
      if (max > 0) length += 4; else length += 2;
      }
    if (ptr[1] == '?') ptr++;
    continue;

    case '|':
    length += 3 + branch_extra;
    continue;

    case '[':
    class_charcount = 0;
    if (*(++ptr) == '^') ptr++;
    do
      {
      if (*ptr == '\\')
        {
        int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
          &compile_block);
        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
        if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
        }
      else class_charcount++;
      ptr++;
      }
    while (*ptr != 0 && *ptr != ']');

    if (class_charcount == 1) length += 3; else
      {
      length += 33;

      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
        {
        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
        if ((min == 0 && (max == 1 || max == -1)) ||
          (min == 1 && max == -1))
            length++;
        else length += 5;
        if (ptr[1] == '?') ptr++;
        }
      }
    continue;

    case '(':
    branch_newextra = 0;

    if (ptr[1] == '?')
      {
      int set, unset;
      int *optset;

      switch (c = ptr[2])
        {
        case '#':
        ptr += 3;
        while (*ptr != 0 && *ptr != ')') ptr++;
        if (*ptr == 0)
          {
          *errorptr = ERR18;
          goto PCRE_ERROR_RETURN;
          }
        continue;

        case ':':
        case '=':
        case '!':
        case '>':
        ptr += 2;
        break;

        case 'R':
        if (ptr[3] != ')')
          {
          *errorptr = ERR29;
          goto PCRE_ERROR_RETURN;
          }
        ptr += 3;
        length += 1;
        break;

        case '<':
        if (ptr[3] == '=' || ptr[3] == '!')
          {
          ptr += 3;
          branch_newextra = 3;
          length += 3;
          break;
          }
        *errorptr = ERR24;
        goto PCRE_ERROR_RETURN;

        case '(':
        if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
          {
          ptr += 4;
          length += 2;
          while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
          if (*ptr != ')')
            {
            *errorptr = ERR26;
            goto PCRE_ERROR_RETURN;
            }
          }
        else
          {
          ptr++;
          if (ptr[2] != '?' ||
             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
            {
            ptr += 2;
            *errorptr = ERR28;
            goto PCRE_ERROR_RETURN;
            }
          }
        break;

        default:
        set = unset = 0;
        optset = &set;
        ptr += 2;

        for (;; ptr++)
          {
          c = *ptr;
          switch (c)
            {
            case 'i':
            *optset |= PCRE_CASELESS;
            continue;

            case 'm':
            *optset |= PCRE_MULTILINE;
            continue;

            case 's':
            *optset |= PCRE_DOTALL;
            continue;

            case 'x':
            *optset |= PCRE_EXTENDED;
            continue;

            case 'X':
            *optset |= PCRE_EXTRA;
            continue;

            case 'U':
            *optset |= PCRE_UNGREEDY;
            continue;

            case '-':
            optset = &unset;
            continue;

            case ')':
            if (brastackptr == 0)
              {
              options = (options | set) & (~unset);
              set = unset = 0;
              }
            /* Fall through */

            case ':':
            if (((set|unset) & PCRE_IMS) != 0)
              {
              length += 4;
              branch_newextra = 2;
              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
              }
            goto END_OPTIONS;

            default:
            *errorptr = ERR12;
            goto PCRE_ERROR_RETURN;
            }
          }

        END_OPTIONS:
        if (c == ')')
          {
          if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
            branch_extra += branch_newextra;
          continue;
          }
        }
      }
    else bracount++;

    if (brastackptr >= sizeof(brastack)/sizeof(int))
      {
      *errorptr = ERR19;
      goto PCRE_ERROR_RETURN;
      }

    bralenstack[brastackptr] = branch_extra;
    branch_extra = branch_newextra;

    brastack[brastackptr++] = length;
    length += 3;
    continue;

    case ')':
    length += 3;
      {
      int minval = 1;
      int maxval = 1;
      int duplength;

      if (brastackptr > 0)
        {
        duplength = length - brastack[--brastackptr];
        branch_extra = bralenstack[brastackptr];
        }
      else duplength = 0;

      if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
        {
        ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
          &compile_block);
        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
        }
      else if (c == '*') { minval = 0; maxval = -1; ptr++; }
      else if (c == '+') { maxval = -1; ptr++; }
      else if (c == '?') { minval = 0; ptr++; }

      if (minval == 0)
        {
        length++;
        if (maxval > 0) length += (maxval - 1) * (duplength + 7);
        }
      else
        {
        length += (minval - 1) * duplength;
        if (maxval > minval)
          length += (maxval - minval) * (duplength + 7) - 6;
        }
      }
    continue;

    NORMAL_CHAR:
    default:
    length += 2;
    runlength = 0;
    do
      {
      if ((options & PCRE_EXTENDED) != 0)
        {
        if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
        if (c == '#')
          {
          while ((c = *(++ptr)) != 0 && c != '\n') ;
          continue;
          }
        }

      if (c == '\\')
        {
        const uschar *saveptr = ptr;
        c = check_escape(&ptr, errorptr, bracount, options, FALSE,
          &compile_block);
        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
        if (c < 0) { ptr = saveptr; break; }

#ifdef SUPPORT_UTF8
        if (c > 127 && (options & PCRE_UTF8) != 0)
          {
          int i;
          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
            if (c <= utf8_table1[i]) break;
          runlength += i;
          }
#endif
        }

      runlength++;
      }

    while (runlength < MAXLIT &&
      (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);

    ptr--;
    length += runlength;
    continue;
    }
  }

length += 4;

if (length > 65539)
  {
  *errorptr = ERR20;
  return NULL;
  }

size = length + offsetof(real_pcre, code[0]);
re = (real_pcre *)(pcre_malloc)(size);

if (re == NULL)
  {
  *errorptr = ERR21;
  return NULL;
  }

re->magic_number = MAGIC_NUMBER;
re->size = size;
re->options = options;
re->tables = tables;

ptr = (const uschar *)pattern;
code = re->code;
*code = OP_BRA;
bracount = 0;
(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, -1,
  &reqchar, &countlits, &compile_block);
re->top_bracket = bracount;
re->top_backref = top_backref;

if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;

*code++ = OP_END;

if (top_backref > re->top_bracket) *errorptr = ERR15;

if (*errorptr != NULL)
  {
  (pcre_free)(re);
  PCRE_ERROR_RETURN:
  *erroroffset = ptr - (const uschar *)pattern;
  return NULL;
  }

if ((options & PCRE_ANCHORED) == 0)
  {
  int temp_options = options;
  if (is_anchored(re->code, &temp_options))
    re->options |= PCRE_ANCHORED;
  else
    {
    int ch = find_firstchar(re->code, &temp_options);
    if (ch >= 0)
      {
      re->first_char = ch;
      re->options |= PCRE_FIRSTSET;
      }
    else if (is_startline(re->code))
      re->options |= PCRE_STARTLINE;
    }
  }

if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
  {
  re->req_char = reqchar;
  re->options |= PCRE_REQCHSET;
  }

return (pcre *)re;
}

static BOOL
match_ref(int offset, register const uschar *eptr, int length, match_data *md,
  unsigned long int ims)
{
const uschar *p = md->start_subject + md->offset_vector[offset];

if (length > md->end_subject - eptr) return FALSE;

if ((ims & PCRE_CASELESS) != 0)
  {
  while (length-- > 0)
    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
  }
else
  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }

return TRUE;
}

static BOOL
match(register const uschar *eptr, register const uschar *ecode,
  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
  int flags)
{
unsigned long int original_ims = ims;   /* Save for resetting on ')' */
eptrblock newptrb;

if ((flags & match_isgroup) != 0)
  {
  newptrb.prev = eptrb;
  newptrb.saved_eptr = eptr;
  eptrb = &newptrb;
  }

for (;;)
  {
  int op = (int)*ecode;
  int min, max, ctype;
  register int i;
  register int c;
  BOOL minimize = FALSE;

  if (op > OP_BRA)
    {
    int number = op - OP_BRA;
    int offset = number << 1;

    if (offset < md->offset_max)
      {
      int save_offset1 = md->offset_vector[offset];
      int save_offset2 = md->offset_vector[offset+1];
      int save_offset3 = md->offset_vector[md->offset_end - number];

      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;

      do
        {
        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
          return TRUE;
        ecode += (ecode[1] << 8) + ecode[2];
        }
      while (*ecode == OP_ALT);

      md->offset_vector[offset] = save_offset1;
      md->offset_vector[offset+1] = save_offset2;
      md->offset_vector[md->offset_end - number] = save_offset3;
      return FALSE;
      }

    else op = OP_BRA;
    }

  switch(op)
    {
    case OP_BRA:
    do
      {
      if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
        return TRUE;
      ecode += (ecode[1] << 8) + ecode[2];
      }
    while (*ecode == OP_ALT);
    return FALSE;

    case OP_COND:
    if (ecode[3] == OP_CREF)
      {
      int offset = ecode[4] << 1;
      return match(eptr,
        ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
          5 : 3 + (ecode[1] << 8) + ecode[2]),
        offset_top, md, ims, eptrb, match_isgroup);
      }

    else
      {
      if (match(eptr, ecode+3, offset_top, md, ims, NULL,
          match_condassert | match_isgroup))
        {
        ecode += 3 + (ecode[4] << 8) + ecode[5];
        while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
        }
      else ecode += (ecode[1] << 8) + ecode[2];
      return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
      }
    case OP_CREF:
    ecode += 2;
    break;

    case OP_END:
    if (md->notempty && eptr == md->start_match) return FALSE;
    md->end_match_ptr = eptr;
    md->end_offset_top = offset_top;
    return TRUE;

    case OP_OPT:
    ims = ecode[1];
    ecode += 2;
    break;

    case OP_ASSERT:
    case OP_ASSERTBACK:
    do
      {
      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
      ecode += (ecode[1] << 8) + ecode[2];
      }
    while (*ecode == OP_ALT);
    if (*ecode == OP_KET) return FALSE;

    if ((flags & match_condassert) != 0) return TRUE;

    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
    ecode += 3;
    offset_top = md->end_offset_top;
    continue;

    case OP_ASSERT_NOT:
    case OP_ASSERTBACK_NOT:
    do
      {
      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
        return FALSE;
      ecode += (ecode[1] << 8) + ecode[2];
      }
    while (*ecode == OP_ALT);

    if ((flags & match_condassert) != 0) return TRUE;

    ecode += 3;
    continue;

    case OP_REVERSE:
#ifdef SUPPORT_UTF8
    c = (ecode[1] << 8) + ecode[2];
    for (i = 0; i < c; i++)
      {
      eptr--;
      BACKCHAR(eptr)
      }
#else
    eptr -= (ecode[1] << 8) + ecode[2];
#endif

    if (eptr < md->start_subject) return FALSE;
    ecode += 3;
    break;

    case OP_RECURSE:
      {
      BOOL rc;
      int *save;
      int stacksave[15];

      c = md->offset_max;

      if (c < 16) save = stacksave; else
        {
        save = (int *)(pcre_malloc)((c+1) * sizeof(int));
        if (save == NULL)
          {
          save = stacksave;
          c = 15;
          }
        }

      for (i = 1; i <= c; i++)
        save[i] = md->offset_vector[md->offset_end - i];
      rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
        match_isgroup);
      for (i = 1; i <= c; i++)
        md->offset_vector[md->offset_end - i] = save[i];
      if (save != stacksave) (pcre_free)(save);
      if (!rc) return FALSE;

      offset_top = md->end_offset_top;
      eptr = md->end_match_ptr;
      ecode++;
      }
    break;

    case OP_ONCE:
      {
      const uschar *prev = ecode;
      const uschar *saved_eptr = eptr;

      do
        {
        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
          break;
        ecode += (ecode[1] << 8) + ecode[2];
        }
      while (*ecode == OP_ALT);

      if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;

      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);

      offset_top = md->end_offset_top;
      eptr = md->end_match_ptr;

      if (*ecode == OP_KET || eptr == saved_eptr)
        {
        ecode += 3;
        break;
        }

      if (ecode[3] == OP_OPT)
        {
        ims = (ims & ~PCRE_IMS) | ecode[4];
        }

      if (*ecode == OP_KETRMIN)
        {
        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
              return TRUE;
        }
      else
        {
        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
        }
      }
    return FALSE;

    case OP_ALT:
    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
    break;

    case OP_BRAZERO:
      {
      const uschar *next = ecode+1;
      if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
        return TRUE;
      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
      ecode = next + 3;
      }
    break;

    case OP_BRAMINZERO:
      {
      const uschar *next = ecode+1;
      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
      if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
        return TRUE;
      ecode++;
      }
    break;

    case OP_KET:
    case OP_KETRMIN:
    case OP_KETRMAX:
      {
      const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
      const uschar *saved_eptr = eptrb->saved_eptr;

      eptrb = eptrb->prev;

      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
          *prev == OP_ONCE)
        {
        md->end_match_ptr = eptr;
        md->end_offset_top = offset_top;
        return TRUE;
        }

      if (*prev != OP_COND)
        {
        int number = *prev - OP_BRA;
        int offset = number << 1;

        if (number > 0)
          {
          if (offset >= md->offset_max) md->offset_overflow = TRUE; else
            {
            md->offset_vector[offset] =
              md->offset_vector[md->offset_end - number];
            md->offset_vector[offset+1] = eptr - md->start_subject;
            if (offset_top <= offset) offset_top = offset + 2;
            }
          }
        }

      ims = original_ims;

      if (*ecode == OP_KET || eptr == saved_eptr)
        {
        ecode += 3;
        break;
        }

      if (*ecode == OP_KETRMIN)
        {
        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
              return TRUE;
        }
      else
        {
        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
        }
      }
    return FALSE;

    case OP_CIRC:
    if (md->notbol && eptr == md->start_subject) return FALSE;
    if ((ims & PCRE_MULTILINE) != 0)
      {
      if (eptr != md->start_subject && eptr[-1] != '\n') return FALSE;
      ecode++;
      break;
      }

    case OP_SOD:
    if (eptr != md->start_subject) return FALSE;
    ecode++;
    break;

    case OP_DOLL:
    if ((ims & PCRE_MULTILINE) != 0)
      {
      if (eptr < md->end_subject) { if (*eptr != '\n') return FALSE; }
        else { if (md->noteol) return FALSE; }
      ecode++;
      break;
      }
    else
      {
      if (md->noteol) return FALSE;
      if (!md->endonly)
        {
        if (eptr < md->end_subject - 1 ||
           (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;

        ecode++;
        break;
        }
      }

    case OP_EOD:
    if (eptr < md->end_subject) return FALSE;
    ecode++;
    break;

    case OP_EODN:
    if (eptr < md->end_subject - 1 ||
       (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
    ecode++;
    break;

    case OP_NOT_WORD_BOUNDARY:
    case OP_WORD_BOUNDARY:
      {
      BOOL prev_is_word = (eptr != md->start_subject) &&
        ((md->ctypes[eptr[-1]] & ctype_word) != 0);
      BOOL cur_is_word = (eptr < md->end_subject) &&
        ((md->ctypes[*eptr] & ctype_word) != 0);
      if ((*ecode++ == OP_WORD_BOUNDARY)?
           cur_is_word == prev_is_word : cur_is_word != prev_is_word)
        return FALSE;
      }
    break;

    case OP_ANY:
    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
      return FALSE;
    if (eptr++ >= md->end_subject) return FALSE;
#ifdef SUPPORT_UTF8
    if (md->utf8)
      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
#endif
    ecode++;
    break;

    case OP_NOT_DIGIT:
    if (eptr >= md->end_subject ||
       (md->ctypes[*eptr++] & ctype_digit) != 0)
      return FALSE;
    ecode++;
    break;

    case OP_DIGIT:
    if (eptr >= md->end_subject ||
       (md->ctypes[*eptr++] & ctype_digit) == 0)
      return FALSE;
    ecode++;
    break;

    case OP_NOT_WHITESPACE:
    if (eptr >= md->end_subject ||
       (md->ctypes[*eptr++] & ctype_space) != 0)
      return FALSE;
    ecode++;
    break;

    case OP_WHITESPACE:
    if (eptr >= md->end_subject ||
       (md->ctypes[*eptr++] & ctype_space) == 0)
      return FALSE;
    ecode++;
    break;

    case OP_NOT_WORDCHAR:
    if (eptr >= md->end_subject ||
       (md->ctypes[*eptr++] & ctype_word) != 0)
      return FALSE;
    ecode++;
    break;

    case OP_WORDCHAR:
    if (eptr >= md->end_subject ||
       (md->ctypes[*eptr++] & ctype_word) == 0)
      return FALSE;
    ecode++;
    break;

    case OP_REF:
      {
      int length;
      int offset = ecode[1] << 1;
      ecode += 2;

      length = (offset >= offset_top || md->offset_vector[offset] < 0)?
        md->end_subject - eptr + 1 :
        md->offset_vector[offset+1] - md->offset_vector[offset];

      switch (*ecode)
        {
        case OP_CRSTAR:
        case OP_CRMINSTAR:
        case OP_CRPLUS:
        case OP_CRMINPLUS:
        case OP_CRQUERY:
        case OP_CRMINQUERY:
        c = *ecode++ - OP_CRSTAR;
        minimize = (c & 1) != 0;
        min = rep_min[c];
        max = rep_max[c];
        if (max == 0) max = INT_MAX;
        break;

        case OP_CRRANGE:
        case OP_CRMINRANGE:
        minimize = (*ecode == OP_CRMINRANGE);
        min = (ecode[1] << 8) + ecode[2];
        max = (ecode[3] << 8) + ecode[4];
        if (max == 0) max = INT_MAX;
        ecode += 5;
        break;

        default:
        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
        eptr += length;
        continue;
        }

      if (length == 0) continue;

      for (i = 1; i <= min; i++)
        {
        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
        eptr += length;
        }

      if (min == max) continue;

      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          if (i >= max || !match_ref(offset, eptr, length, md, ims))
            return FALSE;
          eptr += length;
          }
        }

      else
        {
        const uschar *pp = eptr;
        for (i = min; i < max; i++)
          {
          if (!match_ref(offset, eptr, length, md, ims)) break;
          eptr += length;
          }
        while (eptr >= pp)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          eptr -= length;
          }
        return FALSE;
        }
      }

    case OP_CLASS:
      {
      const uschar *data = ecode + 1;
      ecode += 33;

      switch (*ecode)
        {
        case OP_CRSTAR:
        case OP_CRMINSTAR:
        case OP_CRPLUS:
        case OP_CRMINPLUS:
        case OP_CRQUERY:
        case OP_CRMINQUERY:
        c = *ecode++ - OP_CRSTAR;
        minimize = (c & 1) != 0;
        min = rep_min[c];
        max = rep_max[c];
        if (max == 0) max = INT_MAX;
        break;

        case OP_CRRANGE:
        case OP_CRMINRANGE:
        minimize = (*ecode == OP_CRMINRANGE);
        min = (ecode[1] << 8) + ecode[2];
        max = (ecode[3] << 8) + ecode[4];
        if (max == 0) max = INT_MAX;
        ecode += 5;
        break;

        default:
        min = max = 1;
        break;
        }

      for (i = 1; i <= min; i++)
        {
        if (eptr >= md->end_subject) return FALSE;
        GETCHARINC(c, eptr)

#ifdef SUPPORT_UTF8
        if (c > 255) return FALSE;
#endif

        if ((data[c/8] & (1 << (c&7))) != 0) continue;
        return FALSE;
        }

      if (min == max) continue;

      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          if (i >= max || eptr >= md->end_subject) return FALSE;
          GETCHARINC(c, eptr)

#ifdef SUPPORT_UTF8
          if (c > 255) return FALSE;
#endif
          if ((data[c/8] & (1 << (c&7))) != 0) continue;
          return FALSE;
          }
        }

      else
        {
        const uschar *pp = eptr;
        int len = 1;
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject) break;
          GETCHARLEN(c, eptr, len)

#ifdef SUPPORT_UTF8
          if (c > 255) break;
#endif
          if ((data[c/8] & (1 << (c&7))) == 0) break;
          eptr += len;
          }

        while (eptr >= pp)
          {
          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;

#ifdef SUPPORT_UTF8
          BACKCHAR(eptr)
#endif
          }
        return FALSE;
        }
      }

    case OP_CHARS:
      {
      register int length = ecode[1];
      ecode += 2;

      if (length > md->end_subject - eptr) return FALSE;
      if ((ims & PCRE_CASELESS) != 0)
        {
        while (length-- > 0)
          if (md->lcc[*ecode++] != md->lcc[*eptr++])
            return FALSE;
        }
      else
        {
        while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
        }
      }
    break;

    case OP_EXACT:
    min = max = (ecode[1] << 8) + ecode[2];
    ecode += 3;
    goto REPEATCHAR;

    case OP_UPTO:
    case OP_MINUPTO:
    min = 0;
    max = (ecode[1] << 8) + ecode[2];
    minimize = *ecode == OP_MINUPTO;
    ecode += 3;
    goto REPEATCHAR;

    case OP_STAR:
    case OP_MINSTAR:
    case OP_PLUS:
    case OP_MINPLUS:
    case OP_QUERY:
    case OP_MINQUERY:
    c = *ecode++ - OP_STAR;
    minimize = (c & 1) != 0;
    min = rep_min[c];
    max = rep_max[c];
    if (max == 0) max = INT_MAX;

    REPEATCHAR:
    if (min > md->end_subject - eptr) return FALSE;
    c = *ecode++;

    if ((ims & PCRE_CASELESS) != 0)
      {
      c = md->lcc[c];
      for (i = 1; i <= min; i++)
        if (c != md->lcc[*eptr++]) return FALSE;
      if (min == max) continue;
      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          if (i >= max || eptr >= md->end_subject ||
              c != md->lcc[*eptr++])
            return FALSE;
          }
        }
      else
        {
        const uschar *pp = eptr;
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
          eptr++;
          }
        while (eptr >= pp)
          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
        return FALSE;
        }
      }
    else
      {
      for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
      if (min == max) continue;
      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
          }
        }
      else
        {
        const uschar *pp = eptr;
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || c != *eptr) break;
          eptr++;
          }
        while (eptr >= pp)
         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
           return TRUE;
        return FALSE;
        }
      }

    case OP_NOT:
    if (eptr >= md->end_subject) return FALSE;
    ecode++;
    if ((ims & PCRE_CASELESS) != 0)
      {
      if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
      }
    else
      {
      if (*ecode++ == *eptr++) return FALSE;
      }
    break;

    case OP_NOTEXACT:
    min = max = (ecode[1] << 8) + ecode[2];
    ecode += 3;
    goto REPEATNOTCHAR;

    case OP_NOTUPTO:
    case OP_NOTMINUPTO:
    min = 0;
    max = (ecode[1] << 8) + ecode[2];
    minimize = *ecode == OP_NOTMINUPTO;
    ecode += 3;
    goto REPEATNOTCHAR;

    case OP_NOTSTAR:
    case OP_NOTMINSTAR:
    case OP_NOTPLUS:
    case OP_NOTMINPLUS:
    case OP_NOTQUERY:
    case OP_NOTMINQUERY:
    c = *ecode++ - OP_NOTSTAR;
    minimize = (c & 1) != 0;
    min = rep_min[c];
    max = rep_max[c];
    if (max == 0) max = INT_MAX;

    REPEATNOTCHAR:
    if (min > md->end_subject - eptr) return FALSE;
    c = *ecode++;

    if ((ims & PCRE_CASELESS) != 0)
      {
      c = md->lcc[c];
      for (i = 1; i <= min; i++)
        if (c == md->lcc[*eptr++]) return FALSE;
      if (min == max) continue;
      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          if (i >= max || eptr >= md->end_subject ||
              c == md->lcc[*eptr++])
            return FALSE;
          }
        }
      else
        {
        const uschar *pp = eptr;
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
          eptr++;
          }
        while (eptr >= pp)
          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
        return FALSE;
        }
      }

    else
      {
      for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
      if (min == max) continue;
      if (minimize)
        {
        for (i = min;; i++)
          {
          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
            return TRUE;
          if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
          }
        }
      else
        {
        const uschar *pp = eptr;
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || c == *eptr) break;
          eptr++;
          }
        while (eptr >= pp)
         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
           return TRUE;
        return FALSE;
        }
      }

    case OP_TYPEEXACT:
    min = max = (ecode[1] << 8) + ecode[2];
    minimize = TRUE;
    ecode += 3;
    goto REPEATTYPE;

    case OP_TYPEUPTO:
    case OP_TYPEMINUPTO:
    min = 0;
    max = (ecode[1] << 8) + ecode[2];
    minimize = *ecode == OP_TYPEMINUPTO;
    ecode += 3;
    goto REPEATTYPE;

    case OP_TYPESTAR:
    case OP_TYPEMINSTAR:
    case OP_TYPEPLUS:
    case OP_TYPEMINPLUS:
    case OP_TYPEQUERY:
    case OP_TYPEMINQUERY:
    c = *ecode++ - OP_TYPESTAR;
    minimize = (c & 1) != 0;
    min = rep_min[c];
    max = rep_max[c];
    if (max == 0) max = INT_MAX;

    REPEATTYPE:
    ctype = *ecode++;

    if (min > md->end_subject - eptr) return FALSE;
    if (min > 0) switch(ctype)
      {
      case OP_ANY:
#ifdef SUPPORT_UTF8
      if (md->utf8)
        {
        for (i = 1; i <= min; i++)
          {
          if (eptr >= md->end_subject ||
             (*eptr++ == '\n' && (ims & PCRE_DOTALL) == 0))
            return FALSE;
          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
          }
        break;
        }
#endif
      if ((ims & PCRE_DOTALL) == 0)
        { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
      else eptr += min;
      break;

      case OP_NOT_DIGIT:
      for (i = 1; i <= min; i++)
        if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
      break;

      case OP_DIGIT:
      for (i = 1; i <= min; i++)
        if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
      break;

      case OP_NOT_WHITESPACE:
      for (i = 1; i <= min; i++)
        if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
      break;

      case OP_WHITESPACE:
      for (i = 1; i <= min; i++)
        if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
      break;

      case OP_NOT_WORDCHAR:
      for (i = 1; i <= min; i++)
        if ((md->ctypes[*eptr++] & ctype_word) != 0)
          return FALSE;
      break;

      case OP_WORDCHAR:
      for (i = 1; i <= min; i++)
        if ((md->ctypes[*eptr++] & ctype_word) == 0)
          return FALSE;
      break;
      }

    if (min == max) continue;

    if (minimize)
      {
      for (i = min;; i++)
        {
        if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
        if (i >= max || eptr >= md->end_subject) return FALSE;

        c = *eptr++;
        switch(ctype)
          {
          case OP_ANY:
          if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
#ifdef SUPPORT_UTF8
          if (md->utf8)
            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
#endif
          break;

          case OP_NOT_DIGIT:
          if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
          break;

          case OP_DIGIT:
          if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
          break;

          case OP_NOT_WHITESPACE:
          if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
          break;

          case OP_WHITESPACE:
          if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;
          break;

          case OP_NOT_WORDCHAR:
          if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
          break;

          case OP_WORDCHAR:
          if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
          break;
          }
        }
      }

    else
      {
      const uschar *pp = eptr;
      switch(ctype)
        {
        case OP_ANY:

#ifdef SUPPORT_UTF8
        if (md->utf8 && max < INT_MAX)
          {
          if ((ims & PCRE_DOTALL) == 0)
            {
            for (i = min; i < max; i++)
              {
              if (eptr >= md->end_subject || *eptr++ == '\n') break;
              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
              }
            }
          else
            {
            for (i = min; i < max; i++)
              {
              eptr++;
              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
              }
            }
          break;
          }
#endif
        if ((ims & PCRE_DOTALL) == 0)
          {
          for (i = min; i < max; i++)
            {
            if (eptr >= md->end_subject || *eptr == '\n') break;
            eptr++;
            }
          }
        else
          {
          c = max - min;
          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
          eptr += c;
          }
        break;

        case OP_NOT_DIGIT:
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
            break;
          eptr++;
          }
        break;

        case OP_DIGIT:
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
            break;
          eptr++;
          }
        break;

        case OP_NOT_WHITESPACE:
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
            break;
          eptr++;
          }
        break;

        case OP_WHITESPACE:
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
            break;
          eptr++;
          }
        break;

        case OP_NOT_WORDCHAR:
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
            break;
          eptr++;
          }
        break;

        case OP_WORDCHAR:
        for (i = min; i < max; i++)
          {
          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
            break;
          eptr++;
          }
        break;
        }

      while (eptr >= pp)
        {
        if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
          return TRUE;
#ifdef SUPPORT_UTF8
        if (md->utf8)
          while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;
#endif
        }
      return FALSE;
      }

    default:
    md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
    return FALSE;
    }
  }
}

int
pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
  const char *subject, int length, int start_offset, int options, int *offsets,
  int offsetcount)
{
int resetcount, ocount;
int first_char = -1;
int req_char = -1;
int req_char2 = -1;
unsigned long int ims = 0;
match_data match_block;
const uschar *start_bits = NULL;
const uschar *start_match = (const uschar *)subject + start_offset;
const uschar *end_subject;
const uschar *req_char_ptr = start_match - 1;
const real_pcre *re = (const real_pcre *)external_re;
const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
BOOL using_temporary_offsets = FALSE;
BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
BOOL startline = (re->options & PCRE_STARTLINE) != 0;

if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;

if (re == NULL || subject == NULL ||
   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;

match_block.start_pattern = re->code;
match_block.start_subject = (const uschar *)subject;
match_block.end_subject = match_block.start_subject + length;
end_subject = match_block.end_subject;

match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
match_block.utf8 = (re->options & PCRE_UTF8) != 0;

match_block.notbol = (options & PCRE_NOTBOL) != 0;
match_block.noteol = (options & PCRE_NOTEOL) != 0;
match_block.notempty = (options & PCRE_NOTEMPTY) != 0;

match_block.errorcode = PCRE_ERROR_NOMATCH;

match_block.lcc = re->tables + lcc_offset;
match_block.ctypes = re->tables + ctypes_offset;

ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);

ocount = offsetcount - (offsetcount % 3);

if (re->top_backref > 0 && re->top_backref >= ocount/3)
  {
  ocount = re->top_backref * 3 + 3;
  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
  using_temporary_offsets = TRUE;
  }
else match_block.offset_vector = offsets;

match_block.offset_end = ocount;
match_block.offset_max = (2*ocount)/3;
match_block.offset_overflow = FALSE;

resetcount = 2 + re->top_bracket * 2;
if (resetcount > offsetcount) resetcount = ocount;

if (match_block.offset_vector != NULL)
  {
  register int *iptr = match_block.offset_vector + ocount;
  register int *iend = iptr - resetcount/2 + 1;
  while (--iptr >= iend) *iptr = -1;
  }

if (!anchored)
  {
  if ((re->options & PCRE_FIRSTSET) != 0)
    {
    first_char = re->first_char;
    if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
    }
  else
    if (!startline && extra != NULL &&
      (extra->options & PCRE_STUDY_MAPPED) != 0)
        start_bits = extra->start_bits;
  }

if ((re->options & PCRE_REQCHSET) != 0)
  {
  req_char = re->req_char;
  req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
    (re->tables + fcc_offset)[req_char] : req_char;
  }

do
  {
  int rc;
  register int *iptr = match_block.offset_vector;
  register int *iend = iptr + resetcount;

  while (iptr < iend) *iptr++ = -1;

  if (first_char >= 0)
    {
    if ((ims & PCRE_CASELESS) != 0)
      while (start_match < end_subject &&
             match_block.lcc[*start_match] != first_char)
        start_match++;
    else
      while (start_match < end_subject && *start_match != first_char)
        start_match++;
    }

  else if (startline)
    {
    if (start_match > match_block.start_subject + start_offset)
      {
      while (start_match < end_subject && start_match[-1] != '\n')
        start_match++;
      }
    }

  else if (start_bits != NULL)
    {
    while (start_match < end_subject)
      {
      register int c = *start_match;
      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
      }
    }

  if (req_char >= 0)
    {
    register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);

    if (p > req_char_ptr)
      {
      if (req_char == req_char2)
        {
        while (p < end_subject)
          {
          if (*p++ == req_char) { p--; break; }
          }
        }
      else
        {
        while (p < end_subject)
          {
          register int pp = *p++;
          if (pp == req_char || pp == req_char2) { p--; break; }
          }
        }
      if (p >= end_subject) break;

      req_char_ptr = p;
      }
    }

  match_block.start_match = start_match;
  if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
    continue;

  if (using_temporary_offsets)
    {
    if (offsetcount >= 4)
      {
      memcpy(offsets + 2, match_block.offset_vector + 2,
        (offsetcount - 2) * sizeof(int));
      }
    if (match_block.end_offset_top > offsetcount)
      match_block.offset_overflow = TRUE;

    (pcre_free)(match_block.offset_vector);
    }

  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;

  if (match_block.offset_end < 2) rc = 0; else
    {
    offsets[0] = start_match - match_block.start_subject;
    offsets[1] = match_block.end_match_ptr - match_block.start_subject;
    }

  return rc;
  }

while (!anchored &&
       match_block.errorcode == PCRE_ERROR_NOMATCH &&
       start_match++ < end_subject);

if (using_temporary_offsets)
  {
  (pcre_free)(match_block.offset_vector);
  }

return match_block.errorcode;
}
#endif  /* HAVE_PCRE */
analog-ce-6.0.17/src/pcre/pcre.h000066400000000000000000000040401406366436600162710ustar00rootroot00000000000000/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* This file contains code from Philip Hazel's PCRE library, heavily modified
   by Stephen Turner for use in analog. See the file LICENSE in this directory
   for details. */

/* Copyright (c) 1997-2000 University of Cambridge */

#ifdef HAVE_PCRE
#include 
#else
#ifndef _PCRE_H
#define _PCRE_H

#define PCRE_MAJOR 3
#define PCRE_MINOR 4
#define PCRE_DATE  22-Aug-2000

#define SUPPORT_UTF8

#include 

#ifdef __cplusplus
extern "C" {
#endif

#define PCRE_CASELESS        0x0001
#define PCRE_MULTILINE       0x0002
#define PCRE_DOTALL          0x0004
#define PCRE_EXTENDED        0x0008
#define PCRE_ANCHORED        0x0010
#define PCRE_DOLLAR_ENDONLY  0x0020
#define PCRE_EXTRA           0x0040
#define PCRE_NOTBOL          0x0080
#define PCRE_NOTEOL          0x0100
#define PCRE_UNGREEDY        0x0200
#define PCRE_NOTEMPTY        0x0400
#define PCRE_UTF8            0x0800

#define PCRE_ERROR_NOMATCH        (-1)
#define PCRE_ERROR_NULL           (-2)
#define PCRE_ERROR_BADOPTION      (-3)
#define PCRE_ERROR_BADMAGIC       (-4)
#define PCRE_ERROR_UNKNOWN_NODE   (-5)
#define PCRE_ERROR_NOMEMORY       (-6)
#define PCRE_ERROR_NOSUBSTRING    (-7)

#define PCRE_INFO_OPTIONS         0
#define PCRE_INFO_SIZE            1
#define PCRE_INFO_CAPTURECOUNT    2
#define PCRE_INFO_BACKREFMAX      3
#define PCRE_INFO_FIRSTCHAR       4
#define PCRE_INFO_FIRSTTABLE      5
#define PCRE_INFO_LASTLITERAL     6

typedef void pcre;
typedef void pcre_extra;

extern void *(*pcre_malloc)(size_t);
extern void  (*pcre_free)(void *);

extern pcre *pcre_compile(const char *, int, const char **, int *,
              const unsigned char *);
extern int  pcre_exec(const pcre *, const pcre_extra *, const char *,
              int, int, int, int *, int);
extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);

#ifdef __cplusplus
}  /* extern "C" */
#endif

#endif  /* _PCRE_H */
#endif  /* HAVE_PCRE */
analog-ce-6.0.17/src/pcre/pcrechar.h000066400000000000000000000150401406366436600171310ustar00rootroot00000000000000/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* This file contains code from Philip Hazel's PCRE library, heavily modified
   by Stephen Turner for use in analog. See the file LICENSE in this directory
   for details. */

/* Copyright (c) 1997-2000 University of Cambridge */

#ifndef HAVE_PCRE
static unsigned char pcre_default_tables[] = {

/* This table is a lower casing table. */

    0,  1,  2,  3,  4,  5,  6,  7,
    8,  9, 10, 11, 12, 13, 14, 15,
   16, 17, 18, 19, 20, 21, 22, 23,
   24, 25, 26, 27, 28, 29, 30, 31,
   32, 33, 34, 35, 36, 37, 38, 39,
   40, 41, 42, 43, 44, 45, 46, 47,
   48, 49, 50, 51, 52, 53, 54, 55,
   56, 57, 58, 59, 60, 61, 62, 63,
   64, 97, 98, 99,100,101,102,103,
  104,105,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,
  120,121,122, 91, 92, 93, 94, 95,
   96, 97, 98, 99,100,101,102,103,
  104,105,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,
  120,121,122,123,124,125,126,127,
  128,129,130,131,132,133,134,135,
  136,137,138,139,140,141,142,143,
  144,145,146,147,148,149,150,151,
  152,153,154,155,156,157,158,159,
  160,161,162,163,164,165,166,167,
  168,169,170,171,172,173,174,175,
  176,177,178,179,180,181,182,183,
  184,185,186,187,188,189,190,191,
  192,193,194,195,196,197,198,199,
  200,201,202,203,204,205,206,207,
  208,209,210,211,212,213,214,215,
  216,217,218,219,220,221,222,223,
  224,225,226,227,228,229,230,231,
  232,233,234,235,236,237,238,239,
  240,241,242,243,244,245,246,247,
  248,249,250,251,252,253,254,255,

/* This table is a case flipping table. */

    0,  1,  2,  3,  4,  5,  6,  7,
    8,  9, 10, 11, 12, 13, 14, 15,
   16, 17, 18, 19, 20, 21, 22, 23,
   24, 25, 26, 27, 28, 29, 30, 31,
   32, 33, 34, 35, 36, 37, 38, 39,
   40, 41, 42, 43, 44, 45, 46, 47,
   48, 49, 50, 51, 52, 53, 54, 55,
   56, 57, 58, 59, 60, 61, 62, 63,
   64, 97, 98, 99,100,101,102,103,
  104,105,106,107,108,109,110,111,
  112,113,114,115,116,117,118,119,
  120,121,122, 91, 92, 93, 94, 95,
   96, 65, 66, 67, 68, 69, 70, 71,
   72, 73, 74, 75, 76, 77, 78, 79,
   80, 81, 82, 83, 84, 85, 86, 87,
   88, 89, 90,123,124,125,126,127,
  128,129,130,131,132,133,134,135,
  136,137,138,139,140,141,142,143,
  144,145,146,147,148,149,150,151,
  152,153,154,155,156,157,158,159,
  160,161,162,163,164,165,166,167,
  168,169,170,171,172,173,174,175,
  176,177,178,179,180,181,182,183,
  184,185,186,187,188,189,190,191,
  192,193,194,195,196,197,198,199,
  200,201,202,203,204,205,206,207,
  208,209,210,211,212,213,214,215,
  216,217,218,219,220,221,222,223,
  224,225,226,227,228,229,230,231,
  232,233,234,235,236,237,238,239,
  240,241,242,243,244,245,246,247,
  248,249,250,251,252,253,254,255,

/* This table contains bit maps for various character classes. */

  0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
  0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
  0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,
  0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/* This table identifies various classes of character by individual bits:
  0x01   white space character
  0x02   letter
  0x04   decimal digit
  0x08   hexadecimal digit
  0x10   alphanumeric or '_'
  0x80   regular expression metacharacter or binary zero
*/

  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
  0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, /*   8- 15 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
  0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /*    - '  */
  0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /*  ( - /  */
  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /*  8 - ?  */
  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  @ - G  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  H - O  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  P - W  */
  0x12,0x12,0x12,0x80,0x00,0x00,0x80,0x10, /*  X - _  */
  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  ` - g  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  h - o  */
  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  p - w  */
  0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /*  x -127 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */

#endif  /* HAVE_PCRE */
analog-ce-6.0.17/src/pcre/pcreintl.h000066400000000000000000000133051406366436600171640ustar00rootroot00000000000000/*************************************************
*      Perl-Compatible Regular Expressions       *
*************************************************/

/* This file contains code from Philip Hazel's PCRE library, heavily modified
   by Stephen Turner for use in analog. See the file LICENSE in this directory
   for details. */

/* Copyright (c) 1997-2000 University of Cambridge */

#ifndef HAVE_PCRE
#include 
#include 
#include 
#include 
#include 
#include 
#include "pcre.h"

#ifndef offsetof
#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
#endif

#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)

#define PCRE_FIRSTSET      0x40000000
#define PCRE_REQCHSET      0x20000000
#define PCRE_STARTLINE     0x10000000
#define PCRE_INGROUP       0x08000000
#define PCRE_ICHANGED      0x04000000

#define PCRE_STUDY_MAPPED   0x01

#define PUBLIC_OPTIONS \
  (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)

#define PUBLIC_EXEC_OPTIONS \
  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)

#define PUBLIC_STUDY_OPTIONS 0

#define MAGIC_NUMBER  0x50435245UL

typedef int BOOL;

#undef FALSE
#define FALSE   0
#undef TRUE
#define TRUE    1

enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
       ESC_Z, ESC_z, ESC_REF };

enum {
  OP_END,
  OP_SOD,
  OP_NOT_WORD_BOUNDARY,
  OP_WORD_BOUNDARY,
  OP_NOT_DIGIT,
  OP_DIGIT,
  OP_NOT_WHITESPACE,
  OP_WHITESPACE,
  OP_NOT_WORDCHAR,
  OP_WORDCHAR,
  OP_EODN,
  OP_EOD,
  OP_OPT,
  OP_CIRC,
  OP_DOLL,
  OP_ANY,
  OP_CHARS,
  OP_NOT,
  OP_STAR,
  OP_MINSTAR,
  OP_PLUS,
  OP_MINPLUS,
  OP_QUERY,
  OP_MINQUERY,
  OP_UPTO,
  OP_MINUPTO,
  OP_EXACT,
  OP_NOTSTAR,
  OP_NOTMINSTAR,
  OP_NOTPLUS,
  OP_NOTMINPLUS,
  OP_NOTQUERY,
  OP_NOTMINQUERY,
  OP_NOTUPTO,
  OP_NOTMINUPTO,
  OP_NOTEXACT,
  OP_TYPESTAR,
  OP_TYPEMINSTAR,
  OP_TYPEPLUS,
  OP_TYPEMINPLUS,
  OP_TYPEQUERY,
  OP_TYPEMINQUERY,
  OP_TYPEUPTO,
  OP_TYPEMINUPTO,
  OP_TYPEEXACT,
  OP_CRSTAR,
  OP_CRMINSTAR,
  OP_CRPLUS,
  OP_CRMINPLUS,
  OP_CRQUERY,
  OP_CRMINQUERY,
  OP_CRRANGE,
  OP_CRMINRANGE,
  OP_CLASS,
  OP_REF,
  OP_RECURSE,
  OP_ALT,
  OP_KET,
  OP_KETRMAX,
  OP_KETRMIN,
  OP_ASSERT,
  OP_ASSERT_NOT,
  OP_ASSERTBACK,
  OP_ASSERTBACK_NOT,
  OP_REVERSE,
  OP_ONCE,
  OP_COND,
  OP_CREF,
  OP_BRAZERO,
  OP_BRAMINZERO,
  OP_BRA
};

#define EXTRACT_MAX  99

#define ERR1  "\\ at end of pattern"
#define ERR2  "\\c at end of pattern"
#define ERR3  "unrecognized character follows \\"
#define ERR4  "numbers out of order in {} quantifier"
#define ERR5  "number too big in {} quantifier"
#define ERR6  "missing terminating ] for character class"
#define ERR7  "invalid escape sequence in character class"
#define ERR8  "range out of order in character class"
#define ERR9  "nothing to repeat"
#define ERR10 "operand of unlimited repeat could match the empty string"
#define ERR11 "internal error: unexpected repeat"
#define ERR12 "unrecognized character after (?"
#define ERR13 "too many capturing parenthesized sub-patterns"
#define ERR14 "missing )"
#define ERR15 "back reference to non-existent subpattern"
#define ERR16 "erroffset passed as NULL"
#define ERR17 "unknown option bit(s) set"
#define ERR18 "missing ) after comment"
#define ERR19 "too many sets of parentheses"
#define ERR20 "regular expression too large"
#define ERR21 "failed to get memory"
#define ERR22 "unmatched parentheses"
#define ERR23 "internal error: code overflow"
#define ERR24 "unrecognized character after (?<"
#define ERR25 "lookbehind assertion is not fixed length"
#define ERR26 "malformed number after (?("
#define ERR27 "conditional group contains more than two branches"
#define ERR28 "assertion expected after (?("
#define ERR29 "(?p must be followed by )"
#define ERR30 "unknown POSIX class name"
#define ERR31 "POSIX collating elements are not supported"
#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
#define ERR33 "characters with values > 255 are not yet supported in classes"
#define ERR34 "character value in \\x{...} sequence is too large"
#define ERR35 "invalid condition (?(0)"

typedef unsigned char uschar;

typedef struct real_pcre {
  unsigned long int magic_number;
  size_t size;
  const unsigned char *tables;
  unsigned long int options;
  uschar top_bracket;
  uschar top_backref;
  uschar first_char;
  uschar req_char;
  uschar code[1];
} real_pcre;

typedef struct real_pcre_extra {
  uschar options;
  uschar start_bits[32];
} real_pcre_extra;

typedef struct compile_data {
  const uschar *lcc;
  const uschar *fcc;
  const uschar *cbits;
  const uschar *ctypes;
} compile_data;

typedef struct match_data {
  int    errorcode;
  int   *offset_vector;
  int    offset_end;
  int    offset_max;
  const uschar *lcc;
  const uschar *ctypes;
  BOOL   offset_overflow;
  BOOL   notbol;
  BOOL   noteol;
  BOOL   utf8;
  BOOL   endonly;
  BOOL   notempty;
  const uschar *start_pattern;
  const uschar *start_subject;
  const uschar *end_subject;
  const uschar *start_match;
  const uschar *end_match_ptr;
  int    end_offset_top;
} match_data;

#define ctype_space   0x01
#define ctype_letter  0x02
#define ctype_digit   0x04
#define ctype_xdigit  0x08
#define ctype_word    0x10
#define ctype_meta    0x80

#define cbit_space     0
#define cbit_xdigit   32
#define cbit_digit    64
#define cbit_upper    96
#define cbit_lower   128
#define cbit_word    160
#define cbit_graph   192
#define cbit_print   224
#define cbit_punct   256
#define cbit_cntrl   288
#define cbit_length  320

#define lcc_offset      0
#define fcc_offset    256
#define cbits_offset  512
#define ctypes_offset (cbits_offset + cbit_length)
#define tables_length (ctypes_offset + 256)

#endif  /* HAVE_PCRE */
analog-ce-6.0.17/src/process.c000066400000000000000000000323061406366436600160660ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** process.c; process some data ***/

#include "anlghea3.h"

void process_data(Logfile *logfilep, Hashtable **hash,
		  Arraydata **arraydata, choice *count, choice *code2type,
		  choice datacols[ITEM_NUMBER][OUTCOME_NUMBER][DATACOLS_NUMBER][2],
		  choice data2cols[ITEM_NUMBER][DATA_NUMBER],
		  unsigned int *no_cols, Include **wanthead,
		  Include *ispagehead, Alias **aliashead, Include *argshead,
		  Include *refargshead, Dateman *dman, Tree **tree,
		  Derv **derv, choice *alltrees, choice *alldervs,
		  choice *lowmem, logical case_insensitive,
		  logical usercase_insensitive, unsigned char convfloor,
		  logical multibyte, char *dirsuffix,
		  unsigned int dirsufflength, unsigned int granularity) {
  extern unsigned int year, month, date, hour, minute, code;
  extern unsigned long unixtime, proctime;
  extern char am;
  extern double bytes;
  extern Memman mm[], mmq, mms, *amemman;
  extern choice *rep2type;
  extern Hashentry *unwanted_entry, *blank_entry;
  extern Hashindex *dummy_item;

  static Hashindex *gp[ITEM_NUMBER];
  unsigned long data[DATA2_NUMBER];
  Hashentry *item[ITEM_NUMBER];
  logical wanttree[ITEM_NUMBER];
  logical isitpage, last7;
  choice ispage = UNSET;
  choice wanted = TRUE, rc, outcome;
  timecode_t timecode = FIRST_TIME;
  char *name, *namestart, *nameend;
  size_t len;
  choice i, j, k;

  /*** check whether this line is wanted ***/

  if (count[INP_CODE] != 0) {
    if (code == IGNORE_CODE) {
      for (j = 0; j < ITEM_NUMBER; j++) {   /* reset strings */
	if (count[j] != 0)
	  mm[j].next_pos = mm[j].curr_pos;
      }
      mmq.next_pos = mmq.curr_pos;
      mms.next_pos = mms.curr_pos;
      logfilep->data[LOGDATA_UNKNOWN]++;
      return;
    }
    else if (code2type[code] == UNWANTED)
      wanted = FALSE;
  }
  if (wanted && count[INP_DATE] > 0) {
    if (count[INP_UNIXTIME])
      wanted = wantunixtime(&timecode, dman, unixtime, logfilep->tz);
    else {
      if (count[INP_AM]) {
	if (hour > 12) {
	  corrupt_line(logfilep, "Hour greater than 12", -1);
	  return;
	}
	else if (hour == 12)
	  hour = 0;
	if (am == 'p')
	  hour += 12;
      }
      wanted = wantdate(&timecode, dman, hour, minute, date, month, year,
			logfilep->tz);
    }
    if (wanted == ERR) { /* corrupt date */
      corrupt_line(logfilep, "Corrupt date or time", -1);
      return;
    }
  }  /* end count[INP_DATE] > 0 */
  for (i = 0; i < ITEM_NUMBER; i++) {
    wanttree[i] = FALSE;
    if (!wanted) {
      for (j = i; j < ITEM_NUMBER; j++) {  /* reset not-yet-hashed strings */
	if (count[j] != 0)                 /* NB i is now (unwanted i) + 1 */
	  mm[j].next_pos = mm[j].curr_pos;
      }
      mmq.next_pos = mmq.curr_pos;
      mms.next_pos = mms.curr_pos;
      logfilep->data[LOGDATA_UNWANTED]++;
      return;
    }
    if (i == ITEM_HOST)
      prealiasS(&(mm[ITEM_HOST]), &mms);
    name = (char *)(mm[i].curr_pos);
    if (count[i] == 0 || IS_EMPTY_STRING(name) ||
	(name[0] == '-' && name[1] == '\0')) {
      item[i] = blank_entry; /* or unwanted_; but we get wanted right anyway */
      wanted = (wanthead[i] == NULL || included("", FALSE, wanthead[i]));
      /* wanthead[i] == NULL is tested again in included() but it often saves
	 a call to that function, because blankness is common. */
    }
    else {
      if (i == ITEM_FILE || i == ITEM_REFERRER) {
	if ((j = prealias(&(mm[i]), &(mm[ITEM_VHOST]), item[ITEM_VHOST], &mmq,
			  (logical)((i == ITEM_FILE)?case_insensitive:FALSE),
			  (i == ITEM_FILE)?(logfilep->prefix):NULL,
			  logfilep->prefixlen, logfilep->pvpos,
			  (i == ITEM_FILE)?argshead:refargshead)) < 0) {
	  if (j == -1)
	    corrupt_line(logfilep,
			 "%v in file prefix but no VHOST in line", -1);
	  else
	    corrupt_line(logfilep, "Filename too long", -1);
	  return;
	}
      }
      if (lowmem[i] == 0) {
	if (gp[i] == NULL || !STREQ(name, gp[i]->name)) {
	  gp[i] = hashfind(&mm[i], &(hash[i]), no_cols[i], wanthead[i], UNSET,
			   ispagehead, aliashead[i], dirsuffix, dirsufflength,
			   usercase_insensitive, 0, FALSE, i, FALSE);
	}     /* if name the same as last time, don't need */
	else  /* to hashfind again, or save the name */
	  mm[i].next_pos = mm[i].curr_pos;
	item[i] = (Hashentry *)(gp[i]->other);	  
	wanted = (choice)(ENTRY_WANTED(item[i]));
      }

      else if (lowmem[i] == 1) {
	if ((rc = do_alias(name, amemman, aliashead[i], dirsuffix,
			   dirsufflength, usercase_insensitive, 0, FALSE, i))
	    == FALSE) {
	  item[i] = hashfind(&mm[i], &(hash[i]), no_cols[i], wanthead[i],
			     UNSET, ispagehead, NULL, dirsuffix, dirsufflength,
			     usercase_insensitive, 0, FALSE, i, TRUE)->own;
	}
	else if (rc == TRUE) {
	  mm[i].next_pos = mm[i].curr_pos;  /* don't save string */
	  item[i] = hashfind(amemman, &(hash[i]), no_cols[i], wanthead[i],
			     UNSET, ispagehead, NULL, dirsuffix, dirsufflength,
			     usercase_insensitive, 0, FALSE, i, TRUE)->own;
	}
	else { /* rc == ERR */
	  mm[i].next_pos = mm[i].curr_pos;
	  if (included("", FALSE, wanthead[i]))
	    item[i] = blank_entry;
	  else
	    item[i] = unwanted_entry;
	}
	wanted = (choice)(ENTRY_WANTED(item[i]));
      }

      else { /* lowmem[i] >= 2 */
	if ((rc = do_alias(name, amemman, aliashead[i], dirsuffix,
			   dirsufflength, usercase_insensitive, 0, FALSE, i))
	    == TRUE) {
	  mm[i].next_pos = mm[i].curr_pos;  /* don't save old string */
	  len = strlen((char *)(amemman->curr_pos));
	  memcpy(submalloc(&(mm[i]), len + 1), amemman->curr_pos, len + 1);
	  name = (char *)(mm[i].curr_pos); /* which might have changed */
	  amemman->next_pos = amemman->curr_pos;
	}
	if (rc == ERR) {
	  if (included("", FALSE, wanthead[i])) {
	    item[i] = blank_entry;
	    if (i == ITEM_FILE)
	      ispage = FALSE;
	  }
	  else
	    wanted = FALSE;
	  mm[i].next_pos = mm[i].curr_pos;
	}
	else {
	  isitpage = pageq(name, ispagehead, i);
	  if (i == ITEM_FILE)
	    ispage = (choice)isitpage;
	  if (included(name, isitpage, wanthead[i])) {
	    if (lowmem[i] == 2) {
	      item[i] = hashfind(&(mm[i]), &(hash[i]), no_cols[i], wanthead[i],
				 isitpage, ispagehead, NULL, dirsuffix,
				 dirsufflength, usercase_insensitive, 0, FALSE,
				 i, TRUE)->own;
	    }
	    else {
	      item[i] = blank_entry;
	      wanttree[i] = TRUE;
	      mm[i].next_pos = mm[i].curr_pos;
	    }
	  }
	  else {
	    wanted = FALSE;
	    mm[i].next_pos = mm[i].curr_pos;
	  }
	}
      }  /* end lowmem[i] >= 2 */
    }
  }      /* end for i */
  if (!wanted) {
    logfilep->data[LOGDATA_UNWANTED]++;
    return;
  }

  /*** now add it to the hash tables ***/

  /* add to logfile from and to if wanted, whatever status code */
  if (timecode != FIRST_TIME)
    logfilep->from = MIN(logfilep->from, timecode);
  logfilep->to = MAX(logfilep->to, timecode);
  last7 = (timecode > dman->last7from && timecode <= dman->last7to);
  if (ispage == UNSET)            /* NB blank_entry has ispage FALSE */
    ispage = (choice)(item[ITEM_FILE]->ispage);
  if (count[INP_BYTES] == 0)
    bytes = 0;
  if (count[INP_CODE] == 0) {
    outcome = SUCCESS;
    if (count[ITEM_FILE] == 2) {
      logfilep->data[LOGDATA_SUCC]++;
      logfilep->data[LOGDATA_SUCC7] += (unsigned long)last7;
      logfilep->data[LOGDATA_PAGES] += (unsigned long)ispage;
      logfilep->data[LOGDATA_PAGES7] +=
	(unsigned long)((logical)ispage && last7);
    }
    else {
      logfilep->data[LOGDATA_UNKNOWN]++;
      logfilep->data[LOGDATA_UNKNOWN7] += (unsigned long)last7;
    }
  }
  else if (code <= 199) {
    outcome = INFO;
    logfilep->data[LOGDATA_INFO]++;
    logfilep->data[LOGDATA_INFO7] += (unsigned long)last7;
  }
  else switch (outcome = code2type[code]) {
  case SUCCESS:
    logfilep->data[LOGDATA_SUCC]++;
    logfilep->data[LOGDATA_SUCC7] += (unsigned long)last7;
    logfilep->data[LOGDATA_PAGES] += (unsigned long)ispage;
    logfilep->data[LOGDATA_PAGES7] +=
      (unsigned long)((logical)ispage && last7);
    break;
  case FAILURE:
    logfilep->data[LOGDATA_FAIL]++;
    logfilep->data[LOGDATA_FAIL7] += (unsigned long)last7;
    break;
  case REDIRECT:
    logfilep->data[LOGDATA_REDIR]++;
    logfilep->data[LOGDATA_REDIR7] += (unsigned long)last7;
    break;
  case INFO:
    logfilep->data[LOGDATA_INFO]++;
    logfilep->data[LOGDATA_INFO7] += (unsigned long)last7;
    break;
  }

  /* NB any change in what to count when will require corresponding change to
     end of strtoinfmt() and to fmt munching in correct() */
  if (count[INP_CODE] == 2)
    arrayscore(arraydata[REP_CODE - FIRST_ARRAYREP], code, 1,
	       (unsigned long)last7, 0, 0, 0., 0., timecode);
  if (outcome != INFO) {
    if (outcome == SUCCESS) {
      if (count[INP_DATE] == 2)  /* only if file present: see strtoinfmt() */
	datehash(timecode, dman, 1, (unsigned long)ispage, bytes, granularity);
      if (count[INP_BYTES] == 2) {
	arrayscore(arraydata[REP_SIZE - FIRST_ARRAYREP], bytes, 1,
		   (unsigned long)last7, (unsigned long)ispage,
		   (unsigned long)((logical)ispage && last7), bytes,
		   last7?bytes:0., timecode);
	logfilep->bytes += bytes;
	if (last7)
	  logfilep->bytes7 += bytes;
      }
      if (count[INP_PROCTIME] == 2)
	arrayscore(arraydata[REP_PROCTIME - FIRST_ARRAYREP], proctime, 1,
		   (unsigned long)last7, (unsigned long)ispage,
		   (unsigned long)((logical)ispage && last7), bytes,
		   last7?bytes:0., timecode);

      if (alltrees[0] != REP_NUMBER || alldervs[0] != REP_NUMBER) {
	/* for LOWMEM 3, run through alltrees then alldervs */
	/* NB these (POSSTREE/POSSDERV in init.c) only count successes */
	for (k = 0; k <= 1; k++) {
	  for (i = 0; (k?(alldervs[i]):(alltrees[i])) != REP_NUMBER; i++) {
	    j = rep2type[k?(alldervs[i]):(alltrees[i])];
	    if (wanttree[j]) {
	      dummy_item->name = mm[j].curr_pos;
	      /* mm.curr_pos is marked for deletion, but still intact at
		 present */
	      dummy_item->own->data[data2cols[j][REQUESTS]] = 1;
	      if (data2cols[j][REQUESTS7] >= 0)  /* see comment in genrep() */
		dummy_item->own->data[data2cols[j][REQUESTS7]] =
		  (unsigned long)last7;
	      if (data2cols[j][PAGES] >= 0)
		dummy_item->own->data[data2cols[j][PAGES]] =
		  (unsigned long)ispage;
	      if (data2cols[j][PAGES7] >= 0)
		dummy_item->own->data[data2cols[j][PAGES7]] =
		  (unsigned long)((logical)ispage && last7);
	      if (data2cols[j][SUCCDATE] >= 0)
		dummy_item->own->data[data2cols[j][SUCCDATE]] = timecode;
	      if (data2cols[j][SUCCFIRSTD] >= 0)
		dummy_item->own->data[data2cols[j][SUCCFIRSTD]] = timecode;
	      dummy_item->own->bytes = bytes;
	      dummy_item->own->bytes7 = last7?bytes:0.;
	      if (k)
		makederived(derv[alldervs[i] - FIRST_DERVREP], dummy_item,
			    NULL, convfloor, multibyte, alldervs[i],
			    datacols[j], no_cols[j]);
	      else {
		namestart = NULL;
		tree[G(alltrees[i])]->cutfn(&namestart, &nameend,
					    dummy_item->name, FALSE);
		(void)treefind(namestart, nameend,
			       &(tree[G(alltrees[i])]->tree), dummy_item,
			       tree[G(alltrees[i])]->cutfn, FALSE, TRUE, FALSE,
			       tree[G(alltrees[i])]->space, datacols[j],
			       no_cols[j]);
	      }
	    }
	  }
	}
      }  /* there are trees or dervs */
    }    /* outcome == SUCCESS */
    data[REQUESTS2] = 1;
    data[REQUESTS72] = (unsigned long)last7;
    data[PAGES2] = (unsigned long)ispage;
    data[PAGES72] = (unsigned long)((logical)ispage && last7);
    data[DATE2] = timecode;
    data[FIRSTD2] = timecode;
    for (i = 0; i < ITEM_NUMBER; i++) {
      if (count[i] == 2 && !ENTRY_BLANK(item[i]))
	hashscore(item[i], data, datacols[i][outcome], outcome, bytes);
    }
  }      /* end if outcome != INFO */
}

void corrupt_line(Logfile *logfilep, char *message, ptrdiff_t n) {
  extern FILE *errfile;
  extern char *debug_args, *record_start, *pos;

  pos = record_start;
  parsenonnewline(logfilep);  /* skip to after next newline */
  *pos = '\0';
  if (pos - record_start > 500)  /* debug might only handle 509 chars */
    *(record_start + 500) = '\0';
  debug('C', "%s", record_start);
  if (n < 0)
    debug('C', "  (%s)", message);
  else if (strchr(debug_args, 'C')) {
    fprintf(errfile, "C: ");
    for ( ; n >= 10; n -= 10)
      fprintf(errfile, "          ");
    for ( ; n > 0; n--)
      fputc(' ', errfile);
    fprintf(errfile, "*\n");
  }
  logfilep->data[LOGDATA_CORRUPT]++;
  *pos = '\n';
  (void)parsenewline(logfilep, NULL, '\0');
}

void arrayscore(Arraydata *array, double amount, unsigned long reqs,
		unsigned long reqs7, unsigned long pages, unsigned long pages7,
		double bytes, double bytes7, timecode_t timecode) {
  choice i;
  
  for (i = 0; ; i++) {  /* last threshold must be -1 to ensure termination */
    if (amount <= array[i].threshold || array[i].threshold < -0.5) {
      array[i].reqs += reqs;
      array[i].reqs7 += reqs7;
      array[i].pages += pages;
      array[i].pages7 += pages7;
      array[i].bytes += bytes;
      array[i].bytes7 += bytes7;
      array[i].lastdate = MAX(array[i].lastdate, timecode);
      array[i].firstdate = MIN(array[i].firstdate, timecode);
      return;
    }
  }
}
analog-ce-6.0.17/src/settings.c000066400000000000000000000652541406366436600162600ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** settings.c; report variable settings */

#include "anlghea3.h"

void report_vbles(Options *op) {
  extern char *item_type[];
  extern int stz;
  extern char *debug_args, *warn_args;
  extern unsigned long progressfreq;
  extern logical cgi, anywarns;
#ifndef NOPIPES
  extern Strpairlist *uncompresshead;
#endif
  int i;

  if (cgi)
    printf("Content-Type: text/plain\n\n");

  printf("This is analog version %s\n", VERSION);
  printf("For more information on analog see docs/Readme.html or %s\n\n",
	 ANALOGURL);

  anywarns = TRUE;
  report_compile();
  report_conffiles(op->conffilelist);
  report_debug("Warning types", warn_args, "CDEFLMR");
  report_debug("Debugging types", debug_args, "CDFSUV");
  if (progressfreq == 1)
    printf("Reporting progress every line\n");
  else if (progressfreq > 0)
    printf("Reporting progress every %lu lines\n", progressfreq);
  report_logfiles(op->miscopts.logfile[1], TRUE);
  report_logfiles(op->miscopts.logfile[0], FALSE);
#ifndef NOPIPES
  report_strpairlist(uncompresshead, "Uncompressing files", "by ");
#endif
  report_fromto(&(op->dman));
  if (stz != 0)
    printf("Local computer time offset by %s%d minutes\n", (stz > 0)?"+":"",
	   stz);
  for (i = 0; i < ITEM_NUMBER; i++)
    report_want(op->wanthead[i], item_type[i], "");
  report_scwant(op->code2type);
  report_want(op->ispagehead, "as pages", "");
  report_want(op->argshead, "search arguments", "");
  report_want(op->refargshead, "referrer search arguments", "");
  if (op->outopts.repq[REP_OS])
    report_want(op->robots, "as robots", "");
  if (op->outopts.repq[REP_SEARCHREP] || op->outopts.repq[REP_SEARCHSUM])
    report_strpairlist(op->searchengines, "Search engines", "arg=");
  if (op->outopts.repq[REP_INTSEARCHREP] || op->outopts.repq[REP_INTSEARCHSUM])
    report_strpairlist(op->intsearchengines, "Internal search engines",
		       "arg=");
  for (i = 0; i < ITEM_NUMBER; i++)
    report_alias(op->aliashead[i], item_type[i], "");
  report_lowmem(op->miscopts.lowmem);
#ifndef NODNS
  report_dns();
#endif
  printf("Filenames are case %s\n",
	 (op->miscopts.case_insensitive)?"insensitive":"sensitive");
  if (op->miscopts.dirsuffix[0] == '\0')
    printf("No DIRSUFFIX\n");
  else
    printf("DIRSUFFIX %s\n", op->miscopts.dirsuffix);
  report_outopts(&(op->outopts));
}

void report_compile(void) {
  char *temps;

  printf("Compile-time optional code:\n");
#ifdef NOGRAPHICS
  printf("  No pie charts\n");
#else
#ifdef HAVE_GD
  printf("  Pie chart code included -- using your libgd\n");
#else
  printf("  Pie chart code included\n");
#endif  /* HAVE_GD */
#endif  /* NOGRAPHICS */
#ifdef NOPIPES
  printf("  No pipes [so no UNCOMPRESS command]\n");
#else
  printf("  Pipes included\n");
#endif
#ifdef NODNS
  printf("  No DNS lookups\n");
#else
  printf("  DNS lookup code included\n");
#ifdef NOALARM
  printf("  No DNS timeouts\n");
#else
  printf("  DNS timeouts possible\n");
#endif
#endif /* !NODNS */
#ifdef NODIRENT
  printf("  No dirent [so no wildcards in logfile names]\n");
#else
#ifdef MACDIRENT
  printf("  Mac dirent included\n");
#else
#ifdef VMSDIRENT
  printf("  VMS dirent included\n");
#else
#ifdef WIN32DIRENT
  printf("  Win32 dirent included\n");
#else
#ifdef RISCOSDIRENT
  printf("  RISC OS dirent included\n");
#else
#ifdef NOGLOB
  printf("  POSIX.1 dirent included\n");
#else
  printf("  POSIX.2 globbing included\n");
#endif
#endif
#endif
#endif
#endif
#endif
#ifdef NOOPEN
  printf("  No open() function\n");
#else
  printf("  Using open() function\n");
#endif
#ifdef EBCDIC
  printf("  EBCDIC character set on ");
#if defined(BS2000)
  printf("BS2000/OSD\n");
#elif defined(AS400)
  printf("AS/400\n");
#elif defined(OS390)
  printf("OS/390\n");
#else
  printf("unknown platform\n");
#endif
#endif
#ifdef NEED_STRCMP
  printf("  My strcmp()\n");
#endif
#ifdef NEED_MEMMOVE
  printf("  My memmove()\n");
#endif
#ifdef NEED_STRTOUL
  printf("  My strtoul()\n");
#endif
#ifdef NEED_DIFFTIME
  printf("  My difftime()\n");
#endif
#ifdef NEED_FLOATINGPOINT_H
  printf("   header file\n");
#endif
  printf("Compile-time variables:\n");
  if (strcaseeq(DEFAULTCONFIGFILE, "none") || IS_STDIN(DEFAULTCONFIGFILE))
    temps = DEFAULTCONFIGFILE;
  else
    temps = buildfilename(CONFIGDIR, "", DEFAULTCONFIGFILE);
  printf("  Default configuration file: %s\n", temps);
  if (!strcaseeq(DEFAULTCONFIGFILE, "none"))
    check_file(temps);
  if (strcaseeq(MANDATORYCONFIGFILE, "none") || IS_STDIN(MANDATORYCONFIGFILE))
    temps = MANDATORYCONFIGFILE;
  else
    temps = buildfilename(CONFIGDIR, "", MANDATORYCONFIGFILE);
  printf("  Madatory configuration file: %s\n", temps);
  if (!strcaseeq(MANDATORYCONFIGFILE, "none"))
    check_file(temps);
}

void report_conffiles(Strlist *list) {
  printf("Configuration files read:\n");
  if (list == NULL)
    printf("  none\n");
  for ( ; list != NULL; TO_NEXT(list)) {
    if (IS_STDIN(list->name))
      printf("  standard input\n");
    else
      printf("  %s\n", list->name);
  }
}

void report_debug(char *type, char *arg, char *fullset) {
  printf("%s on: ", type);
  if (strpbrk(fullset, arg) == NULL)
    printf("none\n");
  else if (STREQ(arg, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
    printf("all\n");
  /* See configdebug() in init2.c. 'All' should really mean 'including the
     whole of fullset' so it can still sometimes fail this test and be spelled
     out below instead, but that's not a problem. */
  else {
    for ( ; *arg != '\0'; arg++) {
      if (strchr(fullset, *arg) != NULL)
	printf("%c", *arg);
    }
    putchar('\n');
  }
}

void report_logfiles(Logfile *logfile, logical cache) {
  Logfile *lf;

  printf("Reading %sfiles:\n", cache?"cache ":"log");
  if (logfile == NULL)
    printf("  none\n");
  for (lf = logfile; lf != NULL; TO_NEXT(lf)) {
    printf("  %s\n", lf->name);
    check_file(lf->name);
    if (!cache) {
      report_logformat(stdout, lf->format, FALSE);
      if (lf->tz != 0)
	printf("    Times in logfile offset by %s%d minutes\n",
		     (lf->tz > 0)?"+":"", lf->tz);
    }
  }
}

void report_logformat(FILE *outf, Inputformatlist *format, logical inwarn) {
  Inputformatlist *fp;
  Inputformat *p;

  if (inwarn)
    fprintf(outf, "    Current logfile format:\n");
  else
    fprintf(outf, "    Logfile format:\n");
  for (fp = format; fp != NULL; TO_NEXT(fp)) {
    fprintf(outf, "      ");
    for (p = fp->form; p->inpfns != NULL; TO_NEXT(p)) {
      if (p->inpfns->code == 'x') {
	if (p->sep == '0' || p->sep == '1')
	  fprintf(outf, "");
	else if (p->sep == '2')
	  fprintf(outf, "");
	else if (p->sep == '3')
	  fprintf(outf, "");
	else if (p->sep == '4')
	  fprintf(outf, "");
      }
      else if (p->inpfns->code == '\n')
	fprintf(outf, "\\n");
      else if (p->inpfns->code != '\0')
	fprintf(outf, "%%%c", p->inpfns->code);
      if (p->inpfns->code == 'r' || p->inpfns->code == 'R' ||
	  p->inpfns->code == 'u' || p->inpfns->code == 'f' ||
	  p->inpfns->code == 'B' || p->inpfns->code == 'S' ||
	  p->inpfns->code == 'F' || p->inpfns->code == 'q' ||
	  p->inpfns->code == 'A' || p->inpfns->code == 's' ||
	  p->inpfns->code == 'C' || p->inpfns->code == 'j' ||
	  p->inpfns->code == 'v' || p->inpfns->code == '\0') {
	if (p->sep == '\t')
	  fprintf(outf, "\\t");
	else if (p->sep == '\n')
	  fprintf(outf, "\\n");
	else if (p->sep == '\\')
	  fprintf(outf, "\\\\");
	else if (p->sep == '%')
	  fprintf(outf, "%%%%");
	else if (p->sep != WHITESPACE)   /* whitespace has following %w */
	  putc(p->sep, outf);
      }
    }
    putc('\n', outf);
  }
}

void report_fromto(Dateman *dman) {
  extern char *engmonths[];

  unsigned int date, month, year;
  if (dman->from == FIRST_TIME && dman->to == LAST_TIME)
    printf("Analysing all dates\n");
  else {
    printf("Analysing dates");
    if (dman->from != FIRST_TIME) {
      code2date(dman->from / 1440, &date, &month, &year);
      printf(" from %02d/%s/%d at %02d:%02d", date, engmonths[month], year,
	     (int)((dman->from % 1440) / 60), (int)(dman->from % 60));
    }
    if (dman->to != LAST_TIME) {
      code2date(dman->to / 1440, &date, &month, &year);
      printf(" to %02d/%s/%d at %02d:%02d", date, engmonths[month], year,
	     (int)((dman->to % 1440) / 60), (int)(dman->to % 60));
    }
    putchar('\n');
  }
}

void report_want(Include *wanthead, char *type, char *indent) {
  static char *pre0 = "";
  static char *pre1 = "REGEXP:";
  static char *pre2 = "REGEXPI:";
  static char *blanks = "[blanks]";

  char *pre, *name;
  Include *wp, *lwp, *nextwp;

  if (wanthead != NULL) {
    /* We first have to turn all the links round to get the list in the right
       order. But we won't use them again. */
    for (wp = wanthead, lwp = NULL; wp != NULL; wp = nextwp) {
      nextwp = wp->next;
      wp->next = lwp;
      lwp = wp;
    }
    /* after this, lwp is the new head */
    printf("%sIncluding (+) and excluding (-) the following %s:\n",
	   indent, type);
    printf("%s  All %scluded, then\n", indent, IS_INC(lwp->type)?"ex":"in");
    for (wp = lwp; wp != NULL; TO_NEXT(wp)) {
      name = wp->name;
      pre = pre0;
      if (IS_REGEXT(wp->type)) {
	if (name[6] == ':') {
	  pre = pre1;
	  name += 7;
	}
	else {
	  pre = pre2;
	  name += 8;
	}
      }
      else if (IS_EMPTY_STRING(name))
	name = blanks;
      printf("%s  %c %s%s\n", indent, IS_INC(wp->type)?'+':'-', pre, name);
    }
  }
}

void report_scwant(choice *code2type) {
  int i, j;
  logical f;

  for (i = MIN_SC, f = FALSE; i < SC_NUMBER && !f; i++) {
    if (code2type[i] == UNWANTED)
      f = TRUE;
  }
  if (f) {
    printf("Including only the following status codes:\n  ");
    for (i = MIN_SC, j = 0; i <= SC_NUMBER; i++) {
      if (j != 0 && (i == SC_NUMBER || code2type[i] == UNWANTED)) {
	if (f)  /* reusing f for first printing */
	  f = FALSE;
	else
	  printf(",");
	if (i == j + 1)
	  printf("%d", j);
	else
	  printf("%d-%d", j, i - 1);
	j = 0;
      }
      else if (j == 0 && i != SC_NUMBER && code2type[i] != UNWANTED)
	j = i;
    }
    if (f)
      printf("none");
    printf("\n");
  }
}

void report_alias(Alias *aliashead, char *type, char *indent) {
  static char *pre0 = "";
  static char *pre1 = "REGEXP:";
  static char *pre2 = "REGEXPI:";

  char *pre, *from;
  Alias *ap;
  AliasTo *tp;

  if (aliashead != NULL) {
    printf("%sAliasing %s as follows:\n", indent, type);
    for (ap = aliashead; ap != NULL; TO_NEXT(ap)) {
      from = ap->from;
      pre = pre0;
      if (ap->isregex) {
	if (from[6] == ':') {
	  pre = pre1;
	  from += 7;
	}
	else {
	  pre = pre2;
	  from += 8;
	}
      }
      printf("%s  %s%s -> ", indent, pre, from);
      for (tp = ap->to; tp != NULL; TO_NEXT(tp)) {
	printf("%s", tp->string);
	if (tp->after >= 0)
	  printf("$%d", (tp->after) / 2 + !(ap->isregex));
	/* internal representation for !regex is one out */
      }
      putchar('\n');
    }
  }
}

void report_strpairlist(Strpairlist *head, char *type, char *connector) {
  Strpairlist *ap;

  if (head != NULL) {
    printf("%s as follows:\n", type);
    for (ap = head; ap != NULL; TO_NEXT(ap))
      printf("  %s %s%s\n", ap->name, connector, ap->data);
  }
}

void report_lowmem(choice lowmem[]) {
  extern char *item_type[];
  int i, j = 0;

  for (i = 0; i < ITEM_NUMBER; i++)
    j += (int)(lowmem[i]);
  if (j == 0)
    printf("No LOWMEM commands in operation\n");
  else {
    printf("LOWMEM settings are:\n");
    for (i = 0; i < ITEM_NUMBER; i++)
      printf("  %s: %d\n", item_type[i], lowmem[i]);
  }
}

#ifndef NODNS
void report_dns(void) {
  extern choice dnslevel;
  extern char *dnsfile, *dnslockfile;
  extern unsigned int dnsgoodhrs, dnsbadhrs;
#ifndef NOALARM
  extern unsigned int dnstimeout;
#endif

  printf("DNS level is ");
  if (dnslevel == DNS_NONE)
    printf("NONE\n");
  else if (dnslevel == DNS_READ)
    printf("READ\n");
  else if (dnslevel == DNS_LOOKUP)
    printf("LOOKUP\n");
  else
    printf("WRITE\n");
  if (dnslevel != DNS_NONE) {
    printf("DNS file is %s\n", dnsfile);
    if (dnslevel == DNS_WRITE)
      printf("DNS lock file is %s\n", dnslockfile);
    printf("Resolved DNS entries rechecked if older than %u hours\n",
	   dnsgoodhrs);
    printf("Unresolved DNS entries rechecked if older than %u hours\n",
	   dnsbadhrs);
#ifndef NOALARM
    if (dnslevel >= DNS_LOOKUP) {
      if (dnstimeout > 0)
	printf("Abort DNS lookups after %u seconds\n", dnstimeout);
      else
	printf("No timeout on DNS lookups\n");
    }
#endif
  }
}
#endif

void report_outopts(Outchoices *od) {
  extern char *repname[];
  extern char *englongdays[];
  extern logical cgi;

#ifndef NOGRAPHICS
  unsigned int numcharts = 0;
#endif
  int i;
  choice j;

  if (od->outstyle == OUT_NONE) {
    printf("Output style is NONE\n");
    if (strcaseeq(od->cacheoutfile, "none")) { /* same as below */
      printf("No cache output file\n");
      printf("NB OUTPUT NONE and no cache output file is an error!\n");
    }
    else
      printf("Cache output file is %s\n",
	     IS_STDOUT(od->cacheoutfile)?"stdout":(od->cacheoutfile));
  }
  else {
    printf("Report order is as follows:\n");
    for (i = 0; od->reporder[i] != -1; i++) {
      j = od->reporder[i];
      printf("  %s [%s]\n", repname[j], (od->repq[j])?"ON":"OFF");
      if (od->repq[j]) {
	if (j < DATEREP_NUMBER)
	  report_daterep(od, j);
	else if (j == REP_GENSUM)
	  report_debug("    General Summary lines", od->gensumlines,
		       "BCDEFGHIJKLMN");
	else if (j <= LAST_NORMALREP || j == REP_CODE) {
	  report_genrep(od, j);
#ifndef NOGRAPHICS
	  numcharts += (od->chartby[G(j)] != CHART_NONE);
#endif
	}
	else { /* REP_SIZE || REP_PROCTIME */
	  report_cols(od->cols[j]);
#ifndef NOGRAPHICS
	  if (od->outstyle == HTML || od->outstyle == XHTML)
	    report_chart(od->chartby[G(j)]);
	  numcharts += (od->chartby[G(j)] != CHART_NONE);
#endif
	}
      }
    }

    printf("Output file is %s\n",
	   IS_STDOUT(od->outfile)?"stdout":(od->outfile));
    if (strcaseeq(od->cacheoutfile, "none"))  /* same as above */
      printf("No cache output file\n");
    else
      printf("Cache output file is %s\n",
	     IS_STDOUT(od->cacheoutfile)?"stdout":(od->cacheoutfile));
    /* Don't check writeability because would overwrite */
    printf("Language file is %s\n", od->lang.file);
    check_file(od->lang.file);
    printf("Domains file is %s\n", od->domainsfile);
    check_file(od->domainsfile);
    if (od->outstyle == HTML || od->outstyle == XHTML)
      printf("Go To lines are %s\n",
	     (od->gotos == TRUE)?"on":((od->gotos == FALSE)?"off":
				       "on at top and bottom only"));
    if (!od->descriptions)
      puts("Report descriptions are off");
    else if (od->descfile == NULL)
      puts("Report descriptions are off (no descriptions file)");
    else {
      printf("Report descriptions file is %s\n", od->descfile);
      check_file(od->descfile);
    }
    printf("Report spans are %s\n", (od->repspan)?"ON":"OFF");
    if (od->repspan)
      printf("Report span threshold is %u minutes\n", od->rsthresh);
    printf("Output style is ");
    if (od->outstyle == HTML) {
      printf("HTML\n");
      if (strcaseeq(od->stylesheet, "none"))
	printf("No style sheet\n");
      else
	printf("Style sheet is %s\n", od->stylesheet);
    }
    else if (od->outstyle == XHTML) {
      printf("XHTML\n");
      if (strcaseeq(od->stylesheet, "none"))
	printf("Default (inline) style sheet\n");
      else
	printf("Style sheet is %s\n", od->stylesheet);
      if (strcaseeq(od->stylesheet, "none"))
	printf("No CSS prefix\n");
      else
	printf("CSS prefix is %s\n", od->cssprefix);
    }
    else if (od->outstyle == ASCII)
      printf("ASCII\n");
    else if (od->outstyle == PLAIN)
      printf("PLAIN\n");
    else if (od->outstyle == LATEX)
      printf("LATEX (and PDFLATEX is %s)\n", (od->pdflatex)?"ON":"OFF");
    else {  /* OUT_NONE is reported above */
      printf("COMPUTER\n");
      printf("The field separator is \"%s\"\n", od->compsep);
    }
    if (cgi)
      printf("Including CGI header lines\n");
    if (strcaseeq(od->headerfile, "none"))
      printf("No header file\n");
    else {
      printf("Header file is %s\n", od->headerfile);
      check_file(od->headerfile);
    }
    if (strcaseeq(od->footerfile, "none"))
      printf("No footer file\n");
    else {
      printf("Footer file is %s\n", od->footerfile);
      check_file(od->footerfile);
    }
    printf("Host name for title is %s\n", od->hostname);
    if (od->outstyle == HTML || od->outstyle == XHTML) {
      if (strcaseeq(od->hosturl, "none"))
	printf("Host name unlinked\n");
      else
	printf("Host name linked to %s\n", od->hosturl);
      if (strcaseeq(od->logo, "none"))
	printf("No logo for title line\n");
      else {
	printf("Logo for title line is %s", od->logo);
	if (STREQ(od->logo, "analogo"))
	  printf(".%s", od->pngimages?"png":"gif");
	putchar('\n');
	if (od->outstyle == XHTML) {
	  if (strcaseeq(od->logourl, "none"))
	    printf("Logo unlinked\n");
	  else
	    printf("Logo linked to %s\n", od->logourl);
	}
      }
      printf("URL of image directory is %s\n", od->imagedir);
      printf("Using %s images\n", od->pngimages?"PNG":"GIF");
#ifndef NOGRAPHICS
      if (numcharts != 0) {
	if (!IS_EMPTY_STRING(od->chartdir))  /* Should never be NULL: init.c */
	  printf("URL of pie chart directory is %s\n", od->chartdir);
	printf("Local location of pie chart directory is %s\n",
	       od->localchartdir);
#ifdef HAVE_GD
	printf("Charts in %s format\n", (od->jpegcharts)?"JPEG":"PNG");
#endif
      }
#endif
    }
    else if (od->outstyle == COMPUTER) {
      if (strcaseeq(od->hosturl, "none"))
	printf("No host URL\n");
      else
	printf("Host URL is %s\n", od->hosturl);
    }
    if (od->rawbytes)
      printf("Displaying exact bytes\n");
    else
      printf("Displaying bytes rounded to %u decimal places\n", od->bytesdp);
    if (od->outstyle != COMPUTER) {
      printf("The character for graph plotting is: %c\n", od->markchar);
      report_sep(od->sepchar, "thousands separator");
      report_sep(od->repsepchar, "thousands separator in tables");
      report_sep(od->decpt, "decimal point");
      printf("The page width is %d\n", od->outputter->pagewidth(od));
      printf("The minimum graph width is %d\n", od->mingraphwidth);
    }
    printf("Weeks begin on %s\n", englongdays[od->weekbeginson]);
  }
}

void report_sep(char c, char *type) {
  if (c == (char)UNSET)
    printf("The %s is: [from language file]\n", type);
  else if (c == ' ')
    printf("The %s is: [space]\n", type);
  else if (c == '\0')
    printf("The %s is: [none]\n", type);
  else
    printf("The %s is: %c\n", type, c);
}

void report_daterep(Outchoices *od, choice j) {
  report_cols(od->cols[j]);
  if (j < DATEREPORTS_NUMBER) {
    printf("    Maximum number of rows: ");
    if (od->rows[j] == 0)
      printf("unlimited\n");
    else
      printf("%u\n", od->rows[j]);
  }
  printf("    Graphing by ");
  if (od->graph[j] == 'R' || od->graph[j] == 'r')
    printf("requests\n");
  else if (od->graph[j] == 'P' || od->graph[j] == 'p')
    printf("requests for pages\n");
  else
    printf("bytes\n");
  if (j < DATEREPORTS_NUMBER)
    printf("    Displaying %s dates at top\n",
	   (od->back[j])?"latest":"earliest");
}

void report_genrep(Outchoices *od, choice j) {
  report_cols(od->cols[j]);
  report_sortby(od->sortby[G(j)], FALSE);
  report_floor(&(od->floor[G(j)]), FALSE);
  if (od->subsortby[G(j)] != UNSET) {  /* report is hierarchical */
    report_sortby(od->subsortby[G(j)], TRUE);
    report_floor(&(od->subfloor[G(j)]), TRUE);
  }
#ifndef NOGRAPHICS
  if (od->outstyle == HTML || od->outstyle == XHTML)
    report_chart(od->chartby[G(j)]);
#endif
  report_want(od->wanthead[G(j)], "in the report", "    ");
  report_alias(od->aliashead[G(j)], "in the report", "    ");
  report_want(od->link[G(j)], "links in the report", "    ");
}

void report_cols(choice *cols) {
  choice c;

  printf("    Columns:");
  if (cols[0] == COL_NUMBER)
    printf(" \n");
  else for (c = 0; cols[c] != COL_NUMBER; c++) {
    switch (cols[c]) {
    case COL_REQS:
      printf(" #requests");
      break;
    case COL_REQS7:
      printf(" #7-day-requests");
      break;
    case COL_PREQS:
      printf(" %%requests");
      break;
    case COL_PREQS7:
      printf(" %%7-day-requests");
      break;
    case COL_PAGES:
      printf(" #pages");
      break;
    case COL_PAGES7:
      printf(" #7-day-pages");
      break;
    case COL_PPAGES:
      printf(" %%pages");
      break;
    case COL_PPAGES7:
      printf(" %%7-day-pages");
      break;
    case COL_BYTES:
      printf(" #bytes");
      break;
    case COL_BYTES7:
      printf(" #7-day-bytes");
      break;
    case COL_PBYTES:
      printf(" %%bytes");
      break;
    case COL_PBYTES7:
      printf(" %%7-day-bytes");
      break;
    case COL_DATE:
      printf(" last-date");
      break;
    case COL_FIRSTD:
      printf(" first-date");
      break;
    case COL_TIME:
      printf(" last-time");
      break;
    case COL_FIRSTT:
      printf(" first-time");
      break;
    case COL_INDEX:
      printf(" number");
      break;
    }
  }
  putchar('\n');
}

void report_sortby(choice sortby, logical sub) {
  if (sub)
    printf("    Sorting sub-items ");
  else
    printf("    Sorting ");
  if (sortby == ALPHABETICAL)
    printf("alphabetically\n");
  else if (sortby == RANDOM)
    printf("randomly\n");
  else if (sortby == REQUESTS)
    printf("by number of requests\n");
  else if (sortby == REQUESTS7)
    printf("by number of requests in the last 7 days\n");
  else if (sortby == PAGES)
    printf("by number of requests for pages\n");
  else if (sortby == PAGES7)
    printf("by number of requests for pages in the last 7 days\n");
  else if (sortby == DATESORT)
    printf("by date of last request\n");
  else if (sortby == FIRSTDATE)
    printf("by date of first request\n");
  else if (sortby == BYTES)
    printf("by number of bytes\n");
  else /* sortby == BYTES7 */
    printf("by number of bytes in the last 7 days\n");
}

void report_floor(Floor *floor, logical sub) {
  /* this is copied (simplified) from whatincluded() in output2.c */
  unsigned long temp;
  timecode_t tempd;
  char *datefmt = "%d/%m/%y at %H:%n";

  if (sub)
    printf("    Floor for sub-items is: ");
  else
    printf("    Floor is: ");

  if (floor->min < 0) {
    temp = (unsigned long)(-floor->min + EPSILON);
    printf("Top %lu item%s by ", temp, (temp == 1)?"":"s");
    if (floor->floorby == REQUESTS)
      printf("number of requests\n");
    else if (floor->floorby == REQUESTS7)
      printf("number of requests in the last 7 days\n");
    else if (floor->floorby == DATESORT)
      printf("date of last request\n");
    else if (floor->floorby == FIRSTDATE)
      printf("date of first request\n");
    else if (floor->floorby == PAGES)
      printf("number of requests for pages\n");
    else if (floor->floorby == PAGES7)
      printf("number of requests for pages in the last 7 days\n");
    else if (floor->floorby == BYTES)
      printf("number of bytes\n");
    else /* floor->floorby == BYTES7 */
      printf("number of bytes in the last 7 days\n");
  }
  else {   /* floor->min >= 0 */
    if (floor->floorby == DATESORT || floor->floorby == FIRSTDATE) {
      tempd = (timecode_t)(floor->min + EPSILON);
      if (floor->floorby == DATESORT)
	printf("items with requests since ");
      else
	printf("items with first request since ");
      printf("%s", timesprintf(NULL, datefmt, tempd, FALSE));
    }
    else if (floor->min > EPSILON) {
      if (floor->qual == '\0') {
	temp = (unsigned long)(floor->min + EPSILON);
	printf("%lu ", temp);
	if (floor->floorby == REQUESTS)
	  printf((temp == 1)?"request\n":"requests\n");
	else if (floor->floorby == REQUESTS7)
	  printf("%s in the last 7 days\n", (temp == 1)?"request":"requests");
	else if (floor->floorby == PAGES)
	  printf((temp == 1)?"request for a page\n":"requests for pages\n");
	else if (floor->floorby == PAGES7)
	  printf("%s in the last 7 days\n",
		 (temp == 1)?"request for a page":"requests for pages");
	else if (floor->floorby == BYTES)
	  printf((temp == 1)?"byte\n":"bytes\n");
	else /* floor->floorby == BYTES7 */
	  printf("%s in the last 7 days\n", (temp == 1)?"byte":"bytes");
      }
      else {  /* floor->qual != '\0' */
	plain_printdouble(stdout, NULL, floor->min);
	if (floor->qual == '%') {
	  if (floor->floorby == REQUESTS)
	    printf("%% of the requests\n");
	  else if (floor->floorby == REQUESTS7)
	    printf("%% of the requests in the last 7 days\n");
	  else if (floor->floorby == PAGES)
	    printf("%% of the requests for pages\n");
	  else if (floor->floorby == PAGES7)
	    printf("%% of the requests for pages in the last 7 days\n");
	  else if (floor->floorby == BYTES)
	    printf("%% of the bytes\n");
	  else /* floor->floorby == BYTES7 */
	    printf("%% of the bytes in the last 7 days\n");
	}
	else if (floor->qual == ':') {
	  if (floor->floorby == REQUESTS)
	    printf("%% of the maximum number of requests\n");
	  else if (floor->floorby == REQUESTS7)
	    printf("%% of the maximum number of requests in the last 7 days\n");
	  else if (floor->floorby == PAGES)
	    printf("%% of the maximum number of requests for pages\n");
	  else if (floor->floorby == PAGES7)
	    printf("%% of the maximum number of requests for pages in the last 7 days\n");
	  else if (floor->floorby == BYTES)
	    printf("%% of the maximum number of bytes\n");
	  else if (floor->floorby == BYTES7)
	    printf("%% of the maximum number of bytes in the last 7 days\n");
	}
	else /* if qual is anything else, must be (k|M|G|T)bytes[7] */
	  printf(" %cbytes%s\n", floor->qual,
		 (floor->floorby == BYTES)?"":" in the last 7 days");
      }   /* end floor->qual != '\0' */
    }     /* end floor->min > EPSILON */
    else
      printf("[all items]\n");
  }       /* end floor->min > 0 */
}

#ifndef NOGRAPHICS
void report_chart(choice chartby) {
  if (chartby == CHART_NONE) {
    printf("    No pie chart\n");
    return;
  }
  printf("    Plotting pie chart ");
  if (chartby == REQUESTS)
    printf("by number of requests\n");
  else if (chartby == REQUESTS7)
    printf("by number of requests in the last 7 days\n");
  else if (chartby == PAGES)
    printf("by number of requests for pages\n");
  else if (chartby == PAGES7)
    printf("by number of requests for pages in the last 7 days\n");
  else if (chartby == BYTES)
    printf("by number of bytes\n");
  else /* chartby == BYTES7 */
    printf("by number of bytes in the last 7 days\n");
}
#endif

void check_file(char *name) {
  FILE *f = NULL;

  if (!IS_STDIN(name) && (f = FOPENR(name)) == NULL)
    printf("    Warning: cannot open that file\n");
  if (f != NULL)
    fclose(f);
}
analog-ce-6.0.17/src/sort.c000066400000000000000000000453231406366436600154020ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** sort.c; sort a hashindex tree into a list by some criterion ***/

#include "anlghea3.h"

#define FINDNAME(p) ((rep >= 0)?(maketreename(partname, (p), newpn, space, need, rep, FALSE)):((p)->name))

/* See commentary in my_sort() below */
void calctotmax(Hashindex **gooditems, Hashindex **baditems, Strlist *partname,
		Strlist **newpn, Strlist *space, size_t need, choice rep,
		Include *wanthead, choice requests, choice requests7,
		choice pages, choice pages7, choice date, choice firstd,
		unsigned long *totr, unsigned long *totr7, unsigned long *totp,
		unsigned long *totp7, double *totb, double *totb7,
		unsigned long *maxr, unsigned long *maxr7, unsigned long *maxp,
		unsigned long *maxp7, double *maxb, double *maxb7,
		timecode_t *maxd, timecode_t *mind, logical donetots,
		logical nosort, Hashindex **ans3) {
  Hashindex *p, *nextp, *goods = NULL;
  logical done;

  if (!donetots) {
    *totr = *totr7 = *totp = *totp7 = *maxr = *maxr7 = *maxp = *maxp7 = 0;
    *totb = *totb7 = *maxb = *maxb7 = 0.;
    *maxd = FIRST_TIME;
    *mind = LAST_TIME;
  }
  if (*gooditems != NULL) {
    p = *gooditems;
    done = FALSE;
  }
  else {
    p = *baditems;
    done = TRUE;
  }

  for ( ; p != NULL; p = nextp) {
    /* Calculate the next p immediately because we will mess with p->next */
    nextp = p->next;
    if (nextp == NULL && !done) {
      nextp = *baditems;
      done = TRUE;
    }

    /* Is this item wanted? */
    if (!nosort &&
	(p->own == NULL || p->own->data[requests] == 0 ||
	 !included(FINDNAME(p), p->own->ispage, wanthead))) {
      /* not wanted; add to ans3 */
      p->next = *ans3;
      *ans3 = p;
    }
    else {
      /* wanted; add to goods, and include in tot and max */
      if (!nosort) {
	p->next = goods;
	goods = p;
      }
      if (!donetots) {
	*totr += p->own->data[requests];
	*maxr = MAX(*maxr, p->own->data[requests]);
	if (pages >= 0) {
	  /* This caution is probably unnecessary: if pages == -1, totp will
	     not be used. But technically, data[-1] is undefined behaviour, and
	     the program is then within its rights to crash. :)
	     'requests' is never -1, by the way: see wantcol[] in init.c. */
	  *totp += p->own->data[pages];
	  *maxp = MAX(*maxp, p->own->data[pages]);
	}
	if (requests7 >= 0) {
	  *totr7 += p->own->data[requests7];
	  *maxr7 = MAX(*maxr7, p->own->data[requests7]);
	}
	if (pages7 >= 0) {
	  *totp7 += p->own->data[pages7];
	  *maxp7 = MAX(*maxp7, p->own->data[pages7]);
	}
	*totb += p->own->bytes;
	*totb7 += p->own->bytes7;
	*maxb = MAX(*maxb, p->own->bytes);
	*maxb7 = MAX(*maxb7, p->own->bytes7);
	if (date >= 0)
	  *maxd = MAX(*maxd, p->own->data[date]);
	if (firstd >= 0 && p->own->data[firstd] != 0)
	  *mind = MIN(*mind, p->own->data[firstd]);
      }  /* !donetots */
    }  /* item wanted */
  }  /* p loop */

  /* Make gooditems into the resultant list of wanted things */
  if (!nosort) {
    *gooditems = goods;
    *baditems = NULL;
  }
}

/* See commentary in my_sort() below */
void calcfloor(unsigned long *min, double *dmin, choice *filterby,
	       Floor *floor, choice requests, choice requests7, choice pages,
	       choice pages7, choice date, choice firstd, unsigned long totr,
	       unsigned long totr7, unsigned long totp, unsigned long totp7,
	       double totb, double totb7, unsigned long maxr,
	       unsigned long maxr7, unsigned long maxp, unsigned long maxp7,
	       double maxb, double maxb7) {
  extern char *byteprefix;
  char *b;

  *min = 0;
  *dmin = floor->min;
  *filterby = floor->floorby;
  if (*filterby == REQUESTS) {
    *filterby = requests;
    if (floor->qual == '%')
      *dmin *= (double)totr / 100.0;  /* NB dmin < 0 => qual == '\0' */
    else if (floor->qual == ':')
      *dmin *= (double)maxr / 100.0;
    /* negative doubles may not convertable to unsigned integral types --
       C spec 6.2.1.3 */
    *min = (*dmin >= 0)?(unsigned long)(*dmin + 1 - EPSILON):0;
  }
  else if (*filterby == REQUESTS7) {
    *filterby = requests7;
    if (floor->qual == '%')
      *dmin *= (double)totr7 / 100.0;
    else if (floor->qual == ':')
      *dmin *= (double)maxr7 / 100.0;
    *min = (*dmin >= 0)?(unsigned long)(*dmin + 1 - EPSILON):0;
  }
  else if (*filterby == PAGES) {
    *filterby = pages;
    if (floor->qual == '%')
      *dmin *= (double)totp / 100.0;
    else if (floor->qual == ':')
      *dmin *= (double)maxp / 100.0;
    *min = (*dmin >= 0)?(unsigned long)(*dmin + 1 - EPSILON):0;
  }
  else if (*filterby == PAGES7) {
    *filterby = pages7;
    if (floor->qual == '%')
      *dmin *= (double)totp7 / 100.0;
    else if (floor->qual == ':')
      *dmin *= (double)maxp7 / 100.0;
    *min = (*dmin >= 0)?(unsigned long)(*dmin + 1 - EPSILON):0;
  }
  else if (*filterby == BYTES) {
    if (floor->qual == '%')
      *dmin *= totb / 100.0;
    else if (floor->qual == ':')
      *dmin *= maxb / 100.0;
    else if (floor->qual != '\0' &&
	     strchr(byteprefix + 1, floor->qual) != NULL) {
      for (b = byteprefix; *b != floor->qual; b++)
	*dmin *= 1024.0;
    }
  }
  else if (*filterby == BYTES7) {
    if (floor->qual == '%')
      *dmin *= totb7 / 100.0;
    else if (floor->qual == ':')
      *dmin *= maxb7 / 100.0;
    else if (floor->qual != '\0' &&
	     strchr(byteprefix + 1, floor->qual) != NULL) {
      for (b = byteprefix; *b != floor->qual; b++)
	*dmin *= 1024.0;
    }
  }
  else if (*filterby == DATESORT) {
    *filterby = date;
    *min = (*dmin >= 0)?(unsigned long)(*dmin + 1 - EPSILON):0;
  }
  else { /* *filterby == FIRSTDATE */
    *filterby = firstd;
    *min = (*dmin >= 0)?(unsigned long)(*dmin + 1 - EPSILON):0;
  }
}

/* See commentary in my_sort() below */
void makebadpn(Hashentry **badp, unsigned long *badn, Hashindex *ans2,
	       choice requests, choice requests7, choice pages, choice pages7,
	       choice date, choice firstd, unsigned long *maxr,
	       unsigned long *maxr7, unsigned long *maxp, unsigned long *maxp7,
	       double *maxb, double *maxb7, logical donetots) {
  /* Assume already tested badp != NULL */
  Hashindex *p;

  *badp = newhashentry(DATA_NUMBER, FALSE);
  *badn = 0;
  for (p = ans2; p != NULL; TO_NEXT(p)) {
    (*badp)->data[requests] += p->own->data[requests];
    if (pages >= 0)  /* see comment in calctotmax() */
      (*badp)->data[pages] += p->own->data[pages];
    if (requests7 >= 0)
      (*badp)->data[requests7] += p->own->data[requests7];
    if (pages7 >= 0)
      (*badp)->data[pages7] += p->own->data[pages7];
    (*badp)->bytes += p->own->bytes;
    (*badp)->bytes7 += p->own->bytes7;
    if (date >= 0)
      (*badp)->data[date] = MAX((*badp)->data[date], p->own->data[date]);
    if (firstd >= 0) {
      if ((*badp)->data[firstd] == 0)
	(*badp)->data[firstd] = p->own->data[firstd];
      else
	(*badp)->data[firstd] =
	  MIN((*badp)->data[firstd], p->own->data[firstd]);
    }
    (*badn)++;
  }
  if (!donetots) {
    *maxr = MAX(*maxr, (*badp)->data[requests]);
    *maxp = (pages >= 0)?(MAX(*maxp, (*badp)->data[pages])):0;
    *maxr7 = (requests7 >= 0)?(MAX(*maxr7, (*badp)->data[requests7])):0;
    *maxp7 = (pages7 >= 0)?(MAX(*maxp7, (*badp)->data[pages7])):0;
    *maxb = MAX(*maxb, (*badp)->bytes);
    *maxb7 = MAX(*maxb7, (*badp)->bytes7);
  }
}

/* Sorting routine. We do a different sort depending whether the floor is +ve
   (merge sort) or -ve (insertion sort) */
void my_sort(Hashindex **gooditems, Hashindex **baditems, Strlist *partname,
	     Strlist **newpn, Strlist *space, size_t need, choice rep,
	     Floor *floor, choice sortby, logical alphaback, Include *wanthead,
	     choice requests, choice requests7, choice pages, choice pages7,
	     choice date, choice firstd, unsigned long *totr,
	     unsigned long *totr7, unsigned long *totp, unsigned long *totp7,
	     double *totb, double *totb7, unsigned long *maxr,
	     unsigned long *maxr7, unsigned long *maxp, unsigned long *maxp7,
	     double *maxb, double *maxb7, timecode_t *maxd, timecode_t *mind,
	     logical donetots, Hashentry **badp, unsigned long *badn,
	     logical nosort) {
  /* NB floor and sortby could be a SUBFLOOR and SUBSORTBY (see sorttree()) */
  /* Call with rep set to -1 for a flat report, only >= 0 for tree (see
     FINDNAME() above) */
  Hashindex *ans = NULL, *ans2 = NULL, *ans3 = NULL;
  /* wanted items; items below floor; items not wanted even as "not listed" */
  Hashindex *p, *nextp, *q, *lastq = NULL;
  unsigned long min;
  double dmin;
  choice filterby;
  unsigned long count;

  /* Run through all the items discarding unwanted ones into ans3; putting all
     the rest into gooditems; and (if !donetots) finding totals and maxima of
     the gooditems for calculating floors. */
  calctotmax(gooditems, baditems, partname, newpn, space, need, rep, wanthead,
	     requests, requests7, pages, pages7, date, firstd, totr, totr7,
	     totp, totp7, totb, totb7, maxr, maxr7, maxp, maxp7, maxb, maxb7,
	     maxd, mind, donetots, nosort, &ans3);

  if (nosort)
    return;

  /* Calculate the value of the floor (min, dmin and filterby) */
  calcfloor(&min, &dmin, &filterby, floor, requests, requests7, pages, pages7,
	    date, firstd, *totr, *totr7, *totp, *totp7, *totb, *totb7, *maxr,
	    *maxr7, *maxp, *maxp7, *maxb, *maxb7);

  /* Now do the actual flooring and sorting. */
  /* Case I; -ve floor; insertion sort (small end first for speed) */
  if (dmin < 0) {

    /* First work out which items wanted; count represents the remaining number
       of items we want to find */
    count = (unsigned long)(-dmin + EPSILON);

    for (p = *gooditems; p != NULL; p = nextp) {
      nextp = p->next;  /* need this because will overwrite p->next */

      if ((filterby != BYTES && filterby != BYTES7 &&
	   p->own->data[filterby] == 0) ||
	  (filterby == BYTES && p->own->bytes == 0) ||
	  (filterby == BYTES7 && p->own->bytes7 == 0)) {
	/* if it scored 0 we don't want it even if it is in the top n */
	p->next = ans2;
	ans2 = p;
      }
      else {   /* provisionally wanted; check if in top n */
	if (filterby == BYTES) {
	  for (q = ans; q != NULL && p->own->bytes > q->own->bytes;
	       TO_NEXT(q))
	    lastq = q;   /* run to right place in emerging list */
	}
	else if (filterby == BYTES7) {
	  for (q = ans; q != NULL && p->own->bytes7 > q->own->bytes7;
	       TO_NEXT(q))
	    lastq = q;
	}
	else {
	  for (q = ans; q != NULL &&
	       p->own->data[filterby] > q->own->data[filterby];
	       TO_NEXT(q))
	    lastq = q;
	}
	if (q == ans) {  /* at beginning of list */
	  if (count > 0) {     /* list still not big enough */
	    p->next = ans;
	    ans = p;
	    count--;
	  }
	  else {    /* not in top n */
	    p->next = ans2;
	    ans2 = p;
	  }
	}
	else {  /* not at beginning of list, so in top n */
	  p->next = lastq->next;
	  lastq->next = p;
	  if (count == 0) { /* list already full, so shunt smallest item off */
	    lastq = ans; /* temporarily re-using lastq for old ans */
	    ans = ans->next;
	    lastq->next = ans2;
	    ans2 = lastq;
	  }
	  else
	    count--;
	}
      }
    }

    /* Then sort them */
    if (sortby == floor->floorby || sortby == RANDOM) {
      /* easy case; swap the list round so that the largest item is first */
      q = NULL;  /* q is last p */
      for (p = ans; p != NULL; p = nextp) {
	nextp = p->next;
	p->next = q;
	q = p;
      }
      ans = q;
    }
    else {  /* sortby != floorby, so have to sort properly */
      count = 0;
      for (p = ans; p != NULL; TO_NEXT(p))
	count++;
      if (count > 0) {
	if (sortby == BYTES)
	  ans = my_mergesort(ans, count, sortby, &mergeb);
	else if (sortby == BYTES7)
	  ans = my_mergesort(ans, count, sortby, &mergeb7);
	else if (sortby == ALPHABETICAL) {
	  if (alphaback)
	    reversenames(ans);
	  ans = my_mergesort(ans, count, sortby, &mergea);
	}
	else if (sortby == REQUESTS)
	  ans = my_mergesort(ans, count, requests, &merge);
	else if (sortby == REQUESTS7)
	  ans = my_mergesort(ans, count, requests7, &merge);
	else if (sortby == PAGES)
	  ans = my_mergesort(ans, count, pages, &merge);
	else if (sortby == PAGES7)
	  ans = my_mergesort(ans, count, pages7, &merge);
	else if (sortby == DATESORT)
	  ans = my_mergesort(ans, count, date, &merge);
	else /* sortby == FIRSTDATE */
	  ans = my_mergesort(ans, count, firstd, &merge);
	/* it's possible that the list has acquired some trailing junk which
	   we have to lop off */
	for (p = ans; count > 1; TO_NEXT(p))
	  count--;
	p->next = NULL;
	if (alphaback && sortby == ALPHABETICAL)
	  reversenames(ans);
      }
    }
  }

  /* Case II; +ve floor; mergesort */
  else {   /* dmin >= 0 */

    /* First find the wanted ones */
    count = 0;
    if (dmin <= 0.5) {
      filterby = requests;
      min = 1;  /* so as to include exactly those items with any requests */
    }
    for (p = *gooditems ; p != NULL; p = nextp) {
      nextp = p->next;
      if ((filterby != BYTES && filterby != BYTES7 &&
	   p->own->data[filterby] < min) ||
	  (filterby == BYTES && p->own->bytes < dmin) ||
	  (filterby == BYTES7 && p->own->bytes7 < dmin)) {
	p->next = ans2;   /* below floor */
	ans2 = p;
      }
      else {  /* wanted */
	p->next = ans;
	ans = p;
	count++;
      }
    }

    /* Then sort them */
    if (sortby == RANDOM)
      ;  /* do nothing: we're done */
    else if (count > 0) {
      if (sortby == BYTES)
	ans = my_mergesort(ans, count, sortby, &mergeb);
      else if (sortby == BYTES7)
	ans = my_mergesort(ans, count, sortby, &mergeb7);
      else if (sortby == ALPHABETICAL) {
	if (alphaback)
	  reversenames(ans);
	ans = my_mergesort(ans, count, sortby, &mergea);
      }
      else if (sortby == REQUESTS)
	ans = my_mergesort(ans, count, requests, &merge);
      else if (sortby == REQUESTS7)
	ans = my_mergesort(ans, count, requests7, &merge);
      else if (sortby == PAGES)
	ans = my_mergesort(ans, count, pages, &merge);
      else if (sortby == PAGES7)
	ans = my_mergesort(ans, count, pages7, &merge);
      else if (sortby == DATESORT)
	ans = my_mergesort(ans, count, date, &merge);
      else /* sortby == FIRSTDATE */
	ans = my_mergesort(ans, count, firstd, &merge);
      /* it's possible that the list has acquired some trailing junk which
	 we have to lop off */
      for (p = ans; count > 1; TO_NEXT(p))
	count--;
      p->next = NULL;
      if (alphaback && sortby == ALPHABETICAL)
	reversenames(ans);
    }
    else
      ans = NULL;
  }

  /* Accumulate all unwanted items into a single entry. Also recalculate maxima
     to take this one big item into account. */
  if (badp != NULL)
    makebadpn(badp, badn, ans2, requests, requests7, pages, pages7, date,
	      firstd, maxr, maxr7, maxp, maxp7, maxb, maxb7, donetots);

  /* Tack ans3 onto the end of ans2 */
  if (ans2 == NULL)
    ans2 = ans3;
  else if (ans3 != NULL) {
    for (p = ans2; p->next != NULL; TO_NEXT(p))
      ;  /* run to end of ans2 */
    p->next = ans3;
  }

  /* Assign the lists of wanted and unwanted items to be returned */
  *gooditems = ans;
  *baditems = ans2;
}

Hashindex *my_mergesort(Hashindex *list, unsigned long length, choice sortby,
			mergefnp mergefn) {

  Hashindex *ans, *p, *p1, *p2;
  unsigned long a, count;

  if (length <= 1)
    return(list);

  a = length / 2;
  count = a;
  for (p = list; count > 0; TO_NEXT(p))
    count--;    /* find the halfway point of the list */
  p1 = my_mergesort(list, a, sortby, mergefn);
  p2 = my_mergesort(p, length - a, sortby, mergefn);
  ans = mergefn(p1, p2, a, length - a, sortby);
  return(ans);
  /* NB may have trailing junk, but we can lop that off when we've returned,
     so as not to do it for each sub-sort */
}

Hashindex *merge(Hashindex *list1, Hashindex *list2, unsigned long length1,
		 unsigned long length2, choice sortby) {
  Hashindex *ans, *p1, *p2, *p3;

  if (list1->own->data[sortby] > list2->own->data[sortby]) {
    ans = list1;
    p1 = list1->next;
    p2 = list2;
    length1--;
  }
  else {
    ans = list2;
    p2 = list2->next;
    p1 = list1;
    length2--;
  }
  p3 = ans;

  while (length1 > 0 && length2 > 0) {
    if (p1->own->data[sortby] > p2->own->data[sortby]) {
      p3->next = p1;
      TO_NEXT(p3);
      TO_NEXT(p1);
      length1--;
    }
    else {
      p3->next = p2;
      TO_NEXT(p3);
      TO_NEXT(p2);
      length2--;
    }
  }

  if (length1 > 0)
    p3->next = p1;
  else
    p3->next = p2;

  return(ans);
}

Hashindex *mergea(Hashindex *list1, Hashindex *list2, unsigned long length1,
		  unsigned long length2, choice sortby) {
  Hashindex *ans, *p1, *p2, *p3;

  if (strcmp(list1->name, list2->name) < 0) {
    ans = list1;
    p1 = list1->next;
    p2 = list2;
    length1--;
  }
  else {
    ans = list2;
    p2 = list2->next;
    p1 = list1;
    length2--;
  }
  p3 = ans;

  while (length1 > 0 && length2 > 0) {
    if (strcmp(p1->name, p2->name) < 0) {
      p3->next = p1;
      TO_NEXT(p3);
      TO_NEXT(p1);
      length1--;
    }
    else {
      p3->next = p2;
      TO_NEXT(p3);
      TO_NEXT(p2);
      length2--;
    }
  }

  if (length1 > 0)
    p3->next = p1;
  else
    p3->next = p2;

  return(ans);
}

Hashindex *mergeb(Hashindex *list1, Hashindex *list2, unsigned long length1,
		  unsigned long length2, choice sortby) {
  /* see also mergeb7() below */
  Hashindex *ans, *p1, *p2, *p3;

  if (list1->own->bytes > list2->own->bytes) {
    ans = list1;
    p1 = list1->next;
    p2 = list2;
    length1--;
  }
  else {
    ans = list2;
    p2 = list2->next;
    p1 = list1;
    length2--;
  }
  p3 = ans;

  while (length1 > 0 && length2 > 0) {
    if (p1->own->bytes > p2->own->bytes) {
      p3->next = p1;
      TO_NEXT(p3);
      TO_NEXT(p1);
      length1--;
    }
    else {
      p3->next = p2;
      TO_NEXT(p3);
      TO_NEXT(p2);
      length2--;
    }
  }

  if (length1 > 0)
    p3->next = p1;
  else
    p3->next = p2;

  return(ans);
}

Hashindex *mergeb7(Hashindex *list1, Hashindex *list2, unsigned long length1,
		   unsigned long length2, choice sortby) {
  /* This is exactly the same as mergeb() above, except it sorts by bytes7
     instead of bytes. It's just implemented as a second function for speed. */
  Hashindex *ans, *p1, *p2, *p3;

  if (list1->own->bytes7 > list2->own->bytes7) {
    ans = list1;
    p1 = list1->next;
    p2 = list2;
    length1--;
  }
  else {
    ans = list2;
    p2 = list2->next;
    p1 = list1;
    length2--;
  }
  p3 = ans;

  while (length1 > 0 && length2 > 0) {
    if (p1->own->bytes7 > p2->own->bytes7) {
      p3->next = p1;
      TO_NEXT(p3);
      TO_NEXT(p1);
      length1--;
    }
    else {
      p3->next = p2;
      TO_NEXT(p3);
      TO_NEXT(p2);
      length2--;
    }
  }

  if (length1 > 0)
    p3->next = p1;
  else
    p3->next = p2;

  return(ans);
}
analog-ce-6.0.17/src/tree.c000066400000000000000000001555141406366436600153560ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

#include "anlghea3.h"

/*** tree.c; functions for tree construction and processing. ***/

/* first, treefind(), analogous to hashfind() */
/* NB Don't really need as much data as Hashindex *, but allows us to use
   previous sort routines etc. */
Hashindex *treefind(char *name, char *nameend, Hashtable **tree,
		    Hashindex *item, cutfnp cutfn, logical build,
		    logical transient, logical reuse, Memman *space,
		    choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2],
		    unsigned int data_number) {
  /* datacols == NULL means we guarantee that item->own is all zero's */
  Hashindex *lp, *lastlp, *newone;   /* not called new because of C++ */
  unsigned long magic;

  if (*tree == NULL && !build)
    return(NULL);
  else if (*tree == NULL)
    *tree = rehash(NULL, TREEHASHSIZE, space);
  else if (TOO_FULL_TREE((*tree)->n, (*tree)->size))
    *tree = rehash(*tree, NEW_SIZE_TREE((*tree)->size), space);
  if (build && (strchr(name, '*') != NULL || strchr(name, '?') != NULL))
    magic = 0;
  else
    MAGICNOTREE(magic, name, nameend, (*tree)->size);

  lp = (*tree)->head[magic];
  lastlp = NULL;

  while (TRUE) {
    if (lp == NULL) { /* not found */
      if (build) {
	newone = newtreeentry(name, nameend, item, transient, reuse, space,
			      data_number);
	if (lastlp == NULL)
	  (*tree)->head[magic] = newone;
	else
	  lastlp->next = newone;
	((*tree)->n)++;
	if (cutfn != NULL) {
	  cutfn(&name, &nameend, item->name, build);
	  if (name != NULL)
	    (void)treefind(name, nameend, (Hashtable **)&(newone->other),
			   item, cutfn, build, transient, reuse, space,
			   datacols, data_number);
	}
      }
      else {  /* !build */
	for (newone = NULL, lp = (*tree)->head[0]; lp != NULL; TO_NEXT(lp)) {
	  if (genwildmatch(name, nameend, lp->name)) {
	    if (newone == NULL) {
	      newone = newtreeentry(name, nameend, item, transient, reuse,
				    space, data_number);
	      if (lastlp == NULL)
		(*tree)->head[magic] = newone;
	      else
		lastlp->next = newone;
	      ((*tree)->n)++;
	    }
	    graft((Hashtable **)&(newone->other), (Hashtable *)(lp->other),
		  space, data_number);
	  }
	}
	if (newone != NULL) {
	  if (cutfn != NULL) {
	    cutfn(&name, &nameend, item->name, build);
	    if (name != NULL)
	      (void)treefind(name, nameend, (Hashtable **)&(newone->other),
			     item, cutfn, build, transient, reuse, space,
			     datacols, data_number);
	  }
	}
      }
      return(newone);
    }
    else if (genstreq(name, nameend, lp->name)) {  /* found it */
      if (lp->own->reused)
	lp->own = newtreedata(lp->own, space, data_number);
      treescore(lp->own, item->own, datacols);
      if (cutfn != NULL) {
	cutfn(&name, &nameend, item->name, build);
	if (name != NULL)
	  (void)treefind(name, nameend, (Hashtable **)&(lp->other),
			 item, cutfn, build, transient, reuse, space,
			 datacols, data_number);
      }
      return(lp);
    }
    else {
      lastlp = lp;
      TO_NEXT(lp);
    }
  }
}

void graft(Hashtable **newone, Hashtable *old, Memman *space,
	   unsigned int data_number) {
  Hashindex *lp, *found;
  unsigned long magic;
  if (old != NULL) {
    for (magic = 0; magic < old->size; magic++) {
      for (lp = old->head[magic]; lp != NULL; TO_NEXT(lp)) {
	found = treefind(lp->name, strchr(lp->name, '\0'), newone, lp,
			 NULL, TRUE, FALSE, FALSE, space, NULL, data_number);
	graft((Hashtable **)&(found->other), (Hashtable *)(lp->other), space,
	      data_number);
      }
    }
  }
}

void allgraft(Hashtable *t, Memman *space, unsigned int data_number) {
  Hashindex *lp, *lp0;
  unsigned long magic;

  if (t != NULL) {
    for (magic = 1; magic < t->size; magic++) {
      for (lp = t->head[magic]; lp != NULL; TO_NEXT(lp)) {
	for (lp0 = t->head[0]; lp0 != NULL; TO_NEXT(lp0)) {
	  if (MATCHES(lp->name, lp0->name)) {
	    graft((Hashtable **)&(lp->other), (Hashtable *)(lp0->other),
		  space, data_number);
	  }
	}
	allgraft((Hashtable *)(lp->other), space, data_number);
      }
    }
  }
}

Hashindex *newtreeentry(char *name, char *nameend, Hashindex *item,
			logical transient, logical reuse, Memman *space,
			unsigned int data_number) {
  Hashindex *ans = (Hashindex *)submalloc(space, sizeof(Hashindex));

  if (*nameend == '\0' && !transient)
    ans->name = name;
  else {
    ans->name = (char *)submalloc(space, (size_t)(nameend - name + 1));
    memcpy((void *)(ans->name), (void *)name, (size_t)(nameend - name));
    ans->name[(size_t)(nameend - name)] = '\0';
  }
  if (reuse)
    ans->own = item->own;  /* will get newtreedata if hit a 2nd time */
  else
    ans->own = newtreedata(item->own, space, data_number);
  ans->other = NULL;
  ans->next = NULL;
  return(ans);
}

Hashentry *newtreedata(Hashentry *from, Memman *space,
		       unsigned int data_number) {
  Hashentry *ans;
  unsigned int i;

  ans = (Hashentry *)submalloc(space, sizeof(Hashentry));
  ans->data = (unsigned long *)submalloc(space,
					 data_number * sizeof(unsigned long));
  for (i = 0; i < data_number; i++)
    ans->data[i] = from->data[i];
  ans->bytes = from->bytes;
  ans->bytes7 = from->bytes7;
  ans->ispage = from->ispage;    /* this is good enough */
  ans->reused = FALSE;
  /* Basically, when we first create a node on the tree, we just store as its
     data a pointer to the data of the item which caused it to be created. But
     we can't accumulate more data there (that would change the original item),
     so if we hit it again, we call this function to create new space. Setting
     the "reused" flag to FALSE is a signal that we can safely accumulate in it
     on future hits. */
  return(ans);
}

void treescore(Hashentry *to, Hashentry *from,
	       choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2]) {
  choice i, j, k;

  if (datacols != NULL) {
    for (i = 0; i < OUTCOME_NUMBER; i++) {
      for (j = 0; (k = datacols[i][j][0]) >= 0; j++) {
	if (datacols[i][j][1] == DATE2)
	  to->data[k] = MAX(to->data[k], from->data[k]);
	else if (datacols[i][j][1] == FIRSTD2 && to->data[k] != 0 &&
		 from->data[k] != 0)
	  /* kludge for first entry */
	  to->data[k] = MIN(to->data[k], from->data[k]);
	else
	  to->data[k] += from->data[k];
      }
    }
    to->bytes += from->bytes;
    to->bytes7 += from->bytes7;
  }
}

Hashindex *sorttree(Outchoices *od, Hashtable *tree, choice rep, Floor *floor,
		    choice sortby, Floor *subfloor, choice subsortby,
		    logical alphaback, unsigned int level, Strlist *partname,
		    Alias *notcorrupt, choice requests, choice requests7,
		    choice pages, choice pages7, choice date, choice firstd,
		    unsigned long *totr, unsigned long *totr7,
		    unsigned long *totp, unsigned long *totp7,
		    double *totb, double *totb7, unsigned long *maxr,
		    unsigned long *maxr7, unsigned long *maxp,
		    unsigned long *maxp7, double *maxb, double *maxb7,
		    timecode_t *maxd, timecode_t *mind, Hashentry **badp,
		    unsigned long *badn, Memman *space,
		    choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2]) {
  Hashindex *gooditems, *baditems, *p, *np;
  Strlist *pn, sp;
  size_t need = (size_t)level + 3;
  Alias *ap;
  unsigned long i;
  logical ok;

  unhash(tree, &gooditems, &baditems);
  if (notcorrupt != NULL) {    /* NB notcorrupt only used for doms */
    baditems = (Hashindex *)submalloc(space, sizeof(Hashindex));
    baditems->name = LNGSTR_UNKDOMAIN;
    baditems->own = newhashentry(DATA_NUMBER, FALSE);
    baditems->other = NULL;
    baditems->next = NULL;
    for (p = gooditems, np = NULL; p != NULL; TO_NEXT(p)) {
      for (ok = FALSE, ap = notcorrupt; !ok && ap != NULL; TO_NEXT(ap)) {
	if (STREQ(p->name, ap->from))
	  ok = TRUE;
      }
      if (ok)
	np = p;
      else {   /* erase p from list */
	if (strchr(p->name, '*') == NULL && strchr(p->name, '?') == NULL)
	  debug('U', "%s", p->name);
	treescore(baditems->own, p->own, datacols);
	if (np == NULL)
	  gooditems = p->next;
	else
	  np->next = p->next;
      }
    }
  }   /* end notcorrupt != NULL */
  for (i = 0; i < tree->size; i++)
    tree->head[i] = NULL;
  for (pn = partname; pn != NULL; TO_NEXT(pn))
    need += strlen(pn->name);
  my_sort(&gooditems, &baditems, partname, &pn, &sp, need, rep, floor,
	  sortby, alphaback, od->wanthead[G(rep)], requests, requests7, pages,
	  pages7, date, firstd, totr, totr7, totp, totp7, totb, totb7, maxr,
	  maxr7, maxp, maxp7, maxb, maxb7, maxd, mind, (logical)(level != 0),
	  badp, badn, FALSE);
  for (p = gooditems; p != NULL; TO_NEXT(p)) {
    if (p->other != NULL) {
      (void)maketreename(partname, p, &pn, &sp, need, rep, FALSE);
      ((Hashtable *)(p->other))->head[0] =
	sorttree(od, (Hashtable *)(p->other), rep, subfloor, subsortby,
		 subfloor, subsortby, alphaback, level + 1, pn, NULL, requests,
		 requests7, pages, pages7, date, firstd, totr, totr7, totp,
		 totp7, totb, totb7, maxr, maxr7, maxp, maxp7, maxb, maxb7,
		 maxd, mind, NULL, NULL, space, datacols);
    }
  }
  return(gooditems);
}

void maketree(Tree *treex, Hashindex *gooditems, Hashindex *baditems,
	      choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2],
	      unsigned int data_number) {
  Hashindex *p;
  char *name, *nameend;

  for (p = gooditems; p != NULL; TO_NEXT(p)) {
    if (p->own != NULL) {
      name = NULL;
      treex->cutfn(&name, &nameend, p->name, FALSE);
      (void)treefind(name, nameend, &(treex->tree), p, treex->cutfn, FALSE,
		     FALSE, TRUE, treex->space, datacols, data_number);
    }
  }
  for (p = baditems; p != NULL; TO_NEXT(p)) {
    if (p->own != NULL) {
      name = NULL;
      treex->cutfn(&name, &nameend, p->name, FALSE);
      (void)treefind(name, nameend, &(treex->tree), p, treex->cutfn, FALSE,
		     FALSE, TRUE, treex->space, datacols, data_number);
    }
  }
}

void makederived(Derv *derv, Hashindex *gooditems, Hashindex *baditems,
		 unsigned char convfloor, logical multibyte, choice rep,
		 choice datacols[OUTCOME_NUMBER][DATACOLS_NUMBER][2],
		 unsigned int data_number) {
  extern Hashentry *blank_entry;

  Hashindex *p;
  Hashentry *f;
  char *name, *nameend;
  size_t len;
  logical donegood;

  for (p = gooditems, donegood = FALSE; p != NULL || !donegood; ) {
    if (p == NULL) {
      donegood = TRUE;
      p = baditems;
    }
    else {
      if (p->own != NULL) {
	name = NULL;
	for (derv->cutfn(&name, &nameend, p->name, derv->arg);
	     name != NULL;
	     derv->cutfn(&name, &nameend, p->name, derv->arg)) {
	  len = nameend - name;
	  memcpy(submalloc(derv->space, len + 1), (void *)name, len);
	  *((char *)(derv->space->next_pos) - 1) = '\0';
	                       /* = curr_pos + len */
	  f = (Hashentry *)(hashfind(derv->space, &(derv->table), data_number,
				     NULL, UNSET, NULL, NULL, "", 0, FALSE,
				     convfloor, multibyte, rep, FALSE)->other);
	  if (!ENTRY_BLANK(f))
	    treescore(f, p->own, datacols);
	}
      }
      TO_NEXT(p);
    }
  }
}

char *maketreename(Strlist *pn, Hashindex *p, Strlist **newpn, Strlist *space,
		   size_t need, choice rep, logical delims) {
  /* Compile name from strlist. We end up doing the most-significant portion
     several times, but it really is the best way, at least if the name is
     little-endian, otherwise we have to try and work out which portion we
     want when we go back down a level. Further calls will overwrite name. */
  static char *name = NULL;
  static size_t len = 0;
  logical back;
  char glue;
  char *t;
  Strlist *sp;
  size_t l;

  if (rep == REP_OS)    /* just use last component of name */
    return(p->name);

  if (rep == REP_TYPE || rep == REP_DOM || rep == REP_ORG) {
    glue = '.';
    /* back = TRUE unless numerical subdomains */
    if (rep == REP_DOM && pn != NULL && STREQ(pn->name, LNGSTR_UNRESOLVED))
      back = FALSE;
    else if (rep == REP_ORG && pn != NULL &&
	     ISDIGIT(pn->name[strlen(pn->name) - 1]))
      back = FALSE;
    else
      back = TRUE;
  }
  else {
    back = FALSE;
    if (rep == REP_DIR || rep == REP_REFSITE)
      glue = '/';
    else if (rep == REP_BROWSUM)
      glue = '.';  /* see below */
    else
      glue = '?';
  }

  /* make newpn */
  space->name = p->name;
  space->next = NULL;
  ENSURE_LEN(name, len, need + strlen(p->name));
  if (back || pn == NULL) {
    space->next = pn;
    *newpn = space;
  }
  else {
    for (sp = pn; sp->next != NULL; TO_NEXT(sp))
      ;
    sp->next = space;
    space->next = NULL;
    *newpn = pn;
  }

  /* assemble newpn */
  sp = *newpn;
  if (rep == REP_DOM && !back) /* i.e. numerical subdomain: special case */
    TO_NEXT(sp);
  t = name;
  if (rep == REP_TYPE && delims && !STREQ(p->name, LNGSTR_NOEXT) &&
      !STREQ(p->name, LNGSTR_BRKDIRS))
    *(t++) = glue;      /* delimiter at start */
  if (rep == REP_BROWSUM && sp != NULL) {
    /* special case to enable two different delimiters */
    l = strlen(sp->name);
    memcpy(t, sp->name, l);
    t += l;
    if (sp->next != NULL)
      *(t++) = '/';
    TO_NEXT(sp);
  }
  for ( ; sp != NULL; TO_NEXT(sp)) {
    l = strlen(sp->name);
    memcpy(t, sp->name, l);
    t += l;
    if (sp->next != NULL)
      *(t++) = glue;
  }
  if (delims && (rep == REP_REFSITE || rep == REP_DIR) &&
      !STREQ(p->name, LNGSTR_NODIR) && !STREQ(p->name, LNGSTR_ROOTDIR))
    *(t++) = glue;      /* delimiter at end */
  *t = '\0';

  return(name);
}

/* genstreq is like streq but takes double-pointer strings */
logical genstreq(char *a, char *b, char *t) {
  for ( ; *a == *t && a < b; a++)
    t++;
  if (a == b && *t == '\0')
    return(TRUE);
  else
    return(FALSE);
}

/* Now the various nextname functions, which vary by type of item. There are
   two patterns, cutfnp and dcutfnp. The former is used in building a tree
   report, the latter in building a dervrep.

   Pattern for cutfnp (up to pnextname) is
   void ?nextname(char **name, char **nameend, char *whole, logical build).
   whole is whole name; [*name, *nameend) is last chunk (*name == NULL if
   none); build is because behaviour of leading/trailing delimiters may be
   different if building tree; return new [*name, *nameend), or *name = NULL
   if no more; never return NULL if given NULL.

   From Bnextname onwards, the functions follow dcutfnp. They look like
   void ?nextname(char **name, char **nameend, char *whole, void *arg).
   Otherwise they are the same, except Nnextname and nnextname can return NULL
   if given NULL. Bnextname and Pnextname return NULL if _and only if_ they
   are not given NULL, and we make use of this fact in checkonerep(). */

void rnextname(char **name, char **nameend, char *whole, logical build) {
  if (*name == NULL) {
    *name = whole;
    if ((*nameend = strchr(whole + 1, '?')) == NULL)
      *nameend = strchr(whole, '\0');
  }
  else if (IS_EMPTY_STRING(*nameend))
    *name = NULL;
  else {
    *name = *nameend + 1;
    *nameend = strchr(*name, '\0');
  }
}

void inextname(char **name, char **nameend, char *whole, logical build) {
  static char *s0 = LNGSTR_NODIR;
  static char *s1 = LNGSTR_ROOTDIR;
  logical first = FALSE;

  if (*name == NULL) {
    *name = whole;
    first = TRUE;
  }
  else if (IS_EMPTY_STRING(*nameend) || IS_EMPTY_STRING((*nameend) + 1) ||
	   **nameend == '?' || *((*nameend) + 1) == '?') {
    /* including s0 and s1 */
    *name = NULL;
    return;
  }
  else
    *name = *nameend + 1;

  for (*nameend = *name + (ptrdiff_t)(first && **name != '\0');
       **nameend != '/' && **nameend != '\0' && **nameend != '?'; (*nameend)++)
    ;  /* run nameend to next '/', '\0' or '?' */
  if (**nameend == '/') {
    for ( ; *((*nameend) + 1) == '/'; (*nameend)++)
      ;  /* run to last consecutive '/' */
  }
  if ((**nameend == '\0' || **nameend == '?') && !build) {
    if (first) {
      if (**name != '/')
	*name = s0;
      else
	*name = s1;
      *nameend = strchr(*name, '\0');
    }
    else
      *name = NULL;
  }
}

static logical isnum = FALSE;  /* used in onextname() and Znextname() */

void onextname(char **name, char **nameend, char *whole, logical build) {
  static char *s0 = LNGSTR_UNRESOLVED;
  static char *s1 = LNGSTR_NODOMAIN;

  if (*name == NULL) {
    isnum = FALSE;
    *nameend = strchr(whole, '\0');
    if (!build) {
      if (strchr(whole, '.') == NULL) {
	*name = s1;
	*nameend = strchr(*name, '\0');
	debug('V', "%s", whole);
	return;
      }
      if (ISDIGIT(*(*nameend - 1))) {
	*name = s0;
	*nameend = strchr(*name, '\0');
	isnum = TRUE;
	return;
      }
    }
    else if (ISDIGIT(*whole) &&  /* test for num. more subtle while building */
	     (ISDIGIT(*(*nameend - 1)) || *(*nameend - 1) == '*')) {
      *name = s0;
      *nameend = strchr(*name, '\0');
      isnum = TRUE;
      return;
    }
    for (*name = *nameend - 1; **name != '.' && *name != whole; (*name)--)
      ;
    if (**name == '.')
      (*name)++;
  }
  else if (isnum) {
    if (*name == s0)
      *name = whole;
    else if (IS_EMPTY_STRING(*nameend) || IS_EMPTY_STRING((*nameend) + 1)) {
      *name = NULL;
      return;
    }
    else
      *name = *nameend + 1;
    for (*nameend = *name; **nameend != '.' && **nameend != '\0'; (*nameend)++)
      ;   /* run to first '.' or '\0' */
  }
  else if (*name == s1 || *name - whole < 2)
    *name = NULL;
  else {
    *nameend = *name - 1;
    for (*name -= 2; **name != '.' && *name != whole; (*name)--)
      ;
    if (**name == '.')
      (*name)++;
  }
}

void tnextname(char **name, char **nameend, char *whole, logical build) {
  static char *s0 = LNGSTR_NOEXT;
  static char *s1 = LNGSTR_BRKDIRS;

  logical first = FALSE;

  if (*name == NULL) {
    if ((*nameend = strchr(whole, '?')) == NULL)
      *nameend = strchr(whole, '\0');
    first = TRUE;
  }
  else if (*name == s0 || *name == s1 || *name == whole ||
	   *name == whole + 1 || **name == '/') {
    *name = NULL;
    return;
  }
  else
    *nameend = *name - 1;

  *name = *nameend - 1;
  if (**name == '/' && first) {
    *name = s1;
    *nameend = strchr(*name, '\0');
    return;
  }
  for ( ; **name != '.' && **name != '/' && *name != whole; (*name)--)
    ;
  if (**name == '.' && (*name) + 1 != *nameend)
    (*name)++;
  else if (build)
    return;
  else if (first) {
    *name = s0;
    *nameend = strchr(*name, '\0');
  }
  else
    *name = NULL;
}

void snextname(char **name, char **nameend, char *whole, logical build) {
  if (*name == NULL) {
    *name = whole;
    for (*nameend = *name; **nameend != ':' && **nameend != '\0'; (*nameend)++)
      ;
    if (*nameend == '\0') {
      *nameend = *name;
      return;
    }
    (*nameend)++;
    if (**nameend == '/')
      (*nameend)++;
    if (**nameend == '/')
      (*nameend)++;
    for ( ; **nameend != '/' && **nameend != '\0'; (*nameend)++)
      ;
  }
  else
    inextname(name, nameend, whole, build);
}

void Znextname(char **name, char **nameend, char *whole, logical build) {
  static char *s1 = LNGSTR_NODOMAIN;
  static char *s2 = LNGSTR_UNKDOMAIN;
  extern Strpairlist **domlevels;

  Strpairlist *ap;
  unsigned int c;

  if (*name == NULL) {
    isnum = FALSE;
    *nameend = strchr(whole, '\0');
    if (ISDIGIT(*(*nameend - 1)) ||
	(build && ISDIGIT(*whole) && *(*nameend - 1) == '*')) { /* num. addr */
      *name = whole;
      for (c = 0, *nameend = *name;
	   *nameend - *name <= 3 && ISDIGIT(**nameend); (*nameend)++) {
	c *= 10;
	c += **nameend - '0';
      }   /* c is now first component of IP address */
      if (**nameend != '.' || *nameend == *name || c > 255) {
	/* coz of this check, Org Rep can get more s1's & s2's than Dom Rep */
	if (strchr(*name, '.') == NULL)
	  *name = s1;
	else
	  *name = s2;
	*nameend = strchr(*name, '\0');
	return;
      }
      /* change c to be number of components required */
      if (c >= 128 || (c >= 61 && c <= 68) || c == 24 || c == 80 || c == 81)
	c = 2;
      else
	c = 1;
      for ( ; c > 1; c--) {
	(*nameend)++;
	while (ISDIGIT(**nameend))
	  (*nameend)++;
	if (**nameend != '.' && !build) {
	  *name = s2;
	  *nameend = strchr(*name, '\0');
	  return;
	}
      }
      isnum = TRUE;
      return;
    }
    /* non-numerical addresses */
    for (*name = *nameend; **name != '.' && *name != whole; (*name)--)
      ;
    if (*name == whole) {
      if (!build) {
	*name = s1;
	*nameend = strchr(*name, '\0');
      }
      return;
    }
    (*name)++;
    c = 26 * ((int)(**name - 'a'));
    if (**name != '\0')
      c += (int)(*((*name) + 1) - 'a');
    if (c >= DOMLEVEL_NUMBER)
      c = DOMLEVEL_NUMBER - 1;
    for (ap = domlevels[c]; ap != NULL && !STREQ(*name, ap->name);
	 TO_NEXT(ap))
      ;
    if (ap == NULL) {  /* domain not found */
      *name = s2;
      *nameend = strchr(*name, '\0');
      return;
    }
    /* otherwise we've now found the right number of levels */
    (*name)--;
    for (c = (unsigned int)(*(ap->data) - '0'); c > 1 && *name != whole;
	 c--) {
      for((*name)--; **name != '.' && *name != whole; (*name)--)
	;
    }
    if (*name == whole && (unsigned int)(*(ap->data) - '0') - c >= 2) {
      /* don't use whole name even if <= levels (but don't just use domain) */
      for ( ; **name != '.'; (*name)++)
	;
    }
    if (**name == '.')
    (*name)++;
  }
  else
    onextname(name, nameend, whole, build);
}

void bnextname(char **name, char **nameend, char *whole, logical build) {
  /* See Bnextname() below for annotation */

  if (*name == NULL) {
    *name = whole;
    for (*nameend = *name; **nameend != '/' && **nameend != '\0';
	 (*nameend)++)
      ;
  }
  else if (**nameend == '/') {

    *name = *nameend + 1;
    for (*nameend = *name; **nameend != '.' && **nameend != ' ' &&
	   **nameend != '\0'; (*nameend)++)
      ;
  }
  else if (**nameend == '.') {
    *name = *nameend + 1;
    for (*nameend = *name; **nameend != ' ' && **nameend != '\0'; (*nameend)++)
      ;
  }
  else
    *name = NULL;
}

void pnextname(char **name, char **nameend, char *whole, logical build) {

  if (*name == NULL) {
    *name = whole;
    for (*nameend = *name; **nameend != ':' && **nameend != '\0';
	 (*nameend)++)
      ;
  }
  else if (**nameend == ':') {
    *name = *nameend + 1;
    for (*nameend = *name; **nameend != '\0'; (*nameend)++)
      ;
  }
  else
    *name = NULL;
}

/* When compiling the Browser Summary, browser names go through three
   functions. First Bnextname() locates the bit corresponding to the browser
   name and version (this is most of the work). Then do_aliasb() makes slight
   adjustments to get it into canonical form (Name/v.v). Then bnextname()
   does the actual tree-ification of this canonical form.                    */
void Bnextname(char **name, char **nameend, char *whole, void *arg) {
  /* NB "arg" is ignored */
	char *c;
	static char *s1 = "Netscape (compatible)";
	size_t len;
	int bIsMsie = 0;

	if (*name == NULL) {
		/* First recognise some strings anywhere in the name (mostly claiming to be
		   "Mozilla (compatible)"). The order may matter, for example if some
		   browsers claim to both be Mozilla (compatible) and MSIE (compatible).
		   Note that "len =" is simple assignment and will always return true; it's
		   just a way of setting len. */
		if (
			((*name = strstr(whole, "Mosaic")) != NULL && (len = 6)) ||
			((*name = strstr(whole, "mosaic")) != NULL && (len = 6)) ||
			((*name = strstr(whole, "Konqueror")) != NULL && (len = 9)) ||
			((*name = strstr(whole, "Galeon")) != NULL && (len = 6)) ||
			((*name = strstr(whole, "Phoenix")) != NULL && (len = 7)) ||
			((*name = strstr(whole, "Firebird")) != NULL && (len = 8)) ||
			((*name = strstr(whole, "Firefox")) != NULL && (len = 7)) ||
			((*name = strstr(whole, "Chimera")) != NULL && (len = 7)) ||
			((*name = strstr(whole, "Camino")) != NULL && (len = 6)) ||
			((*name = strstr(whole, "Edge")) != NULL && (len = 4)) ||
			((*name = strstr(whole, "Chrome")) != NULL && (len = 6)) ||
			((*name = strstr(whole, "Safari")) != NULL && (len = 6)) ||
			((*name = strstr(whole, "WebTV")) != NULL && (len = 5)) ||
			((*name = strstr(whole, "Opera")) != NULL && (len = 5)) ||
			((*name = strstr(whole, "NetFront")) != NULL && (len = 8)) || 
			((*name = strstr(whole, "IEMobile")) != NULL && (len = 8)) || 
			((*name = strstr(whole, "Trident")) != NULL && (len = 7) && (bIsMsie = 1)) || 
			((*name = strstr(whole, "MSIE")) != NULL && (len = 4))
		) {
			*nameend = *name + len;
			
			/* This section is used to detect force MSIE based upon the rendering engine
			   being used rather than the user agent.
			   The Trident (MSHTML) identifier identified the actual browser version
			   http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
			   While the MSIE flag identifies the compatiblity mode alias in use (if any)
			   Only if compatiblity mode is off will the browser version and renderer version
			   synchronise. e.g. (Trident/5.0 == MSIE 9.0) == Standards Mode IE 9
			*/
			if (bIsMsie) {
				if ((c = strstr(*name, "Trident")) != NULL) {
					c = c + 7;
					if (*c == '/') {
						*c++;
						len = 4;
						if (*(c) == '4') {
							*name = "MSIE 8.0";
							*nameend = *name + len;
						} else if (*(c) == '5') {
							*name = "MSIE 9.0";
							*nameend = *name + len;
						} else if (*(c) == '6') {
							*name = "MSIE 10.0";
							*nameend = *name + len;
						} else if (*(c) == '7') {
							*name = "MSIE 11.0";
							*nameend = *name + len;
						}
					}
				}
			}
				
			if (**nameend == '/' || **nameend == ' ') {
				for ((*nameend)++; ISALNUM(**nameend) || **nameend == '.' || **nameend == '-' || **nameend == '+'; (*nameend)++)
					;  /* run to end of version number */
					
			} else if (headmatch(*name, "Galeon") /* Galeon uses "Galeon; v.vv" */ && **nameend == ';' && *(*nameend + 1) == ' ' && ISDIGIT(*(*nameend + 2))) {
				for ((*nameend) += 2; ISALNUM(**nameend) || **nameend == '.' || **nameend == '-' || **nameend == '+'; (*nameend)++)
					;
			}
		} else if (headmatch(whole, "Mozilla")) {
			if (strstr(whole + 9, "compatible") || strstr(whole + 9, "Compatible")) {
				*name = s1;
				*nameend = s1 + 21;
			} else {  /* probably genuine Netscape/Mozilla */
				*name = whole;
				/* Mozilla has version number much later so keep the whole string */
				if (*(*name + 8) == '5' || (*nameend = strchr(whole + 7, ' ')) == NULL)
					*nameend = strchr(whole + 7, '\0');
			}
	    } else {
			*name = whole;
			*nameend = strchr(whole, '\0');
	    }
	} else {
		*name = NULL;
	}
}

void Pnextname(char **name, char **nameend, char *whole, void *arg) {
  char *c, *d;

	if (*name == NULL) {

		if (arg != NULL && included(whole, FALSE, (Include *)arg)) {
		  *name = "Robots";
		  *nameend = strchr(*name, '\0');
		  return;
		}

		if (headmatch(whole, "Mozilla")) {
			whole += 7;  /* just to save searching time */
		}

		/*
		 *	First find Windows versions, starting with "Windows" or "WinNT" or "Win9" 
		 *	Sets c = NULL if Windows or WinNT are not present
		 */
		if ((c = strstr(whole, "Windows")) != NULL) {
			c += 7;
			if (*c == ';') {
			/* Mozilla/5 uses strings like "Windows; U; Win98" so we have to look for the second Windows or Win. */
				if ((d = strstr(c + 1, "Windows")) != NULL) {
					c = d + 7;
				} else if ((d = strstr(c + 1, "WinNT")) != NULL || (d = strstr(c + 1, "Win9")) != NULL) {
					c = d + 3;
				}
			 }
			if (*c == ' ') {
				c++;
			}
		} else if ((c = strstr(whole, "WinNT")) != NULL || (c = strstr(whole, "Win9")) != NULL) {
			c += 3; // Progress past Win
		}


		/* We did find "Windows" or "Win" */
		if (c != NULL) { 

			if (*c == ' ') {
				c++;
			}
			
			if (*c == '9' && *(c + 1) == '5') {
				*name = "Windows:Windows 95";
			} else if (*c == '9' && *(c + 1) == '8') {
				if (strstr(c, "Win 9x 4.9")) {
					*name = "Windows:Windows ME";
				} else {
					*name = "Windows:Windows 98";
				}
			} else if (*c == 'N' && *(c + 1) == 'T') {
				/* advance to NT version number, which corresponds to advertised OS */
				c += 2;
				if (*c == ' ') {
					c++;
				}
				if (*c == '5') {
					if (*(c + 1) == '.' && (*(c + 2) == '0')) {
						*name = "Windows:Windows 2000";
					} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
						/* For some Very Strange Reason Windows Phone 6.5 appears after a Windows XP UA */
						if (strstr(whole, "Windows Phone 6.5") != NULL) {
							*name = "Windows:Windows Phone 6.5";
						} else {
							*name = "Windows:Windows XP";
						}
					} else if (*(c + 1) == '.' && (*(c + 2) == '2')) {
						*name = "Windows:Windows Server 2003";
					} else {
						*name = "Windows:Unknown Windows";
					}
				} else if (*c == '6') {
					if (*(c + 1) == '.' && (*(c + 2) == '0')) {
						*name = "Windows:Windows Vista / Server 2008";
					} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
						*name = "Windows:Windows 7 / Server 2008 R2";
					} else if (*(c + 1) == '.' && (*(c + 2) == '2')) {
						*name = "Windows:Windows 8.0 / Server 2012";
					} else if (*(c + 1) == '.' && (*(c + 2) == '3')) {
						*name = "Windows:Windows 8.1 / Server 2012 R2";
					} else {
						*name = "Windows:Unknown Windows";
					}
				} else if (*c >= '7' && *c <= '9') {
					*name = "Windows:Unknown Windows";
				} else if (*c == '1' && (*(c + 1) == '0')) {
					if (*(c + 2) == '.' && (*(c + 3) == '0')) {
						*name = "Windows:Windows 10 / Server 2016 / Server 2019";
					} else {
						*name = "Windows:Unknown Windows";
					}
				} else if (*c == '1' && (*(c + 1) == '1')) {
					if (*(c + 2) == '.' && (*(c + 3) == '0')) {
						*name = "Windows:Windows 11 / Server 2022";
					} else {
						*name = "Windows:Unknown Windows";
					}
				} else {
					*name = "Windows:Windows NT 4.0";
				}
			} else if (*c == 'C' && *(c + 1) == 'E') {

				*name = "Windows:Windows CE";
			
			} else if (*c == 'P' && *(c + 1) == 'h'&& *(c + 2) == 'o' && *(c + 3) == 'n' && *(c + 4) == 'e') { // 

				/* Windows Phone: advance to version number after "Phone OS ", which corresponds to advertised OS */
				c += 5; // Skip 'Phone'
				if (*c == ' ') {
					c++;
				}

				/* "Windows Phone Search (Windows Phone OS 7.10;NOKIA;Lumia 710;7.10;7740)" seems to be legal, note NO Mozilla tag?? */
				if (*c == 'S' && *(c + 1) == 'e' && *(c + 2) == 'a') {
					c += 6; // Skip 'Search'
					if (*c == ' ') {
						c++;
					}
					if (*c == '(' && *(c + 1) == 'W' && *(c + 2) == 'i') {
						c += 15; // Skip '(Windows Phone '
					}
				}

				/* Windows Phone 6.5 appears as NT 5.1 (dealt with elsewhere), WP 7 has "OS" as the next field, WP 7+ has OS in it 
				 * Windows Phone 8, 8.1 and 10.0 likely do not have 'OS'
				 */
				if (*c == 'O' && *(c + 1) == 'S') {
					c += 2; // Skip 'OS'
				}
					if (*c == ' ') {
						c++;
					}

					if (*c == '7') {

						if (*(c + 1) == '.' && (*(c + 2) == '0')) {
							*name = "Windows:Windows Phone 7.0";
						} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
							*name = "Windows:Windows Phone 7.5";
						} else if (*(c + 1) == '.' && (*(c + 2) == '5')) {
							*name = "Windows:Windows Phone 7.5";
						} else if (*(c + 1) == '.' && (*(c + 2) == '8')) {
							*name = "Windows:Windows Phone 7.8";
						} else {
							*name = "Windows:Windows Phone Unknown";
						}

					} else if  (*c == '8') {

						if (*(c + 1) == '.' && (*(c + 2) == '0')) {
							*name = "Windows:Windows Phone 8.0";
						} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
							*name = "Windows:Windows Phone 8.1";
						} else {
							*name = "Windows:Windows Phone Unknown";
						}

					} else if  (*c == '1' && (*(c + 1) == '0')) {

						if (*(c + 2) == '.' && (*(c + 3) == '0')) {
							*name = "Windows:Windows Phone 10.0";
						} else {
							*name = "Windows:Windows Phone Unknown";
						}


					} else {
						*name = "Windows:Windows Phone Unknown";
					}

/*				} else {
					*name = "Windows:Windows Phone Unknown";
				}*/
				
		  /* next three not MSIE, but some other vendor might use them */
			} else if (*c == 'X' && *(c + 1) == 'P') {
				*name = "Windows:Windows XP";
			} else if (*c == '2' && *(c + 1) == '0' && *(c + 2) == '0' && *(c + 3) == '0') {
				*name = "Windows:Windows 2000";
			} else if (*c == 'M' && (*(c + 1) == 'E' || (*(c + 1) == 'e') || headmatch(c + 1, "illennium"))) {
				*name = "Windows:Windows ME";
			} else if (*c == '3' && *(c + 1) == '.' && *(c + 2) == '1') {
				*name = "Windows:Windows 3.1x / NT 3.51";
			} else if ((*c == '1' && *(c + 1) == '6') || strstr(c + 1, "16bit") || strstr(c + 1, "16-bit")) {
				*name = "Windows:Windows 16-bit";
			} else if ((*c == '3' && *(c + 1) == '2') || strstr(c + 1, "32bit") || strstr(c + 1, "32-bit")) {
				*name = "Windows:Windows 32-bit";
			} else {
				*name = "Windows:Unknown Windows";
			}
		}


		//				printf("!!!x");
			// Remember to handle all nulls!

		/* Android operating systems */
		else if ((c = strstr(whole, "Android")) != NULL) {
			c += 7;
			if (*c == ' ') {
			c++;
			if (*c == '0') {
				if (*(c + 1) == '.' && (*(c + 2) == '5')) {				// Adroid 0.5
					*name = "Android:Android 0.5";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if ((*c == '1') && (*(c + 1) == '0')) {				// Android 10
				if (*(c + 2) == ';') {
					*name = "Android:Android 10.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '0')) {
					*name = "Android:Android 10.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '1')) {
					*name = "Android:Android 10.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if ((*c == '1') && (*(c + 1) == '1')) {				// Android 11
				if (*(c + 2) == ';') {
					*name = "Android:Android 11.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '0')) {
					*name = "Android:Android 11.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '1')) {
					*name = "Android:Android 11.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if ((*c == '1') && (*(c + 1) == '2')) {				// Android 12
				if (*(c + 2) == ';') {
					*name = "Android:Android 12.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '0')) {
					*name = "Android:Android 12.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '1')) {
					*name = "Android:Android 12.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if ((*c == '1') && (*(c + 1) == '3')) {				// Android 13
				if (*(c + 2) == ';') {
					*name = "Android:Android 13.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '0')) {
					*name = "Android:Android 13.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '1')) {
					*name = "Android:Android 13.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if ((*c == '1') && (*(c + 1) == '4')) {				// Android 14
				if (*(c + 2) == ';') {
					*name = "Android:Android 14.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '0')) {
					*name = "Android:Android 14.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '1')) {
					*name = "Android:Android 14.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if ((*c == '1') && (*(c + 1) == '5')) {				// Android 15
				if (*(c + 2) == ';') {
					*name = "Android:Android 15.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '0')) {
					*name = "Android:Android 15.0";
				} else if (*(c + 2) == '.' && (*(c + 3) == '1')) {
					*name = "Android:Android 15.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '1') {										// Android 1
				if (*(c + 1) == ';') {
					*name = "Android:Android 1.0";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 1.0";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 1.1 (Petit Four)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '5')) {
					*name = "Android:Android 1.5 (Cupcake)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '6')) {
					*name = "Android:Android 1.6 (Doughnut)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '2') {										// Android 2
				if (*(c + 1) == ';') {
					*name = "Android:Android 2.0 (Eclair)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 2.0 (Eclair)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 2.1 (Eclair)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '2')) {
					*name = "Android:Android 2.2 (Froyo)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '3')) {
					*name = "Android:Android 2.3 (Gingerbread)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '3') {										// Android 3
				if (*(c + 1) == ';') {
					*name = "Android:Android 3.0 (Honeycomb)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 3.0 (Honeycomb)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 3.1 (Honeycomb)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '2')) {
					*name = "Android:Android 3.2 (Honeycomb)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '4') {										// Android 4
				if (*(c + 1) == ';') {
					*name = "Android:Android 4.0 (Ice Cream Sandwich)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 4.0 (Ice Cream Sandwich)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 4.1 (Jelly Bean)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '2')) {
					*name = "Android:Android 4.2 (Jelly Bean)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '3')) {
					*name = "Android:Android 4.3 (Jelly Bean)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '4')) {
					*name = "Android:Android 4.4 (KitKat)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '5') {										// Android 5
				if (*(c + 1) == ';') {
					*name = "Android:Android 5.0 (Lollipop)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 5.0 (Lollipop)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 5.1 (Lollipop)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '6') {										// Android 6
				if (*(c + 1) == ';') {
					*name = "Android:Android 6.0 (Marshmallow)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 6.0 (Marshmallow)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '7') {										// Android 7
				if (*(c + 1) == ';') {
					*name = "Android:Android 7.0 (Nougat)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 7.0 (Nougat)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 7.1 (Nougat)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '8') {										// Android 8
				if (*(c + 1) == ';') {
					*name = "Android:Android 8.0 (Oreo)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 8.0 (Oreo)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 8.1 (Oreo)";
				} else {
					*name = "Android:Unknown Android";
				}
			} else if (*c == '9') {										// Android 9
				if (*(c + 1) == ';') {
					*name = "Android:Android 9.0 (Pie)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '0')) {
					*name = "Android:Android 9.0 (Pie)";
				} else if (*(c + 1) == '.' && (*(c + 2) == '1')) {
					*name = "Android:Android 9.1";
				} else {
					*name = "Android:Unknown Android";
				}
			} else {
				*name = "Android:Unknown Android";
			}

			} else {
			  *name = "Android:Unknown Android";
			}
		}

		/* Now non-Windows operating systems */
		else if ((c = strstr(whole, "iPhone; U; CPU")) != NULL || (c = strstr(whole, "iPhone; CPU")) != NULL) {
			//c += 10;
			if ((c = strstr(whole, "CPU like Mac OS X")) != NULL) {
				*name = "iOS (Apple):iPhone (OS 1)";
			} else if ((c = strstr(whole, "CPU iPhone OS")) != NULL) {
				c += 13;
				if (*c == ' ') {
					c++;
					if (*c == '2') {
						*name = "iOS (Apple):iPhone (OS 2)";
					} else if (*c == '3') {
						*name = "iOS (Apple):iPhone (OS 3)";
					} else if (*c == '4') {
						*name = "iOS (Apple):iPhone (iOS 4)";
					} else if (*c == '5') {
						*name = "iOS (Apple):iPhone (iOS 5)";
					} else if (*c == '6') {
						*name = "iOS (Apple):iPhone (iOS 6)";
					} else if (*c == '7') {
						*name = "iOS (Apple):iPhone (iOS 7)";
					} else if (*c == '8') {
						*name = "iOS (Apple):iPhone (iOS 8)";
					} else if (*c == '9') {
						*name = "iOS (Apple):iPhone (iOS 9)";
					} else if (*c == '1' && *(c + 1) == '0') {
						*name = "iOS (Apple):iPhone (iOS 10)";
					} else if (*c == '1' && *(c + 1) == '1') {
						*name = "iOS (Apple):iPhone (iOS 11)";
					} else if (*c == '1' && *(c + 1) == '2') {
						*name = "iOS (Apple):iPhone (iOS 12)";
					} else if (*c == '1' && *(c + 1) == '3') {
						*name = "iOS (Apple):iPhone (iOS 13)";
					} else if (*c == '1' && *(c + 1) == '4') {
						*name = "iOS (Apple):iPhone (iOS 14)";
					} else if (*c == '1' && *(c + 1) == '5') {
						*name = "iOS (Apple):iPhone (iOS 15)";
					} else if (*c == '1' && *(c + 1) == '6') {
						*name = "iOS (Apple):iPhone (iOS 16)";
					} else if (*c == '1' && *(c + 1) == '7') {
						*name = "iOS (Apple):iPhone (iOS 17)";
					} else if (*c == '1' && *(c + 1) == '8') {
						*name = "iOS (Apple):iPhone (iOS 18)";
					} else if (*c == '1' && *(c + 1) == '9') {
						*name = "iOS (Apple):iPhone (iOS 19)";
					} else {
						*name = "iOS (Apple):iPhone Unknown";
					}

				 } else {
					*name = "iOS (Apple):iPhone Unknown";
				 }
			} else {
				*name = "iOS (Apple):iPhone Unknown";
			}
		} else if ((c = strstr(whole, "iPad; U; CPU")) != NULL || (c = strstr(whole, "iPad; CPU")) != NULL) {

			if ((c = strstr(whole, "CPU OS")) != NULL) {
				c += 6;
				if (*c == ' ') {
					c++;
					if (*c == '3') {
						*name = "iOS (Apple):iPad (OS 3)";
					} else if (*c == '4') {
						*name = "iOS (Apple):iPad (iOS 4)";
					} else if (*c == '5') {
						*name = "iOS (Apple):iPad (iOS 5)";
					} else if (*c == '6') {
						*name = "iOS (Apple):iPad (iOS 6)";
					} else if (*c == '7') {
						*name = "iOS (Apple):iPad (iOS 7)";
					} else if (*c == '8') {
						*name = "iOS (Apple):iPad (iOS 8)";
					} else if (*c == '9') {
						*name = "iOS (Apple):iPad (iOS 9)";
					} else if (*c == '1' && *(c + 1) == '0') {
						*name = "iOS (Apple):iPad (iOS 10)";
					} else if (*c == '1' && *(c + 1) == '1') {
						*name = "iOS (Apple):iPad (iOS 11)";
					} else if (*c == '1' && *(c + 1) == '2') {
						*name = "iOS (Apple):iPad (iOS 12)";
					} else if (*c == '1' && *(c + 1) == '3') {
						*name = "iOS (Apple):iPad (iOS 13)";
					} else if (*c == '1' && *(c + 1) == '4') {
						*name = "iOS (Apple):iPad (iOS 14)";
					} else if (*c == '1' && *(c + 1) == '5') {
						*name = "iOS (Apple):iPad (iOS 15)";
					} else {
						*name = "iOS (Apple):iPad Unknown";
					}
				 } else {
					*name = "iOS (Apple):iPad Unknown";
				 }
			} else {
				*name = "iOS (Apple):iPad Unknown";
			}
		} else if ((c = strstr(whole, "iPod; U; CPU")) != NULL || (c = strstr(whole, "iPod; CPU")) != NULL) {
			if ((c = strstr(whole, "CPU like Mac OS X")) != NULL) {
				*name = "iOS (Apple):iPod (OS 1)";
			} else if ((c = strstr(whole, "CPU iPhone OS")) != NULL) {
				c += 13;
				if (*c == ' ') {
					c++;
					if (*c == '2') {
						*name = "iOS (Apple):iPod (OS 2)";
					} else if (*c == '3') {
						*name = "iOS (Apple):iPod (OS 3)";
					} else if (*c == '4') {
						*name = "iOS (Apple):iPod (iOS 4)";
					} else if (*c == '5') {
						*name = "iOS (Apple):iPod (iOS 5)";
					} else if (*c == '6') {
						*name = "iOS (Apple):iPod (iOS 6)";
					} else if (*c == '7') {
						*name = "iOS (Apple):iPod (iOS 7)";
					} else if (*c == '8') {
						*name = "iOS (Apple):iPod (iOS 8)";
					} else if (*c == '9') {
						*name = "iOS (Apple):iPod (iOS 9)";
					} else if (*c == '1' && *(c + 1) == '0') {
						*name = "iOS (Apple):iPod (iOS 10)";
					} else if (*c == '1' && *(c + 1) == '1') {
						*name = "iOS (Apple):iPod (iOS 11)";
					} else if (*c == '1' && *(c + 1) == '2') {
						*name = "iOS (Apple):iPod (iOS 12)";
					} else if (*c == '1' && *(c + 1) == '3') {
						*name = "iOS (Apple):iPod (iOS 13)";
					} else if (*c == '1' && *(c + 1) == '4') {
						*name = "iOS (Apple):iPod (iOS 14)";
					} else if (*c == '1' && *(c + 1) == '5') {
						*name = "iOS (Apple):iPod (iOS 15)";
					} else {
						*name = "iOS (Apple):iPod Unknown";
					}
				 } else {
					*name = "iOS (Apple):iPod Unknown";
				 }
			} else {
				*name = "iOS (Apple):iPod Unknown";
			}
		} else if ((c = strstr(whole, "Mac OS X")) != NULL) {
				c += 8;
				if (*c == ' ') {
					c++;
				}

				if (*c == '1' && *(c + 1) == '0' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '10.' OR '10_'
					c += 3;
					if (*c == '0') {
						*name = "Apple:Mac OS X 10.0 (Cheetah)";
					} else if (*c == '1' && *(c + 1) == '0') {
						*name = "Apple:macOS 10.10 (Yosemite)";
					} else if (*c == '1' && *(c + 1) == '1') {
						*name = "Apple:macOS 10.11 (El Capitan)";
					} else if (*c == '1' && *(c + 1) == '2') {
						*name = "Apple:macOS 10.12 (Sierra)";
					} else if (*c == '1' && *(c + 1) == '3') {
						*name = "Apple:macOS 10.13 (High Sierra)";
					} else if (*c == '1' && *(c + 1) == '4') {
						*name = "Apple:macOS 10.14 (Mojave)";
					} else if (*c == '1' && *(c + 1) == '5') {
						*name = "Apple:macOS 10.15 (Catalina)";
					} else if (*c == '1' && *(c + 1) == '6') {
						*name = "Apple:macOS 11.0 (Big Sur)";					// macOS 11 alias in some browsers https://stackoverflow.com/questions/64929071/user-agent-string-containing-strange-version-number-under-macos-big-sur
					} else if (*c == '1') {
						*name = "Apple:macOS 10.1 (Puma)";
					} else if (*c == '2') {
						*name = "Apple:macOS 10.2 (Jaguar)";
					} else if (*c == '3') {
						*name = "Apple:macOS 10.3 (Panther)";
					} else if (*c == '4') {
						*name = "Apple:macOS 10.4 (Tiger)";
					} else if (*c == '5') {
						*name = "Apple:macOS 10.5 (Leopard)";
					} else if (*c == '6') {
						*name = "Apple:macOS 10.6 (Snow Leopard)";
					} else if (*c == '7') {
						*name = "Apple:macOS 10.7 (Lion)";
					} else if (*c == '8') {
						*name = "Apple:macOS 10.8 (Mountain Lion)";
					} else if (*c == '9') {
						*name = "Apple:macOS 10.9 (Mavericks)";
					} else {
						*name = "Apple:macOS Unknown";
					}
				} else if (*c == '1' && *(c + 1) == '1' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '11.' OR '11_'
					/* 
					 * macOS 11 is going through a minor verion number a month according to https://en.wikipedia.org/wiki/MacOS_Big_Sur
					 * The release paradigm seems to have changed from macOS 10's stationary major version.
					 */
					c += 3;
					*name = "Apple:macOS 11.0 (Big Sur)";
				} else if (*c == '1' && *(c + 1) == '2' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '12.' OR '12_'
					c += 3;
					*name = "Apple:macOS 12.0";
				} else if (*c == '1' && *(c + 1) == '3' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '13.' OR '13_'
					c += 3;
					*name = "Apple:macOS 13.0";
				} else if (*c == '1' && *(c + 1) == '4' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '14.' OR '14_'
					c += 3;
					*name = "Apple:macOS 14.0";
				} else if (*c == '1' && *(c + 1) == '5' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '15.' OR '15_'
					c += 3;
					*name = "Apple:macOS 15.0";
				} else if (*c == '1' && *(c + 1) == '6' && (*(c + 2) == '.' || *(c + 2) == '_')) { // '16.' OR '16_'
					c += 3;
					*name = "Apple:macOS 16.0";
				} else {
					*name = "Apple:macOS Unknown";
				}

		} else if ((c = strstr(whole, "CrOS")) != NULL) {
			*name = "Chrome OS";
		} else if ((c = strstr(whole, "CrKey")) != NULL) {
			*name = "Chromecast";
		} else if ((c = strstr(whole, "Nintendo WiiU")) != NULL) {
			*name = "Nintendo:WiiU";
		} else if ((c = strstr(whole, "Nintendo 3DS")) != NULL) {
			*name = "Nintendo:3DS";
		} else if ((c = strstr(whole, "Nintendo Switch")) != NULL) {
			*name = "Nintendo:Switch";
		} else if ((c = strstr(whole, "PlayStation 4")) != NULL) {
			*name = "Sony:Playstation 4";
		} else if ((c = strstr(whole, "PlayStation Vita")) != NULL) {
			*name = "Sony:Playstation Vita";
		} else if ((c = strstr(whole, "AppleTV")) != NULL) {
			*name = "Apple:AppleTV";
		} else if ((c = strstr(whole, "Mac")) != NULL) {
			*name = "Apple:Macintosh";
		} else if (strstr(whole, "Ubuntu") != NULL || strstr(whole, "ubuntu") != NULL) {
			*name = "Linux:Ubuntu";
		} else if (strstr(whole, "Kubuntu") != NULL || strstr(whole, "kubuntu") != NULL) {
			*name = "Linux:Kubuntu";
		} else if (strstr(whole, "Fedora") != NULL || strstr(whole, "fedora") != NULL) {
			*name = "Linux:Fedora";
		} else if (strstr(whole, "Debian") != NULL || strstr(whole, "debian") != NULL) {
			*name = "Linux:Debian";
		} else if (strstr(whole, "CentOS") != NULL || strstr(whole, "centos") != NULL) {
			*name = "Linux:CentOS";
		} else if (strstr(whole, "Gentoo") != NULL || strstr(whole, "gentoo") != NULL) {
			*name = "Linux:Gentoo";
		} else if (strstr(whole, "Knoppix") != NULL || strstr(whole, "knoppix") != NULL) {
			*name = "Linux:Knoppix";
		} else if (strstr(whole, "Lindows") != NULL || strstr(whole, "lindows") != NULL) {
			*name = "Linux:Lindows";
		} else if (strstr(whole, "Mandrake") != NULL || strstr(whole, "mandrake") != NULL) {
			*name = "Linux:Mandrake";
		} else if (strstr(whole, "Mint") != NULL || strstr(whole, "mint") != NULL) {
			*name = "Linux:Mint";
		} else if (strstr(whole, "Linux") != NULL || strstr(whole, "linux") != NULL) {
			*name = "Linux:Unknown";
		} else if (strstr(whole, "DragonFly") != NULL) {
			*name = "Unix:DragonFly";
		} else if (strstr(whole, "FreeBSD") != NULL) {
			*name = "Unix:FreeBSD";
		} else if (strstr(whole, "OpenBSD") != NULL) {
			*name = "Unix:OpenBSD";
		} else if (strstr(whole, "MidnightBSD") != NULL || strstr(whole, "midnightbsd") != NULL) {
			*name = "Unix:MidnightBSD";
		} else if (strstr(whole, "MirBSD") != NULL)  {
			*name = "Unix:MirBSD";
		} else if (strstr(whole, "NetBSD") != NULL) {
			*name = "Unix:NetBSD";
		} else if (strstr(whole, "BSD") != NULL) {
			*name = "Unix:BSD";
		} else if (strstr(whole, "SunOS") != NULL || strstr(whole, "sunos") != NULL) {
			*name = "Unix:SunOS";
		} else if (strstr(whole, "HP-UX") != NULL || strstr(whole, "HPUX") != NULL || strstr(whole, "hp-ux") != NULL || strstr(whole, "hpux") != NULL)  {
			*name = "Unix:HP-UX";
		} else if (strstr(whole, "IRIX") != NULL || strstr(whole, "irix") != NULL) {
			*name = "Unix:IRIX";
		} else if (strstr(whole, "AIX") != NULL || strstr(whole, "aix") != NULL) {
			*name = "Unix:AIX";
		} else if (strstr(whole, "OSF1") != NULL) {
			*name = "Unix:OSF1";
		} else if (strstr(whole, "VMS") != NULL) {
			*name = "OpenVMS";
		} else if (strstr(whole, "X11") != NULL) {
			*name = "Unix:Other Unix";
		} else if (strstr(whole, "WebTV") != NULL) {
			*name = "WebTV";
		} else if (strstr(whole, "OS/2") != NULL) {
			*name = "OS/2";
		} else if (strstr(whole, "BeOS") != NULL) {
			*name = "BeOS";
		} else if (strstr(whole, "RISC OS") != NULL) {
			*name = "RISC OS";
		} else if (strstr(whole, "Amiga") != NULL) {
			*name = "Amiga";
		} else if (strstr(whole, "Symbian") != NULL) {
			*name = "Symbian OS";
		} else if (strstr(whole, "PalmOS") != NULL || strstr(whole, "PalmSource") != NULL) {
			*name = "Palm OS";
		} else if (strstr(whole, "Atari") != NULL) {
			*name = "Atari";
		} else {
			*name = "OS unknown";
		}

		*nameend = strchr(*name, '\0');
	} else {
		*name = NULL;
	}
}

void Nnextname(char **name, char **nameend, char *whole, void *arg) {
  /* NB Quite a lot is held over to do_aliasN(), which is called from
     hashfind(), from makederived() */
  Strpairlist *al;
  char *c, *d;
  logical done;

  if (*name == NULL) {
    if ((d = strchr(whole, '?')) != NULL && *(d + 1) != '\0') {
      *d = '\0';
      for (al = (Strpairlist *)arg, done = FALSE; al != NULL && !done;
	   TO_NEXT(al)) {
	if (MATCHES(whole, al->name)) {  /* find right engine in list */
	  for (c = d; c != NULL && !done; c = strpbrk(c, "&;")) {
	    c++;                            /* find right arg */
	    if (headmatch(c, al->data) && *(c + strlen(al->data)) == '=') {
	      done = TRUE;
	      *name = c + strlen(al->data) + 1;
	      for (*nameend = *name; **nameend != '&' && **nameend != ';' &&
		     **nameend != '\0'; (*nameend)++)
		;  /* run nameend to next & or ; */
	      if (*name == *nameend)
		name = NULL;
	    }    /* if headmatch */
	  }    /* for c */
	}    /* if MATCHES */
      }    /* for al */
      *d = '?';
    }    /* if d = strchr */
  }    /* if *name == NULL */
  else
    *name = NULL;
}

void nnextname(char **name, char **nameend, char *whole, void *arg) {

  if (*name == NULL)
    Nnextname(name, nameend, whole, arg);   /* to find right CGI arg etc. */
  else if (**nameend == '&' || **nameend == ';' || **nameend == '\0')
    *name = NULL;
  else
    *name = *nameend + 1;

  if (*name == NULL)
    return;

  for ( ; **name == '+' || **name == ',' || **name == ';' || **name == '"' ||
	  **name == '(' || **name == ')' || **name == '.' || ISSPACE(**name) ||
	  (**name == '-' && (*(*name + 1) == '+' || *(*name + 1) == ',' ||
			     *(*name + 1) == ';' || *(*name + 1) == '"' ||
			     *(*name + 1) == '(' || *(*name + 1) == ')' ||
			     *(*name + 1) == '.' || *(*name + 1) == '-' ||
			     *(*name + 1) == '&' || *(*name + 1) == '\0' ||
			     ISSPACE(*(*name + 1))));
	(*name)++)
    ;  /* run to first wanted character; cf list in do_aliasN() and below */
       /* NB 'good' dots never occur at beginning of word */
  if (**name == '&' || **name == ';' || **name == '\0')
    *name = NULL;
  else for (*nameend = *name; **nameend != '+' && **nameend != '&' &&
	      **nameend != '\0' && **nameend != '"' && **nameend != ',' &&
	      **nameend != ';' && **nameend != '(' && **nameend != ')' &&
	      (**nameend != '.' || (ISALNUM(*(*nameend - 1)) &&
				    ISALNUM(*(*nameend + 1)))) &&
	      (**nameend != '-' || *nameend == *name) && !ISSPACE(**nameend);
	    (*nameend)++)
      ;  /* run to first unwanted character; see above */
}
analog-ce-6.0.17/src/unzip/000077500000000000000000000000001406366436600154055ustar00rootroot00000000000000analog-ce-6.0.17/src/unzip/LICENSE000066400000000000000000000034331406366436600164150ustar00rootroot00000000000000The files in this directory are from version 0.22c of Gilles Vollant's unzip
library. The source files are unchanged except for changing the path in some
#include's, but I haven't included the zip portion, example programs etc. You
can get the full distribution from http://www.winimage.com/zLibDll/unzip.html ,
or included in the zlib library at http://www.zlib.org/ .

Many thanks to the Gilles Vollant for his routines and generous licence.

=== AUTHOR'S COPYRIGHT AND LICENCE START HERE ===

   Copyright (C) 1998-2003 Gilles Vollant

   This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
     WinZip, InfoZip tools and compatible.
   Encryption and multi volume ZipFile (span) are not supported.
   Old compressions used by old PKZip 1.x are not supported


   I WAIT FEEDBACK at mail info@winimage.com
   Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution

   Condition of use and distribution are the same than zlib :

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

analog-ce-6.0.17/src/unzip/Makefile000066400000000000000000000005701406366436600170470ustar00rootroot00000000000000# Makefile for analog 6.0, unzip subdirectory
# Please read docs/Readme.html, or http://www.analog.cx/

HEADERS = unzip.h ioapi.h ../zlib/zlib.h
OBJS = ioapi.o unzip.o

all: $(OBJS)

ioapi.o: ioapi.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) $(INCDIRS) -c ioapi.c

unzip.o: unzip.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -DNOUNCRYPT $(INCDIRS) -c unzip.c

clean:
	rm -f *.o *~
analog-ce-6.0.17/src/unzip/ioapi.c000066400000000000000000000071421406366436600166560ustar00rootroot00000000000000/* ioapi.c -- IO base function header for compress/uncompress .zip
   files using zlib + zip or unzip API

   Version 0.22, May 19th, 2003

   Copyright (C) 1998-2003 Gilles Vollant
*/

#include 
#include 
#include 

#include "../zlib/zlib.h"
#include "ioapi.h"



/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */

#ifndef SEEK_CUR
#define SEEK_CUR    1
#endif

#ifndef SEEK_END
#define SEEK_END    2
#endif

#ifndef SEEK_SET
#define SEEK_SET    0
#endif

voidpf ZCALLBACK fopen_file_func OF((
   voidpf opaque,
   const char* filename,
   int mode));

uLong ZCALLBACK fread_file_func OF((
   voidpf opaque,
   voidpf stream,
   void* buf,
   uLong size));

uLong ZCALLBACK fwrite_file_func OF((
   voidpf opaque,
   voidpf stream,
   const void* buf,
   uLong size));

long ZCALLBACK ftell_file_func OF((
   voidpf opaque,
   voidpf stream));

long ZCALLBACK fseek_file_func OF((
   voidpf opaque,
   voidpf stream,
   uLong offset,
   int origin));

int ZCALLBACK fclose_file_func OF((
   voidpf opaque,
   voidpf stream));

int ZCALLBACK ferror_file_func OF((
   voidpf opaque,
   voidpf stream));


voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
   voidpf opaque;
   const char* filename;
   int mode;
{
    FILE* file = NULL;
    const char* mode_fopen = NULL;
    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
        mode_fopen = "rb";
    else
    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
        mode_fopen = "r+b";
    else
    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
        mode_fopen = "wb";

    if ((filename!=NULL) && (mode_fopen != NULL))
        file = fopen(filename, mode_fopen);
    return file;
}


uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
   voidpf opaque;
   voidpf stream;
   void* buf;
   uLong size;
{
    uLong ret;
    ret = fread(buf, 1, (size_t)size, (FILE *)stream);
    return ret;
}


uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
   voidpf opaque;
   voidpf stream;
   const void* buf;
   uLong size;
{
    uLong ret;
    ret = fwrite(buf, 1, (size_t)size, (FILE *)stream);
    return ret;
}

long ZCALLBACK ftell_file_func (opaque, stream)
   voidpf opaque;
   voidpf stream;
{
    long ret;
    ret = ftell((FILE *)stream);
    return ret;
}

long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
   voidpf opaque;
   voidpf stream;
   uLong offset;
   int origin;
{
    int fseek_origin=0;
    long ret;
    switch (origin)
    {
    case ZLIB_FILEFUNC_SEEK_CUR :
        fseek_origin = SEEK_CUR;
        break;
    case ZLIB_FILEFUNC_SEEK_END :
        fseek_origin = SEEK_END;
        break;
    case ZLIB_FILEFUNC_SEEK_SET :
        fseek_origin = SEEK_SET;
        break;
    default: return -1;
    }
    ret = 0;
    fseek((FILE *)stream, offset, fseek_origin);
    return ret;
}

int ZCALLBACK fclose_file_func (opaque, stream)
   voidpf opaque;
   voidpf stream;
{
    int ret;
    ret = fclose((FILE *)stream);
    return ret;
}

int ZCALLBACK ferror_file_func (opaque, stream)
   voidpf opaque;
   voidpf stream;
{
    int ret;
    ret = ferror((FILE *)stream);
    return ret;
}

void fill_fopen_filefunc (pzlib_filefunc_def)
  zlib_filefunc_def* pzlib_filefunc_def;
{
    pzlib_filefunc_def->zopen_file = fopen_file_func;
    pzlib_filefunc_def->zread_file = fread_file_func;
    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
    pzlib_filefunc_def->ztell_file = ftell_file_func;
    pzlib_filefunc_def->zseek_file = fseek_file_func;
    pzlib_filefunc_def->zclose_file = fclose_file_func;
    pzlib_filefunc_def->zerror_file = ferror_file_func;
    pzlib_filefunc_def->opaque = NULL;
}
analog-ce-6.0.17/src/unzip/ioapi.h000066400000000000000000000047411406366436600166650ustar00rootroot00000000000000/* ioapi.h -- IO base function header for compress/uncompress .zip
   files using zlib + zip or unzip API

   Version 0.22, May 19th, 2003

   Copyright (C) 1998-2003 Gilles Vollant
*/

#ifndef _ZLIBIOAPI_H
#define _ZLIBIOAPI_H


#define ZLIB_FILEFUNC_SEEK_CUR (1)
#define ZLIB_FILEFUNC_SEEK_END (2)
#define ZLIB_FILEFUNC_SEEK_SET (0)

#define ZLIB_FILEFUNC_MODE_READ      (1)
#define ZLIB_FILEFUNC_MODE_WRITE     (2)
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)

#define ZLIB_FILEFUNC_MODE_EXISTING (4)
#define ZLIB_FILEFUNC_MODE_CREATE   (8)


#ifndef ZCALLBACK

#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
#define ZCALLBACK CALLBACK
#else
#define ZCALLBACK
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif

typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
typedef uLong  (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
typedef uLong  (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
typedef long   (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
typedef long   (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
typedef int    (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
typedef int    (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));

typedef struct zlib_filefunc_def_s
{
    open_file_func      zopen_file;
    read_file_func      zread_file;
    write_file_func     zwrite_file;
    tell_file_func      ztell_file;
    seek_file_func      zseek_file;
    close_file_func     zclose_file;
    testerror_file_func zerror_file;
    voidpf              opaque;
} zlib_filefunc_def;



void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));

#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size))
#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size))
#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream))
#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode))
#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream))
#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream))


#ifdef __cplusplus
}
#endif

#endif

analog-ce-6.0.17/src/unzip/unzip.c000066400000000000000000001351521406366436600167250ustar00rootroot00000000000000/* unzip.c -- IO for uncompress .zip files using zlib
   Version 0.22, May 19th, 2003

   Copyright (C) 1998-2003 Gilles Vollant

   Read unzip.h for more info
*/

/* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
compatibility with older software. The following is from the original crypt.c. Code
woven in by Terry Thorsen 1/2003.
*/
/*
  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.

  See the accompanying file LICENSE, version 2000-Apr-09 or later
  (the contents of which are also included in zip.h) for terms of use.
  If, for some reason, all these files are missing, the Info-ZIP license
  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
*/
/*
  crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]

  The encryption/decryption parts of this source code (as opposed to the
  non-echoing password parts) were originally written in Europe.  The
  whole source package can be freely distributed, including from the USA.
  (Prior to January 2000, re-export from the US was a violation of US law.)
 */

/*
  This encryption code is a direct transcription of the algorithm from
  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
  file (appnote.txt) is distributed with the PKZIP program (even in the
  version without encryption capabilities).
 */


#include 
#include 
#include 
#include "../zlib/zlib.h"
#include "unzip.h"

#ifdef STDC
#  include 
#  include 
#  include 
#endif
#ifdef NO_ERRNO_H
    extern int errno;
#else
#   include 
#endif


#ifndef local
#  define local static
#endif
/* compile with -Dlocal if your debugger can't find static symbols */



#if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \
                      !defined(CASESENSITIVITYDEFAULT_NO)
#define CASESENSITIVITYDEFAULT_NO
#endif


#ifndef UNZ_BUFSIZE
#define UNZ_BUFSIZE (16384)
#endif

#ifndef UNZ_MAXFILENAMEINZIP
#define UNZ_MAXFILENAMEINZIP (256)
#endif

#ifndef ALLOC
# define ALLOC(size) (malloc(size))
#endif
#ifndef TRYFREE
# define TRYFREE(p) {if (p) free(p);}
#endif

#define SIZECENTRALDIRITEM (0x2e)
#define SIZEZIPLOCALHEADER (0x1e)




const char unz_copyright[] =
   " unzip 0.22 Copyright 1998-2003 Gilles Vollant - http://www.winimage.com/zLibDll";

/* unz_file_info_interntal contain internal info about a file in zipfile*/
typedef struct unz_file_info_internal_s
{
    uLong offset_curfile;/* relative offset of local header 4 bytes */
} unz_file_info_internal;


/* file_in_zip_read_info_s contain internal information about a file in zipfile,
    when reading and decompress it */
typedef struct
{
    char  *read_buffer;         /* internal buffer for compressed data */
    z_stream stream;            /* zLib stream structure for inflate */

    uLong pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/
    uLong stream_initialised;   /* flag set if stream structure is initialised*/

    uLong offset_local_extrafield;/* offset of the local extra field */
    uInt  size_local_extrafield;/* size of the local extra field */
    uLong pos_local_extrafield;   /* position in the local extra field in read*/

    uLong crc32;                /* crc32 of all data uncompressed */
    uLong crc32_wait;           /* crc32 we must obtain after decompress all */
    uLong rest_read_compressed; /* number of byte to be decompressed */
    uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/
    zlib_filefunc_def z_filefunc;
    voidpf filestream;        /* io structore of the zipfile */
    uLong compression_method;   /* compression method (0==store) */
    uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
    int   raw;
} file_in_zip_read_info_s;


/* unz_s contain internal information about the zipfile
*/
typedef struct
{
    zlib_filefunc_def z_filefunc;
    voidpf filestream;        /* io structore of the zipfile */
    unz_global_info gi;       /* public global information */
    uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
    uLong num_file;             /* number of the current file in the zipfile*/
    uLong pos_in_central_dir;   /* pos of the current file in the central dir*/
    uLong current_file_ok;      /* flag about the usability of the current file*/
    uLong central_pos;          /* position of the beginning of the central dir*/

    uLong size_central_dir;     /* size of the central directory  */
    uLong offset_central_dir;   /* offset of start of central directory with
                                   respect to the starting disk number */

    unz_file_info cur_file_info; /* public info about the current file in zip*/
    unz_file_info_internal cur_file_info_internal; /* private info about it*/
    file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current
                                        file if we are decompressing it */
    int encrypted;
#ifndef NOUNCRYPT
    unsigned long keys[3];     /* keys defining the pseudo-random sequence */
    const unsigned long* pcrc_32_tab;
#endif
} unz_s;


#ifndef NOUNCRYPT
#include "crypt.h"
#endif

/* ===========================================================================
     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
   for end of file.
   IN assertion: the stream s has been sucessfully opened for reading.
*/


local int unzlocal_getByte OF((
    const zlib_filefunc_def* pzlib_filefunc_def,
    voidpf filestream,
    int *pi));

local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi)
    const zlib_filefunc_def* pzlib_filefunc_def;
    voidpf filestream;
    int *pi;
{
    unsigned char c;
    int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1);
    if (err==1)
    {
        *pi = (int)c;
        return UNZ_OK;
    }
    else
    {
        if (ZERROR(*pzlib_filefunc_def,filestream))
            return UNZ_ERRNO;
        else
            return UNZ_EOF;
    }
}


/* ===========================================================================
   Reads a long in LSB order from the given gz_stream. Sets
*/
local int unzlocal_getShort OF((
    const zlib_filefunc_def* pzlib_filefunc_def,
    voidpf filestream,
    uLong *pX));

local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX)
    const zlib_filefunc_def* pzlib_filefunc_def;
    voidpf filestream;
    uLong *pX;
{
    uLong x ;
    int i;
    int err;

    err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
    x = (uLong)i;

    if (err==UNZ_OK)
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
    x += ((uLong)i)<<8;

    if (err==UNZ_OK)
        *pX = x;
    else
        *pX = 0;
    return err;
}

local int unzlocal_getLong OF((
    const zlib_filefunc_def* pzlib_filefunc_def,
    voidpf filestream,
    uLong *pX));

local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX)
    const zlib_filefunc_def* pzlib_filefunc_def;
    voidpf filestream;
    uLong *pX;
{
    uLong x ;
    int i;
    int err;

    err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
    x = (uLong)i;

    if (err==UNZ_OK)
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
    x += ((uLong)i)<<8;

    if (err==UNZ_OK)
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
    x += ((uLong)i)<<16;

    if (err==UNZ_OK)
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
    x += ((uLong)i)<<24;

    if (err==UNZ_OK)
        *pX = x;
    else
        *pX = 0;
    return err;
}


/* My own strcmpi / strcasecmp */
local int strcmpcasenosensitive_internal (fileName1,fileName2)
    const char* fileName1;
    const char* fileName2;
{
    for (;;)
    {
        char c1=*(fileName1++);
        char c2=*(fileName2++);
        if ((c1>='a') && (c1<='z'))
            c1 -= 0x20;
        if ((c2>='a') && (c2<='z'))
            c2 -= 0x20;
        if (c1=='\0')
            return ((c2=='\0') ? 0 : -1);
        if (c2=='\0')
            return 1;
        if (c1c2)
            return 1;
    }
}


#ifdef  CASESENSITIVITYDEFAULT_NO
#define CASESENSITIVITYDEFAULTVALUE 2
#else
#define CASESENSITIVITYDEFAULTVALUE 1
#endif

#ifndef STRCMPCASENOSENTIVEFUNCTION
#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
#endif

/*
   Compare two filename (fileName1,fileName2).
   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
                                                                or strcasecmp)
   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
        (like 1 on Unix, 2 on Windows)

*/
extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity)
    const char* fileName1;
    const char* fileName2;
    int iCaseSensitivity;
{
    if (iCaseSensitivity==0)
        iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;

    if (iCaseSensitivity==1)
        return strcmp(fileName1,fileName2);

    return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
}

#ifndef BUFREADCOMMENT
#define BUFREADCOMMENT (0x400)
#endif

/*
  Locate the Central directory of a zipfile (at the end, just before
    the global comment)
*/
local uLong unzlocal_SearchCentralDir OF((
    const zlib_filefunc_def* pzlib_filefunc_def,
    voidpf filestream));

local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream)
    const zlib_filefunc_def* pzlib_filefunc_def;
    voidpf filestream;
{
    unsigned char* buf;
    uLong uSizeFile;
    uLong uBackRead;
    uLong uMaxBack=0xffff; /* maximum size of global comment */
    uLong uPosFound=0;

    if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
        return 0;


    uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);

    if (uMaxBack>uSizeFile)
        uMaxBack = uSizeFile;

    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
    if (buf==NULL)
        return 0;

    uBackRead = 4;
    while (uBackReaduMaxBack)
            uBackRead = uMaxBack;
        else
            uBackRead+=BUFREADCOMMENT;
        uReadPos = uSizeFile-uBackRead ;

        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
                     (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
        if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
            break;

        if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
            break;

        for (i=(int)uReadSize-3; (i--)>0;)
            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
                ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
            {
                uPosFound = uReadPos+i;
                break;
            }

        if (uPosFound!=0)
            break;
    }
    TRYFREE(buf);
    return uPosFound;
}

/*
  Open a Zip file. path contain the full pathname (by example,
     on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
     "zlib/zlib114.zip".
     If the zipfile cannot be opened (file doesn't exist or in not valid), the
       return value is NULL.
     Else, the return value is a unzFile Handle, usable with other function
       of this unzip package.
*/
extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
    const char *path;
    zlib_filefunc_def* pzlib_filefunc_def;
{
    unz_s us;
    unz_s *s;
    uLong central_pos,uL;

    uLong number_disk;          /* number of the current dist, used for
                                   spaning ZIP, unsupported, always 0*/
    uLong number_disk_with_CD;  /* number the the disk with central dir, used
                                   for spaning ZIP, unsupported, always 0*/
    uLong number_entry_CD;      /* total number of entries in
                                   the central dir
                                   (same than number_entry on nospan) */

    int err=UNZ_OK;

    if (unz_copyright[0]!=' ')
        return NULL;

    if (pzlib_filefunc_def==NULL)
        fill_fopen_filefunc(&us.z_filefunc);
    else
        us.z_filefunc = *pzlib_filefunc_def;

    us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque,
                                                 path,
                                                 ZLIB_FILEFUNC_MODE_READ |
                                                 ZLIB_FILEFUNC_MODE_EXISTING);
    if (us.filestream==NULL)
        return NULL;

    central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream);
    if (central_pos==0)
        err=UNZ_ERRNO;

    if (ZSEEK(us.z_filefunc, us.filestream,
                                      central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
        err=UNZ_ERRNO;

    /* the signature, already checked */
    if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
        err=UNZ_ERRNO;

    /* number of this disk */
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
        err=UNZ_ERRNO;

    /* number of the disk with the start of the central directory */
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
        err=UNZ_ERRNO;

    /* total number of entries in the central dir on this disk */
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
        err=UNZ_ERRNO;

    /* total number of entries in the central dir */
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
        err=UNZ_ERRNO;

    if ((number_entry_CD!=us.gi.number_entry) ||
        (number_disk_with_CD!=0) ||
        (number_disk!=0))
        err=UNZ_BADZIPFILE;

    /* size of the central directory */
    if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
        err=UNZ_ERRNO;

    /* offset of start of central directory with respect to the
          starting disk number */
    if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
        err=UNZ_ERRNO;

    /* zipfile comment length */
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
        err=UNZ_ERRNO;

    if ((central_pospfile_in_zip_read!=NULL)
        unzCloseCurrentFile(file);

    ZCLOSE(s->z_filefunc, s->filestream);
    TRYFREE(s);
    return UNZ_OK;
}


/*
  Write info about the ZipFile in the *pglobal_info structure.
  No preparation of the structure is needed
  return UNZ_OK if there is no problem. */
extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info)
    unzFile file;
    unz_global_info *pglobal_info;
{
    unz_s* s;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    *pglobal_info=s->gi;
    return UNZ_OK;
}


/*
   Translate date/time from Dos format to tm_unz (readable more easilty)
*/
local void unzlocal_DosDateToTmuDate (ulDosDate, ptm)
    uLong ulDosDate;
    tm_unz* ptm;
{
    uLong uDate;
    uDate = (uLong)(ulDosDate>>16);
    ptm->tm_mday = (uInt)(uDate&0x1f) ;
    ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;
    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;

    ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
    ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;
    ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;
}

/*
  Get Info about the current file in the zipfile, with internal only info
*/
local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file,
                                                  unz_file_info *pfile_info,
                                                  unz_file_info_internal
                                                  *pfile_info_internal,
                                                  char *szFileName,
                                                  uLong fileNameBufferSize,
                                                  void *extraField,
                                                  uLong extraFieldBufferSize,
                                                  char *szComment,
                                                  uLong commentBufferSize));

local int unzlocal_GetCurrentFileInfoInternal (file,
                                              pfile_info,
                                              pfile_info_internal,
                                              szFileName, fileNameBufferSize,
                                              extraField, extraFieldBufferSize,
                                              szComment,  commentBufferSize)
    unzFile file;
    unz_file_info *pfile_info;
    unz_file_info_internal *pfile_info_internal;
    char *szFileName;
    uLong fileNameBufferSize;
    void *extraField;
    uLong extraFieldBufferSize;
    char *szComment;
    uLong commentBufferSize;
{
    unz_s* s;
    unz_file_info file_info;
    unz_file_info_internal file_info_internal;
    int err=UNZ_OK;
    uLong uMagic;
    long lSeek=0;

    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    if (ZSEEK(s->z_filefunc, s->filestream,
              s->pos_in_central_dir+s->byte_before_the_zipfile,
              ZLIB_FILEFUNC_SEEK_SET)!=0)
        err=UNZ_ERRNO;


    /* we check the magic */
    if (err==UNZ_OK)
        if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
            err=UNZ_ERRNO;
        else if (uMagic!=0x02014b50)
            err=UNZ_BADZIPFILE;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
        err=UNZ_ERRNO;

    unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
        err=UNZ_ERRNO;

    lSeek+=file_info.size_filename;
    if ((err==UNZ_OK) && (szFileName!=NULL))
    {
        uLong uSizeRead ;
        if (file_info.size_filename0) && (fileNameBufferSize>0))
            if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
                err=UNZ_ERRNO;
        lSeek -= uSizeRead;
    }


    if ((err==UNZ_OK) && (extraField!=NULL))
    {
        uLong uSizeRead ;
        if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
                lSeek=0;
            else
                err=UNZ_ERRNO;
        if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
            if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead)
                err=UNZ_ERRNO;
        lSeek += file_info.size_file_extra - uSizeRead;
    }
    else
        lSeek+=file_info.size_file_extra;


    if ((err==UNZ_OK) && (szComment!=NULL))
    {
        uLong uSizeRead ;
        if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
                lSeek=0;
            else
                err=UNZ_ERRNO;
        if ((file_info.size_file_comment>0) && (commentBufferSize>0))
            if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
                err=UNZ_ERRNO;
        lSeek+=file_info.size_file_comment - uSizeRead;
    }
    else
        lSeek+=file_info.size_file_comment;

    if ((err==UNZ_OK) && (pfile_info!=NULL))
        *pfile_info=file_info;

    if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
        *pfile_info_internal=file_info_internal;

    return err;
}



/*
  Write info about the ZipFile in the *pglobal_info structure.
  No preparation of the structure is needed
  return UNZ_OK if there is no problem.
*/
extern int ZEXPORT unzGetCurrentFileInfo (file,
                                          pfile_info,
                                          szFileName, fileNameBufferSize,
                                          extraField, extraFieldBufferSize,
                                          szComment,  commentBufferSize)
    unzFile file;
    unz_file_info *pfile_info;
    char *szFileName;
    uLong fileNameBufferSize;
    void *extraField;
    uLong extraFieldBufferSize;
    char *szComment;
    uLong commentBufferSize;
{
    return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,
                                                szFileName,fileNameBufferSize,
                                                extraField,extraFieldBufferSize,
                                                szComment,commentBufferSize);
}

/*
  Set the current file of the zipfile to the first file.
  return UNZ_OK if there is no problem
*/
extern int ZEXPORT unzGoToFirstFile (file)
    unzFile file;
{
    int err=UNZ_OK;
    unz_s* s;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    s->pos_in_central_dir=s->offset_central_dir;
    s->num_file=0;
    err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
                                             &s->cur_file_info_internal,
                                             NULL,0,NULL,0,NULL,0);
    s->current_file_ok = (err == UNZ_OK);
    return err;
}

/*
  Set the current file of the zipfile to the next file.
  return UNZ_OK if there is no problem
  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
*/
extern int ZEXPORT unzGoToNextFile (file)
    unzFile file;
{
    unz_s* s;
    int err;

    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    if (!s->current_file_ok)
        return UNZ_END_OF_LIST_OF_FILE;
    if (s->num_file+1==s->gi.number_entry)
        return UNZ_END_OF_LIST_OF_FILE;

    s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
            s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
    s->num_file++;
    err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
                                               &s->cur_file_info_internal,
                                               NULL,0,NULL,0,NULL,0);
    s->current_file_ok = (err == UNZ_OK);
    return err;
}


/*
  Try locate the file szFileName in the zipfile.
  For the iCaseSensitivity signification, see unzipStringFileNameCompare

  return value :
  UNZ_OK if the file is found. It becomes the current file.
  UNZ_END_OF_LIST_OF_FILE if the file is not found
*/
extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity)
    unzFile file;
    const char *szFileName;
    int iCaseSensitivity;
{
    unz_s* s;
    int err;

    /* We remember the 'current' position in the file so that we can jump
     * back there if we fail.
     */
    unz_file_info cur_file_infoSaved;
    unz_file_info_internal cur_file_info_internalSaved;
    uLong num_fileSaved;
    uLong pos_in_central_dirSaved;


    if (file==NULL)
        return UNZ_PARAMERROR;

    if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
        return UNZ_PARAMERROR;

    s=(unz_s*)file;
    if (!s->current_file_ok)
        return UNZ_END_OF_LIST_OF_FILE;

    /* Save the current state */
    num_fileSaved = s->num_file;
    pos_in_central_dirSaved = s->pos_in_central_dir;
    cur_file_infoSaved = s->cur_file_info;
    cur_file_info_internalSaved = s->cur_file_info_internal;

    err = unzGoToFirstFile(file);

    while (err == UNZ_OK)
    {
        char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
        err = unzGetCurrentFileInfo(file,NULL,
                                    szCurrentFileName,sizeof(szCurrentFileName)-1,
                                    NULL,0,NULL,0);
        if (err == UNZ_OK)
        {
            if (unzStringFileNameCompare(szCurrentFileName,
                                            szFileName,iCaseSensitivity)==0)
                return UNZ_OK;
            err = unzGoToNextFile(file);
        }
    }

    /* We failed, so restore the state of the 'current file' to where we
     * were.
     */
    s->num_file = num_fileSaved ;
    s->pos_in_central_dir = pos_in_central_dirSaved ;
    s->cur_file_info = cur_file_infoSaved;
    s->cur_file_info_internal = cur_file_info_internalSaved;
    return err;
}


/*
///////////////////////////////////////////
// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
// I need random access
//
// Further optimization could be realized by adding an ability
// to cache the directory in memory. The goal being a single
// comprehensive file read to put the file I need in a memory.
*/

/*
typedef struct unz_file_pos_s
{
    uLong pos_in_zip_directory;   // offset in file
    uLong num_of_file;            // # of file
} unz_file_pos;
*/

extern int ZEXPORT unzGetFilePos(file, file_pos)
    unzFile file;
    unz_file_pos* file_pos;
{
    unz_s* s;

    if (file==NULL || file_pos==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    if (!s->current_file_ok)
        return UNZ_END_OF_LIST_OF_FILE;

    file_pos->pos_in_zip_directory  = s->pos_in_central_dir;
    file_pos->num_of_file           = s->num_file;

    return UNZ_OK;
}

extern int ZEXPORT unzGoToFilePos(file, file_pos)
    unzFile file;
    unz_file_pos* file_pos;
{
    unz_s* s;
    int err;

    if (file==NULL || file_pos==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;

    /* jump to the right spot */
    s->pos_in_central_dir = file_pos->pos_in_zip_directory;
    s->num_file           = file_pos->num_of_file;

    /* set the current file */
    err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
                                               &s->cur_file_info_internal,
                                               NULL,0,NULL,0,NULL,0);
    /* return results */
    s->current_file_ok = (err == UNZ_OK);
    return err;
}

/*
// Unzip Helper Functions - should be here?
///////////////////////////////////////////
*/

/*
  Read the local header of the current zipfile
  Check the coherency of the local header and info in the end of central
        directory about this file
  store in *piSizeVar the size of extra info in local header
        (filename and size of extra field data)
*/
local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
                                                    poffset_local_extrafield,
                                                    psize_local_extrafield)
    unz_s* s;
    uInt* piSizeVar;
    uLong *poffset_local_extrafield;
    uInt  *psize_local_extrafield;
{
    uLong uMagic,uData,uFlags;
    uLong size_filename;
    uLong size_extra_field;
    int err=UNZ_OK;

    *piSizeVar = 0;
    *poffset_local_extrafield = 0;
    *psize_local_extrafield = 0;

    if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
                                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
        return UNZ_ERRNO;


    if (err==UNZ_OK)
        if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
            err=UNZ_ERRNO;
        else if (uMagic!=0x04034b50)
            err=UNZ_BADZIPFILE;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
        err=UNZ_ERRNO;
/*
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
        err=UNZ_BADZIPFILE;
*/
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
        err=UNZ_ERRNO;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
        err=UNZ_ERRNO;
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
        err=UNZ_BADZIPFILE;

    if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
                         (s->cur_file_info.compression_method!=Z_DEFLATED))
        err=UNZ_BADZIPFILE;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
        err=UNZ_ERRNO;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
        err=UNZ_ERRNO;
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
                              ((uFlags & 8)==0))
        err=UNZ_BADZIPFILE;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
        err=UNZ_ERRNO;
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
                              ((uFlags & 8)==0))
        err=UNZ_BADZIPFILE;

    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
        err=UNZ_ERRNO;
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) &&
                              ((uFlags & 8)==0))
        err=UNZ_BADZIPFILE;


    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
        err=UNZ_ERRNO;
    else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
        err=UNZ_BADZIPFILE;

    *piSizeVar += (uInt)size_filename;

    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
        err=UNZ_ERRNO;
    *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
                                    SIZEZIPLOCALHEADER + size_filename;
    *psize_local_extrafield = (uInt)size_extra_field;

    *piSizeVar += (uInt)size_extra_field;

    return err;
}

/*
  Open for reading data the current file in the zipfile.
  If there is no error and the file is opened, the return value is UNZ_OK.
*/
extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
    unzFile file;
    int* method;
    int* level;
    int raw;
    const char* password;
{
    int err=UNZ_OK;
    uInt iSizeVar;
    unz_s* s;
    file_in_zip_read_info_s* pfile_in_zip_read_info;
    uLong offset_local_extrafield;  /* offset of the local extra field */
    uInt  size_local_extrafield;    /* size of the local extra field */
#ifndef NOUNCRYPT
    char source[12];
#else
    if (password != NULL)
        return UNZ_PARAMERROR;
#endif

    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    if (!s->current_file_ok)
        return UNZ_PARAMERROR;

    if (s->pfile_in_zip_read != NULL)
        unzCloseCurrentFile(file);

    if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
                &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
        return UNZ_BADZIPFILE;

    pfile_in_zip_read_info = (file_in_zip_read_info_s*)
                                        ALLOC(sizeof(file_in_zip_read_info_s));
    if (pfile_in_zip_read_info==NULL)
        return UNZ_INTERNALERROR;

    pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
    pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
    pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
    pfile_in_zip_read_info->pos_local_extrafield=0;
    pfile_in_zip_read_info->raw=raw;

    if (pfile_in_zip_read_info->read_buffer==NULL)
    {
        TRYFREE(pfile_in_zip_read_info);
        return UNZ_INTERNALERROR;
    }

    pfile_in_zip_read_info->stream_initialised=0;

    if (method!=NULL)
        *method = (int)s->cur_file_info.compression_method;

    if (level!=NULL)
    {
        *level = 6;
        switch (s->cur_file_info.flag & 0x06)
        {
          case 6 : *level = 1; break;
          case 4 : *level = 2; break;
          case 2 : *level = 9; break;
        }
    }

    if ((s->cur_file_info.compression_method!=0) &&
        (s->cur_file_info.compression_method!=Z_DEFLATED))
        err=UNZ_BADZIPFILE;

    pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
    pfile_in_zip_read_info->crc32=0;
    pfile_in_zip_read_info->compression_method =
            s->cur_file_info.compression_method;
    pfile_in_zip_read_info->filestream=s->filestream;
    pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
    pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;

    pfile_in_zip_read_info->stream.total_out = 0;

    if ((s->cur_file_info.compression_method==Z_DEFLATED) &&
        (!raw))
    {
      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
      pfile_in_zip_read_info->stream.zfree = (free_func)0;
      pfile_in_zip_read_info->stream.opaque = (voidpf)0;
      pfile_in_zip_read_info->stream.next_in = (voidpf)0;
      pfile_in_zip_read_info->stream.avail_in = 0;

      err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
      if (err == Z_OK)
        pfile_in_zip_read_info->stream_initialised=1;
      else
        return err;
        /* windowBits is passed < 0 to tell that there is no zlib header.
         * Note that in this case inflate *requires* an extra "dummy" byte
         * after the compressed stream in order to complete decompression and
         * return Z_STREAM_END.
         * In unzip, i don't wait absolutely Z_STREAM_END because I known the
         * size of both compressed and uncompressed data
         */
    }
    pfile_in_zip_read_info->rest_read_compressed =
            s->cur_file_info.compressed_size ;
    pfile_in_zip_read_info->rest_read_uncompressed =
            s->cur_file_info.uncompressed_size ;


    pfile_in_zip_read_info->pos_in_zipfile =
            s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
              iSizeVar;

    pfile_in_zip_read_info->stream.avail_in = (uInt)0;

    s->pfile_in_zip_read = pfile_in_zip_read_info;

#ifndef NOUNCRYPT
    if (password != NULL)
    {
        int i;
        s->pcrc_32_tab = get_crc_table();
        init_keys(password,s->keys,s->pcrc_32_tab);
        if (ZSEEK(s->z_filefunc, s->filestream,
                  s->pfile_in_zip_read->pos_in_zipfile +
                     s->pfile_in_zip_read->byte_before_the_zipfile,
                  SEEK_SET)!=0)
            return UNZ_INTERNALERROR;
        if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12)
            return UNZ_INTERNALERROR;

        for (i = 0; i<12; i++)
            zdecode(s->keys,s->pcrc_32_tab,source[i]);

        s->pfile_in_zip_read->pos_in_zipfile+=12;
        s->encrypted=1;
    }
#endif


    return UNZ_OK;
}

extern int ZEXPORT unzOpenCurrentFile (file)
    unzFile file;
{
    return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
}

extern int ZEXPORT unzOpenCurrentFilePassword (file, password)
    unzFile file;
    const char* password;
{
    return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
}

extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw)
    unzFile file;
    int* method;
    int* level;
    int raw;
{
    return unzOpenCurrentFile3(file, method, level, raw, NULL);
}

/*
  Read bytes from the current file.
  buf contain buffer where data must be copied
  len the size of buf.

  return the number of byte copied if somes bytes are copied
  return 0 if the end of file was reached
  return <0 with error code if there is an error
    (UNZ_ERRNO for IO error, or zLib error for uncompress error)
*/
extern int ZEXPORT unzReadCurrentFile  (file, buf, len)
    unzFile file;
    voidp buf;
    unsigned len;
{
    int err=UNZ_OK;
    uInt iRead = 0;
    unz_s* s;
    file_in_zip_read_info_s* pfile_in_zip_read_info;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    pfile_in_zip_read_info=s->pfile_in_zip_read;

    if (pfile_in_zip_read_info==NULL)
        return UNZ_PARAMERROR;


    if ((pfile_in_zip_read_info->read_buffer == NULL))
        return UNZ_END_OF_LIST_OF_FILE;
    if (len==0)
        return 0;

    pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;

    pfile_in_zip_read_info->stream.avail_out = (uInt)len;

    if (len>pfile_in_zip_read_info->rest_read_uncompressed)
        pfile_in_zip_read_info->stream.avail_out =
          (uInt)pfile_in_zip_read_info->rest_read_uncompressed;

    while (pfile_in_zip_read_info->stream.avail_out>0)
    {
        if ((pfile_in_zip_read_info->stream.avail_in==0) &&
            (pfile_in_zip_read_info->rest_read_compressed>0))
        {
            uInt uReadThis = UNZ_BUFSIZE;
            if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed;
            if (uReadThis == 0)
                return UNZ_EOF;
            if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
                      pfile_in_zip_read_info->filestream,
                      pfile_in_zip_read_info->pos_in_zipfile +
                         pfile_in_zip_read_info->byte_before_the_zipfile,
                         ZLIB_FILEFUNC_SEEK_SET)!=0)
                return UNZ_ERRNO;
            if (ZREAD(pfile_in_zip_read_info->z_filefunc,
                      pfile_in_zip_read_info->filestream,
                      pfile_in_zip_read_info->read_buffer,
                      uReadThis)!=uReadThis)
                return UNZ_ERRNO;


#ifndef NOUNCRYPT
            if(s->encrypted)
            {
                uInt i;
                for(i=0;iread_buffer[i] =
                      zdecode(s->keys,s->pcrc_32_tab,
                              pfile_in_zip_read_info->read_buffer[i]);
            }
#endif


            pfile_in_zip_read_info->pos_in_zipfile += uReadThis;

            pfile_in_zip_read_info->rest_read_compressed-=uReadThis;

            pfile_in_zip_read_info->stream.next_in =
                (Bytef*)pfile_in_zip_read_info->read_buffer;
            pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
        }

        if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
        {
            uInt uDoCopy,i ;

            if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
                (pfile_in_zip_read_info->rest_read_compressed == 0))
                return (iRead==0) ? UNZ_EOF : iRead;

            if (pfile_in_zip_read_info->stream.avail_out <
                            pfile_in_zip_read_info->stream.avail_in)
                uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
            else
                uDoCopy = pfile_in_zip_read_info->stream.avail_in ;

            for (i=0;istream.next_out+i) =
                        *(pfile_in_zip_read_info->stream.next_in+i);

            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
                                pfile_in_zip_read_info->stream.next_out,
                                uDoCopy);
            pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
            pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
            pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
            pfile_in_zip_read_info->stream.next_out += uDoCopy;
            pfile_in_zip_read_info->stream.next_in += uDoCopy;
            pfile_in_zip_read_info->stream.total_out += uDoCopy;
            iRead += uDoCopy;
        }
        else
        {
            uLong uTotalOutBefore,uTotalOutAfter;
            const Bytef *bufBefore;
            uLong uOutThis;
            int flush=Z_SYNC_FLUSH;

            uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
            bufBefore = pfile_in_zip_read_info->stream.next_out;

            /*
            if ((pfile_in_zip_read_info->rest_read_uncompressed ==
                     pfile_in_zip_read_info->stream.avail_out) &&
                (pfile_in_zip_read_info->rest_read_compressed == 0))
                flush = Z_FINISH;
            */
            err=inflate(&pfile_in_zip_read_info->stream,flush);

            uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
            uOutThis = uTotalOutAfter-uTotalOutBefore;

            pfile_in_zip_read_info->crc32 =
                crc32(pfile_in_zip_read_info->crc32,bufBefore,
                        (uInt)(uOutThis));

            pfile_in_zip_read_info->rest_read_uncompressed -=
                uOutThis;

            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);

            if (err==Z_STREAM_END)
                return (iRead==0) ? UNZ_EOF : iRead;
            if (err!=Z_OK)
                break;
        }
    }

    if (err==Z_OK)
        return iRead;
    return err;
}


/*
  Give the current position in uncompressed data
*/
extern z_off_t ZEXPORT unztell (file)
    unzFile file;
{
    unz_s* s;
    file_in_zip_read_info_s* pfile_in_zip_read_info;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    pfile_in_zip_read_info=s->pfile_in_zip_read;

    if (pfile_in_zip_read_info==NULL)
        return UNZ_PARAMERROR;

    return (z_off_t)pfile_in_zip_read_info->stream.total_out;
}


/*
  return 1 if the end of file was reached, 0 elsewhere
*/
extern int ZEXPORT unzeof (file)
    unzFile file;
{
    unz_s* s;
    file_in_zip_read_info_s* pfile_in_zip_read_info;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    pfile_in_zip_read_info=s->pfile_in_zip_read;

    if (pfile_in_zip_read_info==NULL)
        return UNZ_PARAMERROR;

    if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
        return 1;
    else
        return 0;
}



/*
  Read extra field from the current file (opened by unzOpenCurrentFile)
  This is the local-header version of the extra field (sometimes, there is
    more info in the local-header version than in the central-header)

  if buf==NULL, it return the size of the local extra field that can be read

  if buf!=NULL, len is the size of the buffer, the extra header is copied in
    buf.
  the return value is the number of bytes copied in buf, or (if <0)
    the error code
*/
extern int ZEXPORT unzGetLocalExtrafield (file,buf,len)
    unzFile file;
    voidp buf;
    unsigned len;
{
    unz_s* s;
    file_in_zip_read_info_s* pfile_in_zip_read_info;
    uInt read_now;
    uLong size_to_read;

    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    pfile_in_zip_read_info=s->pfile_in_zip_read;

    if (pfile_in_zip_read_info==NULL)
        return UNZ_PARAMERROR;

    size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
                pfile_in_zip_read_info->pos_local_extrafield);

    if (buf==NULL)
        return (int)size_to_read;

    if (len>size_to_read)
        read_now = (uInt)size_to_read;
    else
        read_now = (uInt)len ;

    if (read_now==0)
        return 0;

    if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
              pfile_in_zip_read_info->filestream,
              pfile_in_zip_read_info->offset_local_extrafield +
              pfile_in_zip_read_info->pos_local_extrafield,
              ZLIB_FILEFUNC_SEEK_SET)!=0)
        return UNZ_ERRNO;

    if (ZREAD(pfile_in_zip_read_info->z_filefunc,
              pfile_in_zip_read_info->filestream,
              buf,size_to_read)!=size_to_read)
        return UNZ_ERRNO;

    return (int)read_now;
}

/*
  Close the file in zip opened with unzipOpenCurrentFile
  Return UNZ_CRCERROR if all the file was read but the CRC is not good
*/
extern int ZEXPORT unzCloseCurrentFile (file)
    unzFile file;
{
    int err=UNZ_OK;

    unz_s* s;
    file_in_zip_read_info_s* pfile_in_zip_read_info;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;
    pfile_in_zip_read_info=s->pfile_in_zip_read;

    if (pfile_in_zip_read_info==NULL)
        return UNZ_PARAMERROR;


    if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
        (!pfile_in_zip_read_info->raw))
    {
        if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
            err=UNZ_CRCERROR;
    }


    TRYFREE(pfile_in_zip_read_info->read_buffer);
    pfile_in_zip_read_info->read_buffer = NULL;
    if (pfile_in_zip_read_info->stream_initialised)
        inflateEnd(&pfile_in_zip_read_info->stream);

    pfile_in_zip_read_info->stream_initialised = 0;
    TRYFREE(pfile_in_zip_read_info);

    s->pfile_in_zip_read=NULL;

    return err;
}


/*
  Get the global comment string of the ZipFile, in the szComment buffer.
  uSizeBuf is the size of the szComment buffer.
  return the number of byte copied or an error code <0
*/
extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
    unzFile file;
    char *szComment;
    uLong uSizeBuf;
{
    int err=UNZ_OK;
    unz_s* s;
    uLong uReadThis ;
    if (file==NULL)
        return UNZ_PARAMERROR;
    s=(unz_s*)file;

    uReadThis = uSizeBuf;
    if (uReadThis>s->gi.size_comment)
        uReadThis = s->gi.size_comment;

    if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
        return UNZ_ERRNO;

    if (uReadThis>0)
    {
      *szComment='\0';
      if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
        return UNZ_ERRNO;
    }

    if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
        *(szComment+s->gi.size_comment)='\0';
    return (int)uReadThis;
}
analog-ce-6.0.17/src/unzip/unzip.h000066400000000000000000000305731406366436600167330ustar00rootroot00000000000000/* unzip.h -- IO for uncompress .zip files using zlib
   Version 0.22, May 19th, 2003

   Copyright (C) 1998-2003 Gilles Vollant

   This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
     WinZip, InfoZip tools and compatible.
   Encryption and multi volume ZipFile (span) are not supported.
   Old compressions used by old PKZip 1.x are not supported


   I WAIT FEEDBACK at mail info@winimage.com
   Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution

   Condition of use and distribution are the same than zlib :

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.


*/

/* for more info about .ZIP format, see
      http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
      http://www.info-zip.org/pub/infozip/doc/
   PkWare has also a specification at :
      ftp://ftp.pkware.com/probdesc.zip
*/

#ifndef _unz_H
#define _unz_H

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _ZLIB_H
#include "../zlib/zlib.h"
#endif

#ifndef _ZLIBIOAPI_H
#include "ioapi.h"
#endif

#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
/* like the STRICT of WIN32, we define a pointer that cannot be converted
    from (void*) without cast */
typedef struct TagunzFile__ { int unused; } unzFile__;
typedef unzFile__ *unzFile;
#else
typedef voidp unzFile;
#endif


#define UNZ_OK                          (0)
#define UNZ_END_OF_LIST_OF_FILE         (-100)
#define UNZ_ERRNO                       (Z_ERRNO)
#define UNZ_EOF                         (0)
#define UNZ_PARAMERROR                  (-102)
#define UNZ_BADZIPFILE                  (-103)
#define UNZ_INTERNALERROR               (-104)
#define UNZ_CRCERROR                    (-105)

/* tm_unz contain date/time info */
typedef struct tm_unz_s
{
    uInt tm_sec;            /* seconds after the minute - [0,59] */
    uInt tm_min;            /* minutes after the hour - [0,59] */
    uInt tm_hour;           /* hours since midnight - [0,23] */
    uInt tm_mday;           /* day of the month - [1,31] */
    uInt tm_mon;            /* months since January - [0,11] */
    uInt tm_year;           /* years - [1980..2044] */
} tm_unz;

/* unz_global_info structure contain global data about the ZIPfile
   These data comes from the end of central dir */
typedef struct unz_global_info_s
{
    uLong number_entry;         /* total number of entries in
                       the central dir on this disk */
    uLong size_comment;         /* size of the global comment of the zipfile */
} unz_global_info;


/* unz_file_info contain information about a file in the zipfile */
typedef struct unz_file_info_s
{
    uLong version;              /* version made by                 2 bytes */
    uLong version_needed;       /* version needed to extract       2 bytes */
    uLong flag;                 /* general purpose bit flag        2 bytes */
    uLong compression_method;   /* compression method              2 bytes */
    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
    uLong crc;                  /* crc-32                          4 bytes */
    uLong compressed_size;      /* compressed size                 4 bytes */
    uLong uncompressed_size;    /* uncompressed size               4 bytes */
    uLong size_filename;        /* filename length                 2 bytes */
    uLong size_file_extra;      /* extra field length              2 bytes */
    uLong size_file_comment;    /* file comment length             2 bytes */

    uLong disk_num_start;       /* disk number start               2 bytes */
    uLong internal_fa;          /* internal file attributes        2 bytes */
    uLong external_fa;          /* external file attributes        4 bytes */

    tm_unz tmu_date;
} unz_file_info;

extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
                                                 const char* fileName2,
                                                 int iCaseSensitivity));
/*
   Compare two filename (fileName1,fileName2).
   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
                                or strcasecmp)
   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
    (like 1 on Unix, 2 on Windows)
*/


extern unzFile ZEXPORT unzOpen OF((const char *path));
/*
  Open a Zip file. path contain the full pathname (by example,
     on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
     "zlib/zlib113.zip".
     If the zipfile cannot be opened (file don't exist or in not valid), the
       return value is NULL.
     Else, the return value is a unzFile Handle, usable with other function
       of this unzip package.
*/

extern unzFile ZEXPORT unzOpen2 OF((const char *path,
                                    zlib_filefunc_def* pzlib_filefunc_def));
/*
   Open a Zip file, like unzOpen, but provide a set of file low level API
      for read/write the zip file (see ioapi.h)
*/

extern int ZEXPORT unzClose OF((unzFile file));
/*
  Close a ZipFile opened with unzipOpen.
  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
  return UNZ_OK if there is no problem. */

extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
                                        unz_global_info *pglobal_info));
/*
  Write info about the ZipFile in the *pglobal_info structure.
  No preparation of the structure is needed
  return UNZ_OK if there is no problem. */


extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
                                           char *szComment,
                                           uLong uSizeBuf));
/*
  Get the global comment string of the ZipFile, in the szComment buffer.
  uSizeBuf is the size of the szComment buffer.
  return the number of byte copied or an error code <0
*/


/***************************************************************************/
/* Unzip package allow you browse the directory of the zipfile */

extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
/*
  Set the current file of the zipfile to the first file.
  return UNZ_OK if there is no problem
*/

extern int ZEXPORT unzGoToNextFile OF((unzFile file));
/*
  Set the current file of the zipfile to the next file.
  return UNZ_OK if there is no problem
  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
*/

extern int ZEXPORT unzLocateFile OF((unzFile file,
                     const char *szFileName,
                     int iCaseSensitivity));
/*
  Try locate the file szFileName in the zipfile.
  For the iCaseSensitivity signification, see unzStringFileNameCompare

  return value :
  UNZ_OK if the file is found. It becomes the current file.
  UNZ_END_OF_LIST_OF_FILE if the file is not found
*/


/* ****************************************** */
/* Ryan supplied functions */
/* unz_file_info contain information about a file in the zipfile */
typedef struct unz_file_pos_s
{
    uLong pos_in_zip_directory;   /* offset in zip file directory */
    uLong num_of_file;            /* # of file */
} unz_file_pos;

extern int ZEXPORT unzGetFilePos(
    unzFile file,
    unz_file_pos* file_pos);

extern int ZEXPORT unzGoToFilePos(
    unzFile file,
    unz_file_pos* file_pos);

/* ****************************************** */

extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
                         unz_file_info *pfile_info,
                         char *szFileName,
                         uLong fileNameBufferSize,
                         void *extraField,
                         uLong extraFieldBufferSize,
                         char *szComment,
                         uLong commentBufferSize));
/*
  Get Info about the current file
  if pfile_info!=NULL, the *pfile_info structure will contain somes info about
        the current file
  if szFileName!=NULL, the filemane string will be copied in szFileName
            (fileNameBufferSize is the size of the buffer)
  if extraField!=NULL, the extra field information will be copied in extraField
            (extraFieldBufferSize is the size of the buffer).
            This is the Central-header version of the extra field
  if szComment!=NULL, the comment string of the file will be copied in szComment
            (commentBufferSize is the size of the buffer)
*/

/***************************************************************************/
/* for reading the content of the current zipfile, you can open it, read data
   from it, and close it (you can close it before reading all the file)
   */

extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
/*
  Open for reading data the current file in the zipfile.
  If there is no error, the return value is UNZ_OK.
*/

extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
                                                  const char* password));
/*
  Open for reading data the current file in the zipfile.
  password is a crypting password
  If there is no error, the return value is UNZ_OK.
*/

extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
                                           int* method,
                                           int* level,
                                           int raw));
/*
  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
    if raw==1
  *method will receive method of compression, *level will receive level of
     compression
  note : you can set level parameter as NULL (if you did not want known level,
         but you CANNOT set method parameter as NULL
*/

extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
                                           int* method,
                                           int* level,
                                           int raw,
                                           const char* password));
/*
  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
    if raw==1
  *method will receive method of compression, *level will receive level of
     compression
  note : you can set level parameter as NULL (if you did not want known level,
         but you CANNOT set method parameter as NULL
*/


extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
/*
  Close the file in zip opened with unzOpenCurrentFile
  Return UNZ_CRCERROR if all the file was read but the CRC is not good
*/

extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
                      voidp buf,
                      unsigned len));
/*
  Read bytes from the current file (opened by unzOpenCurrentFile)
  buf contain buffer where data must be copied
  len the size of buf.

  return the number of byte copied if somes bytes are copied
  return 0 if the end of file was reached
  return <0 with error code if there is an error
    (UNZ_ERRNO for IO error, or zLib error for uncompress error)
*/

extern z_off_t ZEXPORT unztell OF((unzFile file));
/*
  Give the current position in uncompressed data
*/

extern int ZEXPORT unzeof OF((unzFile file));
/*
  return 1 if the end of file was reached, 0 elsewhere
*/

extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
                                             voidp buf,
                                             unsigned len));
/*
  Read extra field from the current file (opened by unzOpenCurrentFile)
  This is the local-header version of the extra field (sometimes, there is
    more info in the local-header version than in the central-header)

  if buf==NULL, it return the size of the local extra field

  if buf!=NULL, len is the size of the buffer, the extra header is copied in
    buf.
  the return value is the number of bytes copied in buf, or (if <0)
    the error code
*/

#ifdef __cplusplus
}
#endif

#endif /* _unz_H */
analog-ce-6.0.17/src/utils.c000066400000000000000000000536311406366436600155540ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** utils.c; lots of little functions to do odd little things ***/

#include "anlghea3.h"

void my_exit(int status) {
  extern FILE *errfile;
#ifndef NODNS
  extern FILE *dnslock;
  extern char *dnslockfile;
#endif

#ifdef MAC_EVENTS
  MacFini();
#endif
#ifdef WIN32
  Win32Cleanup();
#endif
#ifndef NODNS
  if (dnslock != NULL) {
    fclose(dnslock);
    if (remove(dnslockfile) != 0)
      warn('F', TRUE, "Trouble deleting DNS lock file %s", dnslockfile);
    else
      debug('F', "Deleting DNS lock file %s", dnslockfile);
  }
#endif
  if (errfile != stderr)
    fclose(errfile);
  exit(status);
}

void sighandler(int sig) {
  extern FILE *errfile;
  extern logical anywarns;
  extern char *commandname;

#ifndef NOALARM
  extern JMP_BUF jumpbuf;
  if (sig == SIGALRM)
    LONGJMP(jumpbuf, 1);
#endif
  fprintf(errfile, "%s: Received ", commandname);
  if (sig == SIGTERM)
    fprintf(errfile, "termination");
  else if (sig == SIGINT)
    fprintf(errfile, "interrupt");
#ifdef SIGHUP
  else if (sig == SIGHUP)
    fprintf(errfile, "HUP");
#endif
#ifdef SIGQUIT
  else if (sig == SIGQUIT)
    fprintf(errfile, "quit");
#endif
  fprintf(errfile, " signal: exiting\n");

  if (errfile != stderr) {
    fprintf(stderr, "Received ");
    if (sig == SIGTERM)
      fprintf(stderr, "termination");
    else if (sig == SIGINT)
      fprintf(stderr, "interrupt");
#ifdef SIGHUP
    else if (sig == SIGHUP)
      fprintf(stderr, "HUP");
#endif
#ifdef SIGQUIT
    else if (sig == SIGQUIT)
      fprintf(stderr, "quit");
#endif
    fprintf(stderr, " signal: exiting\n");
  }

  anywarns = TRUE;
  my_exit(EXIT_SIGNAL);
}

logical substrcaseeq(char *s, char *t) {
  /* match the beginning of s case insensitively against lower case t */
  for ( ; TOLOWER(*s) == *t && *t != '\0'; s++, t++)
    ;       /* *s != '\0' covered by above two cases */
  if (*t == '\0')
    return(TRUE);
  else
    return(FALSE);
}

char *strtoupper(char *n) {
  /* convert a string to upper case UP TO the first line break */
  char *c;
  for (c = n; *c != '\0' && *c != '\n' && *c != '\r'; c++)
    if (ISLOWER(*c))   /* needed to stop (known u.c.) const char *n crashing */
      *c = TOUPPER(*c);
  return(n);
}

void strtolowerx(char *n) { /* lower-case filename: only used in next 3 fns. */
  for ( ; *n != '\0' && *n != '?'; n++)
    *n = TOLOWER(*n);
}

void toloweralias(Alias *ap, logical both) {
  AliasTo *tp;
  char *errstr;
  int erroffset;

  for ( ; ap != NULL; TO_NEXT(ap)) {
    if (headcasematch(ap->from, "REGEXP:"))
      ap->pattern = pcre_compile(ap->from + 7, PCRE_CASELESS | PCRE_DOTALL,
				 (const char **)(&errstr), &erroffset, NULL);
    /* if original regcomp succeeded, this one should too */
    else if (!headcasematch(ap->from, "REGEXPI:"))
      /* nothing to do for REGEXPI: */
      strtolowerx(ap->from);
    if (both) {
      for (tp = ap->to; tp != NULL; TO_NEXT(tp))
	strtolowerx(tp->string);
    }
  }
}

void tolowerinc(Include *ip) {
  /* see comments in previous function */
  char *errstr;
  int erroffset;

  for ( ; ip != NULL; TO_NEXT(ip)) {
    if (headcasematch(ip->name, "REGEXP:"))
      ip->pattern = pcre_compile(ip->name + 7, PCRE_CASELESS | PCRE_DOTALL,
				 (const char **)(&errstr), &erroffset, NULL);
    else if (!headcasematch(ip->name, "REGEXPI:"))
      strtolowerx((char *)(ip->name));
  }
}

void tolowerse(Strpairlist *sp) {  /* for (internal) search engines */
  for ( ; sp != NULL; TO_NEXT(sp))
    strtolowerx(sp->name);
}

void reversealias(Alias **head) {
  /* aliases are first collated in reverse order */
  Alias *ap, *lastap = NULL, *nextap;

  for (ap = *head; ap != NULL; ap = nextap) {
    nextap = ap->next;
    ap->next = lastap;
    lastap = ap;
  }
  *head = lastap;
}

/* Swap an strpairlist round. Same as reversealias. Who needs templates?? */
void reversestrpairlist(Strpairlist **head) {
  Strpairlist *sp, *lastsp = NULL, *nextsp;

  for (sp = *head; sp != NULL; sp = nextsp) {
    nextsp = sp->next;
    sp->next = lastsp;
    lastsp = sp;
  }
  *head = lastsp;
}

logical strcaseeq(char *s, char *t) {
  for ( ; TOUPPER(*s) == TOUPPER(*t) && *s != '\0'; s++, t++)
    ;
  if (TOUPPER(*s) != TOUPPER(*t))
    return(FALSE);
  else
    return(TRUE);
}

char *strrpbrk(char *s, char *t) {
  /* locate the last occurence in s of any character in t */
  char *u;

  for (u = strchr(s, '\0') - 1; u >= s; u--) {
    if (strchr(t, *u) != NULL)
      return(u);
  }
  return(NULL);
}

#ifdef EBCDIC
char *strtoascii(char *s) {
  extern unsigned char os_toascii[];
  char *t;

  for (t = s; *t != '\0'; t++)
    *t = (char)os_toascii[(unsigned char)(*t)];
  return(s);
}
#endif

char *buildfilename(char *old, char *sub, char *name) {
  /* Here's how we construct many filenames. If the "name" contains one of the
     PATHSEPS, then just use the "name" (i.e., relative to the working dir).
     Otherwise, put it in the same directory as "old". If "old" is NULL, then
     use the subdirectory "sub" of the location of the analog binary as "old".
     We always malloc new space to hold the name. */
  /* The calling routine should check any special cases appropriate to that
     type of file, e.g., "none", "-", "stdin" or "stdout". */
  extern char *commandpath;
  size_t t = 0, u;
  /* t is the length of sub, u of the directory of old */
  char *s, *ans;

  if (strpbrk(name, PATHSEPS) != NULL) {
    ans = (char *)xmalloc(strlen(name) + 1);
    strcpy(ans, name);
    return(ans);
  }
  if (old == NULL) {
    old = commandpath;
    t = strlen(sub);
  }
  if ((s = strrpbrk(old, PATHSEPS)) == NULL)
    u = 0;
  else
    u = ((s - old) + 1);
  ans = (char *)xmalloc(t + u + strlen(name) + 2);
  if (u != 0)
    strncpy(ans, old, u);
  if (t != 0) {
    sprintf(ans + u, "%s%c", sub, DIRSEP);
    t++;
  }
  strcpy(ans + t + u, name);
  return(ans);
}

#ifdef NEED_STRCMP
int my_strcmp(char *s, char *t) {
  for ( ; *s == *t && *s != '\0'; s++, t++)
    ;
  if (*s < *t)
    return(-1);
  else if (*s > *t)
    return(1);
  else
    return(0);
}
#endif

unsigned int chrn(char *s, char c) {  /* no. of occurrences of c in s */
  unsigned int n = 0;
  for ( ; *s != '\0'; s++)
    n += (*s == c);
  return(n);
}

unsigned int chrdistn(char *s, char c) {/* ditto but consec c's count only 1 */
  unsigned int n = 0;
  for ( ; *s != '\0'; s++)
    n += (*s == c && *(s + 1) != c);
  return(n);
}

unsigned int log10i(unsigned long i) {
  unsigned int j;

  for (j = 0; i >= 10; i /= 10)
    j++;
  return(j);
}

unsigned int log10x(double d) {
  unsigned int j;

  for (j = 0; d >= 10; d /= 10)
    j++;
  return(j);
}

/* If 'd' bytes are displayed to 'dp' decimal places, should they be written
   as kilobytes, megabytes, or what? */
unsigned int findbmult(double d, unsigned int dp) {
  unsigned int j;
  double threshold;

  if (d < 1024)
    return(0);  /* see also in calcsizes() */

  /* Bytes will be rounded to 'dp' decimal places. So the theshold at which
     we move to a new multiplier is 999.5 if dp = 0, 999.95 if dp = 1 etc. */
  threshold = 0.5;
  for (j = 0; j < dp; j++)
    threshold /= 10.0;
  threshold = 1000.0 - threshold;

  /* Now we can find the multiplier */
  for (j = 0; d >= threshold; d /= 1024.0)
    j++;
  return(j);
}

/* Convert a string to integer between 0 and 255, with some error checking
   built in. Returns -1 if string empty, or not all digits, or greater than
   255. */
int atoi255(const char *s) {
  int ans;

  if (*s == '\0')
    return(-1);
  for (ans = 0; ISDIGIT(*s); s++) {
    ans *= 10;
    ans += *s - '0';
    if (ans > 255)
      return(-1);
  }
  if (*s != '\0')
    return(-1);
  return(ans);
}

unsigned long arraymaxl(unsigned long *x, unsigned int size) {
  unsigned long y;
  unsigned int i;

  y = 0;
  for (i = 0; i < size; i++)
    y = MAX(y, x[i]);
  return(y);
}

double arraymaxd(double *x, unsigned int size) {
  double y;       /* assuming doubles in x all positive */
  unsigned int i;

  y = 0.0;
  for (i = 0; i < size; i++)
    y = MAX(y, x[i]);
  return(y);
}

size_t arraymaxlen(char **s, unsigned int size, Outchoices *od) {
  unsigned int i;
  size_t y = 0;

  size_t (*strlenp)(const char *);

  if (od == NULL)
    strlenp = &strlen;
  else
    strlenp = od->outputter->strlength;

  for (i = 0; i < size; i++)
    y = MAX(strlenp(s[i]), y);

  return(y);
}

void prettyprintf(FILE *outf, unsigned int pagewidth, char *fmt, va_list ap) {
  /* NB Calling function must call mprintf with pagewidth = 0 after message. */
  char m[511];  /* longer than any message we want to produce */
  extern unsigned int ppcol;
  static logical spacedone = FALSE;
  char *m1, *m2;

  if (pagewidth == 0) {
    putc('\n', outf);
    ppcol = 0;
    spacedone = FALSE;
    return;
  }
  vsprintf(m, fmt, ap);
  for (m1 = m, m2 = m; *m1 != '\0'; m2++) {
    if (*m2 == ' ' || *m2 == '\0' || *m2 == '\n') {
      if ((m2 - m1) + ppcol > pagewidth && (*m1 == ' ' || spacedone)) {
	fputs("\n  ", outf);
	if (*m1 == ' ')
	  m1++;
	spacedone = FALSE;
	ppcol = 1;
      }
      while (m1 < m2) {
	putc(*m1, outf);
	spacedone = (*(m1++) == ' ');
	ppcol++;
      }
      if (*m1 == '\n') {
	fputs("\n  ", outf);
	m1++;
	spacedone = FALSE;
	ppcol = 2;
      }
    }
  }
}

void mprintf(FILE *outf, unsigned int pagewidth, char *fmt, ...) {
  /* wrapper to prettyprintf(): see note there */
  va_list ap;

  va_start(ap, fmt);
  prettyprintf(outf, pagewidth, fmt, ap);
  va_end(ap);
}

void print_progversion(FILE *f) {
  extern char *commandname, *starttimestr;
  extern logical cgi;
  static logical done = FALSE;

  if (!done) {
    if (cgi)
      fprintf(f, "[%s] ", starttimestr);
    fprintf(f, "%s: Analog CE version %s\n", commandname, VERSION);
    done = TRUE;
  }
}

void warn(char c, choice domess, char *s, ...) {
  extern FILE *errfile;
  extern char *warn_args;
  extern logical anywarns, errmess, cgi;
  extern unsigned int errwidth;
  extern char *commandname, *starttimestr;

  va_list ap;

  if (strchr(warn_args, c) != NULL) {
    if (errwidth == 0)
      errwidth = UINT_MAX;
    print_progversion(errfile);
    va_start(ap, s);
    if (cgi)
      mprintf(errfile, errwidth, "[%s] ", starttimestr);
    if (domess == CONTINUATION)
      mprintf(errfile, errwidth, "%s: ...cont..: ", commandname, c);
    else
      mprintf(errfile, errwidth, "%s: Warning %c: ", commandname, c);
    prettyprintf(errfile, errwidth, s, ap);
    mprintf(errfile, 0, NULL);
    if (!errmess && domess) {
      fputs("  (For help on all errors and warnings,", errfile);
      fputs(" see docs/errors.html)\n", errfile);
      errmess = TRUE;
    }
    va_end(ap);
    anywarns = TRUE;
  }
}

void error(char *s, ...) {
  extern FILE *errfile;
  extern logical anywarns, errmess, cgi;
  extern unsigned int errwidth;
  extern char *commandname, *starttimestr;

  va_list ap;

  if (errwidth == 0)
    errwidth = UINT_MAX;
  print_progversion(errfile);
  va_start(ap, s);
  if (cgi)
    mprintf(errfile, errwidth, "[%s] ", starttimestr);
  mprintf(errfile, errwidth, "%s: Fatal error: ", commandname);
  prettyprintf(errfile, errwidth, s, ap);
  mprintf(errfile, errwidth, ": exiting");
  mprintf(errfile, 0, NULL);
  if (!errmess) {
    fputs("  (For help on all errors and warnings,", errfile);
    fputs(" see docs/errors.html)\n", errfile);
    errmess = TRUE;
  }
  if (errfile != stderr) {
    if (cgi)
      mprintf(stderr, STDERRWIDTH, "[%s] ", starttimestr);
    mprintf(stderr, STDERRWIDTH, "%s: Fatal error: ", commandname);
    prettyprintf(stderr, STDERRWIDTH, s, ap);
    mprintf(stderr, STDERRWIDTH, ": exiting");
    mprintf(stderr, 0, NULL);
  }
  va_end(ap);
  anywarns = TRUE;

  my_exit(EXIT_FAILURE);
}

void debug(char c, char *s, ...) {
  extern FILE *errfile;
  extern char *debug_args;
  extern logical anywarns, cgi;
  extern char *commandname, *starttimestr;

  va_list ap;

  if (strchr(debug_args, c) != NULL) {
    print_progversion(errfile);
    va_start(ap, s);
    if (cgi)
      fprintf(errfile, "[%s] %s: Debug ", starttimestr, commandname);
    fprintf(errfile, "%c: ", c);
    vfprintf(errfile, s, ap);
    fputc('\n', errfile);
    va_end(ap);
    if (c != 'D')
      anywarns = TRUE;
  }
}

char *delimit(char *s) {
  /* This function delimits an argument s so that it could appear in a config
     command. It malloc's as necessary: only used in warning messages */
  char *ans;
  size_t len;

  if (*s != '\'' && *s != '"' && *s != '(' && strchr(s, ' ') == NULL &&
      strchr(s, '#') == NULL)
    return(s);

  len = strlen(s);
  ans = (char *)xmalloc(len + 3);
  strcpy(ans + 1, s);
  if (strchr(s, '"') == NULL) {
    *ans = '"';
    ans[len + 1] = '"';
  }
  else if (strchr(s, ')') == NULL) {
    *ans = '(';
    ans[len + 1] = ')';
  }
  else {
    *ans = '\'';
    ans[len + 1] = '\'';
  }
  ans[len + 2] = '\0';
  return(ans);
}

void *xmalloc(size_t size) {
  /* the same as malloc, only checks for out of memory */
  void *answer;

  if ((answer = malloc(size)) == NULL)
    error("Ran out of memory: cannot continue");

  /* Enable this for debugging: memset(answer, 35, size); */
  return(answer);
}

void *xrealloc(void *ptr, size_t size) {

  if (ptr == NULL)  /* Some broken systems don't allow realloc(NULL, ...) */
    ptr = malloc(size);
  else
    ptr = realloc(ptr, size);
  if (ptr == NULL)
    error("Ran out of memory: cannot continue");

  return(ptr);
}

void *submalloc(Memman *m, size_t size) {
  Mmlist *l;
  /* so memmans are initialised with curr_pos, first = NULL & alignment set */

  size = ((size + m->alignment - 1) / m->alignment) * m->alignment;
  if (m->curr_pos != NULL &&
      (size_t)((char *)(m->block_end) - (char *)(m->next_pos)) >= size)
    m->curr_pos = m->next_pos;
  else {
    m->curr_pos = xmalloc(BLOCKSIZE);
    m->block_end = (void *)((char *)(m->curr_pos) + BLOCKSIZE);
    if (m->first == NULL) {  /* initialisation only */
      m->first = (Mmlist *)xmalloc(sizeof(Mmlist));
      m->first->pos = m->curr_pos;
      m->first->next = NULL;
      m->last = m->first;
    }
    else {
      l = (Mmlist *)xmalloc(sizeof(Mmlist));
      l->pos = m->curr_pos;
      l->next = NULL;
      m->last->next = l;
      TO_NEXT(m->last);
    }
  }
  m->next_pos = (void *)((char *)(m->curr_pos) + size);
  return(m->curr_pos);
}

void freemm(Memman *m) {
  Mmlist *p;

  for (p = m->first; p != NULL; TO_NEXT(p))
    free(p->pos);
}

/* The next function is derived from the FreeBSD 2.2.6 source, and is subject
   to the copyright notice in docs/LicBSD.txt within the analog distribution.
 */

#ifdef NEED_MEMMOVE
/*
 * sizeof(word) MUST BE A POWER OF TWO
 * SO THAT wmask BELOW IS ALL ONES
 */
typedef	int word;		/* "word" used for optimal copy speed */
#define	wsize	sizeof(word)
#define	wmask	(wsize - 1)

void *memmove(void *dst0, const void *src0, size_t length) {
  char *dst = dst0;
  const char *src = src0;
  size_t t;

  if (length == 0 || dst == src)		/* nothing to do */
    goto done;

  /*
   * Macros: loop-t-times; and loop-t-times, t>0
   */
#define	TLOOP(s) if (t) TLOOP1(s)
#define	TLOOP1(s) do { s; } while (--t)

  if ((unsigned long)dst < (unsigned long)src) {
    /*
     * Copy forward.
     */
    t = (int)src;	/* only need low bits */
    if ((t | (int)dst) & wmask) {
      /*
       * Try to align operands.  This cannot be done
       * unless the low bits match.
       */
      if ((t ^ (int)dst) & wmask || length < wsize)
	t = length;
      else
	t = wsize - (t & wmask);
      length -= t;
      TLOOP1(*dst++ = *src++);
    }
    /*
     * Copy whole words, then mop up any trailing bytes.
     */
    t = length / wsize;
    TLOOP(*(word *)dst = *(word *)src; src += wsize; dst += wsize);
    t = length & wmask;
    TLOOP(*dst++ = *src++);
  } else {
    /*
     * Copy backwards.  Otherwise essentially the same.
     * Alignment works as before, except that it takes
     * (t&wmask) bytes to align, not wsize-(t&wmask).
     */
    src += length;
    dst += length;
    t = (int)src;
    if ((t | (int)dst) & wmask) {
      if ((t ^ (int)dst) & wmask || length <= wsize)
	t = length;
      else
	t &= wmask;
      length -= t;
      TLOOP1(*--dst = *--src);
    }
    t = length / wsize;
    TLOOP(src -= wsize; dst -= wsize; *(word *)dst = *(word *)src);
    t = length & wmask;
    TLOOP(*--dst = *--src);
  }
 done:
  return (dst0);
}
#endif

#define SETPMATCH(ptr1, ptr2) \
  if (nmatch > 0) { \
    pmatch[0] = (int)(ptr1 - whole); \
    pmatch[1] = (int)(ptr2 - whole); \
  }

/* match string s against pattern p */
logical wildmatch(char *s, char *p, char *whole, int nmatch, int *pmatch) {
  char *ss, *pp;

  /* First match head portions */
  while ((*s == *p || *p == '?') && *s != '\0' && *p != '*') {
    s++;        /* *p != '\0' is covered by (*s == *p) && (*s != '\0') */
    p++;
  }
  /* Unless we've reached a pattern *, we've finished now */
  if (*p != '*') {
    if (*s == '\0' && *p == '\0')
      return(TRUE);
    else
      return(FALSE);
  }
  /* Otherwise, match the tail portions. This is purely for speed reasons,
     so that patterns with only one star don't have to go through the loop
     below. */
  ss = strchr(s, '\0');
  pp = strchr(p, '\0');
  while ((*ss == *pp || *pp == '?') && ss >= s && *pp != '*') {
    ss--;       /* pp != p is covered because *p == '*' */
    pp--;
  }
  /* Again, we might have finished now */
  if (pp == p) {
    SETPMATCH(s, ss + 1);
    return(TRUE);
  }
  else if (*pp != '*')
    return(FALSE);
  for (p++; *p == '*' && p != pp; p++)
    ;
  if (p == pp) {    /* there was really only one *, disguised as several */
    SETPMATCH(s, ss + 1);
    return(TRUE);
  }
  if (ss < s)
    return(FALSE);
  /* this leaves only the difficult case, where p contains >= 2 *'s. Try and
     match ANY tail substring of s against the bit of the pattern after the
     first * (or consec. *'s) (reducing *'s in p, guaranteeing termination).
     (p was incremented above). We choose to match tail portion afresh each
     time (cheap), rather than insert null bytes into (poss. const) s and p */
  for (ss = s; *ss != '\0'; ss++) {   /* reuse ss */
    if (wildmatch(ss, p, whole, nmatch - 2, pmatch + 2)) {
      SETPMATCH(s, ss);
      return(TRUE);
    }
  }
  return(FALSE);
}

logical matchq(char *s, void *p, logical is_regex, int *pmatch) {
  if (is_regex)
    return(pcre_exec((pcre *)p, NULL, s, (int)strlen(s), 0, 0, pmatch,
		     (pmatch == NULL)?0:PMATCH_SIZE) >= 0);
  else
    return(wildmatch(s, (char *)p, s, (pmatch == NULL)?0:PMATCH_SIZE, pmatch));
}

logical genwildmatch(char *s, char *s2, char *p) {
  /* Exactly the same as wildmatch, except with doubly delimited strings,
     and we don't need to know the matched portions. */
  char *ss, *pp;

  while ((*s == *p || *p == '?') && s < s2 && *p != '*' && *p != '\0') {
    s++;
    p++;
  }
  if (*p != '*') {
    if (s == s2 && *p == '\0')
      return(TRUE);
    else
      return(FALSE);
  }
  ss = s2;
  pp = strchr(p, '\0');
  while ((*ss == *pp || *pp == '?' || ss == s2) && ss >= s && *pp != '*') {
    ss--;
    pp--;
  }
  if (pp == p)
    return(TRUE);
  else if (*pp != '*')
    return(FALSE);
  for (p++; *p == '*' && p != pp; p++)
    ;
  if (p == pp)
    return(TRUE);
  if (ss < s)
    return(FALSE);
  for ( ; s < s2; s++) {
    if (genwildmatch(s, s2, p))
      return(TRUE);
  }
  return(FALSE);
}

logical headmatch(char *s, char *p) {  /* does s start with p? */

  for ( ; *p != '\0'; s++, p++) {
    if (*s != *p)
      return(FALSE);
  }
  return(TRUE);
}

logical headcasematch(char *s, char *p) {  /* same, only case insensitive */

  for ( ; *p != '\0'; s++, p++) {
    if (TOLOWER(*s) != TOLOWER(*p))
      return(FALSE);
  }
  return(TRUE);
}

/* Does a hostname match an IP address range? */
logical matchiprange(char *s, unsigned long minaddr, unsigned long maxaddr)
{
  unsigned long addr;
  int n, octet;

  /* Turn this host into a long. This is basically just the simple case from
     parseiprange() (including atoi255()), but a much faster version. */

  for (addr = 0, octet = 0; octet < 4; octet++) {
    if (!ISDIGIT(*s))
      return(FALSE);
    for (n = 0; ISDIGIT(*s); s++) {
      n *= 10;
      n += *s - '0';
      if (n > 255)
	return(FALSE);
    }
    if (octet < 3) {
      if (*s == '.')
	s++;
      else
	return(FALSE);
    }
    addr <<= 8;
    addr += n;
  }

  if (*s != '\0')
    return(FALSE);

  /* Is it in the right range? */
  return (minaddr <= addr && addr <= maxaddr);
}

/* Is an item included according to an INCLUDE/EXCLUDE list? */
logical included(char *name, logical ispage, Include *listhead) {
  logical is_ipaddr, is_regex, matches;
  Include *lp, *lastlp;

  if (listhead == NULL)
    return(TRUE);

  for (lp = listhead; lp != NULL; TO_NEXT(lp)) {
    is_ipaddr = IS_IPADDRT(lp->type);
    is_regex = IS_REGEXT(lp->type);
    if (!is_regex && !is_ipaddr && STREQ((char *)(lp->name), "pages"))
      /* 'pages' is made case insensitive at config time */
      matches = ispage;
    else if (is_ipaddr)
      matches = matchiprange(name, lp->minaddr, lp->maxaddr);
    else
      matches = matchq(name,
		       is_regex?((void *)(lp->pattern)):((void *)(lp->name)),
		       is_regex, NULL);
    if (matches)
      return(IS_INC(lp->type));
    lastlp = lp;
  }

  /* not listed: return opposite of first inc/exc */
  return(!IS_INC(lastlp->type));
}

/* Is an item included in an Strlist? */
logical incstrlist(char *name, Strlist *listhead) {
  Strlist *lp;

  for (lp = listhead; lp != NULL; TO_NEXT(lp)) {
    if (STREQ(name, lp->name))
      return(TRUE);
  }
  return(FALSE);
}

logical pageq(char *name, Include *ispagehead, choice type) {
  char *c;
  logical ans;

  if (type == ITEM_REFERRER)
    return(TRUE);
  if (type != ITEM_FILE)
    return(FALSE);

  if ((c = strchr(name, '?')) != NULL) {
    *c = '\0';
    ans = (choice)included(name, FALSE, ispagehead);
    *c = '?';
  }
  else
    ans = (choice)included(name, FALSE, ispagehead);
  return(ans);
}
analog-ce-6.0.17/src/win32.c000066400000000000000000000021251406366436600153460ustar00rootroot00000000000000/***             analog 6.0             http://www.analog.cx/             ***/
/*** This program is copyright (c) Stephen R. E. Turner 1995 - 2004 except as
 *** stated otherwise.
 ***
 *** This program is free software. You can redistribute it and/or modify it
 *** under the terms of version 2 of the GNU General Public License, which you
 *** should have received with it.
 ***
 *** This program is distributed in the hope that it will be useful, but
 *** without any warranty, expressed or implied.   ***/

/*** win32.c; stuff only required for the Win32 port ***/
/* This stuff is due to Magnus Hagander (mha@edu.sollentuna.se) */
#include "anlghea3.h"
#ifdef WIN32

/*
 * Initialize the required Win32 structures and routines
 */

void Win32Init(void) {
#ifndef NODNS
  WSADATA wsaData;

  if (WSAStartup(MAKEWORD(1,1),&wsaData))
    error("unable to initialise winsock.dll");
#endif
#ifndef NOPRIORITY
  SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_BELOW_NORMAL);
#endif
}

/*
 * Cleanup Win32 structures and routines
 */
void Win32Cleanup(void) {
#ifndef NODNS
  WSACleanup();
#endif
}
#endif
analog-ce-6.0.17/src/zlib/000077500000000000000000000000001406366436600152005ustar00rootroot00000000000000analog-ce-6.0.17/src/zlib/LICENSE000066400000000000000000000041641406366436600162120ustar00rootroot00000000000000The files in this directory are from version 1.1.4 of Jean-loup Gailly and
Mark Adler's zlib library. The source files are unchanged except for being
wrapped in my own #ifdef's, but the documentation, example programs etc.
have been removed. You can get the full distribution of zlib from
http://www.zlib.org/ .

Many thanks to the authors for their excellent routines and generous licence.

=== AUTHORS' COPYRIGHT AND LICENCE START HERE ===

Acknowledgments:

  The deflate format used by zlib was defined by Phil Katz. The deflate
  and zlib specifications were written by L. Peter Deutsch. Thanks to all the
  people who reported problems and suggested various improvements in zlib;
  they are too numerous to cite here.

Copyright notice:

 (C) 1995-2002 Jean-loup Gailly and Mark Adler

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  Jean-loup Gailly        Mark Adler
  jloup@gzip.org          madler@alumni.caltech.edu

If you use the zlib library in a product, we would appreciate *not*
receiving lengthy legal documents to sign. The sources are provided
for free but without warranty of any kind.  The library has been
entirely written by Jean-loup Gailly and Mark Adler; it does not
include third-party code.

If you redistribute modified sources, we would appreciate that you include
in the file ChangeLog history information documenting your changes.
analog-ce-6.0.17/src/zlib/Makefile000066400000000000000000000026351406366436600166460ustar00rootroot00000000000000# Makefile for analog 6.0, zlib subdirectory
# Please read docs/Readme.html, or http://www.analog.cx/

HEADERS = deflate.h infblock.h infcodes.h inffast.h inffixed.h inftrees.h \
	infutil.h trees.h zconf.h zlib.h zutil.h
OBJS = adler32.o compress.o crc32.o deflate.o gzio.o infblock.o infcodes.o \
	inffast.o inflate.o inftrees.o infutil.o trees.o uncompr.o zutil.o

all: $(OBJS)

adler32.o: adler32.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c adler32.c

compress.o: compress.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c compress.c

crc32.o: crc32.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c crc32.c

deflate.o: deflate.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c deflate.c

gzio.o: gzio.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c gzio.c

infblock.o: infblock.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c infblock.c

infcodes.o: infcodes.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c infcodes.c

inffast.o: inffast.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c inffast.c

inflate.o: inflate.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c inflate.c

inftrees.o: inftrees.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c inftrees.c

infutil.o: infutil.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c infutil.c

trees.o: trees.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c trees.c

uncompr.o: uncompr.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c uncompr.c

zutil.o: zutil.c $(HEADERS) Makefile
	$(CC) $(ALLCFLAGS) -c zutil.c

clean:
	rm -f *.o *~
analog-ce-6.0.17/src/zlib/adler32.c000066400000000000000000000023661406366436600166070ustar00rootroot00000000000000/* adler32.c -- compute the Adler-32 checksum of a data stream
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zlib.h"

#define BASE 65521L /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */

#define DO1(buf,i)  {s1 += buf[i]; s2 += s1;}
#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
#define DO16(buf)   DO8(buf,0); DO8(buf,8);

/* ========================================================================= */
uLong ZEXPORT adler32(adler, buf, len)
    uLong adler;
    const Bytef *buf;
    uInt len;
{
    unsigned long s1 = adler & 0xffff;
    unsigned long s2 = (adler >> 16) & 0xffff;
    int k;

    if (buf == Z_NULL) return 1L;

    while (len > 0) {
        k = len < NMAX ? len : NMAX;
        len -= k;
        while (k >= 16) {
            DO16(buf);
	    buf += 16;
            k -= 16;
        }
        if (k != 0) do {
            s1 += *buf++;
	    s2 += s1;
        } while (--k);
        s1 %= BASE;
        s2 %= BASE;
    }
    return (s2 << 16) | s1;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/compress.c000066400000000000000000000041611406366436600172010ustar00rootroot00000000000000/* compress.c -- compress a memory buffer
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zlib.h"

/* ===========================================================================
     Compresses the source buffer into the destination buffer. The level
   parameter has the same meaning as in deflateInit.  sourceLen is the byte
   length of the source buffer. Upon entry, destLen is the total size of the
   destination buffer, which must be at least 0.1% larger than sourceLen plus
   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.

     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
   Z_STREAM_ERROR if the level parameter is invalid.
*/
int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
    Bytef *dest;
    uLongf *destLen;
    const Bytef *source;
    uLong sourceLen;
    int level;
{
    z_stream stream;
    int err;

    stream.next_in = (Bytef*)source;
    stream.avail_in = (uInt)sourceLen;
#ifdef MAXSEG_64K
    /* Check for source > 64K on 16-bit machine: */
    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
#endif
    stream.next_out = dest;
    stream.avail_out = (uInt)*destLen;
    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;

    stream.zalloc = (alloc_func)0;
    stream.zfree = (free_func)0;
    stream.opaque = (voidpf)0;

    err = deflateInit(&stream, level);
    if (err != Z_OK) return err;

    err = deflate(&stream, Z_FINISH);
    if (err != Z_STREAM_END) {
        deflateEnd(&stream);
        return err == Z_OK ? Z_BUF_ERROR : err;
    }
    *destLen = stream.total_out;

    err = deflateEnd(&stream);
    return err;
}

/* ===========================================================================
 */
int ZEXPORT compress (dest, destLen, source, sourceLen)
    Bytef *dest;
    uLongf *destLen;
    const Bytef *source;
    uLong sourceLen;
{
    return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/crc32.c000066400000000000000000000155271406366436600162720ustar00rootroot00000000000000/* crc32.c -- compute the CRC-32 of a data stream
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zlib.h"

#define local static

#ifdef DYNAMIC_CRC_TABLE

local int crc_table_empty = 1;
local uLongf crc_table[256];
local void make_crc_table OF((void));

/*
  Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
  x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.

  Polynomials over GF(2) are represented in binary, one bit per coefficient,
  with the lowest powers in the most significant bit.  Then adding polynomials
  is just exclusive-or, and multiplying a polynomial by x is a right shift by
  one.  If we call the above polynomial p, and represent a byte as the
  polynomial q, also with the lowest power in the most significant bit (so the
  byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
  where a mod b means the remainder after dividing a by b.

  This calculation is done using the shift-register method of multiplying and
  taking the remainder.  The register is initialized to zero, and for each
  incoming bit, x^32 is added mod p to the register if the bit is a one (where
  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
  x (which is shifting right by one and adding x^32 mod p if the bit shifted
  out is a one).  We start with the highest power (least significant bit) of
  q and repeat for all eight bits of q.

  The table is simply the CRC of all possible eight bit values.  This is all
  the information needed to generate CRC's on data a byte at a time for all
  combinations of CRC register values and incoming bytes.
*/
local void make_crc_table()
{
  uLong c;
  int n, k;
  uLong poly;            /* polynomial exclusive-or pattern */
  /* terms of polynomial defining this crc (except x^32): */
  static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};

  /* make exclusive-or pattern from polynomial (0xedb88320L) */
  poly = 0L;
  for (n = 0; n < sizeof(p)/sizeof(Byte); n++)
    poly |= 1L << (31 - p[n]);
 
  for (n = 0; n < 256; n++)
  {
    c = (uLong)n;
    for (k = 0; k < 8; k++)
      c = c & 1 ? poly ^ (c >> 1) : c >> 1;
    crc_table[n] = c;
  }
  crc_table_empty = 0;
}
#else
/* ========================================================================
 * Table of CRC-32's of all single-byte values (made by make_crc_table)
 */
local const uLongf crc_table[256] = {
  0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
  0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
  0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
  0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
  0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
  0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
  0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
  0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
  0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
  0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
  0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
  0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
  0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
  0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
  0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
  0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
  0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
  0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
  0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
  0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
  0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
  0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
  0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
  0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
  0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
  0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
  0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
  0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
  0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
  0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
  0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
  0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
  0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
  0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
  0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
  0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
  0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
  0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
  0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
  0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
  0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
  0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
  0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
  0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
  0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
  0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
  0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
  0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
  0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
  0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
  0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
  0x2d02ef8dL
};
#endif

/* =========================================================================
 * This function can be used by asm versions of crc32()
 */
const uLongf * ZEXPORT get_crc_table()
{
#ifdef DYNAMIC_CRC_TABLE
  if (crc_table_empty) make_crc_table();
#endif
  return (const uLongf *)crc_table;
}

/* ========================================================================= */
#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
#define DO2(buf)  DO1(buf); DO1(buf);
#define DO4(buf)  DO2(buf); DO2(buf);
#define DO8(buf)  DO4(buf); DO4(buf);

/* ========================================================================= */
uLong ZEXPORT crc32(crc, buf, len)
    uLong crc;
    const Bytef *buf;
    uInt len;
{
    if (buf == Z_NULL) return 0L;
#ifdef DYNAMIC_CRC_TABLE
    if (crc_table_empty)
      make_crc_table();
#endif
    crc = crc ^ 0xffffffffL;
    while (len >= 8)
    {
      DO8(buf);
      len -= 8;
    }
    if (len) do {
      DO1(buf);
    } while (--len);
    return crc ^ 0xffffffffL;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/deflate.c000066400000000000000000001375601406366436600167640ustar00rootroot00000000000000/* deflate.c -- compress data using the deflation algorithm
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/*
 *  ALGORITHM
 *
 *      The "deflation" process depends on being able to identify portions
 *      of the input text which are identical to earlier input (within a
 *      sliding window trailing behind the input currently being processed).
 *
 *      The most straightforward technique turns out to be the fastest for
 *      most input files: try all possible matches and select the longest.
 *      The key feature of this algorithm is that insertions into the string
 *      dictionary are very simple and thus fast, and deletions are avoided
 *      completely. Insertions are performed at each input character, whereas
 *      string matches are performed only when the previous match ends. So it
 *      is preferable to spend more time in matches to allow very fast string
 *      insertions and avoid deletions. The matching algorithm for small
 *      strings is inspired from that of Rabin & Karp. A brute force approach
 *      is used to find longer strings when a small match has been found.
 *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
 *      (by Leonid Broukhis).
 *         A previous version of this file used a more sophisticated algorithm
 *      (by Fiala and Greene) which is guaranteed to run in linear amortized
 *      time, but has a larger average cost, uses more memory and is patented.
 *      However the F&G algorithm may be faster for some highly redundant
 *      files if the parameter max_chain_length (described below) is too large.
 *
 *  ACKNOWLEDGEMENTS
 *
 *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
 *      I found it in 'freeze' written by Leonid Broukhis.
 *      Thanks to many people for bug reports and testing.
 *
 *  REFERENCES
 *
 *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
 *      Available in ftp://ds.internic.net/rfc/rfc1951.txt
 *
 *      A description of the Rabin and Karp algorithm is given in the book
 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
 *
 *      Fiala,E.R., and Greene,D.H.
 *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
 *
 */

#ifndef HAVE_ZLIB
#include "deflate.h"

const char deflate_copyright[] =
   " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly ";
/*
  If you use the zlib library in a product, an acknowledgment is welcome
  in the documentation of your product. If for some reason you cannot
  include such an acknowledgment, I would appreciate that you keep this
  copyright string in the executable of your product.
 */

/* ===========================================================================
 *  Function prototypes.
 */
typedef enum {
    need_more,      /* block not completed, need more input or more output */
    block_done,     /* block flush performed */
    finish_started, /* finish started, need only more output at next deflate */
    finish_done     /* finish done, accept no more input or output */
} block_state;

typedef block_state (*compress_func) OF((deflate_state *s, int flush));
/* Compression function. Returns the block state after the call. */

local void fill_window    OF((deflate_state *s));
local block_state deflate_stored OF((deflate_state *s, int flush));
local block_state deflate_fast   OF((deflate_state *s, int flush));
local block_state deflate_slow   OF((deflate_state *s, int flush));
local void lm_init        OF((deflate_state *s));
local void putShortMSB    OF((deflate_state *s, uInt b));
local void flush_pending  OF((z_streamp strm));
local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
#ifdef ASMV
      void match_init OF((void)); /* asm code initialization */
      uInt longest_match  OF((deflate_state *s, IPos cur_match));
#else
local uInt longest_match  OF((deflate_state *s, IPos cur_match));
#endif

#ifdef DEBUG
local  void check_match OF((deflate_state *s, IPos start, IPos match,
                            int length));
#endif

/* ===========================================================================
 * Local data
 */

#define NIL 0
/* Tail of hash chains */

#ifndef TOO_FAR
#  define TOO_FAR 4096
#endif
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */

#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
/* Minimum amount of lookahead, except at the end of the input file.
 * See deflate.c for comments about the MIN_MATCH+1.
 */

/* Values for max_lazy_match, good_match and max_chain_length, depending on
 * the desired pack level (0..9). The values given below have been tuned to
 * exclude worst case performance for pathological files. Better values may be
 * found for specific files.
 */
typedef struct config_s {
   ush good_length; /* reduce lazy search above this match length */
   ush max_lazy;    /* do not perform lazy search above this match length */
   ush nice_length; /* quit search above this match length */
   ush max_chain;
   compress_func func;
} config;

local const config configuration_table[10] = {
/*      good lazy nice chain */
/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
/* 1 */ {4,    4,  8,    4, deflate_fast}, /* maximum speed, no lazy matches */
/* 2 */ {4,    5, 16,    8, deflate_fast},
/* 3 */ {4,    6, 32,   32, deflate_fast},

/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
/* 5 */ {8,   16, 32,   32, deflate_slow},
/* 6 */ {8,   16, 128, 128, deflate_slow},
/* 7 */ {8,   32, 128, 256, deflate_slow},
/* 8 */ {32, 128, 258, 1024, deflate_slow},
/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */

/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
 * meaning.
 */

#define EQUAL 0
/* result of memcmp for equal strings */

struct static_tree_desc_s {int dummy;}; /* for buggy compilers */

/* ===========================================================================
 * Update a hash value with the given input byte
 * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
 *    input characters, so that a running hash key can be computed from the
 *    previous key instead of complete recalculation each time.
 */
#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask)


/* ===========================================================================
 * Insert string str in the dictionary and set match_head to the previous head
 * of the hash chain (the most recent string with same hash key). Return
 * the previous length of the hash chain.
 * If this file is compiled with -DFASTEST, the compression level is forced
 * to 1, and no hash chains are maintained.
 * IN  assertion: all calls to to INSERT_STRING are made with consecutive
 *    input characters and the first MIN_MATCH bytes of str are valid
 *    (except for the last MIN_MATCH-1 bytes of the input file).
 */
#ifdef FASTEST
#define INSERT_STRING(s, str, match_head) \
   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
    match_head = s->head[s->ins_h], \
    s->head[s->ins_h] = (Pos)(str))
#else
#define INSERT_STRING(s, str, match_head) \
   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
    s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
    s->head[s->ins_h] = (Pos)(str))
#endif

/* ===========================================================================
 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
 * prev[] will be initialized on the fly.
 */
#define CLEAR_HASH(s) \
    s->head[s->hash_size-1] = NIL; \
    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));

/* ========================================================================= */
int ZEXPORT deflateInit_(strm, level, version, stream_size)
    z_streamp strm;
    int level;
    const char *version;
    int stream_size;
{
    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
			 Z_DEFAULT_STRATEGY, version, stream_size);
    /* To do: ignore strm->next_in if we use it as window */
}

/* ========================================================================= */
int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
		  version, stream_size)
    z_streamp strm;
    int  level;
    int  method;
    int  windowBits;
    int  memLevel;
    int  strategy;
    const char *version;
    int stream_size;
{
    deflate_state *s;
    int noheader = 0;
    static const char* my_version = ZLIB_VERSION;

    ushf *overlay;
    /* We overlay pending_buf and d_buf+l_buf. This works since the average
     * output size for (length,distance) codes is <= 24 bits.
     */

    if (version == Z_NULL || version[0] != my_version[0] ||
        stream_size != sizeof(z_stream)) {
	return Z_VERSION_ERROR;
    }
    if (strm == Z_NULL) return Z_STREAM_ERROR;

    strm->msg = Z_NULL;
    if (strm->zalloc == Z_NULL) {
	strm->zalloc = zcalloc;
	strm->opaque = (voidpf)0;
    }
    if (strm->zfree == Z_NULL) strm->zfree = zcfree;

    if (level == Z_DEFAULT_COMPRESSION) level = 6;
#ifdef FASTEST
    level = 1;
#endif

    if (windowBits < 0) { /* undocumented feature: suppress zlib header */
        noheader = 1;
        windowBits = -windowBits;
    }
    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
        windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
	strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
        return Z_STREAM_ERROR;
    }
    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
    if (s == Z_NULL) return Z_MEM_ERROR;
    strm->state = (struct internal_state FAR *)s;
    s->strm = strm;

    s->noheader = noheader;
    s->w_bits = windowBits;
    s->w_size = 1 << s->w_bits;
    s->w_mask = s->w_size - 1;

    s->hash_bits = memLevel + 7;
    s->hash_size = 1 << s->hash_bits;
    s->hash_mask = s->hash_size - 1;
    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);

    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));

    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */

    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
    s->pending_buf = (uchf *) overlay;
    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);

    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
        s->pending_buf == Z_NULL) {
        strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
        deflateEnd (strm);
        return Z_MEM_ERROR;
    }
    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;

    s->level = level;
    s->strategy = strategy;
    s->method = (Byte)method;

    return deflateReset(strm);
}

/* ========================================================================= */
int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
    z_streamp strm;
    const Bytef *dictionary;
    uInt  dictLength;
{
    deflate_state *s;
    uInt length = dictLength;
    uInt n;
    IPos hash_head = 0;

    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
        strm->state->status != INIT_STATE) return Z_STREAM_ERROR;

    s = strm->state;
    strm->adler = adler32(strm->adler, dictionary, dictLength);

    if (length < MIN_MATCH) return Z_OK;
    if (length > MAX_DIST(s)) {
	length = MAX_DIST(s);
#ifndef USE_DICT_HEAD
	dictionary += dictLength - length; /* use the tail of the dictionary */
#endif
    }
    zmemcpy(s->window, dictionary, length);
    s->strstart = length;
    s->block_start = (long)length;

    /* Insert all strings in the hash table (except for the last two bytes).
     * s->lookahead stays null, so s->ins_h will be recomputed at the next
     * call of fill_window.
     */
    s->ins_h = s->window[0];
    UPDATE_HASH(s, s->ins_h, s->window[1]);
    for (n = 0; n <= length - MIN_MATCH; n++) {
	INSERT_STRING(s, n, hash_head);
    }
    if (hash_head) hash_head = 0;  /* to make compiler happy */
    return Z_OK;
}

/* ========================================================================= */
int ZEXPORT deflateReset (strm)
    z_streamp strm;
{
    deflate_state *s;
    
    if (strm == Z_NULL || strm->state == Z_NULL ||
        strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;

    strm->total_in = strm->total_out = 0;
    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
    strm->data_type = Z_UNKNOWN;

    s = (deflate_state *)strm->state;
    s->pending = 0;
    s->pending_out = s->pending_buf;

    if (s->noheader < 0) {
        s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
    }
    s->status = s->noheader ? BUSY_STATE : INIT_STATE;
    strm->adler = 1;
    s->last_flush = Z_NO_FLUSH;

    _tr_init(s);
    lm_init(s);

    return Z_OK;
}

/* ========================================================================= */
int ZEXPORT deflateParams(strm, level, strategy)
    z_streamp strm;
    int level;
    int strategy;
{
    deflate_state *s;
    compress_func func;
    int err = Z_OK;

    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
    s = strm->state;

    if (level == Z_DEFAULT_COMPRESSION) {
	level = 6;
    }
    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
	return Z_STREAM_ERROR;
    }
    func = configuration_table[s->level].func;

    if (func != configuration_table[level].func && strm->total_in != 0) {
	/* Flush the last buffer: */
	err = deflate(strm, Z_PARTIAL_FLUSH);
    }
    if (s->level != level) {
	s->level = level;
	s->max_lazy_match   = configuration_table[level].max_lazy;
	s->good_match       = configuration_table[level].good_length;
	s->nice_match       = configuration_table[level].nice_length;
	s->max_chain_length = configuration_table[level].max_chain;
    }
    s->strategy = strategy;
    return err;
}

/* =========================================================================
 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
 * IN assertion: the stream state is correct and there is enough room in
 * pending_buf.
 */
local void putShortMSB (s, b)
    deflate_state *s;
    uInt b;
{
    put_byte(s, (Byte)(b >> 8));
    put_byte(s, (Byte)(b & 0xff));
}   

/* =========================================================================
 * Flush as much pending output as possible. All deflate() output goes
 * through this function so some applications may wish to modify it
 * to avoid allocating a large strm->next_out buffer and copying into it.
 * (See also read_buf()).
 */
local void flush_pending(strm)
    z_streamp strm;
{
    unsigned len = strm->state->pending;

    if (len > strm->avail_out) len = strm->avail_out;
    if (len == 0) return;

    zmemcpy(strm->next_out, strm->state->pending_out, len);
    strm->next_out  += len;
    strm->state->pending_out  += len;
    strm->total_out += len;
    strm->avail_out  -= len;
    strm->state->pending -= len;
    if (strm->state->pending == 0) {
        strm->state->pending_out = strm->state->pending_buf;
    }
}

/* ========================================================================= */
int ZEXPORT deflate (strm, flush)
    z_streamp strm;
    int flush;
{
    int old_flush; /* value of flush param for previous deflate call */
    deflate_state *s;

    if (strm == Z_NULL || strm->state == Z_NULL ||
	flush > Z_FINISH || flush < 0) {
        return Z_STREAM_ERROR;
    }
    s = strm->state;

    if (strm->next_out == Z_NULL ||
        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
	(s->status == FINISH_STATE && flush != Z_FINISH)) {
        ERR_RETURN(strm, Z_STREAM_ERROR);
    }
    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);

    s->strm = strm; /* just in case */
    old_flush = s->last_flush;
    s->last_flush = flush;

    /* Write the zlib header */
    if (s->status == INIT_STATE) {

        uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
        uInt level_flags = (s->level-1) >> 1;

        if (level_flags > 3) level_flags = 3;
        header |= (level_flags << 6);
	if (s->strstart != 0) header |= PRESET_DICT;
        header += 31 - (header % 31);

        s->status = BUSY_STATE;
        putShortMSB(s, header);

	/* Save the adler32 of the preset dictionary: */
	if (s->strstart != 0) {
	    putShortMSB(s, (uInt)(strm->adler >> 16));
	    putShortMSB(s, (uInt)(strm->adler & 0xffff));
	}
	strm->adler = 1L;
    }

    /* Flush as much pending output as possible */
    if (s->pending != 0) {
        flush_pending(strm);
        if (strm->avail_out == 0) {
	    /* Since avail_out is 0, deflate will be called again with
	     * more output space, but possibly with both pending and
	     * avail_in equal to zero. There won't be anything to do,
	     * but this is not an error situation so make sure we
	     * return OK instead of BUF_ERROR at next call of deflate:
             */
	    s->last_flush = -1;
	    return Z_OK;
	}

    /* Make sure there is something to do and avoid duplicate consecutive
     * flushes. For repeated and useless calls with Z_FINISH, we keep
     * returning Z_STREAM_END instead of Z_BUFF_ERROR.
     */
    } else if (strm->avail_in == 0 && flush <= old_flush &&
	       flush != Z_FINISH) {
        ERR_RETURN(strm, Z_BUF_ERROR);
    }

    /* User must not provide more input after the first FINISH: */
    if (s->status == FINISH_STATE && strm->avail_in != 0) {
        ERR_RETURN(strm, Z_BUF_ERROR);
    }

    /* Start a new block or continue the current one.
     */
    if (strm->avail_in != 0 || s->lookahead != 0 ||
        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
        block_state bstate;

	bstate = (*(configuration_table[s->level].func))(s, flush);

        if (bstate == finish_started || bstate == finish_done) {
            s->status = FINISH_STATE;
        }
        if (bstate == need_more || bstate == finish_started) {
	    if (strm->avail_out == 0) {
	        s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
	    }
	    return Z_OK;
	    /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
	     * of deflate should use the same flush parameter to make sure
	     * that the flush is complete. So we don't have to output an
	     * empty block here, this will be done at next call. This also
	     * ensures that for a very small output buffer, we emit at most
	     * one empty block.
	     */
	}
        if (bstate == block_done) {
            if (flush == Z_PARTIAL_FLUSH) {
                _tr_align(s);
            } else { /* FULL_FLUSH or SYNC_FLUSH */
                _tr_stored_block(s, (char*)0, 0L, 0);
                /* For a full flush, this empty block will be recognized
                 * as a special marker by inflate_sync().
                 */
                if (flush == Z_FULL_FLUSH) {
                    CLEAR_HASH(s);             /* forget history */
                }
            }
            flush_pending(strm);
	    if (strm->avail_out == 0) {
	      s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
	      return Z_OK;
	    }
        }
    }
    Assert(strm->avail_out > 0, "bug2");

    if (flush != Z_FINISH) return Z_OK;
    if (s->noheader) return Z_STREAM_END;

    /* Write the zlib trailer (adler32) */
    putShortMSB(s, (uInt)(strm->adler >> 16));
    putShortMSB(s, (uInt)(strm->adler & 0xffff));
    flush_pending(strm);
    /* If avail_out is zero, the application will call deflate again
     * to flush the rest.
     */
    s->noheader = -1; /* write the trailer only once! */
    return s->pending != 0 ? Z_OK : Z_STREAM_END;
}

/* ========================================================================= */
int ZEXPORT deflateEnd (strm)
    z_streamp strm;
{
    int status;

    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;

    status = strm->state->status;
    if (status != INIT_STATE && status != BUSY_STATE &&
	status != FINISH_STATE) {
      return Z_STREAM_ERROR;
    }

    /* Deallocate in reverse order of allocations: */
    TRY_FREE(strm, strm->state->pending_buf);
    TRY_FREE(strm, strm->state->head);
    TRY_FREE(strm, strm->state->prev);
    TRY_FREE(strm, strm->state->window);

    ZFREE(strm, strm->state);
    strm->state = Z_NULL;

    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
}

/* =========================================================================
 * Copy the source state to the destination state.
 * To simplify the source, this is not supported for 16-bit MSDOS (which
 * doesn't have enough memory anyway to duplicate compression states).
 */
int ZEXPORT deflateCopy (dest, source)
    z_streamp dest;
    z_streamp source;
{
#ifdef MAXSEG_64K
    return Z_STREAM_ERROR;
#else
    deflate_state *ds;
    deflate_state *ss;
    ushf *overlay;


    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
        return Z_STREAM_ERROR;
    }

    ss = source->state;

    *dest = *source;

    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
    if (ds == Z_NULL) return Z_MEM_ERROR;
    dest->state = (struct internal_state FAR *) ds;
    *ds = *ss;
    ds->strm = dest;

    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
    ds->pending_buf = (uchf *) overlay;

    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
        ds->pending_buf == Z_NULL) {
        deflateEnd (dest);
        return Z_MEM_ERROR;
    }
    /* following zmemcpy do not work for 16-bit MSDOS */
    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);

    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;

    ds->l_desc.dyn_tree = ds->dyn_ltree;
    ds->d_desc.dyn_tree = ds->dyn_dtree;
    ds->bl_desc.dyn_tree = ds->bl_tree;

    return Z_OK;
#endif
}

/* ===========================================================================
 * Read a new buffer from the current input stream, update the adler32
 * and total number of bytes read.  All deflate() input goes through
 * this function so some applications may wish to modify it to avoid
 * allocating a large strm->next_in buffer and copying from it.
 * (See also flush_pending()).
 */
local int read_buf(strm, buf, size)
    z_streamp strm;
    Bytef *buf;
    unsigned size;
{
    unsigned len = strm->avail_in;

    if (len > size) len = size;
    if (len == 0) return 0;

    strm->avail_in  -= len;

    if (!strm->state->noheader) {
        strm->adler = adler32(strm->adler, strm->next_in, len);
    }
    zmemcpy(buf, strm->next_in, len);
    strm->next_in  += len;
    strm->total_in += len;

    return (int)len;
}

/* ===========================================================================
 * Initialize the "longest match" routines for a new zlib stream
 */
local void lm_init (s)
    deflate_state *s;
{
    s->window_size = (ulg)2L*s->w_size;

    CLEAR_HASH(s);

    /* Set the default configuration parameters:
     */
    s->max_lazy_match   = configuration_table[s->level].max_lazy;
    s->good_match       = configuration_table[s->level].good_length;
    s->nice_match       = configuration_table[s->level].nice_length;
    s->max_chain_length = configuration_table[s->level].max_chain;

    s->strstart = 0;
    s->block_start = 0L;
    s->lookahead = 0;
    s->match_length = s->prev_length = MIN_MATCH-1;
    s->match_available = 0;
    s->ins_h = 0;
#ifdef ASMV
    match_init(); /* initialize the asm code */
#endif
}

/* ===========================================================================
 * Set match_start to the longest match starting at the given string and
 * return its length. Matches shorter or equal to prev_length are discarded,
 * in which case the result is equal to prev_length and match_start is
 * garbage.
 * IN assertions: cur_match is the head of the hash chain for the current
 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
 * OUT assertion: the match length is not greater than s->lookahead.
 */
#ifndef ASMV
/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
 * match.S. The code will be functionally equivalent.
 */
#ifndef FASTEST
local uInt longest_match(s, cur_match)
    deflate_state *s;
    IPos cur_match;                             /* current match */
{
    unsigned chain_length = s->max_chain_length;/* max hash chain length */
    register Bytef *scan = s->window + s->strstart; /* current string */
    register Bytef *match;                       /* matched string */
    register int len;                           /* length of current match */
    int best_len = s->prev_length;              /* best match length so far */
    int nice_match = s->nice_match;             /* stop if match long enough */
    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
        s->strstart - (IPos)MAX_DIST(s) : NIL;
    /* Stop when cur_match becomes <= limit. To simplify the code,
     * we prevent matches with the string of window index 0.
     */
    Posf *prev = s->prev;
    uInt wmask = s->w_mask;

#ifdef UNALIGNED_OK
    /* Compare two bytes at a time. Note: this is not always beneficial.
     * Try with and without -DUNALIGNED_OK to check.
     */
    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
    register ush scan_start = *(ushf*)scan;
    register ush scan_end   = *(ushf*)(scan+best_len-1);
#else
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
    register Byte scan_end1  = scan[best_len-1];
    register Byte scan_end   = scan[best_len];
#endif

    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
     * It is easy to get rid of this optimization if necessary.
     */
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");

    /* Do not waste too much time if we already have a good match: */
    if (s->prev_length >= s->good_match) {
        chain_length >>= 2;
    }
    /* Do not look for matches beyond the end of the input. This is necessary
     * to make deflate deterministic.
     */
    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;

    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");

    do {
        Assert(cur_match < s->strstart, "no future");
        match = s->window + cur_match;

        /* Skip to next match if the match length cannot increase
         * or if the match length is less than 2:
         */
#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
        /* This code assumes sizeof(unsigned short) == 2. Do not use
         * UNALIGNED_OK if your compiler uses a different size.
         */
        if (*(ushf*)(match+best_len-1) != scan_end ||
            *(ushf*)match != scan_start) continue;

        /* It is not necessary to compare scan[2] and match[2] since they are
         * always equal when the other bytes match, given that the hash keys
         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
         * strstart+3, +5, ... up to strstart+257. We check for insufficient
         * lookahead only every 4th comparison; the 128th check will be made
         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
         * necessary to put more guard bytes at the end of the window, or
         * to check more often for insufficient lookahead.
         */
        Assert(scan[2] == match[2], "scan[2]?");
        scan++, match++;
        do {
        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
                 scan < strend);
        /* The funny "do {}" generates better code on most compilers */

        /* Here, scan <= window+strstart+257 */
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
        if (*scan == *match) scan++;

        len = (MAX_MATCH - 1) - (int)(strend-scan);
        scan = strend - (MAX_MATCH-1);

#else /* UNALIGNED_OK */

        if (match[best_len]   != scan_end  ||
            match[best_len-1] != scan_end1 ||
            *match            != *scan     ||
            *++match          != scan[1])      continue;

        /* The check at best_len-1 can be removed because it will be made
         * again later. (This heuristic is not always a win.)
         * It is not necessary to compare scan[2] and match[2] since they
         * are always equal when the other bytes match, given that
         * the hash keys are equal and that HASH_BITS >= 8.
         */
        scan += 2, match++;
        Assert(*scan == *match, "match[2]?");

        /* We check for insufficient lookahead only every 8th comparison;
         * the 256th check will be made at strstart+258.
         */
        do {
        } while (*++scan == *++match && *++scan == *++match &&
                 *++scan == *++match && *++scan == *++match &&
                 *++scan == *++match && *++scan == *++match &&
                 *++scan == *++match && *++scan == *++match &&
                 scan < strend);

        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");

        len = MAX_MATCH - (int)(strend - scan);
        scan = strend - MAX_MATCH;

#endif /* UNALIGNED_OK */

        if (len > best_len) {
            s->match_start = cur_match;
            best_len = len;
            if (len >= nice_match) break;
#ifdef UNALIGNED_OK
            scan_end = *(ushf*)(scan+best_len-1);
#else
            scan_end1  = scan[best_len-1];
            scan_end   = scan[best_len];
#endif
        }
    } while ((cur_match = prev[cur_match & wmask]) > limit
             && --chain_length != 0);

    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
    return s->lookahead;
}

#else /* FASTEST */
/* ---------------------------------------------------------------------------
 * Optimized version for level == 1 only
 */
local uInt longest_match(s, cur_match)
    deflate_state *s;
    IPos cur_match;                             /* current match */
{
    register Bytef *scan = s->window + s->strstart; /* current string */
    register Bytef *match;                       /* matched string */
    register int len;                           /* length of current match */
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;

    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
     * It is easy to get rid of this optimization if necessary.
     */
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");

    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");

    Assert(cur_match < s->strstart, "no future");

    match = s->window + cur_match;

    /* Return failure if the match length is less than 2:
     */
    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;

    /* The check at best_len-1 can be removed because it will be made
     * again later. (This heuristic is not always a win.)
     * It is not necessary to compare scan[2] and match[2] since they
     * are always equal when the other bytes match, given that
     * the hash keys are equal and that HASH_BITS >= 8.
     */
    scan += 2, match += 2;
    Assert(*scan == *match, "match[2]?");

    /* We check for insufficient lookahead only every 8th comparison;
     * the 256th check will be made at strstart+258.
     */
    do {
    } while (*++scan == *++match && *++scan == *++match &&
	     *++scan == *++match && *++scan == *++match &&
	     *++scan == *++match && *++scan == *++match &&
	     *++scan == *++match && *++scan == *++match &&
	     scan < strend);

    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");

    len = MAX_MATCH - (int)(strend - scan);

    if (len < MIN_MATCH) return MIN_MATCH - 1;

    s->match_start = cur_match;
    return len <= s->lookahead ? len : s->lookahead;
}
#endif /* FASTEST */
#endif /* ASMV */

#ifdef DEBUG
/* ===========================================================================
 * Check that the match at match_start is indeed a match.
 */
local void check_match(s, start, match, length)
    deflate_state *s;
    IPos start, match;
    int length;
{
    /* check that the match is indeed a match */
    if (zmemcmp(s->window + match,
                s->window + start, length) != EQUAL) {
        fprintf(stderr, " start %u, match %u, length %d\n",
		start, match, length);
        do {
	    fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
	} while (--length != 0);
        z_error("invalid match");
    }
    if (z_verbose > 1) {
        fprintf(stderr,"\\[%d,%d]", start-match, length);
        do { putc(s->window[start++], stderr); } while (--length != 0);
    }
}
#else
#  define check_match(s, start, match, length)
#endif

/* ===========================================================================
 * Fill the window when the lookahead becomes insufficient.
 * Updates strstart and lookahead.
 *
 * IN assertion: lookahead < MIN_LOOKAHEAD
 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
 *    At least one byte has been read, or avail_in == 0; reads are
 *    performed for at least two bytes (required for the zip translate_eol
 *    option -- not supported here).
 */
local void fill_window(s)
    deflate_state *s;
{
    register unsigned n, m;
    register Posf *p;
    unsigned more;    /* Amount of free space at the end of the window. */
    uInt wsize = s->w_size;

    do {
        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);

        /* Deal with !@#$% 64K limit: */
        if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
            more = wsize;

        } else if (more == (unsigned)(-1)) {
            /* Very unlikely, but possible on 16 bit machine if strstart == 0
             * and lookahead == 1 (input done one byte at time)
             */
            more--;

        /* If the window is almost full and there is insufficient lookahead,
         * move the upper half to the lower one to make room in the upper half.
         */
        } else if (s->strstart >= wsize+MAX_DIST(s)) {

            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
            s->match_start -= wsize;
            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
            s->block_start -= (long) wsize;

            /* Slide the hash table (could be avoided with 32 bit values
               at the expense of memory usage). We slide even when level == 0
               to keep the hash table consistent if we switch back to level > 0
               later. (Using level 0 permanently is not an optimal usage of
               zlib, so we don't care about this pathological case.)
             */
	    n = s->hash_size;
	    p = &s->head[n];
	    do {
		m = *--p;
		*p = (Pos)(m >= wsize ? m-wsize : NIL);
	    } while (--n);

	    n = wsize;
#ifndef FASTEST
	    p = &s->prev[n];
	    do {
		m = *--p;
		*p = (Pos)(m >= wsize ? m-wsize : NIL);
		/* If n is not on any hash chain, prev[n] is garbage but
		 * its value will never be used.
		 */
	    } while (--n);
#endif
            more += wsize;
        }
        if (s->strm->avail_in == 0) return;

        /* If there was no sliding:
         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
         *    more == window_size - lookahead - strstart
         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
         * => more >= window_size - 2*WSIZE + 2
         * In the BIG_MEM or MMAP case (not yet supported),
         *   window_size == input_size + MIN_LOOKAHEAD  &&
         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
         * Otherwise, window_size == 2*WSIZE so more >= 2.
         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
         */
        Assert(more >= 2, "more < 2");

        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
        s->lookahead += n;

        /* Initialize the hash value now that we have some input: */
        if (s->lookahead >= MIN_MATCH) {
            s->ins_h = s->window[s->strstart];
            UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
#if MIN_MATCH != 3
            Call UPDATE_HASH() MIN_MATCH-3 more times
#endif
        }
        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
         * but this is not important since only literal bytes will be emitted.
         */

    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
}

/* ===========================================================================
 * Flush the current block, with given end-of-file flag.
 * IN assertion: strstart is set to the end of the current match.
 */
#define FLUSH_BLOCK_ONLY(s, eof) { \
   _tr_flush_block(s, (s->block_start >= 0L ? \
                   (charf *)&s->window[(unsigned)s->block_start] : \
                   (charf *)Z_NULL), \
		(ulg)((long)s->strstart - s->block_start), \
		(eof)); \
   s->block_start = s->strstart; \
   flush_pending(s->strm); \
   Tracev((stderr,"[FLUSH]")); \
}

/* Same but force premature exit if necessary. */
#define FLUSH_BLOCK(s, eof) { \
   FLUSH_BLOCK_ONLY(s, eof); \
   if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
}

/* ===========================================================================
 * Copy without compression as much as possible from the input stream, return
 * the current block state.
 * This function does not insert new strings in the dictionary since
 * uncompressible data is probably not useful. This function is used
 * only for the level=0 compression option.
 * NOTE: this function should be optimized to avoid extra copying from
 * window to pending_buf.
 */
local block_state deflate_stored(s, flush)
    deflate_state *s;
    int flush;
{
    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
     * to pending_buf_size, and each stored block has a 5 byte header:
     */
    ulg max_block_size = 0xffff;
    ulg max_start;

    if (max_block_size > s->pending_buf_size - 5) {
        max_block_size = s->pending_buf_size - 5;
    }

    /* Copy as much as possible from input to output: */
    for (;;) {
        /* Fill the window as much as possible: */
        if (s->lookahead <= 1) {

            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
		   s->block_start >= (long)s->w_size, "slide too late");

            fill_window(s);
            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;

            if (s->lookahead == 0) break; /* flush the current block */
        }
	Assert(s->block_start >= 0L, "block gone");

	s->strstart += s->lookahead;
	s->lookahead = 0;

	/* Emit a stored block if pending_buf will be full: */
 	max_start = s->block_start + max_block_size;
        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
	    /* strstart == 0 is possible when wraparound on 16-bit machine */
	    s->lookahead = (uInt)(s->strstart - max_start);
	    s->strstart = (uInt)max_start;
            FLUSH_BLOCK(s, 0);
	}
	/* Flush if we may have to slide, otherwise block_start may become
         * negative and the data will be gone:
         */
        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
            FLUSH_BLOCK(s, 0);
	}
    }
    FLUSH_BLOCK(s, flush == Z_FINISH);
    return flush == Z_FINISH ? finish_done : block_done;
}

/* ===========================================================================
 * Compress as much as possible from the input stream, return the current
 * block state.
 * This function does not perform lazy evaluation of matches and inserts
 * new strings in the dictionary only for unmatched strings or for short
 * matches. It is used only for the fast compression options.
 */
local block_state deflate_fast(s, flush)
    deflate_state *s;
    int flush;
{
    IPos hash_head = NIL; /* head of the hash chain */
    int bflush;           /* set if current block must be flushed */

    for (;;) {
        /* Make sure that we always have enough lookahead, except
         * at the end of the input file. We need MAX_MATCH bytes
         * for the next match, plus MIN_MATCH bytes to insert the
         * string following the next match.
         */
        if (s->lookahead < MIN_LOOKAHEAD) {
            fill_window(s);
            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
	        return need_more;
	    }
            if (s->lookahead == 0) break; /* flush the current block */
        }

        /* Insert the string window[strstart .. strstart+2] in the
         * dictionary, and set hash_head to the head of the hash chain:
         */
        if (s->lookahead >= MIN_MATCH) {
            INSERT_STRING(s, s->strstart, hash_head);
        }

        /* Find the longest match, discarding those <= prev_length.
         * At this point we have always match_length < MIN_MATCH
         */
        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
            /* To simplify the code, we prevent matches with the string
             * of window index 0 (in particular we have to avoid a match
             * of the string with itself at the start of the input file).
             */
            if (s->strategy != Z_HUFFMAN_ONLY) {
                s->match_length = longest_match (s, hash_head);
            }
            /* longest_match() sets match_start */
        }
        if (s->match_length >= MIN_MATCH) {
            check_match(s, s->strstart, s->match_start, s->match_length);

            _tr_tally_dist(s, s->strstart - s->match_start,
                           s->match_length - MIN_MATCH, bflush);

            s->lookahead -= s->match_length;

            /* Insert new strings in the hash table only if the match length
             * is not too large. This saves time but degrades compression.
             */
#ifndef FASTEST
            if (s->match_length <= s->max_insert_length &&
                s->lookahead >= MIN_MATCH) {
                s->match_length--; /* string at strstart already in hash table */
                do {
                    s->strstart++;
                    INSERT_STRING(s, s->strstart, hash_head);
                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
                     * always MIN_MATCH bytes ahead.
                     */
                } while (--s->match_length != 0);
                s->strstart++; 
            } else
#endif
	    {
                s->strstart += s->match_length;
                s->match_length = 0;
                s->ins_h = s->window[s->strstart];
                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
#if MIN_MATCH != 3
                Call UPDATE_HASH() MIN_MATCH-3 more times
#endif
                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
                 * matter since it will be recomputed at next deflate call.
                 */
            }
        } else {
            /* No match, output a literal byte */
            Tracevv((stderr,"%c", s->window[s->strstart]));
            _tr_tally_lit (s, s->window[s->strstart], bflush);
            s->lookahead--;
            s->strstart++; 
        }
        if (bflush) FLUSH_BLOCK(s, 0);
    }
    FLUSH_BLOCK(s, flush == Z_FINISH);
    return flush == Z_FINISH ? finish_done : block_done;
}

/* ===========================================================================
 * Same as above, but achieves better compression. We use a lazy
 * evaluation for matches: a match is finally adopted only if there is
 * no better match at the next window position.
 */
local block_state deflate_slow(s, flush)
    deflate_state *s;
    int flush;
{
    IPos hash_head = NIL;    /* head of hash chain */
    int bflush;              /* set if current block must be flushed */

    /* Process the input block. */
    for (;;) {
        /* Make sure that we always have enough lookahead, except
         * at the end of the input file. We need MAX_MATCH bytes
         * for the next match, plus MIN_MATCH bytes to insert the
         * string following the next match.
         */
        if (s->lookahead < MIN_LOOKAHEAD) {
            fill_window(s);
            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
	        return need_more;
	    }
            if (s->lookahead == 0) break; /* flush the current block */
        }

        /* Insert the string window[strstart .. strstart+2] in the
         * dictionary, and set hash_head to the head of the hash chain:
         */
        if (s->lookahead >= MIN_MATCH) {
            INSERT_STRING(s, s->strstart, hash_head);
        }

        /* Find the longest match, discarding those <= prev_length.
         */
        s->prev_length = s->match_length, s->prev_match = s->match_start;
        s->match_length = MIN_MATCH-1;

        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
            s->strstart - hash_head <= MAX_DIST(s)) {
            /* To simplify the code, we prevent matches with the string
             * of window index 0 (in particular we have to avoid a match
             * of the string with itself at the start of the input file).
             */
            if (s->strategy != Z_HUFFMAN_ONLY) {
                s->match_length = longest_match (s, hash_head);
            }
            /* longest_match() sets match_start */

            if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
                 (s->match_length == MIN_MATCH &&
                  s->strstart - s->match_start > TOO_FAR))) {

                /* If prev_match is also MIN_MATCH, match_start is garbage
                 * but we will ignore the current match anyway.
                 */
                s->match_length = MIN_MATCH-1;
            }
        }
        /* If there was a match at the previous step and the current
         * match is not better, output the previous match:
         */
        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
            /* Do not insert strings in hash table beyond this. */

            check_match(s, s->strstart-1, s->prev_match, s->prev_length);

            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
			   s->prev_length - MIN_MATCH, bflush);

            /* Insert in hash table all strings up to the end of the match.
             * strstart-1 and strstart are already inserted. If there is not
             * enough lookahead, the last two strings are not inserted in
             * the hash table.
             */
            s->lookahead -= s->prev_length-1;
            s->prev_length -= 2;
            do {
                if (++s->strstart <= max_insert) {
                    INSERT_STRING(s, s->strstart, hash_head);
                }
            } while (--s->prev_length != 0);
            s->match_available = 0;
            s->match_length = MIN_MATCH-1;
            s->strstart++;

            if (bflush) FLUSH_BLOCK(s, 0);

        } else if (s->match_available) {
            /* If there was no match at the previous position, output a
             * single literal. If there was a match but the current match
             * is longer, truncate the previous match to a single literal.
             */
            Tracevv((stderr,"%c", s->window[s->strstart-1]));
	    _tr_tally_lit(s, s->window[s->strstart-1], bflush);
	    if (bflush) {
                FLUSH_BLOCK_ONLY(s, 0);
            }
            s->strstart++;
            s->lookahead--;
            if (s->strm->avail_out == 0) return need_more;
        } else {
            /* There is no previous match to compare with, wait for
             * the next step to decide.
             */
            s->match_available = 1;
            s->strstart++;
            s->lookahead--;
        }
    }
    Assert (flush != Z_NO_FLUSH, "no flush?");
    if (s->match_available) {
        Tracevv((stderr,"%c", s->window[s->strstart-1]));
        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
        s->match_available = 0;
    }
    FLUSH_BLOCK(s, flush == Z_FINISH);
    return flush == Z_FINISH ? finish_done : block_done;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/deflate.h000066400000000000000000000265061406366436600167660ustar00rootroot00000000000000/* deflate.h -- internal compression state
 * Copyright (C) 1995-2002 Jean-loup Gailly
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

#ifndef _DEFLATE_H
#define _DEFLATE_H

#include "zutil.h"

/* ===========================================================================
 * Internal compression state.
 */

#define LENGTH_CODES 29
/* number of length codes, not counting the special END_BLOCK code */

#define LITERALS  256
/* number of literal bytes 0..255 */

#define L_CODES (LITERALS+1+LENGTH_CODES)
/* number of Literal or Length codes, including the END_BLOCK code */

#define D_CODES   30
/* number of distance codes */

#define BL_CODES  19
/* number of codes used to transfer the bit lengths */

#define HEAP_SIZE (2*L_CODES+1)
/* maximum heap size */

#define MAX_BITS 15
/* All codes must not exceed MAX_BITS bits */

#define INIT_STATE    42
#define BUSY_STATE   113
#define FINISH_STATE 666
/* Stream status */


/* Data structure describing a single value and its code string. */
typedef struct ct_data_s {
    union {
        ush  freq;       /* frequency count */
        ush  code;       /* bit string */
    } fc;
    union {
        ush  dad;        /* father node in Huffman tree */
        ush  len;        /* length of bit string */
    } dl;
} FAR ct_data;

#define Freq fc.freq
#define Code fc.code
#define Dad  dl.dad
#define Len  dl.len

typedef struct static_tree_desc_s  static_tree_desc;

typedef struct tree_desc_s {
    ct_data *dyn_tree;           /* the dynamic tree */
    int     max_code;            /* largest code with non zero frequency */
    static_tree_desc *stat_desc; /* the corresponding static tree */
} FAR tree_desc;

typedef ush Pos;
typedef Pos FAR Posf;
typedef unsigned IPos;

/* A Pos is an index in the character window. We use short instead of int to
 * save space in the various tables. IPos is used only for parameter passing.
 */

typedef struct internal_state {
    z_streamp strm;      /* pointer back to this zlib stream */
    int   status;        /* as the name implies */
    Bytef *pending_buf;  /* output still pending */
    ulg   pending_buf_size; /* size of pending_buf */
    Bytef *pending_out;  /* next pending byte to output to the stream */
    int   pending;       /* nb of bytes in the pending buffer */
    int   noheader;      /* suppress zlib header and adler32 */
    Byte  data_type;     /* UNKNOWN, BINARY or ASCII */
    Byte  method;        /* STORED (for zip only) or DEFLATED */
    int   last_flush;    /* value of flush param for previous deflate call */

                /* used by deflate.c: */

    uInt  w_size;        /* LZ77 window size (32K by default) */
    uInt  w_bits;        /* log2(w_size)  (8..16) */
    uInt  w_mask;        /* w_size - 1 */

    Bytef *window;
    /* Sliding window. Input bytes are read into the second half of the window,
     * and move to the first half later to keep a dictionary of at least wSize
     * bytes. With this organization, matches are limited to a distance of
     * wSize-MAX_MATCH bytes, but this ensures that IO is always
     * performed with a length multiple of the block size. Also, it limits
     * the window size to 64K, which is quite useful on MSDOS.
     * To do: use the user input buffer as sliding window.
     */

    ulg window_size;
    /* Actual size of window: 2*wSize, except when the user input buffer
     * is directly used as sliding window.
     */

    Posf *prev;
    /* Link to older string with same hash index. To limit the size of this
     * array to 64K, this link is maintained only for the last 32K strings.
     * An index in this array is thus a window index modulo 32K.
     */

    Posf *head; /* Heads of the hash chains or NIL. */

    uInt  ins_h;          /* hash index of string to be inserted */
    uInt  hash_size;      /* number of elements in hash table */
    uInt  hash_bits;      /* log2(hash_size) */
    uInt  hash_mask;      /* hash_size-1 */

    uInt  hash_shift;
    /* Number of bits by which ins_h must be shifted at each input
     * step. It must be such that after MIN_MATCH steps, the oldest
     * byte no longer takes part in the hash key, that is:
     *   hash_shift * MIN_MATCH >= hash_bits
     */

    long block_start;
    /* Window position at the beginning of the current output block. Gets
     * negative when the window is moved backwards.
     */

    uInt match_length;           /* length of best match */
    IPos prev_match;             /* previous match */
    int match_available;         /* set if previous match exists */
    uInt strstart;               /* start of string to insert */
    uInt match_start;            /* start of matching string */
    uInt lookahead;              /* number of valid bytes ahead in window */

    uInt prev_length;
    /* Length of the best match at previous step. Matches not greater than this
     * are discarded. This is used in the lazy match evaluation.
     */

    uInt max_chain_length;
    /* To speed up deflation, hash chains are never searched beyond this
     * length.  A higher limit improves compression ratio but degrades the
     * speed.
     */

    uInt max_lazy_match;
    /* Attempt to find a better match only when the current match is strictly
     * smaller than this value. This mechanism is used only for compression
     * levels >= 4.
     */
#   define max_insert_length  max_lazy_match
    /* Insert new strings in the hash table only if the match length is not
     * greater than this length. This saves time but degrades compression.
     * max_insert_length is used only for compression levels <= 3.
     */

    int level;    /* compression level (1..9) */
    int strategy; /* favor or force Huffman coding*/

    uInt good_match;
    /* Use a faster search when the previous match is longer than this */

    int nice_match; /* Stop searching when current match exceeds this */

                /* used by trees.c: */
    /* Didn't use ct_data typedef below to supress compiler warning */
    struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
    struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
    struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */

    struct tree_desc_s l_desc;               /* desc. for literal tree */
    struct tree_desc_s d_desc;               /* desc. for distance tree */
    struct tree_desc_s bl_desc;              /* desc. for bit length tree */

    ush bl_count[MAX_BITS+1];
    /* number of codes at each bit length for an optimal tree */

    int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
    int heap_len;               /* number of elements in the heap */
    int heap_max;               /* element of largest frequency */
    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
     * The same heap array is used to build all trees.
     */

    uch depth[2*L_CODES+1];
    /* Depth of each subtree used as tie breaker for trees of equal frequency
     */

    uchf *l_buf;          /* buffer for literals or lengths */

    uInt  lit_bufsize;
    /* Size of match buffer for literals/lengths.  There are 4 reasons for
     * limiting lit_bufsize to 64K:
     *   - frequencies can be kept in 16 bit counters
     *   - if compression is not successful for the first block, all input
     *     data is still in the window so we can still emit a stored block even
     *     when input comes from standard input.  (This can also be done for
     *     all blocks if lit_bufsize is not greater than 32K.)
     *   - if compression is not successful for a file smaller than 64K, we can
     *     even emit a stored file instead of a stored block (saving 5 bytes).
     *     This is applicable only for zip (not gzip or zlib).
     *   - creating new Huffman trees less frequently may not provide fast
     *     adaptation to changes in the input data statistics. (Take for
     *     example a binary file with poorly compressible code followed by
     *     a highly compressible string table.) Smaller buffer sizes give
     *     fast adaptation but have of course the overhead of transmitting
     *     trees more frequently.
     *   - I can't count above 4
     */

    uInt last_lit;      /* running index in l_buf */

    ushf *d_buf;
    /* Buffer for distances. To simplify the code, d_buf and l_buf have
     * the same number of elements. To use different lengths, an extra flag
     * array would be necessary.
     */

    ulg opt_len;        /* bit length of current block with optimal trees */
    ulg static_len;     /* bit length of current block with static trees */
    uInt matches;       /* number of string matches in current block */
    int last_eob_len;   /* bit length of EOB code for last block */

#ifdef DEBUG
    ulg compressed_len; /* total bit length of compressed file mod 2^32 */
    ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
#endif

    ush bi_buf;
    /* Output buffer. bits are inserted starting at the bottom (least
     * significant bits).
     */
    int bi_valid;
    /* Number of valid bits in bi_buf.  All bits above the last valid bit
     * are always zero.
     */

} FAR deflate_state;

/* Output a byte on the stream.
 * IN assertion: there is enough room in pending_buf.
 */
#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}


#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
/* Minimum amount of lookahead, except at the end of the input file.
 * See deflate.c for comments about the MIN_MATCH+1.
 */

#define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
/* In order to simplify the code, particularly on 16 bit machines, match
 * distances are limited to MAX_DIST instead of WSIZE.
 */

        /* in trees.c */
void _tr_init         OF((deflate_state *s));
int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc));
void _tr_flush_block  OF((deflate_state *s, charf *buf, ulg stored_len,
			  int eof));
void _tr_align        OF((deflate_state *s));
void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
                          int eof));

#define d_code(dist) \
   ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
/* Mapping from a distance to a distance code. dist is the distance - 1 and
 * must not have side effects. _dist_code[256] and _dist_code[257] are never
 * used.
 */

#ifndef DEBUG
/* Inline versions of _tr_tally for speed: */

#if defined(GEN_TREES_H) || !defined(STDC)
  extern uch _length_code[];
  extern uch _dist_code[];
#else
  extern const uch _length_code[];
  extern const uch _dist_code[];
#endif

# define _tr_tally_lit(s, c, flush) \
  { uch cc = (c); \
    s->d_buf[s->last_lit] = 0; \
    s->l_buf[s->last_lit++] = cc; \
    s->dyn_ltree[cc].Freq++; \
    flush = (s->last_lit == s->lit_bufsize-1); \
   }
# define _tr_tally_dist(s, distance, length, flush) \
  { uch len = (length); \
    ush dist = (distance); \
    s->d_buf[s->last_lit] = dist; \
    s->l_buf[s->last_lit++] = len; \
    dist--; \
    s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
    s->dyn_dtree[d_code(dist)].Freq++; \
    flush = (s->last_lit == s->lit_bufsize-1); \
  }
#else
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
# define _tr_tally_dist(s, distance, length, flush) \
              flush = _tr_tally(s, distance, length) 
#endif

#endif
analog-ce-6.0.17/src/zlib/gzio.c000066400000000000000000000622461406366436600163260ustar00rootroot00000000000000/* gzio.c -- IO on .gz files
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h
 *
 * Compile this file with -DNO_DEFLATE to avoid the compression code.
 */

#ifndef HAVE_ZLIB
#include 

#include "zutil.h"

struct internal_state {int dummy;}; /* for buggy compilers */

#ifndef Z_BUFSIZE
#  ifdef MAXSEG_64K
#    define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */
#  else
#    define Z_BUFSIZE 16384
#  endif
#endif
#ifndef Z_PRINTF_BUFSIZE
#  define Z_PRINTF_BUFSIZE 4096
#endif

#define ALLOC(size) malloc(size)
#define TRYFREE(p) {if (p) free(p);}

static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */

/* gzip flag byte */
#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
#define HEAD_CRC     0x02 /* bit 1 set: header CRC present */
#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
#define COMMENT      0x10 /* bit 4 set: file comment present */
#define RESERVED     0xE0 /* bits 5..7: reserved */

typedef struct gz_stream {
    z_stream stream;
    int      z_err;   /* error code for last stream operation */
    int      z_eof;   /* set if end of input file */
    FILE     *file;   /* .gz file */
    Byte     *inbuf;  /* input buffer */
    Byte     *outbuf; /* output buffer */
    uLong    crc;     /* crc32 of uncompressed data */
    char     *msg;    /* error message */
    char     *path;   /* path name for debugging only */
    int      transparent; /* 1 if input file is not a .gz file */
    char     mode;    /* 'w' or 'r' */
    long     startpos; /* start of compressed data in file (header skipped) */
} gz_stream;


local gzFile gz_open      OF((const char *path, const char *mode, int  fd));
local int do_flush        OF((gzFile file, int flush));
local int    get_byte     OF((gz_stream *s));
local void   check_header OF((gz_stream *s));
local int    destroy      OF((gz_stream *s));
local void   putLong      OF((FILE *file, uLong x));
local uLong  getLong      OF((gz_stream *s));

/* ===========================================================================
     Opens a gzip (.gz) file for reading or writing. The mode parameter
   is as in fopen ("rb" or "wb"). The file is given either by file descriptor
   or path name (if fd == -1).
     gz_open return NULL if the file could not be opened or if there was
   insufficient memory to allocate the (de)compression state; errno
   can be checked to distinguish the two cases (if errno is zero, the
   zlib error is Z_MEM_ERROR).
*/
local gzFile gz_open (path, mode, fd)
    const char *path;
    const char *mode;
    int  fd;
{
    int err;
    int level = Z_DEFAULT_COMPRESSION; /* compression level */
    int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */
    char *p = (char*)mode;
    gz_stream *s;
    char fmode[80]; /* copy of mode, without the compression level */
    char *m = fmode;

    if (!path || !mode) return Z_NULL;

    s = (gz_stream *)ALLOC(sizeof(gz_stream));
    if (!s) return Z_NULL;

    s->stream.zalloc = (alloc_func)0;
    s->stream.zfree = (free_func)0;
    s->stream.opaque = (voidpf)0;
    s->stream.next_in = s->inbuf = Z_NULL;
    s->stream.next_out = s->outbuf = Z_NULL;
    s->stream.avail_in = s->stream.avail_out = 0;
    s->file = NULL;
    s->z_err = Z_OK;
    s->z_eof = 0;
    s->crc = crc32(0L, Z_NULL, 0);
    s->msg = NULL;
    s->transparent = 0;

    s->path = (char*)ALLOC(strlen(path)+1);
    if (s->path == NULL) {
        return destroy(s), (gzFile)Z_NULL;
    }
    strcpy(s->path, path); /* do this early for debugging */

    s->mode = '\0';
    do {
        if (*p == 'r') s->mode = 'r';
        if (*p == 'w' || *p == 'a') s->mode = 'w';
        if (*p >= '0' && *p <= '9') {
	    level = *p - '0';
	} else if (*p == 'f') {
	  strategy = Z_FILTERED;
	} else if (*p == 'h') {
	  strategy = Z_HUFFMAN_ONLY;
	} else {
	    *m++ = *p; /* copy the mode */
	}
    } while (*p++ && m != fmode + sizeof(fmode));
    if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL;
    
    if (s->mode == 'w') {
#ifdef NO_DEFLATE
        err = Z_STREAM_ERROR;
#else
        err = deflateInit2(&(s->stream), level,
                           Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy);
        /* windowBits is passed < 0 to suppress zlib header */

        s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
#endif
        if (err != Z_OK || s->outbuf == Z_NULL) {
            return destroy(s), (gzFile)Z_NULL;
        }
    } else {
        s->stream.next_in  = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE);

        err = inflateInit2(&(s->stream), -MAX_WBITS);
        /* windowBits is passed < 0 to tell that there is no zlib header.
         * Note that in this case inflate *requires* an extra "dummy" byte
         * after the compressed stream in order to complete decompression and
         * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are
         * present after the compressed stream.
         */
        if (err != Z_OK || s->inbuf == Z_NULL) {
            return destroy(s), (gzFile)Z_NULL;
        }
    }
    s->stream.avail_out = Z_BUFSIZE;

    errno = 0;
    s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode);

    if (s->file == NULL) {
        return destroy(s), (gzFile)Z_NULL;
    }
    if (s->mode == 'w') {
        /* Write a very simple .gz header:
         */
        fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
             Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE);
	s->startpos = 10L;
	/* We use 10L instead of ftell(s->file) to because ftell causes an
         * fflush on some systems. This version of the library doesn't use
         * startpos anyway in write mode, so this initialization is not
         * necessary.
         */
    } else {
	check_header(s); /* skip the .gz header */
	s->startpos = (ftell(s->file) - s->stream.avail_in);
    }
    
    return (gzFile)s;
}

/* ===========================================================================
     Opens a gzip (.gz) file for reading or writing.
*/
gzFile ZEXPORT gzopen (path, mode)
    const char *path;
    const char *mode;
{
    return gz_open (path, mode, -1);
}

/* ===========================================================================
     Associate a gzFile with the file descriptor fd. fd is not dup'ed here
   to mimic the behavio(u)r of fdopen.
*/
gzFile ZEXPORT gzdopen (fd, mode)
    int fd;
    const char *mode;
{
    char name[20];

    if (fd < 0) return (gzFile)Z_NULL;
    sprintf(name, "", fd); /* for debugging */

    return gz_open (name, mode, fd);
}

/* ===========================================================================
 * Update the compression level and strategy
 */
int ZEXPORT gzsetparams (file, level, strategy)
    gzFile file;
    int level;
    int strategy;
{
    gz_stream *s = (gz_stream*)file;

    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;

    /* Make room to allow flushing */
    if (s->stream.avail_out == 0) {

	s->stream.next_out = s->outbuf;
	if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
	    s->z_err = Z_ERRNO;
	}
	s->stream.avail_out = Z_BUFSIZE;
    }

    return deflateParams (&(s->stream), level, strategy);
}

/* ===========================================================================
     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
   for end of file.
   IN assertion: the stream s has been sucessfully opened for reading.
*/
local int get_byte(s)
    gz_stream *s;
{
    if (s->z_eof) return EOF;
    if (s->stream.avail_in == 0) {
	errno = 0;
	s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
	if (s->stream.avail_in == 0) {
	    s->z_eof = 1;
	    if (ferror(s->file)) s->z_err = Z_ERRNO;
	    return EOF;
	}
	s->stream.next_in = s->inbuf;
    }
    s->stream.avail_in--;
    return *(s->stream.next_in)++;
}

/* ===========================================================================
      Check the gzip header of a gz_stream opened for reading. Set the stream
    mode to transparent if the gzip magic header is not present; set s->err
    to Z_DATA_ERROR if the magic header is present but the rest of the header
    is incorrect.
    IN assertion: the stream s has already been created sucessfully;
       s->stream.avail_in is zero for the first time, but may be non-zero
       for concatenated .gz files.
*/
local void check_header(s)
    gz_stream *s;
{
    int method; /* method byte */
    int flags;  /* flags byte */
    uInt len;
    int c;

    /* Check the gzip magic header */
    for (len = 0; len < 2; len++) {
	c = get_byte(s);
	if (c != gz_magic[len]) {
	    if (len != 0) s->stream.avail_in++, s->stream.next_in--;
	    if (c != EOF) {
		s->stream.avail_in++, s->stream.next_in--;
		s->transparent = 1;
	    }
	    s->z_err = s->stream.avail_in != 0 ? Z_OK : Z_STREAM_END;
	    return;
	}
    }
    method = get_byte(s);
    flags = get_byte(s);
    if (method != Z_DEFLATED || (flags & RESERVED) != 0) {
	s->z_err = Z_DATA_ERROR;
	return;
    }

    /* Discard time, xflags and OS code: */
    for (len = 0; len < 6; len++) (void)get_byte(s);

    if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */
	len  =  (uInt)get_byte(s);
	len += ((uInt)get_byte(s))<<8;
	/* len is garbage if EOF but the loop below will quit anyway */
	while (len-- != 0 && get_byte(s) != EOF) ;
    }
    if ((flags & ORIG_NAME) != 0) { /* skip the original file name */
	while ((c = get_byte(s)) != 0 && c != EOF) ;
    }
    if ((flags & COMMENT) != 0) {   /* skip the .gz file comment */
	while ((c = get_byte(s)) != 0 && c != EOF) ;
    }
    if ((flags & HEAD_CRC) != 0) {  /* skip the header crc */
	for (len = 0; len < 2; len++) (void)get_byte(s);
    }
    s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK;
}

 /* ===========================================================================
 * Cleanup then free the given gz_stream. Return a zlib error code.
   Try freeing in the reverse order of allocations.
 */
local int destroy (s)
    gz_stream *s;
{
    int err = Z_OK;

    if (!s) return Z_STREAM_ERROR;

    TRYFREE(s->msg);

    if (s->stream.state != NULL) {
	if (s->mode == 'w') {
#ifdef NO_DEFLATE
	    err = Z_STREAM_ERROR;
#else
	    err = deflateEnd(&(s->stream));
#endif
	} else if (s->mode == 'r') {
	    err = inflateEnd(&(s->stream));
	}
    }
    if (s->file != NULL && fclose(s->file)) {
#ifdef ESPIPE
	if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */
#endif
	    err = Z_ERRNO;
    }
    if (s->z_err < 0) err = s->z_err;

    TRYFREE(s->inbuf);
    TRYFREE(s->outbuf);
    TRYFREE(s->path);
    TRYFREE(s);
    return err;
}

/* ===========================================================================
     Reads the given number of uncompressed bytes from the compressed file.
   gzread returns the number of bytes actually read (0 for end of file).
*/
int ZEXPORT gzread (file, buf, len)
    gzFile file;
    voidp buf;
    unsigned len;
{
    gz_stream *s = (gz_stream*)file;
    Bytef *start = (Bytef*)buf; /* starting point for crc computation */
    Byte  *next_out; /* == stream.next_out but not forced far (for MSDOS) */

    if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR;

    if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1;
    if (s->z_err == Z_STREAM_END) return 0;  /* EOF */

    next_out = (Byte*)buf;
    s->stream.next_out = (Bytef*)buf;
    s->stream.avail_out = len;

    while (s->stream.avail_out != 0) {

	if (s->transparent) {
	    /* Copy first the lookahead bytes: */
	    uInt n = s->stream.avail_in;
	    if (n > s->stream.avail_out) n = s->stream.avail_out;
	    if (n > 0) {
		zmemcpy(s->stream.next_out, s->stream.next_in, n);
		next_out += n;
		s->stream.next_out = next_out;
		s->stream.next_in   += n;
		s->stream.avail_out -= n;
		s->stream.avail_in  -= n;
	    }
	    if (s->stream.avail_out > 0) {
		s->stream.avail_out -= fread(next_out, 1, s->stream.avail_out,
					     s->file);
	    }
	    len -= s->stream.avail_out;
	    s->stream.total_in  += (uLong)len;
	    s->stream.total_out += (uLong)len;
            if (len == 0) s->z_eof = 1;
	    return (int)len;
	}
        if (s->stream.avail_in == 0 && !s->z_eof) {

            errno = 0;
            s->stream.avail_in = fread(s->inbuf, 1, Z_BUFSIZE, s->file);
            if (s->stream.avail_in == 0) {
                s->z_eof = 1;
		if (ferror(s->file)) {
		    s->z_err = Z_ERRNO;
		    break;
		}
            }
            s->stream.next_in = s->inbuf;
        }
        s->z_err = inflate(&(s->stream), Z_NO_FLUSH);

	if (s->z_err == Z_STREAM_END) {
	    /* Check CRC and original size */
	    s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));
	    start = s->stream.next_out;

	    if (getLong(s) != s->crc) {
		s->z_err = Z_DATA_ERROR;
	    } else {
	        (void)getLong(s);
                /* The uncompressed length returned by above getlong() may
                 * be different from s->stream.total_out) in case of
		 * concatenated .gz files. Check for such files:
		 */
		check_header(s);
		if (s->z_err == Z_OK) {
		    uLong total_in = s->stream.total_in;
		    uLong total_out = s->stream.total_out;

		    inflateReset(&(s->stream));
		    s->stream.total_in = total_in;
		    s->stream.total_out = total_out;
		    s->crc = crc32(0L, Z_NULL, 0);
		}
	    }
	}
	if (s->z_err != Z_OK || s->z_eof) break;
    }
    s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start));

    return (int)(len - s->stream.avail_out);
}


/* ===========================================================================
      Reads one byte from the compressed file. gzgetc returns this byte
   or -1 in case of end of file or error.
*/
int ZEXPORT gzgetc(file)
    gzFile file;
{
    unsigned char c;

    return gzread(file, &c, 1) == 1 ? c : -1;
}


/* ===========================================================================
      Reads bytes from the compressed file until len-1 characters are
   read, or a newline character is read and transferred to buf, or an
   end-of-file condition is encountered.  The string is then terminated
   with a null character.
      gzgets returns buf, or Z_NULL in case of error.

      The current implementation is not optimized at all.
*/
char * ZEXPORT gzgets(file, buf, len)
    gzFile file;
    char *buf;
    int len;
{
    char *b = buf;
    if (buf == Z_NULL || len <= 0) return Z_NULL;

    while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ;
    *buf = '\0';
    return b == buf && len > 0 ? Z_NULL : b;
}


#ifndef NO_DEFLATE
/* ===========================================================================
     Writes the given number of uncompressed bytes into the compressed file.
   gzwrite returns the number of bytes actually written (0 in case of error).
*/
int ZEXPORT gzwrite (file, buf, len)
    gzFile file;
    const voidp buf;
    unsigned len;
{
    gz_stream *s = (gz_stream*)file;

    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;

    s->stream.next_in = (Bytef*)buf;
    s->stream.avail_in = len;

    while (s->stream.avail_in != 0) {

        if (s->stream.avail_out == 0) {

            s->stream.next_out = s->outbuf;
            if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) {
                s->z_err = Z_ERRNO;
                break;
            }
            s->stream.avail_out = Z_BUFSIZE;
        }
        s->z_err = deflate(&(s->stream), Z_NO_FLUSH);
        if (s->z_err != Z_OK) break;
    }
    s->crc = crc32(s->crc, (const Bytef *)buf, len);

    return (int)(len - s->stream.avail_in);
}

/* ===========================================================================
     Converts, formats, and writes the args to the compressed file under
   control of the format string, as in fprintf. gzprintf returns the number of
   uncompressed bytes actually written (0 in case of error).
*/
#ifdef STDC
#include 

int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...)
{
    char buf[Z_PRINTF_BUFSIZE];
    va_list va;
    int len;

    va_start(va, format);
#ifdef HAS_vsnprintf
    (void)vsnprintf(buf, sizeof(buf), format, va);
#else
    (void)vsprintf(buf, format, va);
#endif
    va_end(va);
    len = strlen(buf); /* some *sprintf don't return the nb of bytes written */
    if (len <= 0) return 0;

    return gzwrite(file, buf, (unsigned)len);
}
#else /* not ANSI C */

int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
	               a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
    gzFile file;
    const char *format;
    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
	a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
{
    char buf[Z_PRINTF_BUFSIZE];
    int len;

#ifdef HAS_snprintf
    snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8,
	     a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
#else
    sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8,
	    a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
#endif
    len = strlen(buf); /* old sprintf doesn't return the nb of bytes written */
    if (len <= 0) return 0;

    return gzwrite(file, buf, len);
}
#endif

/* ===========================================================================
      Writes c, converted to an unsigned char, into the compressed file.
   gzputc returns the value that was written, or -1 in case of error.
*/
int ZEXPORT gzputc(file, c)
    gzFile file;
    int c;
{
    unsigned char cc = (unsigned char) c; /* required for big endian systems */

    return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1;
}


/* ===========================================================================
      Writes the given null-terminated string to the compressed file, excluding
   the terminating null character.
      gzputs returns the number of characters written, or -1 in case of error.
*/
int ZEXPORT gzputs(file, s)
    gzFile file;
    const char *s;
{
    return gzwrite(file, (char*)s, (unsigned)strlen(s));
}


/* ===========================================================================
     Flushes all pending output into the compressed file. The parameter
   flush is as in the deflate() function.
*/
local int do_flush (file, flush)
    gzFile file;
    int flush;
{
    uInt len;
    int done = 0;
    gz_stream *s = (gz_stream*)file;

    if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR;

    s->stream.avail_in = 0; /* should be zero already anyway */

    for (;;) {
        len = Z_BUFSIZE - s->stream.avail_out;

        if (len != 0) {
            if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) {
                s->z_err = Z_ERRNO;
                return Z_ERRNO;
            }
            s->stream.next_out = s->outbuf;
            s->stream.avail_out = Z_BUFSIZE;
        }
        if (done) break;
        s->z_err = deflate(&(s->stream), flush);

	/* Ignore the second of two consecutive flushes: */
	if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK;

        /* deflate has finished flushing only when it hasn't used up
         * all the available space in the output buffer: 
         */
        done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END);
 
        if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break;
    }
    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
}

int ZEXPORT gzflush (file, flush)
     gzFile file;
     int flush;
{
    gz_stream *s = (gz_stream*)file;
    int err = do_flush (file, flush);

    if (err) return err;
    fflush(s->file);
    return  s->z_err == Z_STREAM_END ? Z_OK : s->z_err;
}
#endif /* NO_DEFLATE */

/* ===========================================================================
      Sets the starting position for the next gzread or gzwrite on the given
   compressed file. The offset represents a number of bytes in the
      gzseek returns the resulting offset location as measured in bytes from
   the beginning of the uncompressed stream, or -1 in case of error.
      SEEK_END is not implemented, returns error.
      In this version of the library, gzseek can be extremely slow.
*/
z_off_t ZEXPORT gzseek (file, offset, whence)
    gzFile file;
    z_off_t offset;
    int whence;
{
    gz_stream *s = (gz_stream*)file;

    if (s == NULL || whence == SEEK_END ||
	s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) {
	return -1L;
    }
    
    if (s->mode == 'w') {
#ifdef NO_DEFLATE
	return -1L;
#else
	if (whence == SEEK_SET) {
	    offset -= s->stream.total_in;
	}
	if (offset < 0) return -1L;

	/* At this point, offset is the number of zero bytes to write. */
	if (s->inbuf == Z_NULL) {
	    s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */
	    zmemzero(s->inbuf, Z_BUFSIZE);
	}
	while (offset > 0)  {
	    uInt size = Z_BUFSIZE;
	    if (offset < Z_BUFSIZE) size = (uInt)offset;

	    size = gzwrite(file, s->inbuf, size);
	    if (size == 0) return -1L;

	    offset -= size;
	}
	return (z_off_t)s->stream.total_in;
#endif
    }
    /* Rest of function is for reading only */

    /* compute absolute position */
    if (whence == SEEK_CUR) {
	offset += s->stream.total_out;
    }
    if (offset < 0) return -1L;

    if (s->transparent) {
	/* map to fseek */
	s->stream.avail_in = 0;
	s->stream.next_in = s->inbuf;
        if (fseek(s->file, offset, SEEK_SET) < 0) return -1L;

	s->stream.total_in = s->stream.total_out = (uLong)offset;
	return offset;
    }

    /* For a negative seek, rewind and use positive seek */
    if ((uLong)offset >= s->stream.total_out) {
	offset -= s->stream.total_out;
    } else if (gzrewind(file) < 0) {
	return -1L;
    }
    /* offset is now the number of bytes to skip. */

    if (offset != 0 && s->outbuf == Z_NULL) {
	s->outbuf = (Byte*)ALLOC(Z_BUFSIZE);
    }
    while (offset > 0)  {
	int size = Z_BUFSIZE;
	if (offset < Z_BUFSIZE) size = (int)offset;

	size = gzread(file, s->outbuf, (uInt)size);
	if (size <= 0) return -1L;
	offset -= size;
    }
    return (z_off_t)s->stream.total_out;
}

/* ===========================================================================
     Rewinds input file. 
*/
int ZEXPORT gzrewind (file)
    gzFile file;
{
    gz_stream *s = (gz_stream*)file;
    
    if (s == NULL || s->mode != 'r') return -1;

    s->z_err = Z_OK;
    s->z_eof = 0;
    s->stream.avail_in = 0;
    s->stream.next_in = s->inbuf;
    s->crc = crc32(0L, Z_NULL, 0);
	
    if (s->startpos == 0) { /* not a compressed file */
	rewind(s->file);
	return 0;
    }

    (void) inflateReset(&s->stream);
    return fseek(s->file, s->startpos, SEEK_SET);
}

/* ===========================================================================
     Returns the starting position for the next gzread or gzwrite on the
   given compressed file. This position represents a number of bytes in the
   uncompressed data stream.
*/
z_off_t ZEXPORT gztell (file)
    gzFile file;
{
    return gzseek(file, 0L, SEEK_CUR);
}

/* ===========================================================================
     Returns 1 when EOF has previously been detected reading the given
   input stream, otherwise zero.
*/
int ZEXPORT gzeof (file)
    gzFile file;
{
    gz_stream *s = (gz_stream*)file;
    
    return (s == NULL || s->mode != 'r') ? 0 : s->z_eof;
}

/* ===========================================================================
   Outputs a long in LSB order to the given file
*/
local void putLong (file, x)
    FILE *file;
    uLong x;
{
    int n;
    for (n = 0; n < 4; n++) {
        fputc((int)(x & 0xff), file);
        x >>= 8;
    }
}

/* ===========================================================================
   Reads a long in LSB order from the given gz_stream. Sets z_err in case
   of error.
*/
local uLong getLong (s)
    gz_stream *s;
{
    uLong x = (uLong)get_byte(s);
    int c;

    x += ((uLong)get_byte(s))<<8;
    x += ((uLong)get_byte(s))<<16;
    c = get_byte(s);
    if (c == EOF) s->z_err = Z_DATA_ERROR;
    x += ((uLong)c)<<24;
    return x;
}

/* ===========================================================================
     Flushes all pending output if necessary, closes the compressed file
   and deallocates all the (de)compression state.
*/
int ZEXPORT gzclose (file)
    gzFile file;
{
    int err;
    gz_stream *s = (gz_stream*)file;

    if (s == NULL) return Z_STREAM_ERROR;

    if (s->mode == 'w') {
#ifdef NO_DEFLATE
	return Z_STREAM_ERROR;
#else
        err = do_flush (file, Z_FINISH);
        if (err != Z_OK) return destroy((gz_stream*)file);

        putLong (s->file, s->crc);
        putLong (s->file, s->stream.total_in);
#endif
    }
    return destroy((gz_stream*)file);
}

/* ===========================================================================
     Returns the error message for the last error which occured on the
   given compressed file. errnum is set to zlib error number. If an
   error occured in the file system and not in the compression library,
   errnum is set to Z_ERRNO and the application may consult errno
   to get the exact error code.
*/
const char*  ZEXPORT gzerror (file, errnum)
    gzFile file;
    int *errnum;
{
    char *m;
    gz_stream *s = (gz_stream*)file;

    if (s == NULL) {
        *errnum = Z_STREAM_ERROR;
        return (const char*)ERR_MSG(Z_STREAM_ERROR);
    }
    *errnum = s->z_err;
    if (*errnum == Z_OK) return (const char*)"";

    m =  (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg);

    if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err);

    TRYFREE(s->msg);
    s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3);
    strcpy(s->msg, s->path);
    strcat(s->msg, ": ");
    strcat(s->msg, m);
    return (const char*)s->msg;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/infblock.c000066400000000000000000000303001406366436600171270ustar00rootroot00000000000000/* infblock.c -- interpret and process block types to last block
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"
#include "infblock.h"
#include "inftrees.h"
#include "infcodes.h"
#include "infutil.h"

struct inflate_codes_state {int dummy;}; /* for buggy compilers */

/* simplify the use of the inflate_huft type with some defines */
#define exop word.what.Exop
#define bits word.what.Bits

/* Table for deflate from PKZIP's appnote.txt. */
local const uInt border[] = { /* Order of the bit length code lengths */
        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};

/*
   Notes beyond the 1.93a appnote.txt:

   1. Distance pointers never point before the beginning of the output
      stream.
   2. Distance pointers can point back across blocks, up to 32k away.
   3. There is an implied maximum of 7 bits for the bit length table and
      15 bits for the actual data.
   4. If only one code exists, then it is encoded using one bit.  (Zero
      would be more efficient, but perhaps a little confusing.)  If two
      codes exist, they are coded using one bit each (0 and 1).
   5. There is no way of sending zero distance codes--a dummy must be
      sent if there are none.  (History: a pre 2.0 version of PKZIP would
      store blocks with no distance codes, but this was discovered to be
      too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
      zero distance codes, which is sent as one code of zero bits in
      length.
   6. There are up to 286 literal/length codes.  Code 256 represents the
      end-of-block.  Note however that the static length tree defines
      288 codes just to fill out the Huffman codes.  Codes 286 and 287
      cannot be used though, since there is no length base or extra bits
      defined for them.  Similarily, there are up to 30 distance codes.
      However, static trees define 32 codes (all 5 bits) to fill out the
      Huffman codes, but the last two had better not show up in the data.
   7. Unzip can check dynamic Huffman blocks for complete code sets.
      The exception is that a single code would not be complete (see #4).
   8. The five bits following the block type is really the number of
      literal codes sent minus 257.
   9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
      (1+6+6).  Therefore, to output three times the length, you output
      three codes (1+1+1), whereas to output four times the same length,
      you only need two codes (1+3).  Hmm.
  10. In the tree reconstruction algorithm, Code = Code + Increment
      only if BitLength(i) is not zero.  (Pretty obvious.)
  11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
  12. Note: length code 284 can represent 227-258, but length code 285
      really is 258.  The last length deserves its own, short code
      since it gets used a lot in very redundant files.  The length
      258 is special since 258 - 3 (the min match length) is 255.
  13. The literal/length and distance code bit lengths are read as a
      single stream of lengths.  It is possible (and advantageous) for
      a repeat code (16, 17, or 18) to go across the boundary between
      the two sets of lengths.
 */


void inflate_blocks_reset(s, z, c)
inflate_blocks_statef *s;
z_streamp z;
uLongf *c;
{
  if (c != Z_NULL)
    *c = s->check;
  if (s->mode == BTREE || s->mode == DTREE)
    ZFREE(z, s->sub.trees.blens);
  if (s->mode == CODES)
    inflate_codes_free(s->sub.decode.codes, z);
  s->mode = TYPE;
  s->bitk = 0;
  s->bitb = 0;
  s->read = s->write = s->window;
  if (s->checkfn != Z_NULL)
    z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
  Tracev((stderr, "inflate:   blocks reset\n"));
}


inflate_blocks_statef *inflate_blocks_new(z, c, w)
z_streamp z;
check_func c;
uInt w;
{
  inflate_blocks_statef *s;

  if ((s = (inflate_blocks_statef *)ZALLOC
       (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
    return s;
  if ((s->hufts =
       (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
  {
    ZFREE(z, s);
    return Z_NULL;
  }
  if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
  {
    ZFREE(z, s->hufts);
    ZFREE(z, s);
    return Z_NULL;
  }
  s->end = s->window + w;
  s->checkfn = c;
  s->mode = TYPE;
  Tracev((stderr, "inflate:   blocks allocated\n"));
  inflate_blocks_reset(s, z, Z_NULL);
  return s;
}


int inflate_blocks(s, z, r)
inflate_blocks_statef *s;
z_streamp z;
int r;
{
  uInt t;               /* temporary storage */
  uLong b;              /* bit buffer */
  uInt k;               /* bits in bit buffer */
  Bytef *p;             /* input data pointer */
  uInt n;               /* bytes available there */
  Bytef *q;             /* output window write pointer */
  uInt m;               /* bytes to end of window or read pointer */

  /* copy input/output information to locals (UPDATE macro restores) */
  LOAD

  /* process input based on current state */
  while (1) switch (s->mode)
  {
    case TYPE:
      NEEDBITS(3)
      t = (uInt)b & 7;
      s->last = t & 1;
      switch (t >> 1)
      {
        case 0:                         /* stored */
          Tracev((stderr, "inflate:     stored block%s\n",
                 s->last ? " (last)" : ""));
          DUMPBITS(3)
          t = k & 7;                    /* go to byte boundary */
          DUMPBITS(t)
          s->mode = LENS;               /* get length of stored block */
          break;
        case 1:                         /* fixed */
          Tracev((stderr, "inflate:     fixed codes block%s\n",
                 s->last ? " (last)" : ""));
          {
            uInt bl, bd;
            inflate_huft *tl, *td;

            inflate_trees_fixed(&bl, &bd, &tl, &td, z);
            s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
            if (s->sub.decode.codes == Z_NULL)
            {
              r = Z_MEM_ERROR;
              LEAVE
            }
          }
          DUMPBITS(3)
          s->mode = CODES;
          break;
        case 2:                         /* dynamic */
          Tracev((stderr, "inflate:     dynamic codes block%s\n",
                 s->last ? " (last)" : ""));
          DUMPBITS(3)
          s->mode = TABLE;
          break;
        case 3:                         /* illegal */
          DUMPBITS(3)
          s->mode = BAD;
          z->msg = (char*)"invalid block type";
          r = Z_DATA_ERROR;
          LEAVE
      }
      break;
    case LENS:
      NEEDBITS(32)
      if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
      {
        s->mode = BAD;
        z->msg = (char*)"invalid stored block lengths";
        r = Z_DATA_ERROR;
        LEAVE
      }
      s->sub.left = (uInt)b & 0xffff;
      b = k = 0;                      /* dump bits */
      Tracev((stderr, "inflate:       stored length %u\n", s->sub.left));
      s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
      break;
    case STORED:
      if (n == 0)
        LEAVE
      NEEDOUT
      t = s->sub.left;
      if (t > n) t = n;
      if (t > m) t = m;
      zmemcpy(q, p, t);
      p += t;  n -= t;
      q += t;  m -= t;
      if ((s->sub.left -= t) != 0)
        break;
      Tracev((stderr, "inflate:       stored end, %lu total out\n",
              z->total_out + (q >= s->read ? q - s->read :
              (s->end - s->read) + (q - s->window))));
      s->mode = s->last ? DRY : TYPE;
      break;
    case TABLE:
      NEEDBITS(14)
      s->sub.trees.table = t = (uInt)b & 0x3fff;
#ifndef PKZIP_BUG_WORKAROUND
      if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
      {
        s->mode = BAD;
        z->msg = (char*)"too many length or distance symbols";
        r = Z_DATA_ERROR;
        LEAVE
      }
#endif
      t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
      if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
      {
        r = Z_MEM_ERROR;
        LEAVE
      }
      DUMPBITS(14)
      s->sub.trees.index = 0;
      Tracev((stderr, "inflate:       table sizes ok\n"));
      s->mode = BTREE;
    case BTREE:
      while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
      {
        NEEDBITS(3)
        s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
        DUMPBITS(3)
      }
      while (s->sub.trees.index < 19)
        s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
      s->sub.trees.bb = 7;
      t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
                             &s->sub.trees.tb, s->hufts, z);
      if (t != Z_OK)
      {
        r = t;
        if (r == Z_DATA_ERROR)
        {
          ZFREE(z, s->sub.trees.blens);
          s->mode = BAD;
        }
        LEAVE
      }
      s->sub.trees.index = 0;
      Tracev((stderr, "inflate:       bits tree ok\n"));
      s->mode = DTREE;
    case DTREE:
      while (t = s->sub.trees.table,
             s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
      {
        inflate_huft *h;
        uInt i, j, c;

        t = s->sub.trees.bb;
        NEEDBITS(t)
        h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
        t = h->bits;
        c = h->base;
        if (c < 16)
        {
          DUMPBITS(t)
          s->sub.trees.blens[s->sub.trees.index++] = c;
        }
        else /* c == 16..18 */
        {
          i = c == 18 ? 7 : c - 14;
          j = c == 18 ? 11 : 3;
          NEEDBITS(t + i)
          DUMPBITS(t)
          j += (uInt)b & inflate_mask[i];
          DUMPBITS(i)
          i = s->sub.trees.index;
          t = s->sub.trees.table;
          if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
              (c == 16 && i < 1))
          {
            ZFREE(z, s->sub.trees.blens);
            s->mode = BAD;
            z->msg = (char*)"invalid bit length repeat";
            r = Z_DATA_ERROR;
            LEAVE
          }
          c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
          do {
            s->sub.trees.blens[i++] = c;
          } while (--j);
          s->sub.trees.index = i;
        }
      }
      s->sub.trees.tb = Z_NULL;
      {
        uInt bl, bd;
        inflate_huft *tl, *td;
        inflate_codes_statef *c;

        bl = 9;         /* must be <= 9 for lookahead assumptions */
        bd = 6;         /* must be <= 9 for lookahead assumptions */
        t = s->sub.trees.table;
        t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
                                  s->sub.trees.blens, &bl, &bd, &tl, &td,
                                  s->hufts, z);
        if (t != Z_OK)
        {
          if (t == (uInt)Z_DATA_ERROR)
          {
            ZFREE(z, s->sub.trees.blens);
            s->mode = BAD;
          }
          r = t;
          LEAVE
        }
        Tracev((stderr, "inflate:       trees ok\n"));
        if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
        {
          r = Z_MEM_ERROR;
          LEAVE
        }
        s->sub.decode.codes = c;
      }
      ZFREE(z, s->sub.trees.blens);
      s->mode = CODES;
    case CODES:
      UPDATE
      if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
        return inflate_flush(s, z, r);
      r = Z_OK;
      inflate_codes_free(s->sub.decode.codes, z);
      LOAD
      Tracev((stderr, "inflate:       codes end, %lu total out\n",
              z->total_out + (q >= s->read ? q - s->read :
              (s->end - s->read) + (q - s->window))));
      if (!s->last)
      {
        s->mode = TYPE;
        break;
      }
      s->mode = DRY;
    case DRY:
      FLUSH
      if (s->read != s->write)
        LEAVE
      s->mode = DONE;
    case DONE:
      r = Z_STREAM_END;
      LEAVE
    case BAD:
      r = Z_DATA_ERROR;
      LEAVE
    default:
      r = Z_STREAM_ERROR;
      LEAVE
  }
}


int inflate_blocks_free(s, z)
inflate_blocks_statef *s;
z_streamp z;
{
  inflate_blocks_reset(s, z, Z_NULL);
  ZFREE(z, s->window);
  ZFREE(z, s->hufts);
  ZFREE(z, s);
  Tracev((stderr, "inflate:   blocks freed\n"));
  return Z_OK;
}


void inflate_set_dictionary(s, d, n)
inflate_blocks_statef *s;
const Bytef *d;
uInt  n;
{
  zmemcpy(s->window, d, n);
  s->read = s->write = s->window + n;
}


/* Returns true if inflate is currently at the end of a block generated
 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
 * IN assertion: s != Z_NULL
 */
int inflate_blocks_sync_point(s)
inflate_blocks_statef *s;
{
  return s->mode == LENS;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/infblock.h000066400000000000000000000022761406366436600171470ustar00rootroot00000000000000/* infblock.h -- header to use infblock.c
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

struct inflate_blocks_state;
typedef struct inflate_blocks_state FAR inflate_blocks_statef;

extern inflate_blocks_statef * inflate_blocks_new OF((
    z_streamp z,
    check_func c,               /* check function */
    uInt w));                   /* window size */

extern int inflate_blocks OF((
    inflate_blocks_statef *,
    z_streamp ,
    int));                      /* initial return code */

extern void inflate_blocks_reset OF((
    inflate_blocks_statef *,
    z_streamp ,
    uLongf *));                  /* check value on output */

extern int inflate_blocks_free OF((
    inflate_blocks_statef *,
    z_streamp));

extern void inflate_set_dictionary OF((
    inflate_blocks_statef *s,
    const Bytef *d,  /* dictionary */
    uInt  n));       /* dictionary length */

extern int inflate_blocks_sync_point OF((
    inflate_blocks_statef *s));
analog-ce-6.0.17/src/zlib/infcodes.c000066400000000000000000000167571406366436600171560ustar00rootroot00000000000000/* infcodes.c -- process literals and length/distance pairs
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"
#include "inftrees.h"
#include "infblock.h"
#include "infcodes.h"
#include "infutil.h"
#include "inffast.h"

/* simplify the use of the inflate_huft type with some defines */
#define exop word.what.Exop
#define bits word.what.Bits

typedef enum {        /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
      START,    /* x: set up for LEN */
      LEN,      /* i: get length/literal/eob next */
      LENEXT,   /* i: getting length extra (have base) */
      DIST,     /* i: get distance next */
      DISTEXT,  /* i: getting distance extra */
      COPY,     /* o: copying bytes in window, waiting for space */
      LIT,      /* o: got literal, waiting for output space */
      WASH,     /* o: got eob, possibly still output waiting */
      END,      /* x: got eob and all data flushed */
      BADCODE}  /* x: got error */
inflate_codes_mode;

/* inflate codes private state */
struct inflate_codes_state {

  /* mode */
  inflate_codes_mode mode;      /* current inflate_codes mode */

  /* mode dependent information */
  uInt len;
  union {
    struct {
      inflate_huft *tree;       /* pointer into tree */
      uInt need;                /* bits needed */
    } code;             /* if LEN or DIST, where in tree */
    uInt lit;           /* if LIT, literal */
    struct {
      uInt get;                 /* bits to get for extra */
      uInt dist;                /* distance back to copy from */
    } copy;             /* if EXT or COPY, where and how much */
  } sub;                /* submode */

  /* mode independent information */
  Byte lbits;           /* ltree bits decoded per branch */
  Byte dbits;           /* dtree bits decoder per branch */
  inflate_huft *ltree;          /* literal/length/eob tree */
  inflate_huft *dtree;          /* distance tree */

};


inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
uInt bl, bd;
inflate_huft *tl;
inflate_huft *td; /* need separate declaration for Borland C++ */
z_streamp z;
{
  inflate_codes_statef *c;

  if ((c = (inflate_codes_statef *)
       ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
  {
    c->mode = START;
    c->lbits = (Byte)bl;
    c->dbits = (Byte)bd;
    c->ltree = tl;
    c->dtree = td;
    Tracev((stderr, "inflate:       codes new\n"));
  }
  return c;
}


int inflate_codes(s, z, r)
inflate_blocks_statef *s;
z_streamp z;
int r;
{
  uInt j;               /* temporary storage */
  inflate_huft *t;      /* temporary pointer */
  uInt e;               /* extra bits or operation */
  uLong b;              /* bit buffer */
  uInt k;               /* bits in bit buffer */
  Bytef *p;             /* input data pointer */
  uInt n;               /* bytes available there */
  Bytef *q;             /* output window write pointer */
  uInt m;               /* bytes to end of window or read pointer */
  Bytef *f;             /* pointer to copy strings from */
  inflate_codes_statef *c = s->sub.decode.codes;  /* codes state */

  /* copy input/output information to locals (UPDATE macro restores) */
  LOAD

  /* process input and output based on current state */
  while (1) switch (c->mode)
  {             /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
    case START:         /* x: set up for LEN */
#ifndef SLOW
      if (m >= 258 && n >= 10)
      {
        UPDATE
        r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
        LOAD
        if (r != Z_OK)
        {
          c->mode = r == Z_STREAM_END ? WASH : BADCODE;
          break;
        }
      }
#endif /* !SLOW */
      c->sub.code.need = c->lbits;
      c->sub.code.tree = c->ltree;
      c->mode = LEN;
    case LEN:           /* i: get length/literal/eob next */
      j = c->sub.code.need;
      NEEDBITS(j)
      t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
      DUMPBITS(t->bits)
      e = (uInt)(t->exop);
      if (e == 0)               /* literal */
      {
        c->sub.lit = t->base;
        Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
                 "inflate:         literal '%c'\n" :
                 "inflate:         literal 0x%02x\n", t->base));
        c->mode = LIT;
        break;
      }
      if (e & 16)               /* length */
      {
        c->sub.copy.get = e & 15;
        c->len = t->base;
        c->mode = LENEXT;
        break;
      }
      if ((e & 64) == 0)        /* next table */
      {
        c->sub.code.need = e;
        c->sub.code.tree = t + t->base;
        break;
      }
      if (e & 32)               /* end of block */
      {
        Tracevv((stderr, "inflate:         end of block\n"));
        c->mode = WASH;
        break;
      }
      c->mode = BADCODE;        /* invalid code */
      z->msg = (char*)"invalid literal/length code";
      r = Z_DATA_ERROR;
      LEAVE
    case LENEXT:        /* i: getting length extra (have base) */
      j = c->sub.copy.get;
      NEEDBITS(j)
      c->len += (uInt)b & inflate_mask[j];
      DUMPBITS(j)
      c->sub.code.need = c->dbits;
      c->sub.code.tree = c->dtree;
      Tracevv((stderr, "inflate:         length %u\n", c->len));
      c->mode = DIST;
    case DIST:          /* i: get distance next */
      j = c->sub.code.need;
      NEEDBITS(j)
      t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
      DUMPBITS(t->bits)
      e = (uInt)(t->exop);
      if (e & 16)               /* distance */
      {
        c->sub.copy.get = e & 15;
        c->sub.copy.dist = t->base;
        c->mode = DISTEXT;
        break;
      }
      if ((e & 64) == 0)        /* next table */
      {
        c->sub.code.need = e;
        c->sub.code.tree = t + t->base;
        break;
      }
      c->mode = BADCODE;        /* invalid code */
      z->msg = (char*)"invalid distance code";
      r = Z_DATA_ERROR;
      LEAVE
    case DISTEXT:       /* i: getting distance extra */
      j = c->sub.copy.get;
      NEEDBITS(j)
      c->sub.copy.dist += (uInt)b & inflate_mask[j];
      DUMPBITS(j)
      Tracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
      c->mode = COPY;
    case COPY:          /* o: copying bytes in window, waiting for space */
      f = q - c->sub.copy.dist;
      while (f < s->window)             /* modulo window size-"while" instead */
        f += s->end - s->window;        /* of "if" handles invalid distances */
      while (c->len)
      {
        NEEDOUT
        OUTBYTE(*f++)
        if (f == s->end)
          f = s->window;
        c->len--;
      }
      c->mode = START;
      break;
    case LIT:           /* o: got literal, waiting for output space */
      NEEDOUT
      OUTBYTE(c->sub.lit)
      c->mode = START;
      break;
    case WASH:          /* o: got eob, possibly more output */
      if (k > 7)        /* return unused byte, if any */
      {
        Assert(k < 16, "inflate_codes grabbed too many bytes")
        k -= 8;
        n++;
        p--;            /* can always return one */
      }
      FLUSH
      if (s->read != s->write)
        LEAVE
      c->mode = END;
    case END:
      r = Z_STREAM_END;
      LEAVE
    case BADCODE:       /* x: got error */
      r = Z_DATA_ERROR;
      LEAVE
    default:
      r = Z_STREAM_ERROR;
      LEAVE
  }
#ifdef NEED_DUMMY_RETURN
  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
#endif
}


void inflate_codes_free(c, z)
inflate_codes_statef *c;
z_streamp z;
{
  ZFREE(z, c);
  Tracev((stderr, "inflate:       codes free\n"));
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/infcodes.h000066400000000000000000000013411406366436600171420ustar00rootroot00000000000000/* infcodes.h -- header to use infcodes.c
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

struct inflate_codes_state;
typedef struct inflate_codes_state FAR inflate_codes_statef;

extern inflate_codes_statef *inflate_codes_new OF((
    uInt, uInt,
    inflate_huft *, inflate_huft *,
    z_streamp ));

extern int inflate_codes OF((
    inflate_blocks_statef *,
    z_streamp ,
    int));

extern void inflate_codes_free OF((
    inflate_codes_statef *,
    z_streamp ));

analog-ce-6.0.17/src/zlib/inffast.c000066400000000000000000000132711406366436600170020ustar00rootroot00000000000000/* inffast.c -- process literals and length/distance pairs fast
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"
#include "inftrees.h"
#include "infblock.h"
#include "infcodes.h"
#include "infutil.h"
#include "inffast.h"

struct inflate_codes_state {int dummy;}; /* for buggy compilers */

/* simplify the use of the inflate_huft type with some defines */
#define exop word.what.Exop
#define bits word.what.Bits

/* macros for bit input with no checking and for returning unused bytes */
#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;}

/* Called with number of bytes left to write in window at least 258
   (the maximum string length) and number of input bytes available
   at least ten.  The ten bytes are six bytes for the longest length/
   distance pair plus four bytes for overloading the bit buffer. */

int inflate_fast(bl, bd, tl, td, s, z)
uInt bl, bd;
inflate_huft *tl;
inflate_huft *td; /* need separate declaration for Borland C++ */
inflate_blocks_statef *s;
z_streamp z;
{
  inflate_huft *t;      /* temporary pointer */
  uInt e;               /* extra bits or operation */
  uLong b;              /* bit buffer */
  uInt k;               /* bits in bit buffer */
  Bytef *p;             /* input data pointer */
  uInt n;               /* bytes available there */
  Bytef *q;             /* output window write pointer */
  uInt m;               /* bytes to end of window or read pointer */
  uInt ml;              /* mask for literal/length tree */
  uInt md;              /* mask for distance tree */
  uInt c;               /* bytes to copy */
  uInt d;               /* distance back to copy from */
  Bytef *r;             /* copy source pointer */

  /* load input, output, bit values */
  LOAD

  /* initialize masks */
  ml = inflate_mask[bl];
  md = inflate_mask[bd];

  /* do until not enough input or output space for fast loop */
  do {                          /* assume called with m >= 258 && n >= 10 */
    /* get literal/length code */
    GRABBITS(20)                /* max bits for literal/length code */
    if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
    {
      DUMPBITS(t->bits)
      Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
                "inflate:         * literal '%c'\n" :
                "inflate:         * literal 0x%02x\n", t->base));
      *q++ = (Byte)t->base;
      m--;
      continue;
    }
    do {
      DUMPBITS(t->bits)
      if (e & 16)
      {
        /* get extra bits for length */
        e &= 15;
        c = t->base + ((uInt)b & inflate_mask[e]);
        DUMPBITS(e)
        Tracevv((stderr, "inflate:         * length %u\n", c));

        /* decode distance base of block to copy */
        GRABBITS(15);           /* max bits for distance code */
        e = (t = td + ((uInt)b & md))->exop;
        do {
          DUMPBITS(t->bits)
          if (e & 16)
          {
            /* get extra bits to add to distance base */
            e &= 15;
            GRABBITS(e)         /* get extra bits (up to 13) */
            d = t->base + ((uInt)b & inflate_mask[e]);
            DUMPBITS(e)
            Tracevv((stderr, "inflate:         * distance %u\n", d));

            /* do the copy */
            m -= c;
            r = q - d;
            if (r < s->window)                  /* wrap if needed */
            {
              do {
                r += s->end - s->window;        /* force pointer in window */
              } while (r < s->window);          /* covers invalid distances */
              e = s->end - r;
              if (c > e)
              {
                c -= e;                         /* wrapped copy */
                do {
                    *q++ = *r++;
                } while (--e);
                r = s->window;
                do {
                    *q++ = *r++;
                } while (--c);
              }
              else                              /* normal copy */
              {
                *q++ = *r++;  c--;
                *q++ = *r++;  c--;
                do {
                    *q++ = *r++;
                } while (--c);
              }
            }
            else                                /* normal copy */
            {
              *q++ = *r++;  c--;
              *q++ = *r++;  c--;
              do {
                *q++ = *r++;
              } while (--c);
            }
            break;
          }
          else if ((e & 64) == 0)
          {
            t += t->base;
            e = (t += ((uInt)b & inflate_mask[e]))->exop;
          }
          else
          {
            z->msg = (char*)"invalid distance code";
            UNGRAB
            UPDATE
            return Z_DATA_ERROR;
          }
        } while (1);
        break;
      }
      if ((e & 64) == 0)
      {
        t += t->base;
        if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
        {
          DUMPBITS(t->bits)
          Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
                    "inflate:         * literal '%c'\n" :
                    "inflate:         * literal 0x%02x\n", t->base));
          *q++ = (Byte)t->base;
          m--;
          break;
        }
      }
      else if (e & 32)
      {
        Tracevv((stderr, "inflate:         * end of block\n"));
        UNGRAB
        UPDATE
        return Z_STREAM_END;
      }
      else
      {
        z->msg = (char*)"invalid literal/length code";
        UNGRAB
        UPDATE
        return Z_DATA_ERROR;
      }
    } while (1);
  } while (m >= 258 && n >= 10);

  /* not enough input or output--restore pointers and return */
  UNGRAB
  UPDATE
  return Z_OK;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/inffast.h000066400000000000000000000007501406366436600170050ustar00rootroot00000000000000/* inffast.h -- header to use inffast.c
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

extern int inflate_fast OF((
    uInt,
    uInt,
    inflate_huft *,
    inflate_huft *,
    inflate_blocks_statef *,
    z_streamp ));
analog-ce-6.0.17/src/zlib/inffixed.h000066400000000000000000000213401406366436600171450ustar00rootroot00000000000000/* inffixed.h -- table for decoding fixed codes
 * Generated automatically by the maketree.c program
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

local uInt fixed_bl = 9;
local uInt fixed_bd = 5;
local inflate_huft fixed_tl[] = {
    {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
    {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
    {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
    {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
    {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
    {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
    {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
    {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
    {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
    {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
    {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
    {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
    {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
    {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
    {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
    {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
    {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
    {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
    {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
    {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
    {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
    {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
    {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
    {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
    {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
    {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
    {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
    {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
    {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
    {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
    {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
    {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
    {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
    {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
    {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
    {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
    {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
    {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
    {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
    {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
    {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
    {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
    {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
    {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
    {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
    {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
    {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
    {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
    {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
    {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
    {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
    {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
    {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
    {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
    {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
    {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
    {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
    {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
    {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
    {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
    {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
    {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
    {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
    {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
    {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
    {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
    {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
    {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
    {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
    {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
    {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
    {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
    {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
    {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
    {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
    {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
    {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
    {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
    {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
    {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
    {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
    {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
    {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
    {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
    {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
    {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
    {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
    {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
    {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
    {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
    {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
    {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
    {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
    {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
    {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
    {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
    {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
    {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
    {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
    {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
    {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
    {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
    {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
    {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
    {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
    {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
    {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
    {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
    {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
    {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
    {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
    {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
    {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
    {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
    {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
    {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
    {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
    {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
    {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
    {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
    {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
    {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
    {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
    {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
    {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
    {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
    {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
    {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
  };
local inflate_huft fixed_td[] = {
    {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
    {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
    {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
    {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
    {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
    {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
    {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
    {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
  };
analog-ce-6.0.17/src/zlib/inflate.c000066400000000000000000000227421406366436600167750ustar00rootroot00000000000000/* inflate.c -- zlib interface to inflate modules
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"
#include "infblock.h"

struct inflate_blocks_state {int dummy;}; /* for buggy compilers */

typedef enum {
      METHOD,   /* waiting for method byte */
      FLAG,     /* waiting for flag byte */
      DICT4,    /* four dictionary check bytes to go */
      DICT3,    /* three dictionary check bytes to go */
      DICT2,    /* two dictionary check bytes to go */
      DICT1,    /* one dictionary check byte to go */
      DICT0,    /* waiting for inflateSetDictionary */
      BLOCKS,   /* decompressing blocks */
      CHECK4,   /* four check bytes to go */
      CHECK3,   /* three check bytes to go */
      CHECK2,   /* two check bytes to go */
      CHECK1,   /* one check byte to go */
      DONE,     /* finished check, done */
      BAD}      /* got an error--stay here */
inflate_mode;

/* inflate private state */
struct internal_state {

  /* mode */
  inflate_mode  mode;   /* current inflate mode */

  /* mode dependent information */
  union {
    uInt method;        /* if FLAGS, method byte */
    struct {
      uLong was;                /* computed check value */
      uLong need;               /* stream check value */
    } check;            /* if CHECK, check values to compare */
    uInt marker;        /* if BAD, inflateSync's marker bytes count */
  } sub;        /* submode */

  /* mode independent information */
  int  nowrap;          /* flag for no wrapper */
  uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
  inflate_blocks_statef 
    *blocks;            /* current inflate_blocks state */

};


int ZEXPORT inflateReset(z)
z_streamp z;
{
  if (z == Z_NULL || z->state == Z_NULL)
    return Z_STREAM_ERROR;
  z->total_in = z->total_out = 0;
  z->msg = Z_NULL;
  z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
  inflate_blocks_reset(z->state->blocks, z, Z_NULL);
  Tracev((stderr, "inflate: reset\n"));
  return Z_OK;
}


int ZEXPORT inflateEnd(z)
z_streamp z;
{
  if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
    return Z_STREAM_ERROR;
  if (z->state->blocks != Z_NULL)
    inflate_blocks_free(z->state->blocks, z);
  ZFREE(z, z->state);
  z->state = Z_NULL;
  Tracev((stderr, "inflate: end\n"));
  return Z_OK;
}


int ZEXPORT inflateInit2_(z, w, version, stream_size)
z_streamp z;
int w;
const char *version;
int stream_size;
{
  if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
      stream_size != sizeof(z_stream))
      return Z_VERSION_ERROR;

  /* initialize state */
  if (z == Z_NULL)
    return Z_STREAM_ERROR;
  z->msg = Z_NULL;
  if (z->zalloc == Z_NULL)
  {
    z->zalloc = zcalloc;
    z->opaque = (voidpf)0;
  }
  if (z->zfree == Z_NULL) z->zfree = zcfree;
  if ((z->state = (struct internal_state FAR *)
       ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
    return Z_MEM_ERROR;
  z->state->blocks = Z_NULL;

  /* handle undocumented nowrap option (no zlib header or check) */
  z->state->nowrap = 0;
  if (w < 0)
  {
    w = - w;
    z->state->nowrap = 1;
  }

  /* set window size */
  if (w < 8 || w > 15)
  {
    inflateEnd(z);
    return Z_STREAM_ERROR;
  }
  z->state->wbits = (uInt)w;

  /* create inflate_blocks state */
  if ((z->state->blocks =
      inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
      == Z_NULL)
  {
    inflateEnd(z);
    return Z_MEM_ERROR;
  }
  Tracev((stderr, "inflate: allocated\n"));

  /* reset state */
  inflateReset(z);
  return Z_OK;
}


int ZEXPORT inflateInit_(z, version, stream_size)
z_streamp z;
const char *version;
int stream_size;
{
  return inflateInit2_(z, DEF_WBITS, version, stream_size);
}


#define NEEDBYTE {if(z->avail_in==0)return r;r=f;}
#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)

int ZEXPORT inflate(z, f)
z_streamp z;
int f;
{
  int r;
  uInt b;

  if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
    return Z_STREAM_ERROR;
  f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
  r = Z_BUF_ERROR;
  while (1) switch (z->state->mode)
  {
    case METHOD:
      NEEDBYTE
      if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
      {
        z->state->mode = BAD;
        z->msg = (char*)"unknown compression method";
        z->state->sub.marker = 5;       /* can't try inflateSync */
        break;
      }
      if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
      {
        z->state->mode = BAD;
        z->msg = (char*)"invalid window size";
        z->state->sub.marker = 5;       /* can't try inflateSync */
        break;
      }
      z->state->mode = FLAG;
    case FLAG:
      NEEDBYTE
      b = NEXTBYTE;
      if (((z->state->sub.method << 8) + b) % 31)
      {
        z->state->mode = BAD;
        z->msg = (char*)"incorrect header check";
        z->state->sub.marker = 5;       /* can't try inflateSync */
        break;
      }
      Tracev((stderr, "inflate: zlib header ok\n"));
      if (!(b & PRESET_DICT))
      {
        z->state->mode = BLOCKS;
        break;
      }
      z->state->mode = DICT4;
    case DICT4:
      NEEDBYTE
      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
      z->state->mode = DICT3;
    case DICT3:
      NEEDBYTE
      z->state->sub.check.need += (uLong)NEXTBYTE << 16;
      z->state->mode = DICT2;
    case DICT2:
      NEEDBYTE
      z->state->sub.check.need += (uLong)NEXTBYTE << 8;
      z->state->mode = DICT1;
    case DICT1:
      NEEDBYTE
      z->state->sub.check.need += (uLong)NEXTBYTE;
      z->adler = z->state->sub.check.need;
      z->state->mode = DICT0;
      return Z_NEED_DICT;
    case DICT0:
      z->state->mode = BAD;
      z->msg = (char*)"need dictionary";
      z->state->sub.marker = 0;       /* can try inflateSync */
      return Z_STREAM_ERROR;
    case BLOCKS:
      r = inflate_blocks(z->state->blocks, z, r);
      if (r == Z_DATA_ERROR)
      {
        z->state->mode = BAD;
        z->state->sub.marker = 0;       /* can try inflateSync */
        break;
      }
      if (r == Z_OK)
        r = f;
      if (r != Z_STREAM_END)
        return r;
      r = f;
      inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
      if (z->state->nowrap)
      {
        z->state->mode = DONE;
        break;
      }
      z->state->mode = CHECK4;
    case CHECK4:
      NEEDBYTE
      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
      z->state->mode = CHECK3;
    case CHECK3:
      NEEDBYTE
      z->state->sub.check.need += (uLong)NEXTBYTE << 16;
      z->state->mode = CHECK2;
    case CHECK2:
      NEEDBYTE
      z->state->sub.check.need += (uLong)NEXTBYTE << 8;
      z->state->mode = CHECK1;
    case CHECK1:
      NEEDBYTE
      z->state->sub.check.need += (uLong)NEXTBYTE;

      if (z->state->sub.check.was != z->state->sub.check.need)
      {
        z->state->mode = BAD;
        z->msg = (char*)"incorrect data check";
        z->state->sub.marker = 5;       /* can't try inflateSync */
        break;
      }
      Tracev((stderr, "inflate: zlib check ok\n"));
      z->state->mode = DONE;
    case DONE:
      return Z_STREAM_END;
    case BAD:
      return Z_DATA_ERROR;
    default:
      return Z_STREAM_ERROR;
  }
#ifdef NEED_DUMMY_RETURN
  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
#endif
}


int ZEXPORT inflateSetDictionary(z, dictionary, dictLength)
z_streamp z;
const Bytef *dictionary;
uInt  dictLength;
{
  uInt length = dictLength;

  if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0)
    return Z_STREAM_ERROR;

  if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR;
  z->adler = 1L;

  if (length >= ((uInt)1<state->wbits))
  {
    length = (1<state->wbits)-1;
    dictionary += dictLength - length;
  }
  inflate_set_dictionary(z->state->blocks, dictionary, length);
  z->state->mode = BLOCKS;
  return Z_OK;
}


int ZEXPORT inflateSync(z)
z_streamp z;
{
  uInt n;       /* number of bytes to look at */
  Bytef *p;     /* pointer to bytes */
  uInt m;       /* number of marker bytes found in a row */
  uLong r, w;   /* temporaries to save total_in and total_out */

  /* set up */
  if (z == Z_NULL || z->state == Z_NULL)
    return Z_STREAM_ERROR;
  if (z->state->mode != BAD)
  {
    z->state->mode = BAD;
    z->state->sub.marker = 0;
  }
  if ((n = z->avail_in) == 0)
    return Z_BUF_ERROR;
  p = z->next_in;
  m = z->state->sub.marker;

  /* search */
  while (n && m < 4)
  {
    static const Byte mark[4] = {0, 0, 0xff, 0xff};
    if (*p == mark[m])
      m++;
    else if (*p)
      m = 0;
    else
      m = 4 - m;
    p++, n--;
  }

  /* restore */
  z->total_in += p - z->next_in;
  z->next_in = p;
  z->avail_in = n;
  z->state->sub.marker = m;

  /* return no joy or set up to restart on a new block */
  if (m != 4)
    return Z_DATA_ERROR;
  r = z->total_in;  w = z->total_out;
  inflateReset(z);
  z->total_in = r;  z->total_out = w;
  z->state->mode = BLOCKS;
  return Z_OK;
}


/* Returns true if inflate is currently at the end of a block generated
 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
 * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
 * but removes the length bytes of the resulting empty stored block. When
 * decompressing, PPP checks that at the end of input packet, inflate is
 * waiting for these length bytes.
 */
int ZEXPORT inflateSyncPoint(z)
z_streamp z;
{
  if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
    return Z_STREAM_ERROR;
  return inflate_blocks_sync_point(z->state->blocks);
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/inftrees.c000066400000000000000000000372521406366436600171740ustar00rootroot00000000000000/* inftrees.c -- generate Huffman trees for efficient decoding
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"
#include "inftrees.h"

#if !defined(BUILDFIXED) && !defined(STDC)
#  define BUILDFIXED   /* non ANSI compilers may not accept inffixed.h */
#endif

const char inflate_copyright[] =
   " inflate 1.1.4 Copyright 1995-2002 Mark Adler ";
/*
  If you use the zlib library in a product, an acknowledgment is welcome
  in the documentation of your product. If for some reason you cannot
  include such an acknowledgment, I would appreciate that you keep this
  copyright string in the executable of your product.
 */
struct internal_state  {int dummy;}; /* for buggy compilers */

/* simplify the use of the inflate_huft type with some defines */
#define exop word.what.Exop
#define bits word.what.Bits


local int huft_build OF((
    uIntf *,            /* code lengths in bits */
    uInt,               /* number of codes */
    uInt,               /* number of "simple" codes */
    const uIntf *,      /* list of base values for non-simple codes */
    const uIntf *,      /* list of extra bits for non-simple codes */
    inflate_huft * FAR*,/* result: starting table */
    uIntf *,            /* maximum lookup bits (returns actual) */
    inflate_huft *,     /* space for trees */
    uInt *,             /* hufts used in space */
    uIntf * ));         /* space for values */

/* Tables for deflate from PKZIP's appnote.txt. */
local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
        /* see note #13 above about 258 */
local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
        8193, 12289, 16385, 24577};
local const uInt cpdext[30] = { /* Extra bits for distance codes */
        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
        12, 12, 13, 13};

/*
   Huffman code decoding is performed using a multi-level table lookup.
   The fastest way to decode is to simply build a lookup table whose
   size is determined by the longest code.  However, the time it takes
   to build this table can also be a factor if the data being decoded
   is not very long.  The most common codes are necessarily the
   shortest codes, so those codes dominate the decoding time, and hence
   the speed.  The idea is you can have a shorter table that decodes the
   shorter, more probable codes, and then point to subsidiary tables for
   the longer codes.  The time it costs to decode the longer codes is
   then traded against the time it takes to make longer tables.

   This results of this trade are in the variables lbits and dbits
   below.  lbits is the number of bits the first level table for literal/
   length codes can decode in one step, and dbits is the same thing for
   the distance codes.  Subsequent tables are also less than or equal to
   those sizes.  These values may be adjusted either when all of the
   codes are shorter than that, in which case the longest code length in
   bits is used, or when the shortest code is *longer* than the requested
   table size, in which case the length of the shortest code in bits is
   used.

   There are two different values for the two tables, since they code a
   different number of possibilities each.  The literal/length table
   codes 286 possible values, or in a flat code, a little over eight
   bits.  The distance table codes 30 possible values, or a little less
   than five bits, flat.  The optimum values for speed end up being
   about one bit more than those, so lbits is 8+1 and dbits is 5+1.
   The optimum values may differ though from machine to machine, and
   possibly even between compilers.  Your mileage may vary.
 */


/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
#define BMAX 15         /* maximum bit length of any code */

local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
uIntf *b;               /* code lengths in bits (all assumed <= BMAX) */
uInt n;                 /* number of codes (assumed <= 288) */
uInt s;                 /* number of simple-valued codes (0..s-1) */
const uIntf *d;         /* list of base values for non-simple codes */
const uIntf *e;         /* list of extra bits for non-simple codes */
inflate_huft * FAR *t;  /* result: starting table */
uIntf *m;               /* maximum lookup bits, returns actual */
inflate_huft *hp;       /* space for trees */
uInt *hn;               /* hufts used in space */
uIntf *v;               /* working area: values in order of bit length */
/* Given a list of code lengths and a maximum table size, make a set of
   tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
   if the given code set is incomplete (the tables are still built in this
   case), or Z_DATA_ERROR if the input is invalid. */
{

  uInt a;                       /* counter for codes of length k */
  uInt c[BMAX+1];               /* bit length count table */
  uInt f;                       /* i repeats in table every f entries */
  int g;                        /* maximum code length */
  int h;                        /* table level */
  register uInt i;              /* counter, current code */
  register uInt j;              /* counter */
  register int k;               /* number of bits in current code */
  int l;                        /* bits per table (returned in m) */
  uInt mask;                    /* (1 << w) - 1, to avoid cc -O bug on HP */
  register uIntf *p;            /* pointer into c[], b[], or v[] */
  inflate_huft *q;              /* points to current table */
  struct inflate_huft_s r;      /* table entry for structure assignment */
  inflate_huft *u[BMAX];        /* table stack */
  register int w;               /* bits before this table == (l * h) */
  uInt x[BMAX+1];               /* bit offsets, then code stack */
  uIntf *xp;                    /* pointer into x */
  int y;                        /* number of dummy codes added */
  uInt z;                       /* number of entries in current table */


  /* Generate counts for each bit length */
  p = c;
#define C0 *p++ = 0;
#define C2 C0 C0 C0 C0
#define C4 C2 C2 C2 C2
  C4                            /* clear c[]--assume BMAX+1 is 16 */
  p = b;  i = n;
  do {
    c[*p++]++;                  /* assume all entries <= BMAX */
  } while (--i);
  if (c[0] == n)                /* null input--all zero length codes */
  {
    *t = (inflate_huft *)Z_NULL;
    *m = 0;
    return Z_OK;
  }


  /* Find minimum and maximum length, bound *m by those */
  l = *m;
  for (j = 1; j <= BMAX; j++)
    if (c[j])
      break;
  k = j;                        /* minimum code length */
  if ((uInt)l < j)
    l = j;
  for (i = BMAX; i; i--)
    if (c[i])
      break;
  g = i;                        /* maximum code length */
  if ((uInt)l > i)
    l = i;
  *m = l;


  /* Adjust last length count to fill out codes, if needed */
  for (y = 1 << j; j < i; j++, y <<= 1)
    if ((y -= c[j]) < 0)
      return Z_DATA_ERROR;
  if ((y -= c[i]) < 0)
    return Z_DATA_ERROR;
  c[i] += y;


  /* Generate starting offsets into the value table for each length */
  x[1] = j = 0;
  p = c + 1;  xp = x + 2;
  while (--i) {                 /* note that i == g from above */
    *xp++ = (j += *p++);
  }


  /* Make a table of values in order of bit lengths */
  p = b;  i = 0;
  do {
    if ((j = *p++) != 0)
      v[x[j]++] = i;
  } while (++i < n);
  n = x[g];                     /* set n to length of v */


  /* Generate the Huffman codes and for each, make the table entries */
  x[0] = i = 0;                 /* first Huffman code is zero */
  p = v;                        /* grab values in bit order */
  h = -1;                       /* no tables yet--level -1 */
  w = -l;                       /* bits decoded == (l * h) */
  u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
  q = (inflate_huft *)Z_NULL;   /* ditto */
  z = 0;                        /* ditto */

  /* go through the bit lengths (k already is bits in shortest code) */
  for (; k <= g; k++)
  {
    a = c[k];
    while (a--)
    {
      /* here i is the Huffman code of length k bits for value *p */
      /* make tables up to required level */
      while (k > w + l)
      {
        h++;
        w += l;                 /* previous table always l bits */

        /* compute minimum size table less than or equal to l bits */
        z = g - w;
        z = z > (uInt)l ? l : z;        /* table size upper limit */
        if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
        {                       /* too few codes for k-w bit table */
          f -= a + 1;           /* deduct codes from patterns left */
          xp = c + k;
          if (j < z)
            while (++j < z)     /* try smaller tables up to z bits */
            {
              if ((f <<= 1) <= *++xp)
                break;          /* enough codes to use up j bits */
              f -= *xp;         /* else deduct codes from patterns */
            }
        }
        z = 1 << j;             /* table entries for j-bit table */

        /* allocate new table */
        if (*hn + z > MANY)     /* (note: doesn't matter for fixed) */
          return Z_DATA_ERROR;  /* overflow of MANY */
        u[h] = q = hp + *hn;
        *hn += z;

        /* connect to last table, if there is one */
        if (h)
        {
          x[h] = i;             /* save pattern for backing up */
          r.bits = (Byte)l;     /* bits to dump before this table */
          r.exop = (Byte)j;     /* bits in this table */
          j = i >> (w - l);
          r.base = (uInt)(q - u[h-1] - j);   /* offset to this table */
          u[h-1][j] = r;        /* connect to last table */
        }
        else
          *t = q;               /* first table is returned result */
      }

      /* set up table entry in r */
      r.bits = (Byte)(k - w);
      if (p >= v + n)
        r.exop = 128 + 64;      /* out of values--invalid code */
      else if (*p < s)
      {
        r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
        r.base = *p++;          /* simple code is just the value */
      }
      else
      {
        r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
        r.base = d[*p++ - s];
      }

      /* fill code-like entries with r */
      f = 1 << (k - w);
      for (j = i >> w; j < z; j += f)
        q[j] = r;

      /* backwards increment the k-bit code i */
      for (j = 1 << (k - 1); i & j; j >>= 1)
        i ^= j;
      i ^= j;

      /* backup over finished tables */
      mask = (1 << w) - 1;      /* needed on HP, cc -O bug */
      while ((i & mask) != x[h])
      {
        h--;                    /* don't need to update q */
        w -= l;
        mask = (1 << w) - 1;
      }
    }
  }


  /* Return Z_BUF_ERROR if we were given an incomplete table */
  return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
}


int inflate_trees_bits(c, bb, tb, hp, z)
uIntf *c;               /* 19 code lengths */
uIntf *bb;              /* bits tree desired/actual depth */
inflate_huft * FAR *tb; /* bits tree result */
inflate_huft *hp;       /* space for trees */
z_streamp z;            /* for messages */
{
  int r;
  uInt hn = 0;          /* hufts used in space */
  uIntf *v;             /* work area for huft_build */

  if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
    return Z_MEM_ERROR;
  r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
                 tb, bb, hp, &hn, v);
  if (r == Z_DATA_ERROR)
    z->msg = (char*)"oversubscribed dynamic bit lengths tree";
  else if (r == Z_BUF_ERROR || *bb == 0)
  {
    z->msg = (char*)"incomplete dynamic bit lengths tree";
    r = Z_DATA_ERROR;
  }
  ZFREE(z, v);
  return r;
}


int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
uInt nl;                /* number of literal/length codes */
uInt nd;                /* number of distance codes */
uIntf *c;               /* that many (total) code lengths */
uIntf *bl;              /* literal desired/actual bit depth */
uIntf *bd;              /* distance desired/actual bit depth */
inflate_huft * FAR *tl; /* literal/length tree result */
inflate_huft * FAR *td; /* distance tree result */
inflate_huft *hp;       /* space for trees */
z_streamp z;            /* for messages */
{
  int r;
  uInt hn = 0;          /* hufts used in space */
  uIntf *v;             /* work area for huft_build */

  /* allocate work area */
  if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
    return Z_MEM_ERROR;

  /* build literal/length tree */
  r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
  if (r != Z_OK || *bl == 0)
  {
    if (r == Z_DATA_ERROR)
      z->msg = (char*)"oversubscribed literal/length tree";
    else if (r != Z_MEM_ERROR)
    {
      z->msg = (char*)"incomplete literal/length tree";
      r = Z_DATA_ERROR;
    }
    ZFREE(z, v);
    return r;
  }

  /* build distance tree */
  r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
  if (r != Z_OK || (*bd == 0 && nl > 257))
  {
    if (r == Z_DATA_ERROR)
      z->msg = (char*)"oversubscribed distance tree";
    else if (r == Z_BUF_ERROR) {
#ifdef PKZIP_BUG_WORKAROUND
      r = Z_OK;
    }
#else
      z->msg = (char*)"incomplete distance tree";
      r = Z_DATA_ERROR;
    }
    else if (r != Z_MEM_ERROR)
    {
      z->msg = (char*)"empty distance tree with lengths";
      r = Z_DATA_ERROR;
    }
    ZFREE(z, v);
    return r;
#endif
  }

  /* done */
  ZFREE(z, v);
  return Z_OK;
}


/* build fixed tables only once--keep them here */
#ifdef BUILDFIXED
local int fixed_built = 0;
#define FIXEDH 544      /* number of hufts used by fixed tables */
local inflate_huft fixed_mem[FIXEDH];
local uInt fixed_bl;
local uInt fixed_bd;
local inflate_huft *fixed_tl;
local inflate_huft *fixed_td;
#else
#include "inffixed.h"
#endif


int inflate_trees_fixed(bl, bd, tl, td, z)
uIntf *bl;               /* literal desired/actual bit depth */
uIntf *bd;               /* distance desired/actual bit depth */
inflate_huft * FAR *tl;  /* literal/length tree result */
inflate_huft * FAR *td;  /* distance tree result */
z_streamp z;             /* for memory allocation */
{
#ifdef BUILDFIXED
  /* build fixed tables if not already */
  if (!fixed_built)
  {
    int k;              /* temporary variable */
    uInt f = 0;         /* number of hufts used in fixed_mem */
    uIntf *c;           /* length list for huft_build */
    uIntf *v;           /* work area for huft_build */

    /* allocate memory */
    if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
      return Z_MEM_ERROR;
    if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
    {
      ZFREE(z, c);
      return Z_MEM_ERROR;
    }

    /* literal table */
    for (k = 0; k < 144; k++)
      c[k] = 8;
    for (; k < 256; k++)
      c[k] = 9;
    for (; k < 280; k++)
      c[k] = 7;
    for (; k < 288; k++)
      c[k] = 8;
    fixed_bl = 9;
    huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
               fixed_mem, &f, v);

    /* distance table */
    for (k = 0; k < 30; k++)
      c[k] = 5;
    fixed_bd = 5;
    huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
               fixed_mem, &f, v);

    /* done */
    ZFREE(z, v);
    ZFREE(z, c);
    fixed_built = 1;
  }
#endif
  *bl = fixed_bl;
  *bd = fixed_bd;
  *tl = fixed_tl;
  *td = fixed_td;
  return Z_OK;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/inftrees.h000066400000000000000000000050701406366436600171720ustar00rootroot00000000000000/* inftrees.h -- header to use inftrees.c
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

/* Huffman code lookup table entry--this entry is four bytes for machines
   that have 16-bit pointers (e.g. PC's in the small or medium model). */

typedef struct inflate_huft_s FAR inflate_huft;

struct inflate_huft_s {
  union {
    struct {
      Byte Exop;        /* number of extra bits or operation */
      Byte Bits;        /* number of bits in this code or subcode */
    } what;
    uInt pad;           /* pad structure to a power of 2 (4 bytes for */
  } word;               /*  16-bit, 8 bytes for 32-bit int's) */
  uInt base;            /* literal, length base, distance base,
                           or table offset */
};

/* Maximum size of dynamic tree.  The maximum found in a long but non-
   exhaustive search was 1004 huft structures (850 for length/literals
   and 154 for distances, the latter actually the result of an
   exhaustive search).  The actual maximum is not known, but the
   value below is more than safe. */
#define MANY 1440

extern int inflate_trees_bits OF((
    uIntf *,                    /* 19 code lengths */
    uIntf *,                    /* bits tree desired/actual depth */
    inflate_huft * FAR *,       /* bits tree result */
    inflate_huft *,             /* space for trees */
    z_streamp));                /* for messages */

extern int inflate_trees_dynamic OF((
    uInt,                       /* number of literal/length codes */
    uInt,                       /* number of distance codes */
    uIntf *,                    /* that many (total) code lengths */
    uIntf *,                    /* literal desired/actual bit depth */
    uIntf *,                    /* distance desired/actual bit depth */
    inflate_huft * FAR *,       /* literal/length tree result */
    inflate_huft * FAR *,       /* distance tree result */
    inflate_huft *,             /* space for trees */
    z_streamp));                /* for messages */

extern int inflate_trees_fixed OF((
    uIntf *,                    /* literal desired/actual bit depth */
    uIntf *,                    /* distance desired/actual bit depth */
    inflate_huft * FAR *,       /* literal/length tree result */
    inflate_huft * FAR *,       /* distance tree result */
    z_streamp));                /* for memory allocation */
analog-ce-6.0.17/src/zlib/infutil.c000066400000000000000000000037711406366436600170260ustar00rootroot00000000000000/* inflate_util.c -- data and routines common to blocks and codes
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"
#include "infblock.h"
#include "inftrees.h"
#include "infcodes.h"
#include "infutil.h"

struct inflate_codes_state {int dummy;}; /* for buggy compilers */

/* And'ing with mask[n] masks the lower n bits */
uInt inflate_mask[17] = {
    0x0000,
    0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
    0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
};


/* copy as much as possible from the sliding window to the output area */
int inflate_flush(s, z, r)
inflate_blocks_statef *s;
z_streamp z;
int r;
{
  uInt n;
  Bytef *p;
  Bytef *q;

  /* local copies of source and destination pointers */
  p = z->next_out;
  q = s->read;

  /* compute number of bytes to copy as far as end of window */
  n = (uInt)((q <= s->write ? s->write : s->end) - q);
  if (n > z->avail_out) n = z->avail_out;
  if (n && r == Z_BUF_ERROR) r = Z_OK;

  /* update counters */
  z->avail_out -= n;
  z->total_out += n;

  /* update check information */
  if (s->checkfn != Z_NULL)
    z->adler = s->check = (*s->checkfn)(s->check, q, n);

  /* copy as far as end of window */
  zmemcpy(p, q, n);
  p += n;
  q += n;

  /* see if more to copy at beginning of window */
  if (q == s->end)
  {
    /* wrap pointers */
    q = s->window;
    if (s->write == s->end)
      s->write = s->window;

    /* compute bytes to copy */
    n = (uInt)(s->write - q);
    if (n > z->avail_out) n = z->avail_out;
    if (n && r == Z_BUF_ERROR) r = Z_OK;

    /* update counters */
    z->avail_out -= n;
    z->total_out += n;

    /* update check information */
    if (s->checkfn != Z_NULL)
      z->adler = s->check = (*s->checkfn)(s->check, q, n);

    /* copy */
    zmemcpy(p, q, n);
    p += n;
    q += n;
  }

  /* update pointers */
  z->next_out = p;
  s->read = q;

  /* done */
  return r;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/infutil.h000066400000000000000000000071371406366436600170330ustar00rootroot00000000000000/* infutil.h -- types and macros common to blocks and codes
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

#ifndef _INFUTIL_H
#define _INFUTIL_H

typedef enum {
      TYPE,     /* get type bits (3, including end bit) */
      LENS,     /* get lengths for stored */
      STORED,   /* processing stored block */
      TABLE,    /* get table lengths */
      BTREE,    /* get bit lengths tree for a dynamic block */
      DTREE,    /* get length, distance trees for a dynamic block */
      CODES,    /* processing fixed or dynamic block */
      DRY,      /* output remaining window bytes */
      DONE,     /* finished last block, done */
      BAD}      /* got a data error--stuck here */
inflate_block_mode;

/* inflate blocks semi-private state */
struct inflate_blocks_state {

  /* mode */
  inflate_block_mode  mode;     /* current inflate_block mode */

  /* mode dependent information */
  union {
    uInt left;          /* if STORED, bytes left to copy */
    struct {
      uInt table;               /* table lengths (14 bits) */
      uInt index;               /* index into blens (or border) */
      uIntf *blens;             /* bit lengths of codes */
      uInt bb;                  /* bit length tree depth */
      inflate_huft *tb;         /* bit length decoding tree */
    } trees;            /* if DTREE, decoding info for trees */
    struct {
      inflate_codes_statef 
         *codes;
    } decode;           /* if CODES, current state */
  } sub;                /* submode */
  uInt last;            /* true if this block is the last block */

  /* mode independent information */
  uInt bitk;            /* bits in bit buffer */
  uLong bitb;           /* bit buffer */
  inflate_huft *hufts;  /* single malloc for tree space */
  Bytef *window;        /* sliding window */
  Bytef *end;           /* one byte after sliding window */
  Bytef *read;          /* window read pointer */
  Bytef *write;         /* window write pointer */
  check_func checkfn;   /* check function */
  uLong check;          /* check on output */

};


/* defines for inflate input/output */
/*   update pointers and return */
#define UPDBITS {s->bitb=b;s->bitk=k;}
#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
#define UPDOUT {s->write=q;}
#define UPDATE {UPDBITS UPDIN UPDOUT}
#define LEAVE {UPDATE return inflate_flush(s,z,r);}
/*   get bytes and bits */
#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
#define NEXTBYTE (n--,*p++)
#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<>=(j);k-=(j);}
/*   output bytes */
#define WAVAIL (uInt)(qread?s->read-q-1:s->end-q)
#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
/*   load local pointers */
#define LOAD {LOADIN LOADOUT}

/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
extern uInt inflate_mask[17];

/* copy as much as possible from the sliding window to the output area */
extern int inflate_flush OF((
    inflate_blocks_statef *,
    z_streamp ,
    int));

struct internal_state      {int dummy;}; /* for buggy compilers */

#endif
analog-ce-6.0.17/src/zlib/trees.c000066400000000000000000001252611406366436600164750ustar00rootroot00000000000000/* trees.c -- output deflated data using Huffman coding
 * Copyright (C) 1995-2002 Jean-loup Gailly
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

/*
 *  ALGORITHM
 *
 *      The "deflation" process uses several Huffman trees. The more
 *      common source values are represented by shorter bit sequences.
 *
 *      Each code tree is stored in a compressed form which is itself
 * a Huffman encoding of the lengths of all the code strings (in
 * ascending order by source values).  The actual code strings are
 * reconstructed from the lengths in the inflate process, as described
 * in the deflate specification.
 *
 *  REFERENCES
 *
 *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
 *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
 *
 *      Storer, James A.
 *          Data Compression:  Methods and Theory, pp. 49-50.
 *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
 *
 *      Sedgewick, R.
 *          Algorithms, p290.
 *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
 */

/* #define GEN_TREES_H */

#ifndef HAVE_ZLIB
#include "deflate.h"

#ifdef DEBUG
#  include 
#endif

/* ===========================================================================
 * Constants
 */

#define MAX_BL_BITS 7
/* Bit length codes must not exceed MAX_BL_BITS bits */

#define END_BLOCK 256
/* end of block literal code */

#define REP_3_6      16
/* repeat previous bit length 3-6 times (2 bits of repeat count) */

#define REPZ_3_10    17
/* repeat a zero length 3-10 times  (3 bits of repeat count) */

#define REPZ_11_138  18
/* repeat a zero length 11-138 times  (7 bits of repeat count) */

local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};

local const int extra_dbits[D_CODES] /* extra bits for each distance code */
   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};

local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};

local const uch bl_order[BL_CODES]
   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
/* The lengths of the bit length codes are sent in order of decreasing
 * probability, to avoid transmitting the lengths for unused bit length codes.
 */

#define Buf_size (8 * 2*sizeof(char))
/* Number of bits used within bi_buf. (bi_buf might be implemented on
 * more than 16 bits on some systems.)
 */

/* ===========================================================================
 * Local data. These are initialized only once.
 */

#define DIST_CODE_LEN  512 /* see definition of array dist_code below */

#if defined(GEN_TREES_H) || !defined(STDC)
/* non ANSI compilers may not accept trees.h */

local ct_data static_ltree[L_CODES+2];
/* The static literal tree. Since the bit lengths are imposed, there is no
 * need for the L_CODES extra codes used during heap construction. However
 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
 * below).
 */

local ct_data static_dtree[D_CODES];
/* The static distance tree. (Actually a trivial tree since all codes use
 * 5 bits.)
 */

uch _dist_code[DIST_CODE_LEN];
/* Distance codes. The first 256 values correspond to the distances
 * 3 .. 258, the last 256 values correspond to the top 8 bits of
 * the 15 bit distances.
 */

uch _length_code[MAX_MATCH-MIN_MATCH+1];
/* length code for each normalized match length (0 == MIN_MATCH) */

local int base_length[LENGTH_CODES];
/* First normalized length for each code (0 = MIN_MATCH) */

local int base_dist[D_CODES];
/* First normalized distance for each code (0 = distance of 1) */

#else
#  include "trees.h"
#endif /* GEN_TREES_H */

struct static_tree_desc_s {
    const ct_data *static_tree;  /* static tree or NULL */
    const intf *extra_bits;      /* extra bits for each code or NULL */
    int     extra_base;          /* base index for extra_bits */
    int     elems;               /* max number of elements in the tree */
    int     max_length;          /* max bit length for the codes */
};

local static_tree_desc  static_l_desc =
{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};

local static_tree_desc  static_d_desc =
{static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};

local static_tree_desc  static_bl_desc =
{(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};

/* ===========================================================================
 * Local (static) routines in this file.
 */

local void tr_static_init OF((void));
local void init_block     OF((deflate_state *s));
local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
local void build_tree     OF((deflate_state *s, tree_desc *desc));
local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
local int  build_bl_tree  OF((deflate_state *s));
local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
                              int blcodes));
local void compress_block OF((deflate_state *s, ct_data *ltree,
                              ct_data *dtree));
local void set_data_type  OF((deflate_state *s));
local unsigned bi_reverse OF((unsigned value, int length));
local void bi_windup      OF((deflate_state *s));
local void bi_flush       OF((deflate_state *s));
local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
                              int header));

#ifdef GEN_TREES_H
local void gen_trees_header OF((void));
#endif

#ifndef DEBUG
#  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
   /* Send a code of the given tree. c and tree must not have side effects */

#else /* DEBUG */
#  define send_code(s, c, tree) \
     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
       send_bits(s, tree[c].Code, tree[c].Len); }
#endif

/* ===========================================================================
 * Output a short LSB first on the stream.
 * IN assertion: there is enough room in pendingBuf.
 */
#define put_short(s, w) { \
    put_byte(s, (uch)((w) & 0xff)); \
    put_byte(s, (uch)((ush)(w) >> 8)); \
}

/* ===========================================================================
 * Send a value on a given number of bits.
 * IN assertion: length <= 16 and value fits in length bits.
 */
#ifdef DEBUG
local void send_bits      OF((deflate_state *s, int value, int length));

local void send_bits(s, value, length)
    deflate_state *s;
    int value;  /* value to send */
    int length; /* number of bits */
{
    Tracevv((stderr," l %2d v %4x ", length, value));
    Assert(length > 0 && length <= 15, "invalid length");
    s->bits_sent += (ulg)length;

    /* If not enough room in bi_buf, use (valid) bits from bi_buf and
     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
     * unused bits in value.
     */
    if (s->bi_valid > (int)Buf_size - length) {
        s->bi_buf |= (value << s->bi_valid);
        put_short(s, s->bi_buf);
        s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
        s->bi_valid += length - Buf_size;
    } else {
        s->bi_buf |= value << s->bi_valid;
        s->bi_valid += length;
    }
}
#else /* !DEBUG */

#define send_bits(s, value, length) \
{ int len = length;\
  if (s->bi_valid > (int)Buf_size - len) {\
    int val = value;\
    s->bi_buf |= (val << s->bi_valid);\
    put_short(s, s->bi_buf);\
    s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
    s->bi_valid += len - Buf_size;\
  } else {\
    s->bi_buf |= (value) << s->bi_valid;\
    s->bi_valid += len;\
  }\
}
#endif /* DEBUG */


#define MAX(a,b) (a >= b ? a : b)
/* the arguments must not have side effects */

/* ===========================================================================
 * Initialize the various 'constant' tables.
 */
local void tr_static_init()
{
#if defined(GEN_TREES_H) || !defined(STDC)
    static int static_init_done = 0;
    int n;        /* iterates over tree elements */
    int bits;     /* bit counter */
    int length;   /* length value */
    int code;     /* code value */
    int dist;     /* distance index */
    ush bl_count[MAX_BITS+1];
    /* number of codes at each bit length for an optimal tree */

    if (static_init_done) return;

    /* For some embedded targets, global variables are not initialized: */
    static_l_desc.static_tree = static_ltree;
    static_l_desc.extra_bits = extra_lbits;
    static_d_desc.static_tree = static_dtree;
    static_d_desc.extra_bits = extra_dbits;
    static_bl_desc.extra_bits = extra_blbits;

    /* Initialize the mapping length (0..255) -> length code (0..28) */
    length = 0;
    for (code = 0; code < LENGTH_CODES-1; code++) {
        base_length[code] = length;
        for (n = 0; n < (1< dist code (0..29) */
    dist = 0;
    for (code = 0 ; code < 16; code++) {
        base_dist[code] = dist;
        for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */
    for ( ; code < D_CODES; code++) {
        base_dist[code] = dist << 7;
        for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
            _dist_code[256 + dist++] = (uch)code;
        }
    }
    Assert (dist == 256, "tr_static_init: 256+dist != 512");

    /* Construct the codes of the static literal tree */
    for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
    n = 0;
    while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
    while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
    while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
    while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
    /* Codes 286 and 287 do not exist, but we must include them in the
     * tree construction to get a canonical Huffman tree (longest code
     * all ones)
     */
    gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);

    /* The static distance tree is trivial: */
    for (n = 0; n < D_CODES; n++) {
        static_dtree[n].Len = 5;
        static_dtree[n].Code = bi_reverse((unsigned)n, 5);
    }
    static_init_done = 1;

#  ifdef GEN_TREES_H
    gen_trees_header();
#  endif
#endif /* defined(GEN_TREES_H) || !defined(STDC) */
}

/* ===========================================================================
 * Genererate the file trees.h describing the static trees.
 */
#ifdef GEN_TREES_H
#  ifndef DEBUG
#    include 
#  endif

#  define SEPARATOR(i, last, width) \
      ((i) == (last)? "\n};\n\n" :    \
       ((i) % (width) == (width)-1 ? ",\n" : ", "))

void gen_trees_header()
{
    FILE *header = fopen("trees.h", "w");
    int i;

    Assert (header != NULL, "Can't open trees.h");
    fprintf(header,
	    "/* header created automatically with -DGEN_TREES_H */\n\n");

    fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
    for (i = 0; i < L_CODES+2; i++) {
	fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
		static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
    }

    fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
    for (i = 0; i < D_CODES; i++) {
	fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
		static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
    }

    fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n");
    for (i = 0; i < DIST_CODE_LEN; i++) {
	fprintf(header, "%2u%s", _dist_code[i],
		SEPARATOR(i, DIST_CODE_LEN-1, 20));
    }

    fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
    for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
	fprintf(header, "%2u%s", _length_code[i],
		SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
    }

    fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
    for (i = 0; i < LENGTH_CODES; i++) {
	fprintf(header, "%1u%s", base_length[i],
		SEPARATOR(i, LENGTH_CODES-1, 20));
    }

    fprintf(header, "local const int base_dist[D_CODES] = {\n");
    for (i = 0; i < D_CODES; i++) {
	fprintf(header, "%5u%s", base_dist[i],
		SEPARATOR(i, D_CODES-1, 10));
    }

    fclose(header);
}
#endif /* GEN_TREES_H */

/* ===========================================================================
 * Initialize the tree data structures for a new zlib stream.
 */
void _tr_init(s)
    deflate_state *s;
{
    tr_static_init();

    s->l_desc.dyn_tree = s->dyn_ltree;
    s->l_desc.stat_desc = &static_l_desc;

    s->d_desc.dyn_tree = s->dyn_dtree;
    s->d_desc.stat_desc = &static_d_desc;

    s->bl_desc.dyn_tree = s->bl_tree;
    s->bl_desc.stat_desc = &static_bl_desc;

    s->bi_buf = 0;
    s->bi_valid = 0;
    s->last_eob_len = 8; /* enough lookahead for inflate */
#ifdef DEBUG
    s->compressed_len = 0L;
    s->bits_sent = 0L;
#endif

    /* Initialize the first block of the first file: */
    init_block(s);
}

/* ===========================================================================
 * Initialize a new block.
 */
local void init_block(s)
    deflate_state *s;
{
    int n; /* iterates over tree elements */

    /* Initialize the trees. */
    for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
    for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
    for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;

    s->dyn_ltree[END_BLOCK].Freq = 1;
    s->opt_len = s->static_len = 0L;
    s->last_lit = s->matches = 0;
}

#define SMALLEST 1
/* Index within the heap array of least frequent node in the Huffman tree */


/* ===========================================================================
 * Remove the smallest element from the heap and recreate the heap with
 * one less element. Updates heap and heap_len.
 */
#define pqremove(s, tree, top) \
{\
    top = s->heap[SMALLEST]; \
    s->heap[SMALLEST] = s->heap[s->heap_len--]; \
    pqdownheap(s, tree, SMALLEST); \
}

/* ===========================================================================
 * Compares to subtrees, using the tree depth as tie breaker when
 * the subtrees have equal frequency. This minimizes the worst case length.
 */
#define smaller(tree, n, m, depth) \
   (tree[n].Freq < tree[m].Freq || \
   (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))

/* ===========================================================================
 * Restore the heap property by moving down the tree starting at node k,
 * exchanging a node with the smallest of its two sons if necessary, stopping
 * when the heap property is re-established (each father smaller than its
 * two sons).
 */
local void pqdownheap(s, tree, k)
    deflate_state *s;
    ct_data *tree;  /* the tree to restore */
    int k;               /* node to move down */
{
    int v = s->heap[k];
    int j = k << 1;  /* left son of k */
    while (j <= s->heap_len) {
        /* Set j to the smallest of the two sons: */
        if (j < s->heap_len &&
            smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
            j++;
        }
        /* Exit if v is smaller than both sons */
        if (smaller(tree, v, s->heap[j], s->depth)) break;

        /* Exchange v with the smallest son */
        s->heap[k] = s->heap[j];  k = j;

        /* And continue down the tree, setting j to the left son of k */
        j <<= 1;
    }
    s->heap[k] = v;
}

/* ===========================================================================
 * Compute the optimal bit lengths for a tree and update the total bit length
 * for the current block.
 * IN assertion: the fields freq and dad are set, heap[heap_max] and
 *    above are the tree nodes sorted by increasing frequency.
 * OUT assertions: the field len is set to the optimal bit length, the
 *     array bl_count contains the frequencies for each bit length.
 *     The length opt_len is updated; static_len is also updated if stree is
 *     not null.
 */
local void gen_bitlen(s, desc)
    deflate_state *s;
    tree_desc *desc;    /* the tree descriptor */
{
    ct_data *tree        = desc->dyn_tree;
    int max_code         = desc->max_code;
    const ct_data *stree = desc->stat_desc->static_tree;
    const intf *extra    = desc->stat_desc->extra_bits;
    int base             = desc->stat_desc->extra_base;
    int max_length       = desc->stat_desc->max_length;
    int h;              /* heap index */
    int n, m;           /* iterate over the tree elements */
    int bits;           /* bit length */
    int xbits;          /* extra bits */
    ush f;              /* frequency */
    int overflow = 0;   /* number of elements with bit length too large */

    for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;

    /* In a first pass, compute the optimal bit lengths (which may
     * overflow in the case of the bit length tree).
     */
    tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */

    for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
        n = s->heap[h];
        bits = tree[tree[n].Dad].Len + 1;
        if (bits > max_length) bits = max_length, overflow++;
        tree[n].Len = (ush)bits;
        /* We overwrite tree[n].Dad which is no longer needed */

        if (n > max_code) continue; /* not a leaf node */

        s->bl_count[bits]++;
        xbits = 0;
        if (n >= base) xbits = extra[n-base];
        f = tree[n].Freq;
        s->opt_len += (ulg)f * (bits + xbits);
        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
    }
    if (overflow == 0) return;

    Trace((stderr,"\nbit length overflow\n"));
    /* This happens for example on obj2 and pic of the Calgary corpus */

    /* Find the first bit length which could increase: */
    do {
        bits = max_length-1;
        while (s->bl_count[bits] == 0) bits--;
        s->bl_count[bits]--;      /* move one leaf down the tree */
        s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
        s->bl_count[max_length]--;
        /* The brother of the overflow item also moves one step up,
         * but this does not affect bl_count[max_length]
         */
        overflow -= 2;
    } while (overflow > 0);

    /* Now recompute all bit lengths, scanning in increasing frequency.
     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
     * lengths instead of fixing only the wrong ones. This idea is taken
     * from 'ar' written by Haruhiko Okumura.)
     */
    for (bits = max_length; bits != 0; bits--) {
        n = s->bl_count[bits];
        while (n != 0) {
            m = s->heap[--h];
            if (m > max_code) continue;
            if (tree[m].Len != (unsigned) bits) {
                Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
                s->opt_len += ((long)bits - (long)tree[m].Len)
                              *(long)tree[m].Freq;
                tree[m].Len = (ush)bits;
            }
            n--;
        }
    }
}

/* ===========================================================================
 * Generate the codes for a given tree and bit counts (which need not be
 * optimal).
 * IN assertion: the array bl_count contains the bit length statistics for
 * the given tree and the field len is set for all tree elements.
 * OUT assertion: the field code is set for all tree elements of non
 *     zero code length.
 */
local void gen_codes (tree, max_code, bl_count)
    ct_data *tree;             /* the tree to decorate */
    int max_code;              /* largest code with non zero frequency */
    ushf *bl_count;            /* number of codes at each bit length */
{
    ush next_code[MAX_BITS+1]; /* next code value for each bit length */
    ush code = 0;              /* running code value */
    int bits;                  /* bit index */
    int n;                     /* code index */

    /* The distribution counts are first used to generate the code values
     * without bit reversal.
     */
    for (bits = 1; bits <= MAX_BITS; bits++) {
        next_code[bits] = code = (code + bl_count[bits-1]) << 1;
    }
    /* Check that the bit counts in bl_count are consistent. The last code
     * must be all ones.
     */
    Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree;
    const ct_data *stree  = desc->stat_desc->static_tree;
    int elems             = desc->stat_desc->elems;
    int n, m;          /* iterate over heap elements */
    int max_code = -1; /* largest code with non zero frequency */
    int node;          /* new node being created */

    /* Construct the initial heap, with least frequent element in
     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
     * heap[0] is not used.
     */
    s->heap_len = 0, s->heap_max = HEAP_SIZE;

    for (n = 0; n < elems; n++) {
        if (tree[n].Freq != 0) {
            s->heap[++(s->heap_len)] = max_code = n;
            s->depth[n] = 0;
        } else {
            tree[n].Len = 0;
        }
    }

    /* The pkzip format requires that at least one distance code exists,
     * and that at least one bit should be sent even if there is only one
     * possible code. So to avoid special checks later on we force at least
     * two codes of non zero frequency.
     */
    while (s->heap_len < 2) {
        node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
        tree[node].Freq = 1;
        s->depth[node] = 0;
        s->opt_len--; if (stree) s->static_len -= stree[node].Len;
        /* node is 0 or 1 so it does not have extra bits */
    }
    desc->max_code = max_code;

    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
     * establish sub-heaps of increasing lengths:
     */
    for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);

    /* Construct the Huffman tree by repeatedly combining the least two
     * frequent nodes.
     */
    node = elems;              /* next internal node of the tree */
    do {
        pqremove(s, tree, n);  /* n = node of least frequency */
        m = s->heap[SMALLEST]; /* m = node of next least frequency */

        s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
        s->heap[--(s->heap_max)] = m;

        /* Create a new node father of n and m */
        tree[node].Freq = tree[n].Freq + tree[m].Freq;
        s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
        tree[n].Dad = tree[m].Dad = (ush)node;
#ifdef DUMP_BL_TREE
        if (tree == s->bl_tree) {
            fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
                    node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
        }
#endif
        /* and insert the new node in the heap */
        s->heap[SMALLEST] = node++;
        pqdownheap(s, tree, SMALLEST);

    } while (s->heap_len >= 2);

    s->heap[--(s->heap_max)] = s->heap[SMALLEST];

    /* At this point, the fields freq and dad are set. We can now
     * generate the bit lengths.
     */
    gen_bitlen(s, (tree_desc *)desc);

    /* The field len is now set, we can generate the bit codes */
    gen_codes ((ct_data *)tree, max_code, s->bl_count);
}

/* ===========================================================================
 * Scan a literal or distance tree to determine the frequencies of the codes
 * in the bit length tree.
 */
local void scan_tree (s, tree, max_code)
    deflate_state *s;
    ct_data *tree;   /* the tree to be scanned */
    int max_code;    /* and its largest code of non zero frequency */
{
    int n;                     /* iterates over all tree elements */
    int prevlen = -1;          /* last emitted length */
    int curlen;                /* length of current code */
    int nextlen = tree[0].Len; /* length of next code */
    int count = 0;             /* repeat count of the current code */
    int max_count = 7;         /* max repeat count */
    int min_count = 4;         /* min repeat count */

    if (nextlen == 0) max_count = 138, min_count = 3;
    tree[max_code+1].Len = (ush)0xffff; /* guard */

    for (n = 0; n <= max_code; n++) {
        curlen = nextlen; nextlen = tree[n+1].Len;
        if (++count < max_count && curlen == nextlen) {
            continue;
        } else if (count < min_count) {
            s->bl_tree[curlen].Freq += count;
        } else if (curlen != 0) {
            if (curlen != prevlen) s->bl_tree[curlen].Freq++;
            s->bl_tree[REP_3_6].Freq++;
        } else if (count <= 10) {
            s->bl_tree[REPZ_3_10].Freq++;
        } else {
            s->bl_tree[REPZ_11_138].Freq++;
        }
        count = 0; prevlen = curlen;
        if (nextlen == 0) {
            max_count = 138, min_count = 3;
        } else if (curlen == nextlen) {
            max_count = 6, min_count = 3;
        } else {
            max_count = 7, min_count = 4;
        }
    }
}

/* ===========================================================================
 * Send a literal or distance tree in compressed form, using the codes in
 * bl_tree.
 */
local void send_tree (s, tree, max_code)
    deflate_state *s;
    ct_data *tree; /* the tree to be scanned */
    int max_code;       /* and its largest code of non zero frequency */
{
    int n;                     /* iterates over all tree elements */
    int prevlen = -1;          /* last emitted length */
    int curlen;                /* length of current code */
    int nextlen = tree[0].Len; /* length of next code */
    int count = 0;             /* repeat count of the current code */
    int max_count = 7;         /* max repeat count */
    int min_count = 4;         /* min repeat count */

    /* tree[max_code+1].Len = -1; */  /* guard already set */
    if (nextlen == 0) max_count = 138, min_count = 3;

    for (n = 0; n <= max_code; n++) {
        curlen = nextlen; nextlen = tree[n+1].Len;
        if (++count < max_count && curlen == nextlen) {
            continue;
        } else if (count < min_count) {
            do { send_code(s, curlen, s->bl_tree); } while (--count != 0);

        } else if (curlen != 0) {
            if (curlen != prevlen) {
                send_code(s, curlen, s->bl_tree); count--;
            }
            Assert(count >= 3 && count <= 6, " 3_6?");
            send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);

        } else if (count <= 10) {
            send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);

        } else {
            send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
        }
        count = 0; prevlen = curlen;
        if (nextlen == 0) {
            max_count = 138, min_count = 3;
        } else if (curlen == nextlen) {
            max_count = 6, min_count = 3;
        } else {
            max_count = 7, min_count = 4;
        }
    }
}

/* ===========================================================================
 * Construct the Huffman tree for the bit lengths and return the index in
 * bl_order of the last bit length code to send.
 */
local int build_bl_tree(s)
    deflate_state *s;
{
    int max_blindex;  /* index of last bit length code of non zero freq */

    /* Determine the bit length frequencies for literal and distance trees */
    scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
    scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);

    /* Build the bit length tree: */
    build_tree(s, (tree_desc *)(&(s->bl_desc)));
    /* opt_len now includes the length of the tree representations, except
     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
     */

    /* Determine the number of bit length codes to send. The pkzip format
     * requires that at least 4 bit length codes be sent. (appnote.txt says
     * 3 but the actual value used is 4.)
     */
    for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
        if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
    }
    /* Update opt_len to include the bit length tree and counts */
    s->opt_len += 3*(max_blindex+1) + 5+5+4;
    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
            s->opt_len, s->static_len));

    return max_blindex;
}

/* ===========================================================================
 * Send the header for a block using dynamic Huffman trees: the counts, the
 * lengths of the bit length codes, the literal tree and the distance tree.
 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
 */
local void send_all_trees(s, lcodes, dcodes, blcodes)
    deflate_state *s;
    int lcodes, dcodes, blcodes; /* number of codes for each tree */
{
    int rank;                    /* index in bl_order */

    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
            "too many codes");
    Tracev((stderr, "\nbl counts: "));
    send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
    send_bits(s, dcodes-1,   5);
    send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
    for (rank = 0; rank < blcodes; rank++) {
        Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
        send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
    }
    Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));

    send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
    Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));

    send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
    Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
}

/* ===========================================================================
 * Send a stored block
 */
void _tr_stored_block(s, buf, stored_len, eof)
    deflate_state *s;
    charf *buf;       /* input block */
    ulg stored_len;   /* length of input block */
    int eof;          /* true if this is the last block for a file */
{
    send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
#ifdef DEBUG
    s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
    s->compressed_len += (stored_len + 4) << 3;
#endif
    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
}

/* ===========================================================================
 * Send one empty static block to give enough lookahead for inflate.
 * This takes 10 bits, of which 7 may remain in the bit buffer.
 * The current inflate code requires 9 bits of lookahead. If the
 * last two codes for the previous block (real code plus EOB) were coded
 * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
 * the last real code. In this case we send two empty static blocks instead
 * of one. (There are no problems if the previous block is stored or fixed.)
 * To simplify the code, we assume the worst case of last real code encoded
 * on one bit only.
 */
void _tr_align(s)
    deflate_state *s;
{
    send_bits(s, STATIC_TREES<<1, 3);
    send_code(s, END_BLOCK, static_ltree);
#ifdef DEBUG
    s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
#endif
    bi_flush(s);
    /* Of the 10 bits for the empty block, we have already sent
     * (10 - bi_valid) bits. The lookahead for the last real code (before
     * the EOB of the previous block) was thus at least one plus the length
     * of the EOB plus what we have just sent of the empty static block.
     */
    if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
        send_bits(s, STATIC_TREES<<1, 3);
        send_code(s, END_BLOCK, static_ltree);
#ifdef DEBUG
        s->compressed_len += 10L;
#endif
        bi_flush(s);
    }
    s->last_eob_len = 7;
}

/* ===========================================================================
 * Determine the best encoding for the current block: dynamic trees, static
 * trees or store, and output the encoded block to the zip file.
 */
void _tr_flush_block(s, buf, stored_len, eof)
    deflate_state *s;
    charf *buf;       /* input block, or NULL if too old */
    ulg stored_len;   /* length of input block */
    int eof;          /* true if this is the last block for a file */
{
    ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
    int max_blindex = 0;  /* index of last bit length code of non zero freq */

    /* Build the Huffman trees unless a stored block is forced */
    if (s->level > 0) {

	 /* Check if the file is ascii or binary */
	if (s->data_type == Z_UNKNOWN) set_data_type(s);

	/* Construct the literal and distance trees */
	build_tree(s, (tree_desc *)(&(s->l_desc)));
	Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
		s->static_len));

	build_tree(s, (tree_desc *)(&(s->d_desc)));
	Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
		s->static_len));
	/* At this point, opt_len and static_len are the total bit lengths of
	 * the compressed block data, excluding the tree representations.
	 */

	/* Build the bit length tree for the above two trees, and get the index
	 * in bl_order of the last bit length code to send.
	 */
	max_blindex = build_bl_tree(s);

	/* Determine the best encoding. Compute first the block length in bytes*/
	opt_lenb = (s->opt_len+3+7)>>3;
	static_lenb = (s->static_len+3+7)>>3;

	Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
		opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
		s->last_lit));

	if (static_lenb <= opt_lenb) opt_lenb = static_lenb;

    } else {
        Assert(buf != (char*)0, "lost buf");
	opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
    }

#ifdef FORCE_STORED
    if (buf != (char*)0) { /* force stored block */
#else
    if (stored_len+4 <= opt_lenb && buf != (char*)0) {
                       /* 4: two words for the lengths */
#endif
        /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
         * Otherwise we can't have processed more than WSIZE input bytes since
         * the last block flush, because compression would have been
         * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
         * transform a block into a stored block.
         */
        _tr_stored_block(s, buf, stored_len, eof);

#ifdef FORCE_STATIC
    } else if (static_lenb >= 0) { /* force static trees */
#else
    } else if (static_lenb == opt_lenb) {
#endif
        send_bits(s, (STATIC_TREES<<1)+eof, 3);
        compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
#ifdef DEBUG
        s->compressed_len += 3 + s->static_len;
#endif
    } else {
        send_bits(s, (DYN_TREES<<1)+eof, 3);
        send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
                       max_blindex+1);
        compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
#ifdef DEBUG
        s->compressed_len += 3 + s->opt_len;
#endif
    }
    Assert (s->compressed_len == s->bits_sent, "bad compressed size");
    /* The above check is made mod 2^32, for files larger than 512 MB
     * and uLong implemented on 32 bits.
     */
    init_block(s);

    if (eof) {
        bi_windup(s);
#ifdef DEBUG
        s->compressed_len += 7;  /* align on byte boundary */
#endif
    }
    Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
           s->compressed_len-7*eof));
}

/* ===========================================================================
 * Save the match info and tally the frequency counts. Return true if
 * the current block must be flushed.
 */
int _tr_tally (s, dist, lc)
    deflate_state *s;
    unsigned dist;  /* distance of matched string */
    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
{
    s->d_buf[s->last_lit] = (ush)dist;
    s->l_buf[s->last_lit++] = (uch)lc;
    if (dist == 0) {
        /* lc is the unmatched char */
        s->dyn_ltree[lc].Freq++;
    } else {
        s->matches++;
        /* Here, lc is the match length - MIN_MATCH */
        dist--;             /* dist = match distance - 1 */
        Assert((ush)dist < (ush)MAX_DIST(s) &&
               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
               (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");

        s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
        s->dyn_dtree[d_code(dist)].Freq++;
    }

#ifdef TRUNCATE_BLOCK
    /* Try to guess if it is profitable to stop the current block here */
    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
        /* Compute an upper bound for the compressed length */
        ulg out_length = (ulg)s->last_lit*8L;
        ulg in_length = (ulg)((long)s->strstart - s->block_start);
        int dcode;
        for (dcode = 0; dcode < D_CODES; dcode++) {
            out_length += (ulg)s->dyn_dtree[dcode].Freq *
                (5L+extra_dbits[dcode]);
        }
        out_length >>= 3;
        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
               s->last_lit, in_length, out_length,
               100L - out_length*100L/in_length));
        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
    }
#endif
    return (s->last_lit == s->lit_bufsize-1);
    /* We avoid equality with lit_bufsize because of wraparound at 64K
     * on 16 bit machines and because stored blocks are restricted to
     * 64K-1 bytes.
     */
}

/* ===========================================================================
 * Send the block data compressed using the given Huffman trees
 */
local void compress_block(s, ltree, dtree)
    deflate_state *s;
    ct_data *ltree; /* literal tree */
    ct_data *dtree; /* distance tree */
{
    unsigned dist;      /* distance of matched string */
    int lc;             /* match length or unmatched char (if dist == 0) */
    unsigned lx = 0;    /* running index in l_buf */
    unsigned code;      /* the code to send */
    int extra;          /* number of extra bits to send */

    if (s->last_lit != 0) do {
        dist = s->d_buf[lx];
        lc = s->l_buf[lx++];
        if (dist == 0) {
            send_code(s, lc, ltree); /* send a literal byte */
            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
        } else {
            /* Here, lc is the match length - MIN_MATCH */
            code = _length_code[lc];
            send_code(s, code+LITERALS+1, ltree); /* send the length code */
            extra = extra_lbits[code];
            if (extra != 0) {
                lc -= base_length[code];
                send_bits(s, lc, extra);       /* send the extra length bits */
            }
            dist--; /* dist is now the match distance - 1 */
            code = d_code(dist);
            Assert (code < D_CODES, "bad d_code");

            send_code(s, code, dtree);       /* send the distance code */
            extra = extra_dbits[code];
            if (extra != 0) {
                dist -= base_dist[code];
                send_bits(s, dist, extra);   /* send the extra distance bits */
            }
        } /* literal or match pair ? */

        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
        Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");

    } while (lx < s->last_lit);

    send_code(s, END_BLOCK, ltree);
    s->last_eob_len = ltree[END_BLOCK].Len;
}

/* ===========================================================================
 * Set the data type to ASCII or BINARY, using a crude approximation:
 * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
 * IN assertion: the fields freq of dyn_ltree are set and the total of all
 * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
 */
local void set_data_type(s)
    deflate_state *s;
{
    int n = 0;
    unsigned ascii_freq = 0;
    unsigned bin_freq = 0;
    while (n < 7)        bin_freq += s->dyn_ltree[n++].Freq;
    while (n < 128)    ascii_freq += s->dyn_ltree[n++].Freq;
    while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
    s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);
}

/* ===========================================================================
 * Reverse the first len bits of a code, using straightforward code (a faster
 * method would use a table)
 * IN assertion: 1 <= len <= 15
 */
local unsigned bi_reverse(code, len)
    unsigned code; /* the value to invert */
    int len;       /* its bit length */
{
    register unsigned res = 0;
    do {
        res |= code & 1;
        code >>= 1, res <<= 1;
    } while (--len > 0);
    return res >> 1;
}

/* ===========================================================================
 * Flush the bit buffer, keeping at most 7 bits in it.
 */
local void bi_flush(s)
    deflate_state *s;
{
    if (s->bi_valid == 16) {
        put_short(s, s->bi_buf);
        s->bi_buf = 0;
        s->bi_valid = 0;
    } else if (s->bi_valid >= 8) {
        put_byte(s, (Byte)s->bi_buf);
        s->bi_buf >>= 8;
        s->bi_valid -= 8;
    }
}

/* ===========================================================================
 * Flush the bit buffer and align the output on a byte boundary
 */
local void bi_windup(s)
    deflate_state *s;
{
    if (s->bi_valid > 8) {
        put_short(s, s->bi_buf);
    } else if (s->bi_valid > 0) {
        put_byte(s, (Byte)s->bi_buf);
    }
    s->bi_buf = 0;
    s->bi_valid = 0;
#ifdef DEBUG
    s->bits_sent = (s->bits_sent+7) & ~7;
#endif
}

/* ===========================================================================
 * Copy a stored block, storing first the length and its
 * one's complement if requested.
 */
local void copy_block(s, buf, len, header)
    deflate_state *s;
    charf    *buf;    /* the input data */
    unsigned len;     /* its length */
    int      header;  /* true if block header must be written */
{
    bi_windup(s);        /* align on byte boundary */
    s->last_eob_len = 8; /* enough lookahead for inflate */

    if (header) {
        put_short(s, (ush)len);   
        put_short(s, (ush)~len);
#ifdef DEBUG
        s->bits_sent += 2*16;
#endif
    }
#ifdef DEBUG
    s->bits_sent += (ulg)len<<3;
#endif
    while (len--) {
        put_byte(s, *buf++);
    }
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/trees.h000066400000000000000000000203741406366436600165010ustar00rootroot00000000000000/* header created automatically with -DGEN_TREES_H */

local const ct_data static_ltree[L_CODES+2] = {
{{ 12},{  8}}, {{140},{  8}}, {{ 76},{  8}}, {{204},{  8}}, {{ 44},{  8}},
{{172},{  8}}, {{108},{  8}}, {{236},{  8}}, {{ 28},{  8}}, {{156},{  8}},
{{ 92},{  8}}, {{220},{  8}}, {{ 60},{  8}}, {{188},{  8}}, {{124},{  8}},
{{252},{  8}}, {{  2},{  8}}, {{130},{  8}}, {{ 66},{  8}}, {{194},{  8}},
{{ 34},{  8}}, {{162},{  8}}, {{ 98},{  8}}, {{226},{  8}}, {{ 18},{  8}},
{{146},{  8}}, {{ 82},{  8}}, {{210},{  8}}, {{ 50},{  8}}, {{178},{  8}},
{{114},{  8}}, {{242},{  8}}, {{ 10},{  8}}, {{138},{  8}}, {{ 74},{  8}},
{{202},{  8}}, {{ 42},{  8}}, {{170},{  8}}, {{106},{  8}}, {{234},{  8}},
{{ 26},{  8}}, {{154},{  8}}, {{ 90},{  8}}, {{218},{  8}}, {{ 58},{  8}},
{{186},{  8}}, {{122},{  8}}, {{250},{  8}}, {{  6},{  8}}, {{134},{  8}},
{{ 70},{  8}}, {{198},{  8}}, {{ 38},{  8}}, {{166},{  8}}, {{102},{  8}},
{{230},{  8}}, {{ 22},{  8}}, {{150},{  8}}, {{ 86},{  8}}, {{214},{  8}},
{{ 54},{  8}}, {{182},{  8}}, {{118},{  8}}, {{246},{  8}}, {{ 14},{  8}},
{{142},{  8}}, {{ 78},{  8}}, {{206},{  8}}, {{ 46},{  8}}, {{174},{  8}},
{{110},{  8}}, {{238},{  8}}, {{ 30},{  8}}, {{158},{  8}}, {{ 94},{  8}},
{{222},{  8}}, {{ 62},{  8}}, {{190},{  8}}, {{126},{  8}}, {{254},{  8}},
{{  1},{  8}}, {{129},{  8}}, {{ 65},{  8}}, {{193},{  8}}, {{ 33},{  8}},
{{161},{  8}}, {{ 97},{  8}}, {{225},{  8}}, {{ 17},{  8}}, {{145},{  8}},
{{ 81},{  8}}, {{209},{  8}}, {{ 49},{  8}}, {{177},{  8}}, {{113},{  8}},
{{241},{  8}}, {{  9},{  8}}, {{137},{  8}}, {{ 73},{  8}}, {{201},{  8}},
{{ 41},{  8}}, {{169},{  8}}, {{105},{  8}}, {{233},{  8}}, {{ 25},{  8}},
{{153},{  8}}, {{ 89},{  8}}, {{217},{  8}}, {{ 57},{  8}}, {{185},{  8}},
{{121},{  8}}, {{249},{  8}}, {{  5},{  8}}, {{133},{  8}}, {{ 69},{  8}},
{{197},{  8}}, {{ 37},{  8}}, {{165},{  8}}, {{101},{  8}}, {{229},{  8}},
{{ 21},{  8}}, {{149},{  8}}, {{ 85},{  8}}, {{213},{  8}}, {{ 53},{  8}},
{{181},{  8}}, {{117},{  8}}, {{245},{  8}}, {{ 13},{  8}}, {{141},{  8}},
{{ 77},{  8}}, {{205},{  8}}, {{ 45},{  8}}, {{173},{  8}}, {{109},{  8}},
{{237},{  8}}, {{ 29},{  8}}, {{157},{  8}}, {{ 93},{  8}}, {{221},{  8}},
{{ 61},{  8}}, {{189},{  8}}, {{125},{  8}}, {{253},{  8}}, {{ 19},{  9}},
{{275},{  9}}, {{147},{  9}}, {{403},{  9}}, {{ 83},{  9}}, {{339},{  9}},
{{211},{  9}}, {{467},{  9}}, {{ 51},{  9}}, {{307},{  9}}, {{179},{  9}},
{{435},{  9}}, {{115},{  9}}, {{371},{  9}}, {{243},{  9}}, {{499},{  9}},
{{ 11},{  9}}, {{267},{  9}}, {{139},{  9}}, {{395},{  9}}, {{ 75},{  9}},
{{331},{  9}}, {{203},{  9}}, {{459},{  9}}, {{ 43},{  9}}, {{299},{  9}},
{{171},{  9}}, {{427},{  9}}, {{107},{  9}}, {{363},{  9}}, {{235},{  9}},
{{491},{  9}}, {{ 27},{  9}}, {{283},{  9}}, {{155},{  9}}, {{411},{  9}},
{{ 91},{  9}}, {{347},{  9}}, {{219},{  9}}, {{475},{  9}}, {{ 59},{  9}},
{{315},{  9}}, {{187},{  9}}, {{443},{  9}}, {{123},{  9}}, {{379},{  9}},
{{251},{  9}}, {{507},{  9}}, {{  7},{  9}}, {{263},{  9}}, {{135},{  9}},
{{391},{  9}}, {{ 71},{  9}}, {{327},{  9}}, {{199},{  9}}, {{455},{  9}},
{{ 39},{  9}}, {{295},{  9}}, {{167},{  9}}, {{423},{  9}}, {{103},{  9}},
{{359},{  9}}, {{231},{  9}}, {{487},{  9}}, {{ 23},{  9}}, {{279},{  9}},
{{151},{  9}}, {{407},{  9}}, {{ 87},{  9}}, {{343},{  9}}, {{215},{  9}},
{{471},{  9}}, {{ 55},{  9}}, {{311},{  9}}, {{183},{  9}}, {{439},{  9}},
{{119},{  9}}, {{375},{  9}}, {{247},{  9}}, {{503},{  9}}, {{ 15},{  9}},
{{271},{  9}}, {{143},{  9}}, {{399},{  9}}, {{ 79},{  9}}, {{335},{  9}},
{{207},{  9}}, {{463},{  9}}, {{ 47},{  9}}, {{303},{  9}}, {{175},{  9}},
{{431},{  9}}, {{111},{  9}}, {{367},{  9}}, {{239},{  9}}, {{495},{  9}},
{{ 31},{  9}}, {{287},{  9}}, {{159},{  9}}, {{415},{  9}}, {{ 95},{  9}},
{{351},{  9}}, {{223},{  9}}, {{479},{  9}}, {{ 63},{  9}}, {{319},{  9}},
{{191},{  9}}, {{447},{  9}}, {{127},{  9}}, {{383},{  9}}, {{255},{  9}},
{{511},{  9}}, {{  0},{  7}}, {{ 64},{  7}}, {{ 32},{  7}}, {{ 96},{  7}},
{{ 16},{  7}}, {{ 80},{  7}}, {{ 48},{  7}}, {{112},{  7}}, {{  8},{  7}},
{{ 72},{  7}}, {{ 40},{  7}}, {{104},{  7}}, {{ 24},{  7}}, {{ 88},{  7}},
{{ 56},{  7}}, {{120},{  7}}, {{  4},{  7}}, {{ 68},{  7}}, {{ 36},{  7}},
{{100},{  7}}, {{ 20},{  7}}, {{ 84},{  7}}, {{ 52},{  7}}, {{116},{  7}},
{{  3},{  8}}, {{131},{  8}}, {{ 67},{  8}}, {{195},{  8}}, {{ 35},{  8}},
{{163},{  8}}, {{ 99},{  8}}, {{227},{  8}}
};

local const ct_data static_dtree[D_CODES] = {
{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
};

const uch _dist_code[DIST_CODE_LEN] = {
 0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,
 8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,
18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
};

const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {
 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,
13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
};

local const int base_length[LENGTH_CODES] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
64, 80, 96, 112, 128, 160, 192, 224, 0
};

local const int base_dist[D_CODES] = {
    0,     1,     2,     3,     4,     6,     8,    12,    16,    24,
   32,    48,    64,    96,   128,   192,   256,   384,   512,   768,
 1024,  1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576
};

analog-ce-6.0.17/src/zlib/uncompr.c000066400000000000000000000037261406366436600170370ustar00rootroot00000000000000/* uncompr.c -- decompress a memory buffer
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zlib.h"

/* ===========================================================================
     Decompresses the source buffer into the destination buffer.  sourceLen is
   the byte length of the source buffer. Upon entry, destLen is the total
   size of the destination buffer, which must be large enough to hold the
   entire uncompressed data. (The size of the uncompressed data must have
   been saved previously by the compressor and transmitted to the decompressor
   by some mechanism outside the scope of this compression library.)
   Upon exit, destLen is the actual size of the compressed buffer.
     This function can be used to decompress a whole file at once if the
   input file is mmap'ed.

     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
   enough memory, Z_BUF_ERROR if there was not enough room in the output
   buffer, or Z_DATA_ERROR if the input data was corrupted.
*/
int ZEXPORT uncompress (dest, destLen, source, sourceLen)
    Bytef *dest;
    uLongf *destLen;
    const Bytef *source;
    uLong sourceLen;
{
    z_stream stream;
    int err;

    stream.next_in = (Bytef*)source;
    stream.avail_in = (uInt)sourceLen;
    /* Check for source > 64K on 16-bit machine: */
    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;

    stream.next_out = dest;
    stream.avail_out = (uInt)*destLen;
    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;

    stream.zalloc = (alloc_func)0;
    stream.zfree = (free_func)0;

    err = inflateInit(&stream);
    if (err != Z_OK) return err;

    err = inflate(&stream, Z_FINISH);
    if (err != Z_STREAM_END) {
        inflateEnd(&stream);
        return err == Z_OK ? Z_BUF_ERROR : err;
    }
    *destLen = stream.total_out;

    err = inflateEnd(&stream);
    return err;
}

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/zconf.h000066400000000000000000000171611406366436600164760ustar00rootroot00000000000000/* zconf.h -- configuration of the zlib compression library
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef _ZCONF_H
#define _ZCONF_H

/*
 * If you *really* need a unique prefix for all types and library functions,
 * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
 */
#ifdef Z_PREFIX
#  define deflateInit_	z_deflateInit_
#  define deflate	z_deflate
#  define deflateEnd	z_deflateEnd
#  define inflateInit_ 	z_inflateInit_
#  define inflate	z_inflate
#  define inflateEnd	z_inflateEnd
#  define deflateInit2_	z_deflateInit2_
#  define deflateSetDictionary z_deflateSetDictionary
#  define deflateCopy	z_deflateCopy
#  define deflateReset	z_deflateReset
#  define deflateParams	z_deflateParams
#  define inflateInit2_	z_inflateInit2_
#  define inflateSetDictionary z_inflateSetDictionary
#  define inflateSync	z_inflateSync
#  define inflateSyncPoint z_inflateSyncPoint
#  define inflateReset	z_inflateReset
#  define compress	z_compress
#  define compress2	z_compress2
#  define uncompress	z_uncompress
#  define adler32	z_adler32
#  define crc32		z_crc32
#  define get_crc_table z_get_crc_table

#  define Byte		z_Byte
#  define uInt		z_uInt
#  define uLong		z_uLong
#  define Bytef	        z_Bytef
#  define charf		z_charf
#  define intf		z_intf
#  define uIntf		z_uIntf
#  define uLongf	z_uLongf
#  define voidpf	z_voidpf
#  define voidp		z_voidp
#endif

#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#  define WIN32
#endif
#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
#  ifndef __32BIT__
#    define __32BIT__
#  endif
#endif
#if defined(__MSDOS__) && !defined(MSDOS)
#  define MSDOS
#endif

/*
 * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
 * than 64k bytes at a time (needed on systems with 16-bit int).
 */
#if defined(MSDOS) && !defined(__32BIT__)
#  define MAXSEG_64K
#endif
#ifdef MSDOS
#  define UNALIGNED_OK
#endif

#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32))  && !defined(STDC)
#  define STDC
#endif
#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
#  ifndef STDC
#    define STDC
#  endif
#endif

#ifndef STDC
#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
#    define const
#  endif
#endif

/* Some Mac compilers merge all .h files incorrectly: */
#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
#  define NO_DUMMY_DECL
#endif

/* Old Borland C incorrectly complains about missing returns: */
#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
#  define NEED_DUMMY_RETURN
#endif


/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
#  ifdef MAXSEG_64K
#    define MAX_MEM_LEVEL 8
#  else
#    define MAX_MEM_LEVEL 9
#  endif
#endif

/* Maximum value for windowBits in deflateInit2 and inflateInit2.
 * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
 * created by gzip. (Files created by minigzip can still be extracted by
 * gzip.)
 */
#ifndef MAX_WBITS
#  define MAX_WBITS   15 /* 32K LZ77 window */
#endif

/* The memory requirements for deflate are (in bytes):
            (1 << (windowBits+2)) +  (1 << (memLevel+9))
 that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
 plus a few kilobytes for small objects. For example, if you want to reduce
 the default memory requirements from 256K to 128K, compile with
     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
 Of course this will generally degrade compression (there's no free lunch).

   The memory requirements for inflate are (in bytes) 1 << windowBits
 that is, 32K for windowBits=15 (default value) plus a few kilobytes
 for small objects.
*/

                        /* Type declarations */

#ifndef OF /* function prototypes */
#  ifdef STDC
#    define OF(args)  args
#  else
#    define OF(args)  ()
#  endif
#endif

/* The following definitions for FAR are needed only for MSDOS mixed
 * model programming (small or medium model with some far allocations).
 * This was tested only with MSC; for other MSDOS compilers you may have
 * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
 * just define FAR to be empty.
 */
#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
   /* MSC small or medium model */
#  define SMALL_MEDIUM
#  ifdef _MSC_VER
#    define FAR _far
#  else
#    define FAR far
#  endif
#endif
#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
#  ifndef __32BIT__
#    define SMALL_MEDIUM
#    define FAR _far
#  endif
#endif

/* Compile with -DZLIB_DLL for Windows DLL support */
#if defined(ZLIB_DLL)
#  if defined(_WINDOWS) || defined(WINDOWS)
#    ifdef FAR
#      undef FAR
#    endif
#    include 
#    define ZEXPORT  WINAPI
#    ifdef WIN32
#      define ZEXPORTVA  WINAPIV
#    else
#      define ZEXPORTVA  FAR _cdecl _export
#    endif
#  endif
#  if defined (__BORLANDC__)
#    if (__BORLANDC__ >= 0x0500) && defined (WIN32)
#      include 
#      define ZEXPORT __declspec(dllexport) WINAPI
#      define ZEXPORTRVA __declspec(dllexport) WINAPIV
#    else
#      if defined (_Windows) && defined (__DLL__)
#        define ZEXPORT _export
#        define ZEXPORTVA _export
#      endif
#    endif
#  endif
#endif

#if defined (__BEOS__)
#  if defined (ZLIB_DLL)
#    define ZEXTERN extern __declspec(dllexport)
#  else
#    define ZEXTERN extern __declspec(dllimport)
#  endif
#endif

#ifndef ZEXPORT
#  define ZEXPORT
#endif
#ifndef ZEXPORTVA
#  define ZEXPORTVA
#endif
#ifndef ZEXTERN
#  define ZEXTERN extern
#endif

#ifndef FAR
#   define FAR
#endif

#if !defined(MACOS) && !defined(TARGET_OS_MAC)
typedef unsigned char  Byte;  /* 8 bits */
#endif
typedef unsigned int   uInt;  /* 16 bits or more */
typedef unsigned long  uLong; /* 32 bits or more */

#ifdef SMALL_MEDIUM
   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
#  define Bytef Byte FAR
#else
   typedef Byte  FAR Bytef;
#endif
typedef char  FAR charf;
typedef int   FAR intf;
typedef uInt  FAR uIntf;
typedef uLong FAR uLongf;

#ifdef STDC
   typedef void FAR *voidpf;
   typedef void     *voidp;
#else
   typedef Byte FAR *voidpf;
   typedef Byte     *voidp;
#endif

#ifdef HAVE_UNISTD_H
#  include  /* for off_t */
#  include     /* for SEEK_* and off_t */
#  define z_off_t  off_t
#endif
#ifndef SEEK_SET
#  define SEEK_SET        0       /* Seek from beginning of file.  */
#  define SEEK_CUR        1       /* Seek from current position.  */
#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
#endif
#ifndef z_off_t
#  define  z_off_t long
#endif

/* MVS linker does not support external names larger than 8 bytes */
#if defined(__MVS__)
#   pragma map(deflateInit_,"DEIN")
#   pragma map(deflateInit2_,"DEIN2")
#   pragma map(deflateEnd,"DEEND")
#   pragma map(inflateInit_,"ININ")
#   pragma map(inflateInit2_,"ININ2")
#   pragma map(inflateEnd,"INEND")
#   pragma map(inflateSync,"INSY")
#   pragma map(inflateSetDictionary,"INSEDI")
#   pragma map(inflate_blocks,"INBL")
#   pragma map(inflate_blocks_new,"INBLNE")
#   pragma map(inflate_blocks_free,"INBLFR")
#   pragma map(inflate_blocks_reset,"INBLRE")
#   pragma map(inflate_codes_free,"INCOFR")
#   pragma map(inflate_codes,"INCO")
#   pragma map(inflate_fast,"INFA")
#   pragma map(inflate_flush,"INFLU")
#   pragma map(inflate_mask,"INMA")
#   pragma map(inflate_set_dictionary,"INSEDI2")
#   pragma map(inflate_copyright,"INCOPY")
#   pragma map(inflate_trees_bits,"INTRBI")
#   pragma map(inflate_trees_dynamic,"INTRDY")
#   pragma map(inflate_trees_fixed,"INTRFI")
#   pragma map(inflate_trees_free,"INTRFR")
#endif

#endif /* _ZCONF_H */
analog-ce-6.0.17/src/zlib/zlib.h000066400000000000000000001200061406366436600163100ustar00rootroot00000000000000/* zlib.h -- interface of the 'zlib' general purpose compression library
  version 1.1.4, March 11th, 2002

  Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  Jean-loup Gailly        Mark Adler
  jloup@gzip.org          madler@alumni.caltech.edu


  The data format used by the zlib library is described by RFCs (Request for
  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
*/

#ifdef HAVE_ZLIB
#include 
#else
#ifndef _ZLIB_H
#define _ZLIB_H

#include "zconf.h"

#ifdef __cplusplus
extern "C" {
#endif

#define ZLIB_VERSION "1.1.4"

/* 
     The 'zlib' compression library provides in-memory compression and
  decompression functions, including integrity checks of the uncompressed
  data.  This version of the library supports only one compression method
  (deflation) but other algorithms will be added later and will have the same
  stream interface.

     Compression can be done in a single step if the buffers are large
  enough (for example if an input file is mmap'ed), or can be done by
  repeated calls of the compression function.  In the latter case, the
  application must provide more input and/or consume the output
  (providing more output space) before each call.

     The library also supports reading and writing files in gzip (.gz) format
  with an interface similar to that of stdio.

     The library does not install any signal handler. The decoder checks
  the consistency of the compressed data, so the library should never
  crash even in case of corrupted input.
*/

typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
typedef void   (*free_func)  OF((voidpf opaque, voidpf address));

struct internal_state;

typedef struct z_stream_s {
    Bytef    *next_in;  /* next input byte */
    uInt     avail_in;  /* number of bytes available at next_in */
    uLong    total_in;  /* total nb of input bytes read so far */

    Bytef    *next_out; /* next output byte should be put there */
    uInt     avail_out; /* remaining free space at next_out */
    uLong    total_out; /* total nb of bytes output so far */

    char     *msg;      /* last error message, NULL if no error */
    struct internal_state FAR *state; /* not visible by applications */

    alloc_func zalloc;  /* used to allocate the internal state */
    free_func  zfree;   /* used to free the internal state */
    voidpf     opaque;  /* private data object passed to zalloc and zfree */

    int     data_type;  /* best guess about the data type: ascii or binary */
    uLong   adler;      /* adler32 value of the uncompressed data */
    uLong   reserved;   /* reserved for future use */
} z_stream;

typedef z_stream FAR *z_streamp;

/*
   The application must update next_in and avail_in when avail_in has
   dropped to zero. It must update next_out and avail_out when avail_out
   has dropped to zero. The application must initialize zalloc, zfree and
   opaque before calling the init function. All other fields are set by the
   compression library and must not be updated by the application.

   The opaque value provided by the application will be passed as the first
   parameter for calls of zalloc and zfree. This can be useful for custom
   memory management. The compression library attaches no meaning to the
   opaque value.

   zalloc must return Z_NULL if there is not enough memory for the object.
   If zlib is used in a multi-threaded application, zalloc and zfree must be
   thread safe.

   On 16-bit systems, the functions zalloc and zfree must be able to allocate
   exactly 65536 bytes, but will not be required to allocate more than this
   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
   pointers returned by zalloc for objects of exactly 65536 bytes *must*
   have their offset normalized to zero. The default allocation function
   provided by this library ensures this (see zutil.c). To reduce memory
   requirements and avoid any allocation of 64K objects, at the expense of
   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).

   The fields total_in and total_out can be used for statistics or
   progress reports. After compression, total_in holds the total size of
   the uncompressed data and may be saved for use in the decompressor
   (particularly if the decompressor wants to decompress everything in
   a single step).
*/

                        /* constants */

#define Z_NO_FLUSH      0
#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
#define Z_SYNC_FLUSH    2
#define Z_FULL_FLUSH    3
#define Z_FINISH        4
/* Allowed flush values; see deflate() below for details */

#define Z_OK            0
#define Z_STREAM_END    1
#define Z_NEED_DICT     2
#define Z_ERRNO        (-1)
#define Z_STREAM_ERROR (-2)
#define Z_DATA_ERROR   (-3)
#define Z_MEM_ERROR    (-4)
#define Z_BUF_ERROR    (-5)
#define Z_VERSION_ERROR (-6)
/* Return codes for the compression/decompression functions. Negative
 * values are errors, positive values are used for special but normal events.
 */

#define Z_NO_COMPRESSION         0
#define Z_BEST_SPEED             1
#define Z_BEST_COMPRESSION       9
#define Z_DEFAULT_COMPRESSION  (-1)
/* compression levels */

#define Z_FILTERED            1
#define Z_HUFFMAN_ONLY        2
#define Z_DEFAULT_STRATEGY    0
/* compression strategy; see deflateInit2() below for details */

#define Z_BINARY   0
#define Z_ASCII    1
#define Z_UNKNOWN  2
/* Possible values of the data_type field */

#define Z_DEFLATED   8
/* The deflate compression method (the only one supported in this version) */

#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */

#define zlib_version zlibVersion()
/* for compatibility with versions < 1.0.2 */

                        /* basic functions */

ZEXTERN const char * ZEXPORT zlibVersion OF((void));
/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
   If the first character differs, the library code actually used is
   not compatible with the zlib.h header file used by the application.
   This check is automatically made by deflateInit and inflateInit.
 */

/* 
ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));

     Initializes the internal stream state for compression. The fields
   zalloc, zfree and opaque must be initialized before by the caller.
   If zalloc and zfree are set to Z_NULL, deflateInit updates them to
   use default allocation functions.

     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
   1 gives best speed, 9 gives best compression, 0 gives no compression at
   all (the input data is simply copied a block at a time).
   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
   compression (currently equivalent to level 6).

     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
   with the version assumed by the caller (ZLIB_VERSION).
   msg is set to null if there is no error message.  deflateInit does not
   perform any compression: this will be done by deflate().
*/


ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
/*
    deflate compresses as much data as possible, and stops when the input
  buffer becomes empty or the output buffer becomes full. It may introduce some
  output latency (reading input without producing any output) except when
  forced to flush.

    The detailed semantics are as follows. deflate performs one or both of the
  following actions:

  - Compress more input starting at next_in and update next_in and avail_in
    accordingly. If not all input can be processed (because there is not
    enough room in the output buffer), next_in and avail_in are updated and
    processing will resume at this point for the next call of deflate().

  - Provide more output starting at next_out and update next_out and avail_out
    accordingly. This action is forced if the parameter flush is non zero.
    Forcing flush frequently degrades the compression ratio, so this parameter
    should be set only when necessary (in interactive applications).
    Some output may be provided even if flush is not set.

  Before the call of deflate(), the application should ensure that at least
  one of the actions is possible, by providing more input and/or consuming
  more output, and updating avail_in or avail_out accordingly; avail_out
  should never be zero before the call. The application can consume the
  compressed output when it wants, for example when the output buffer is full
  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
  and with zero avail_out, it must be called again after making room in the
  output buffer because there might be more output pending.

    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
  flushed to the output buffer and the output is aligned on a byte boundary, so
  that the decompressor can get all input data available so far. (In particular
  avail_in is zero after the call if enough output space has been provided
  before the call.)  Flushing may degrade compression for some compression
  algorithms and so it should be used only when necessary.

    If flush is set to Z_FULL_FLUSH, all output is flushed as with
  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
  restart from this point if previous compressed data has been damaged or if
  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
  the compression.

    If deflate returns with avail_out == 0, this function must be called again
  with the same value of the flush parameter and more output space (updated
  avail_out), until the flush is complete (deflate returns with non-zero
  avail_out).

    If the parameter flush is set to Z_FINISH, pending input is processed,
  pending output is flushed and deflate returns with Z_STREAM_END if there
  was enough output space; if deflate returns with Z_OK, this function must be
  called again with Z_FINISH and more output space (updated avail_out) but no
  more input data, until it returns with Z_STREAM_END or an error. After
  deflate has returned Z_STREAM_END, the only possible operations on the
  stream are deflateReset or deflateEnd.
  
    Z_FINISH can be used immediately after deflateInit if all the compression
  is to be done in a single step. In this case, avail_out must be at least
  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
  Z_STREAM_END, then it must be called again as described above.

    deflate() sets strm->adler to the adler32 checksum of all input read
  so far (that is, total_in bytes).

    deflate() may update data_type if it can make a good guess about
  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
  binary. This field is only for information purposes and does not affect
  the compression algorithm in any manner.

    deflate() returns Z_OK if some progress has been made (more input
  processed or more output produced), Z_STREAM_END if all input has been
  consumed and all output has been produced (only when flush is set to
  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
  (for example avail_in or avail_out was zero).
*/


ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
/*
     All dynamically allocated data structures for this stream are freed.
   This function discards any unprocessed input and does not flush any
   pending output.

     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
   prematurely (some input or output was discarded). In the error case,
   msg may be set but then points to a static string (which must not be
   deallocated).
*/


/* 
ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));

     Initializes the internal stream state for decompression. The fields
   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
   value depends on the compression method), inflateInit determines the
   compression method from the zlib header and allocates all data structures
   accordingly; otherwise the allocation will be deferred to the first call of
   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
   use default allocation functions.

     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
   version assumed by the caller.  msg is set to null if there is no error
   message. inflateInit does not perform any decompression apart from reading
   the zlib header if present: this will be done by inflate().  (So next_in and
   avail_in may be modified, but next_out and avail_out are unchanged.)
*/


ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
/*
    inflate decompresses as much data as possible, and stops when the input
  buffer becomes empty or the output buffer becomes full. It may some
  introduce some output latency (reading input without producing any output)
  except when forced to flush.

  The detailed semantics are as follows. inflate performs one or both of the
  following actions:

  - Decompress more input starting at next_in and update next_in and avail_in
    accordingly. If not all input can be processed (because there is not
    enough room in the output buffer), next_in is updated and processing
    will resume at this point for the next call of inflate().

  - Provide more output starting at next_out and update next_out and avail_out
    accordingly.  inflate() provides as much output as possible, until there
    is no more input data or no more space in the output buffer (see below
    about the flush parameter).

  Before the call of inflate(), the application should ensure that at least
  one of the actions is possible, by providing more input and/or consuming
  more output, and updating the next_* and avail_* values accordingly.
  The application can consume the uncompressed output when it wants, for
  example when the output buffer is full (avail_out == 0), or after each
  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
  must be called again after making room in the output buffer because there
  might be more output pending.

    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
  output as possible to the output buffer. The flushing behavior of inflate is
  not specified for values of the flush parameter other than Z_SYNC_FLUSH
  and Z_FINISH, but the current implementation actually flushes as much output
  as possible anyway.

    inflate() should normally be called until it returns Z_STREAM_END or an
  error. However if all decompression is to be performed in a single step
  (a single call of inflate), the parameter flush should be set to
  Z_FINISH. In this case all pending input is processed and all pending
  output is flushed; avail_out must be large enough to hold all the
  uncompressed data. (The size of the uncompressed data may have been saved
  by the compressor for this purpose.) The next operation on this stream must
  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
  is never required, but can be used to inform inflate that a faster routine
  may be used for the single inflate() call.

     If a preset dictionary is needed at this point (see inflateSetDictionary
  below), inflate sets strm-adler to the adler32 checksum of the
  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
  it sets strm->adler to the adler32 checksum of all output produced
  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
  an error code as described below. At the end of the stream, inflate()
  checks that its computed adler32 checksum is equal to that saved by the
  compressor and returns Z_STREAM_END only if the checksum is correct.

    inflate() returns Z_OK if some progress has been made (more input processed
  or more output produced), Z_STREAM_END if the end of the compressed data has
  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
  corrupted (input stream not conforming to the zlib format or incorrect
  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
  case, the application may then call inflateSync to look for a good
  compression block.
*/


ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
/*
     All dynamically allocated data structures for this stream are freed.
   This function discards any unprocessed input and does not flush any
   pending output.

     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
   was inconsistent. In the error case, msg may be set but then points to a
   static string (which must not be deallocated).
*/

                        /* Advanced functions */

/*
    The following functions are needed only in some special applications.
*/

/*   
ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
                                     int  level,
                                     int  method,
                                     int  windowBits,
                                     int  memLevel,
                                     int  strategy));

     This is another version of deflateInit with more compression options. The
   fields next_in, zalloc, zfree and opaque must be initialized before by
   the caller.

     The method parameter is the compression method. It must be Z_DEFLATED in
   this version of the library.

     The windowBits parameter is the base two logarithm of the window size
   (the size of the history buffer).  It should be in the range 8..15 for this
   version of the library. Larger values of this parameter result in better
   compression at the expense of memory usage. The default value is 15 if
   deflateInit is used instead.

     The memLevel parameter specifies how much memory should be allocated
   for the internal compression state. memLevel=1 uses minimum memory but
   is slow and reduces compression ratio; memLevel=9 uses maximum memory
   for optimal speed. The default value is 8. See zconf.h for total memory
   usage as a function of windowBits and memLevel.

     The strategy parameter is used to tune the compression algorithm. Use the
   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
   filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
   string match).  Filtered data consists mostly of small values with a
   somewhat random distribution. In this case, the compression algorithm is
   tuned to compress them better. The effect of Z_FILTERED is to force more
   Huffman coding and less string matching; it is somewhat intermediate
   between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
   the compression ratio but not the correctness of the compressed output even
   if it is not set appropriately.

      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
   method). msg is set to null if there is no error message.  deflateInit2 does
   not perform any compression: this will be done by deflate().
*/
                            
ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
                                             const Bytef *dictionary,
                                             uInt  dictLength));
/*
     Initializes the compression dictionary from the given byte sequence
   without producing any compressed output. This function must be called
   immediately after deflateInit, deflateInit2 or deflateReset, before any
   call of deflate. The compressor and decompressor must use exactly the same
   dictionary (see inflateSetDictionary).

     The dictionary should consist of strings (byte sequences) that are likely
   to be encountered later in the data to be compressed, with the most commonly
   used strings preferably put towards the end of the dictionary. Using a
   dictionary is most useful when the data to be compressed is short and can be
   predicted with good accuracy; the data can then be compressed better than
   with the default empty dictionary.

     Depending on the size of the compression data structures selected by
   deflateInit or deflateInit2, a part of the dictionary may in effect be
   discarded, for example if the dictionary is larger than the window size in
   deflate or deflate2. Thus the strings most likely to be useful should be
   put at the end of the dictionary, not at the front.

     Upon return of this function, strm->adler is set to the Adler32 value
   of the dictionary; the decompressor may later use this value to determine
   which dictionary has been used by the compressor. (The Adler32 value
   applies to the whole dictionary even if only a subset of the dictionary is
   actually used by the compressor.)

     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
   parameter is invalid (such as NULL dictionary) or the stream state is
   inconsistent (for example if deflate has already been called for this stream
   or if the compression method is bsort). deflateSetDictionary does not
   perform any compression: this will be done by deflate().
*/

ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
                                    z_streamp source));
/*
     Sets the destination stream as a complete copy of the source stream.

     This function can be useful when several compression strategies will be
   tried, for example when there are several ways of pre-processing the input
   data with a filter. The streams that will be discarded should then be freed
   by calling deflateEnd.  Note that deflateCopy duplicates the internal
   compression state which can be quite large, so this strategy is slow and
   can consume lots of memory.

     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
   (such as zalloc being NULL). msg is left unchanged in both source and
   destination.
*/

ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
/*
     This function is equivalent to deflateEnd followed by deflateInit,
   but does not free and reallocate all the internal compression state.
   The stream will keep the same compression level and any other attributes
   that may have been set by deflateInit2.

      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
   stream state was inconsistent (such as zalloc or state being NULL).
*/

ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
				      int level,
				      int strategy));
/*
     Dynamically update the compression level and compression strategy.  The
   interpretation of level and strategy is as in deflateInit2.  This can be
   used to switch between compression and straight copy of the input data, or
   to switch to a different kind of input data requiring a different
   strategy. If the compression level is changed, the input available so far
   is compressed with the old level (and may be flushed); the new level will
   take effect only at the next call of deflate().

     Before the call of deflateParams, the stream state must be set as for
   a call of deflate(), since the currently available input may have to
   be compressed and flushed. In particular, strm->avail_out must be non-zero.

     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
   if strm->avail_out was zero.
*/

/*   
ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
                                     int  windowBits));

     This is another version of inflateInit with an extra parameter. The
   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
   before by the caller.

     The windowBits parameter is the base two logarithm of the maximum window
   size (the size of the history buffer).  It should be in the range 8..15 for
   this version of the library. The default value is 15 if inflateInit is used
   instead. If a compressed stream with a larger window size is given as
   input, inflate() will return with the error code Z_DATA_ERROR instead of
   trying to allocate a larger window.

      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
   memLevel). msg is set to null if there is no error message.  inflateInit2
   does not perform any decompression apart from reading the zlib header if
   present: this will be done by inflate(). (So next_in and avail_in may be
   modified, but next_out and avail_out are unchanged.)
*/

ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
                                             const Bytef *dictionary,
                                             uInt  dictLength));
/*
     Initializes the decompression dictionary from the given uncompressed byte
   sequence. This function must be called immediately after a call of inflate
   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
   can be determined from the Adler32 value returned by this call of
   inflate. The compressor and decompressor must use exactly the same
   dictionary (see deflateSetDictionary).

     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
   parameter is invalid (such as NULL dictionary) or the stream state is
   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
   expected one (incorrect Adler32 value). inflateSetDictionary does not
   perform any decompression: this will be done by subsequent calls of
   inflate().
*/

ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
/* 
    Skips invalid compressed data until a full flush point (see above the
  description of deflate with Z_FULL_FLUSH) can be found, or until all
  available input is skipped. No output is provided.

    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
  case, the application may save the current current value of total_in which
  indicates where valid compressed data was found. In the error case, the
  application may repeatedly call inflateSync, providing more input each time,
  until success or end of the input data.
*/

ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
/*
     This function is equivalent to inflateEnd followed by inflateInit,
   but does not free and reallocate all the internal decompression state.
   The stream will keep attributes that may have been set by inflateInit2.

      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
   stream state was inconsistent (such as zalloc or state being NULL).
*/


                        /* utility functions */

/*
     The following utility functions are implemented on top of the
   basic stream-oriented functions. To simplify the interface, some
   default options are assumed (compression level and memory usage,
   standard memory allocation functions). The source code of these
   utility functions can easily be modified if you need special options.
*/

ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
                                 const Bytef *source, uLong sourceLen));
/*
     Compresses the source buffer into the destination buffer.  sourceLen is
   the byte length of the source buffer. Upon entry, destLen is the total
   size of the destination buffer, which must be at least 0.1% larger than
   sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
   compressed buffer.
     This function can be used to compress a whole file at once if the
   input file is mmap'ed.
     compress returns Z_OK if success, Z_MEM_ERROR if there was not
   enough memory, Z_BUF_ERROR if there was not enough room in the output
   buffer.
*/

ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
                                  const Bytef *source, uLong sourceLen,
                                  int level));
/*
     Compresses the source buffer into the destination buffer. The level
   parameter has the same meaning as in deflateInit.  sourceLen is the byte
   length of the source buffer. Upon entry, destLen is the total size of the
   destination buffer, which must be at least 0.1% larger than sourceLen plus
   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.

     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
   Z_STREAM_ERROR if the level parameter is invalid.
*/

ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
                                   const Bytef *source, uLong sourceLen));
/*
     Decompresses the source buffer into the destination buffer.  sourceLen is
   the byte length of the source buffer. Upon entry, destLen is the total
   size of the destination buffer, which must be large enough to hold the
   entire uncompressed data. (The size of the uncompressed data must have
   been saved previously by the compressor and transmitted to the decompressor
   by some mechanism outside the scope of this compression library.)
   Upon exit, destLen is the actual size of the compressed buffer.
     This function can be used to decompress a whole file at once if the
   input file is mmap'ed.

     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
   enough memory, Z_BUF_ERROR if there was not enough room in the output
   buffer, or Z_DATA_ERROR if the input data was corrupted.
*/


typedef voidp gzFile;

ZEXTERN gzFile ZEXPORT gzopen  OF((const char *path, const char *mode));
/*
     Opens a gzip (.gz) file for reading or writing. The mode parameter
   is as in fopen ("rb" or "wb") but can also include a compression level
   ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
   Huffman only compression as in "wb1h". (See the description
   of deflateInit2 for more information about the strategy parameter.)

     gzopen can be used to read a file which is not in gzip format; in this
   case gzread will directly read from the file without decompression.

     gzopen returns NULL if the file could not be opened or if there was
   insufficient memory to allocate the (de)compression state; errno
   can be checked to distinguish the two cases (if errno is zero, the
   zlib error is Z_MEM_ERROR).  */

ZEXTERN gzFile ZEXPORT gzdopen  OF((int fd, const char *mode));
/*
     gzdopen() associates a gzFile with the file descriptor fd.  File
   descriptors are obtained from calls like open, dup, creat, pipe or
   fileno (in the file has been previously opened with fopen).
   The mode parameter is as in gzopen.
     The next call of gzclose on the returned gzFile will also close the
   file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
   descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
     gzdopen returns NULL if there was insufficient memory to allocate
   the (de)compression state.
*/

ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
/*
     Dynamically update the compression level or strategy. See the description
   of deflateInit2 for the meaning of these parameters.
     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
   opened for writing.
*/

ZEXTERN int ZEXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
/*
     Reads the given number of uncompressed bytes from the compressed file.
   If the input file was not in gzip format, gzread copies the given number
   of bytes into the buffer.
     gzread returns the number of uncompressed bytes actually read (0 for
   end of file, -1 for error). */

ZEXTERN int ZEXPORT    gzwrite OF((gzFile file, 
				   const voidp buf, unsigned len));
/*
     Writes the given number of uncompressed bytes into the compressed file.
   gzwrite returns the number of uncompressed bytes actually written
   (0 in case of error).
*/

ZEXTERN int ZEXPORTVA   gzprintf OF((gzFile file, const char *format, ...));
/*
     Converts, formats, and writes the args to the compressed file under
   control of the format string, as in fprintf. gzprintf returns the number of
   uncompressed bytes actually written (0 in case of error).
*/

ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
/*
      Writes the given null-terminated string to the compressed file, excluding
   the terminating null character.
      gzputs returns the number of characters written, or -1 in case of error.
*/

ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
/*
      Reads bytes from the compressed file until len-1 characters are read, or
   a newline character is read and transferred to buf, or an end-of-file
   condition is encountered.  The string is then terminated with a null
   character.
      gzgets returns buf, or Z_NULL in case of error.
*/

ZEXTERN int ZEXPORT    gzputc OF((gzFile file, int c));
/*
      Writes c, converted to an unsigned char, into the compressed file.
   gzputc returns the value that was written, or -1 in case of error.
*/

ZEXTERN int ZEXPORT    gzgetc OF((gzFile file));
/*
      Reads one byte from the compressed file. gzgetc returns this byte
   or -1 in case of end of file or error.
*/

ZEXTERN int ZEXPORT    gzflush OF((gzFile file, int flush));
/*
     Flushes all pending output into the compressed file. The parameter
   flush is as in the deflate() function. The return value is the zlib
   error number (see function gzerror below). gzflush returns Z_OK if
   the flush parameter is Z_FINISH and all output could be flushed.
     gzflush should be called only when strictly necessary because it can
   degrade compression.
*/

ZEXTERN z_off_t ZEXPORT    gzseek OF((gzFile file,
				      z_off_t offset, int whence));
/* 
      Sets the starting position for the next gzread or gzwrite on the
   given compressed file. The offset represents a number of bytes in the
   uncompressed data stream. The whence parameter is defined as in lseek(2);
   the value SEEK_END is not supported.
     If the file is opened for reading, this function is emulated but can be
   extremely slow. If the file is opened for writing, only forward seeks are
   supported; gzseek then compresses a sequence of zeroes up to the new
   starting position.

      gzseek returns the resulting offset location as measured in bytes from
   the beginning of the uncompressed stream, or -1 in case of error, in
   particular if the file is opened for writing and the new starting position
   would be before the current position.
*/

ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
/*
     Rewinds the given file. This function is supported only for reading.

   gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
*/

ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
/*
     Returns the starting position for the next gzread or gzwrite on the
   given compressed file. This position represents a number of bytes in the
   uncompressed data stream.

   gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
*/

ZEXTERN int ZEXPORT gzeof OF((gzFile file));
/*
     Returns 1 when EOF has previously been detected reading the given
   input stream, otherwise zero.
*/

ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
/*
     Flushes all pending output if necessary, closes the compressed file
   and deallocates all the (de)compression state. The return value is the zlib
   error number (see function gzerror below).
*/

ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
/*
     Returns the error message for the last error which occurred on the
   given compressed file. errnum is set to zlib error number. If an
   error occurred in the file system and not in the compression library,
   errnum is set to Z_ERRNO and the application may consult errno
   to get the exact error code.
*/

                        /* checksum functions */

/*
     These functions are not related to compression but are exported
   anyway because they might be useful in applications using the
   compression library.
*/

ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));

/*
     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
   return the updated checksum. If buf is NULL, this function returns
   the required initial value for the checksum.
   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
   much faster. Usage example:

     uLong adler = adler32(0L, Z_NULL, 0);

     while (read_buffer(buffer, length) != EOF) {
       adler = adler32(adler, buffer, length);
     }
     if (adler != original_adler) error();
*/

ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
/*
     Update a running crc with the bytes buf[0..len-1] and return the updated
   crc. If buf is NULL, this function returns the required initial value
   for the crc. Pre- and post-conditioning (one's complement) is performed
   within this function so it shouldn't be done by the application.
   Usage example:

     uLong crc = crc32(0L, Z_NULL, 0);

     while (read_buffer(buffer, length) != EOF) {
       crc = crc32(crc, buffer, length);
     }
     if (crc != original_crc) error();
*/


                        /* various hacks, don't look :) */

/* deflateInit and inflateInit are macros to allow checking the zlib version
 * and the compiler's view of z_stream:
 */
ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
                                     const char *version, int stream_size));
ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
                                     const char *version, int stream_size));
ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
                                      int windowBits, int memLevel,
                                      int strategy, const char *version,
                                      int stream_size));
ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
                                      const char *version, int stream_size));
#define deflateInit(strm, level) \
        deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
#define inflateInit(strm) \
        inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
                      (strategy),           ZLIB_VERSION, sizeof(z_stream))
#define inflateInit2(strm, windowBits) \
        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))


#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
    struct internal_state {int dummy;}; /* hack for buggy compilers */
#endif

ZEXTERN const char   * ZEXPORT zError           OF((int err));
ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp z));
ZEXTERN const uLongf * ZEXPORT get_crc_table    OF((void));

#ifdef __cplusplus
}
#endif

#endif /* _ZLIB_H */
#endif /* ! HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/zutil.c000066400000000000000000000122111406366436600165100ustar00rootroot00000000000000/* zutil.c -- target dependent utility functions for the compression library
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#ifndef HAVE_ZLIB
#include "zutil.h"

struct internal_state      {int dummy;}; /* for buggy compilers */

#ifndef STDC
extern void exit OF((int));
#endif

const char *z_errmsg[10] = {
"need dictionary",     /* Z_NEED_DICT       2  */
"stream end",          /* Z_STREAM_END      1  */
"",                    /* Z_OK              0  */
"file error",          /* Z_ERRNO         (-1) */
"stream error",        /* Z_STREAM_ERROR  (-2) */
"data error",          /* Z_DATA_ERROR    (-3) */
"insufficient memory", /* Z_MEM_ERROR     (-4) */
"buffer error",        /* Z_BUF_ERROR     (-5) */
"incompatible version",/* Z_VERSION_ERROR (-6) */
""};


const char * ZEXPORT zlibVersion()
{
    return ZLIB_VERSION;
}

#ifdef DEBUG

#  ifndef verbose
#    define verbose 0
#  endif
int z_verbose = verbose;

void z_error (m)
    char *m;
{
    fprintf(stderr, "%s\n", m);
    exit(1);
}
#endif

/* exported to allow conversion of error code to string for compress() and
 * uncompress()
 */
const char * ZEXPORT zError(err)
    int err;
{
    return ERR_MSG(err);
}


#ifndef HAVE_MEMCPY

void zmemcpy(dest, source, len)
    Bytef* dest;
    const Bytef* source;
    uInt  len;
{
    if (len == 0) return;
    do {
        *dest++ = *source++; /* ??? to be unrolled */
    } while (--len != 0);
}

int zmemcmp(s1, s2, len)
    const Bytef* s1;
    const Bytef* s2;
    uInt  len;
{
    uInt j;

    for (j = 0; j < len; j++) {
        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
    }
    return 0;
}

void zmemzero(dest, len)
    Bytef* dest;
    uInt  len;
{
    if (len == 0) return;
    do {
        *dest++ = 0;  /* ??? to be unrolled */
    } while (--len != 0);
}
#endif

#ifdef __TURBOC__
#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
/* Small and medium model in Turbo C are for now limited to near allocation
 * with reduced MAX_WBITS and MAX_MEM_LEVEL
 */
#  define MY_ZCALLOC

/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
 * and farmalloc(64K) returns a pointer with an offset of 8, so we
 * must fix the pointer. Warning: the pointer must be put back to its
 * original form in order to free it, use zcfree().
 */

#define MAX_PTR 10
/* 10*64K = 640K */

local int next_ptr = 0;

typedef struct ptr_table_s {
    voidpf org_ptr;
    voidpf new_ptr;
} ptr_table;

local ptr_table table[MAX_PTR];
/* This table is used to remember the original form of pointers
 * to large buffers (64K). Such pointers are normalized with a zero offset.
 * Since MSDOS is not a preemptive multitasking OS, this table is not
 * protected from concurrent access. This hack doesn't work anyway on
 * a protected system like OS/2. Use Microsoft C instead.
 */

voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
{
    voidpf buf = opaque; /* just to make some compilers happy */
    ulg bsize = (ulg)items*size;

    /* If we allocate less than 65520 bytes, we assume that farmalloc
     * will return a usable pointer which doesn't have to be normalized.
     */
    if (bsize < 65520L) {
        buf = farmalloc(bsize);
        if (*(ush*)&buf != 0) return buf;
    } else {
        buf = farmalloc(bsize + 16L);
    }
    if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
    table[next_ptr].org_ptr = buf;

    /* Normalize the pointer to seg:0 */
    *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
    *(ush*)&buf = 0;
    table[next_ptr++].new_ptr = buf;
    return buf;
}

void  zcfree (voidpf opaque, voidpf ptr)
{
    int n;
    if (*(ush*)&ptr != 0) { /* object < 64K */
        farfree(ptr);
        return;
    }
    /* Find the original pointer */
    for (n = 0; n < next_ptr; n++) {
        if (ptr != table[n].new_ptr) continue;

        farfree(table[n].org_ptr);
        while (++n < next_ptr) {
            table[n-1] = table[n];
        }
        next_ptr--;
        return;
    }
    ptr = opaque; /* just to make some compilers happy */
    Assert(0, "zcfree: ptr not found");
}
#endif
#endif /* __TURBOC__ */


#if defined(M_I86) && !defined(__32BIT__)
/* Microsoft C in 16-bit mode */

#  define MY_ZCALLOC

#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
#  define _halloc  halloc
#  define _hfree   hfree
#endif

voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
{
    if (opaque) opaque = 0; /* to make compiler happy */
    return _halloc((long)items, size);
}

void  zcfree (voidpf opaque, voidpf ptr)
{
    if (opaque) opaque = 0; /* to make compiler happy */
    _hfree(ptr);
}

#endif /* MSC */


#ifndef MY_ZCALLOC /* Any system without a special alloc function */

#ifndef STDC
extern voidp  calloc OF((uInt items, uInt size));
extern void   free   OF((voidpf ptr));
#endif

voidpf zcalloc (opaque, items, size)
    voidpf opaque;
    unsigned items;
    unsigned size;
{
    if (opaque) items += size - size; /* make compiler happy */
    return (voidpf)calloc(items, size);
}

void  zcfree (opaque, ptr)
    voidpf opaque;
    voidpf ptr;
{
    free(ptr);
    if (opaque) return; /* make compiler happy */
}

#endif /* MY_ZCALLOC */

#endif /* HAVE_ZLIB */
analog-ce-6.0.17/src/zlib/zutil.h000066400000000000000000000126471406366436600165320ustar00rootroot00000000000000/* zutil.h -- internal interface and configuration of the compression library
 * Copyright (C) 1995-2002 Jean-loup Gailly.
 * For conditions of distribution and use, see copyright notice in zlib.h
 */

/* WARNING: this file should *not* be used by applications. It is
   part of the implementation of the compression library and is
   subject to change. Applications should only use zlib.h.
 */

#ifndef _Z_UTIL_H
#define _Z_UTIL_H

#include "zlib.h"

#ifdef STDC
#  include 
#  include 
#  include 
#endif
#ifdef NO_ERRNO_H
    extern int errno;
#else
#   include 
#endif

#ifndef local
#  define local static
#endif
/* compile with -Dlocal if your debugger can't find static symbols */

typedef unsigned char  uch;
typedef uch FAR uchf;
typedef unsigned short ush;
typedef ush FAR ushf;
typedef unsigned long  ulg;

extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */

#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]

#define ERR_RETURN(strm,err) \
  return (strm->msg = (char*)ERR_MSG(err), (err))
/* To be used only when the state is known to be valid */

        /* common constants */

#ifndef DEF_WBITS
#  define DEF_WBITS MAX_WBITS
#endif
/* default windowBits for decompression. MAX_WBITS is for compression only */

#if MAX_MEM_LEVEL >= 8
#  define DEF_MEM_LEVEL 8
#else
#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
#endif
/* default memLevel */

#define STORED_BLOCK 0
#define STATIC_TREES 1
#define DYN_TREES    2
/* The three kinds of block type */

#define MIN_MATCH  3
#define MAX_MATCH  258
/* The minimum and maximum match lengths */

#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */

        /* target dependencies */

#ifdef MSDOS
#  define OS_CODE  0x00
#  if defined(__TURBOC__) || defined(__BORLANDC__)
#    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
       /* Allow compilation with ANSI keywords only enabled */
       void _Cdecl farfree( void *block );
       void *_Cdecl farmalloc( unsigned long nbytes );
#    else
#     include 
#    endif
#  else /* MSC or DJGPP */
#    include 
#  endif
#endif

#ifdef OS2
#  define OS_CODE  0x06
#endif

#ifdef WIN32 /* Window 95 & Windows NT */
#  define OS_CODE  0x0b
#endif

#if defined(VAXC) || defined(VMS)
#  define OS_CODE  0x02
#  define F_OPEN(name, mode) \
     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
#endif

#ifdef AMIGA
#  define OS_CODE  0x01
#endif

#if defined(ATARI) || defined(atarist)
#  define OS_CODE  0x05
#endif

#if defined(MACOS) || defined(TARGET_OS_MAC)
#  define OS_CODE  0x07
#  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
#    include  /* for fdopen */
#  else
#    ifndef fdopen
#      define fdopen(fd,mode) NULL /* No fdopen() */
#    endif
#  endif
#endif

#ifdef __50SERIES /* Prime/PRIMOS */
#  define OS_CODE  0x0F
#endif

#ifdef TOPS20
#  define OS_CODE  0x0a
#endif

#if defined(_BEOS_) || defined(RISCOS)
#  define fdopen(fd,mode) NULL /* No fdopen() */
#endif

#if (defined(_MSC_VER) && (_MSC_VER > 600))
#  define fdopen(fd,type)  _fdopen(fd,type)
#endif


        /* Common defaults */

#ifndef OS_CODE
#  define OS_CODE  0x03  /* assume Unix */
#endif

#ifndef F_OPEN
#  define F_OPEN(name, mode) fopen((name), (mode))
#endif

         /* functions */

#ifdef HAVE_STRERROR
   extern char *strerror OF((int));
#  define zstrerror(errnum) strerror(errnum)
#else
#  define zstrerror(errnum) ""
#endif

#if defined(pyr)
#  define NO_MEMCPY
#endif
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
 /* Use our own functions for small and medium model with MSC <= 5.0.
  * You may have to use the same strategy for Borland C (untested).
  * The __SC__ check is for Symantec.
  */
#  define NO_MEMCPY
#endif
#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
#  define HAVE_MEMCPY
#endif
#ifdef HAVE_MEMCPY
#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
#    define zmemcpy _fmemcpy
#    define zmemcmp _fmemcmp
#    define zmemzero(dest, len) _fmemset(dest, 0, len)
#  else
#    define zmemcpy memcpy
#    define zmemcmp memcmp
#    define zmemzero(dest, len) memset(dest, 0, len)
#  endif
#else
   extern void zmemcpy  OF((Bytef* dest, const Bytef* source, uInt len));
   extern int  zmemcmp  OF((const Bytef* s1, const Bytef* s2, uInt len));
   extern void zmemzero OF((Bytef* dest, uInt len));
#endif

/* Diagnostic functions */
#ifdef DEBUG
#  include 
   extern int z_verbose;
   extern void z_error    OF((char *m));
#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
#else
#  define Assert(cond,msg)
#  define Trace(x)
#  define Tracev(x)
#  define Tracevv(x)
#  define Tracec(c,x)
#  define Tracecv(c,x)
#endif


typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf,
				       uInt len));
voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
void   zcfree  OF((voidpf opaque, voidpf ptr));

#define ZALLOC(strm, items, size) \
           (*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}

#endif /* _Z_UTIL_H */